Skip to content

Commit bb6583a

Browse files
committed
HHH-19240 Fold ComparisonPredicate into BinaryExpressionPredicate rule
1 parent 8ece1d0 commit bb6583a

File tree

2 files changed

+21
-36
lines changed

2 files changed

+21
-36
lines changed

hibernate-core/src/main/antlr/org/hibernate/grammars/hql/HqlParser.g4

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -660,8 +660,15 @@ predicate
660660
| expression NOT? IN inList # InPredicate
661661
| expression NOT? BETWEEN expression AND expression # BetweenPredicate
662662
| expression NOT? (LIKE | ILIKE) REGEXP? expression likeEscape? # LikePredicate
663-
| expression NOT? (CONTAINS | INCLUDES | INTERSECTS) expression # BinaryExpressionPredicate
664-
| expression comparisonOperator expression # ComparisonPredicate
663+
| expression
664+
( NOT? (CONTAINS | INCLUDES | INTERSECTS)
665+
| EQUAL
666+
| NOT_EQUAL
667+
| GREATER
668+
| GREATER_EQUAL
669+
| LESS
670+
| LESS_EQUAL
671+
) expression # BinaryExpressionPredicate
665672
| EXISTS collectionQuantifier LEFT_PAREN simplePath RIGHT_PAREN # ExistsCollectionPartPredicate
666673
| EXISTS expression # ExistsPredicate
667674
| NOT predicate # NegatedPredicate
@@ -670,18 +677,6 @@ predicate
670677
| expression # BooleanExpressionPredicate
671678
;
672679

673-
/**
674-
* An operator which compares values for equality or order
675-
*/
676-
comparisonOperator
677-
: EQUAL
678-
| NOT_EQUAL
679-
| GREATER
680-
| GREATER_EQUAL
681-
| LESS
682-
| LESS_EQUAL
683-
;
684-
685680
/**
686681
* Any right operand of the 'in' operator
687682
*

hibernate-core/src/main/java/org/hibernate/query/hql/internal/SemanticQueryBuilder.java

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2507,32 +2507,22 @@ public SqmPredicate visitBinaryExpressionPredicate(HqlParser.BinaryExpressionPre
25072507
);
25082508
yield new SqmBooleanExpressionPredicate( contains, negated, nodeBuilder() );
25092509
}
2510+
case HqlParser.EQUAL ->
2511+
createComparisonPredicate( ComparisonOperator.EQUAL, lhsCtx, rhsCtx );
2512+
case HqlParser.NOT_EQUAL ->
2513+
createComparisonPredicate( ComparisonOperator.NOT_EQUAL, lhsCtx, rhsCtx );
2514+
case HqlParser.LESS ->
2515+
createComparisonPredicate( ComparisonOperator.LESS_THAN, lhsCtx, rhsCtx );
2516+
case HqlParser.LESS_EQUAL ->
2517+
createComparisonPredicate( ComparisonOperator.LESS_THAN_OR_EQUAL, lhsCtx, rhsCtx );
2518+
case HqlParser.GREATER ->
2519+
createComparisonPredicate( ComparisonOperator.GREATER_THAN, lhsCtx, rhsCtx );
2520+
case HqlParser.GREATER_EQUAL ->
2521+
createComparisonPredicate( ComparisonOperator.GREATER_THAN_OR_EQUAL, lhsCtx, rhsCtx );
25102522
default -> throw new AssertionError( "Unknown binary expression predicate: " + operationSymbol );
25112523
};
25122524
}
25132525

2514-
@Override
2515-
public Object visitComparisonOperator(HqlParser.ComparisonOperatorContext ctx) {
2516-
final var firstToken = (TerminalNode) ctx.getChild( 0 );
2517-
return switch ( firstToken.getSymbol().getType() ) {
2518-
case HqlLexer.EQUAL -> ComparisonOperator.EQUAL;
2519-
case HqlLexer.NOT_EQUAL -> ComparisonOperator.NOT_EQUAL;
2520-
case HqlLexer.LESS -> ComparisonOperator.LESS_THAN;
2521-
case HqlLexer.LESS_EQUAL -> ComparisonOperator.LESS_THAN_OR_EQUAL;
2522-
case HqlLexer.GREATER -> ComparisonOperator.GREATER_THAN;
2523-
case HqlLexer.GREATER_EQUAL -> ComparisonOperator.GREATER_THAN_OR_EQUAL;
2524-
default -> throw new ParsingException( "Unrecognized comparison operator" );
2525-
};
2526-
}
2527-
2528-
@Override
2529-
public SqmPredicate visitComparisonPredicate(HqlParser.ComparisonPredicateContext ctx) {
2530-
final var comparisonOperator = (ComparisonOperator) ctx.comparisonOperator().accept( this );
2531-
final var leftExpressionContext = ctx.expression( 0 );
2532-
final var rightExpressionContext = ctx.expression( 1 );
2533-
return createComparisonPredicate( comparisonOperator, leftExpressionContext, rightExpressionContext );
2534-
}
2535-
25362526
@Override
25372527
public SqmPredicate visitIsDistinctFromPredicate(HqlParser.IsDistinctFromPredicateContext ctx) {
25382528
final var leftExpressionContext = ctx.expression( 0 );

0 commit comments

Comments
 (0)