@@ -178,6 +178,33 @@ case class SQLExpression(
178178 override def asFilter (currentQuery : Option [ElasticBoolQuery ]): ElasticFilter = this
179179}
180180
181+ sealed trait BinaryExpression extends Expression {
182+ def left : SQLIdentifier
183+ def right : SQLIdentifier
184+ override def identifier : SQLIdentifier = left
185+ override def maybeValue : Option [SQLToken ] = Some (right)
186+ override lazy val aggregation : Boolean = left.aggregation || right.aggregation
187+ }
188+
189+ case class SQLBinaryExpression (
190+ left : SQLIdentifier ,
191+ operator : SQLComparisonOperator , // Gt, Ge, Lt, Le, Eq, ...
192+ right : SQLIdentifier ,
193+ maybeNot : Option [Not .type ] = None
194+ ) extends BinaryExpression
195+ with PainlessScript {
196+ override def update (request : SQLSearchRequest ): SQLCriteria =
197+ this .copy(left = left.update(request), right = right.update(request))
198+
199+ override def asFilter (currentQuery : Option [ElasticBoolQuery ]): ElasticFilter = this
200+
201+ override def painless : String = {
202+ val painlessOp = (if (maybeNot.isDefined) operator.not else operator).painless
203+ s " ${left.painless} $painlessOp ${right.painless}"
204+ }
205+
206+ }
207+
181208case class SQLIsNull (identifier : SQLIdentifier ) extends Expression {
182209 override val operator : SQLOperator = IsNull
183210
@@ -355,9 +382,9 @@ case class SQLComparisonDateMath(
355382 val base = s " ${dateTimeFunction.script}"
356383 val dateMath =
357384 (arithmeticOperator, interval) match {
358- case (Some (Add ), Some (i)) => s " $base+ ${i.script}"
385+ case (Some (Add ), Some (i)) => s " $base+ ${i.script}"
359386 case (Some (Subtract ), Some (i)) => s " $base- ${i.script}"
360- case _ => base
387+ case _ => base
361388 }
362389 dateTimeFunction match {
363390 case _ : CurrentDateFunction => s " $dateMath/d "
0 commit comments