Skip to content

Commit

Permalink
#2178 Improve semantics of comparison operators
Browse files Browse the repository at this point in the history
Introduce a separate rule for "like" operators and replace inheritance
relationship by alternation between quantified and comparison operators.
  • Loading branch information
homedirectory committed Feb 23, 2024
1 parent 151ef6d commit e74509f
Showing 1 changed file with 9 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -72,27 +72,27 @@ public final class CanonicalEqlGrammar {
derive(Predicate).
to(ComparisonOperand, UnaryComparisonOperator).
or(ComparisonOperand, ComparisonOperator, ComparisonOperand).
or(ComparisonOperand, QuantifiedComparisonOperator, QuantifiedOperand).
or(ComparisonOperand, ComparisonOperator, QuantifiedOperand).
or(ComparisonOperand, LikeOperator, ComparisonOperand).
or(ComparisonOperand, MembershipOperator, MembershipOperand).
or(SingleConditionPredicate).

derive(UnaryComparisonOperator).
to(isNull).or(isNotNull).

derive(ComparisonOperator).
derive(LikeOperator).
to(like).or(iLike).or(likeWithCast).or(iLikeWithCast).
or(notLike).or(notLikeWithCast).or(notILikeWithCast).or(notILike).

specialize(ComparisonOperand).
into(SingleOperand, Expr, MultiOperand).

derive(QuantifiedComparisonOperator).
derive(ComparisonOperator).
to(eq).or(gt).or(lt).or(ge).or(le).or(ne).

derive(QuantifiedOperand).
to(all.with(SingleResultQueryModel.class)).
or(any.with(SingleResultQueryModel.class)).
or(ComparisonOperand).

derive(Expr).
to(beginExpr, ExprBody, endExpr).
Expand All @@ -103,7 +103,8 @@ public final class CanonicalEqlGrammar {
derive(ArithmeticalOperator).
to(add).or(sub).or(div).or(mult).or(mod).
derive(SingleOperand).
to(AnyProp).or(Val).or(Param).
to(Prop).or(ExtProp).
or(Val).or(Param).
or(expr.with(ExpressionModel.class)).
or(model.with(SingleResultQueryModel.class)).
or(UnaryFunction).
Expand Down Expand Up @@ -156,9 +157,6 @@ public final class CanonicalEqlGrammar {
or(endAsStr.with(Integer.class)).
or(endAsDecimal.with(Integer.class, Integer.class)).

specialize(AnyProp).
into(Prop, ExtProp).

derive(Prop).
to(prop.with(STR)).or(prop.with(PROP_PATH)).or(prop.with(ENUM)).

Expand Down Expand Up @@ -268,15 +266,15 @@ public enum EqlVariable implements Variable {
Where,
Condition, Predicate,
SingleOperand, MultiOperand,
AnyProp, ExtProp, Prop,
ExtProp, Prop,
UnaryComparisonOperator, Val, Param,
ArithmeticalOperator, SingleOperandOrExpr, ExprBody, Expr,
UnaryFunction, UnaryFunctionName, IfNull, DateDiffInterval, DateDiffIntervalUnit, DateAddInterval, DateAddIntervalUnit, Round, Concat, CaseWhen, CaseWhenEnd,
MembershipOperator,
MembershipOperand, ComparisonOperator, ComparisonOperand, QuantifiedComparisonOperator, QuantifiedOperand, SingleConditionPredicate, Join, JoinOperator,
MembershipOperand, ComparisonOperator, ComparisonOperand, QuantifiedOperand, SingleConditionPredicate, Join, JoinOperator,
JoinCondition,
Model, GroupBy,
FirstYield, YieldOperand, YieldOperandFunction, YieldOperandFunctionName, YieldAlias, SubsequentYield
FirstYield, YieldOperand, YieldOperandFunction, YieldOperandFunctionName, YieldAlias, LikeOperator, SubsequentYield
}

public enum EqlTerminal implements Terminal {
Expand Down

0 comments on commit e74509f

Please sign in to comment.