Skip to content

Commit 2a41733

Browse files
committed
HHH-19240 Fold ComparisonPredicate into BinaryExpressionPredicate rule
(cherry picked from commit 5615bca)
1 parent d8fcd1b commit 2a41733

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) 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
@@ -2542,32 +2542,22 @@ public SqmPredicate visitBinaryExpressionPredicate(HqlParser.BinaryExpressionPre
25422542
);
25432543
yield new SqmBooleanExpressionPredicate( contains, negated, nodeBuilder() );
25442544
}
2545+
case HqlParser.EQUAL ->
2546+
createComparisonPredicate( ComparisonOperator.EQUAL, lhsCtx, rhsCtx );
2547+
case HqlParser.NOT_EQUAL ->
2548+
createComparisonPredicate( ComparisonOperator.NOT_EQUAL, lhsCtx, rhsCtx );
2549+
case HqlParser.LESS ->
2550+
createComparisonPredicate( ComparisonOperator.LESS_THAN, lhsCtx, rhsCtx );
2551+
case HqlParser.LESS_EQUAL ->
2552+
createComparisonPredicate( ComparisonOperator.LESS_THAN_OR_EQUAL, lhsCtx, rhsCtx );
2553+
case HqlParser.GREATER ->
2554+
createComparisonPredicate( ComparisonOperator.GREATER_THAN, lhsCtx, rhsCtx );
2555+
case HqlParser.GREATER_EQUAL ->
2556+
createComparisonPredicate( ComparisonOperator.GREATER_THAN_OR_EQUAL, lhsCtx, rhsCtx );
25452557
default -> throw new AssertionError( "Unknown binary expression predicate: " + operationSymbol );
25462558
};
25472559
}
25482560

2549-
@Override
2550-
public Object visitComparisonOperator(HqlParser.ComparisonOperatorContext ctx) {
2551-
final TerminalNode firstToken = (TerminalNode) ctx.getChild( 0 );
2552-
return switch ( firstToken.getSymbol().getType() ) {
2553-
case HqlLexer.EQUAL -> ComparisonOperator.EQUAL;
2554-
case HqlLexer.NOT_EQUAL -> ComparisonOperator.NOT_EQUAL;
2555-
case HqlLexer.LESS -> ComparisonOperator.LESS_THAN;
2556-
case HqlLexer.LESS_EQUAL -> ComparisonOperator.LESS_THAN_OR_EQUAL;
2557-
case HqlLexer.GREATER -> ComparisonOperator.GREATER_THAN;
2558-
case HqlLexer.GREATER_EQUAL -> ComparisonOperator.GREATER_THAN_OR_EQUAL;
2559-
default -> throw new ParsingException( "Unrecognized comparison operator" );
2560-
};
2561-
}
2562-
2563-
@Override
2564-
public SqmPredicate visitComparisonPredicate(HqlParser.ComparisonPredicateContext ctx) {
2565-
final ComparisonOperator comparisonOperator = (ComparisonOperator) ctx.comparisonOperator().accept( this );
2566-
final var leftExpressionContext = ctx.expression( 0 );
2567-
final var rightExpressionContext = ctx.expression( 1 );
2568-
return createComparisonPredicate( comparisonOperator, leftExpressionContext, rightExpressionContext );
2569-
}
2570-
25712561
@Override
25722562
public SqmPredicate visitIsDistinctFromPredicate(HqlParser.IsDistinctFromPredicateContext ctx) {
25732563
final var leftExpressionContext = ctx.expression( 0 );

0 commit comments

Comments
 (0)