Я пытаюсь использовать Squeryl (0.9.4 для scala 2.8.1) динамические запросы (.?
и inhibitWhen(...)
). Они работают нормально, пока я использую поля String / Int / что угодно, но, похоже, они мешают синтаксическому сахару squeryl для логических условий.
Предполагая, что где-то определено is_trusted: Option[Boolean]
, следующий код
where ( obj =>
obj.is_trusted === is_trusted.?
)
не компилируется, выдав следующую ошибку:
... type mismatch;
[error] found : org.squeryl.dsl.ast.LogicalBoolean
[error] required: org.squeryl.dsl.NonNumericalExpression[org.squeryl.PrimitiveTypeMode.BooleanType]
[error] obj.is_trusted === is_trusted.?
[error] ^
даже этот не работает, при первом условии:
where ( obj =>
obj.is_trusted.inhibitWhen(is_trusted == Some(true)) and
not(obj.is_trusted).inhibitWhen(is_trusted == Some(false))
)
Единственная рабочая версия использует двойной not
в качестве подсказки для компилятора:
not(not(obj.is_trusted)).inhibitWhen(is_trusted != Some(true)) and
not(obj.is_trusted).inhibitWhen(is_trusted != Some(false))
Есть ли более разумный способ выполнять динамические запросы с логическими значениями?