Skip to content

Commit 7d44d08

Browse files
committed
HHH-19240 Fold ComparisonPredicate into BinaryExpressionPredicate rule
(cherry picked from commit 5615bca)
1 parent 43de61c commit 7d44d08

File tree

2 files changed

+21
-43
lines changed

2 files changed

+21
-43
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
@@ -663,8 +663,15 @@ predicate
663663
| expression NOT? IN inList # InPredicate
664664
| expression NOT? BETWEEN expression AND expression # BetweenPredicate
665665
| expression NOT? (LIKE | ILIKE) expression likeEscape? # LikePredicate
666-
| expression NOT? (CONTAINS | INCLUDES | INTERSECTS) expression # BinaryExpressionPredicate
667-
| expression comparisonOperator expression # ComparisonPredicate
666+
| expression
667+
( NOT? (CONTAINS | INCLUDES | INTERSECTS)
668+
| EQUAL
669+
| NOT_EQUAL
670+
| GREATER
671+
| GREATER_EQUAL
672+
| LESS
673+
| LESS_EQUAL
674+
) expression # BinaryExpressionPredicate
668675
| EXISTS collectionQuantifier LEFT_PAREN simplePath RIGHT_PAREN # ExistsCollectionPartPredicate
669676
| EXISTS expression # ExistsPredicate
670677
| NOT predicate # NegatedPredicate
@@ -673,18 +680,6 @@ predicate
673680
| expression # BooleanExpressionPredicate
674681
;
675682

676-
/**
677-
* An operator which compares values for equality or order
678-
*/
679-
comparisonOperator
680-
: EQUAL
681-
| NOT_EQUAL
682-
| GREATER
683-
| GREATER_EQUAL
684-
| LESS
685-
| LESS_EQUAL
686-
;
687-
688683
/**
689684
* Any right operand of the 'in' operator
690685
*

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

Lines changed: 12 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2559,40 +2559,23 @@ public SqmPredicate visitBinaryExpressionPredicate(HqlParser.BinaryExpressionPre
25592559
);
25602560
return new SqmBooleanExpressionPredicate( contains, negated, creationContext.getNodeBuilder() );
25612561
}
2562+
case HqlParser.EQUAL:
2563+
return createComparisonPredicate( ComparisonOperator.EQUAL, lhsCtx, rhsCtx );
2564+
case HqlParser.NOT_EQUAL:
2565+
return createComparisonPredicate( ComparisonOperator.NOT_EQUAL, lhsCtx, rhsCtx );
2566+
case HqlParser.LESS:
2567+
return createComparisonPredicate( ComparisonOperator.LESS_THAN, lhsCtx, rhsCtx );
2568+
case HqlParser.LESS_EQUAL:
2569+
return createComparisonPredicate( ComparisonOperator.LESS_THAN_OR_EQUAL, lhsCtx, rhsCtx );
2570+
case HqlParser.GREATER:
2571+
return createComparisonPredicate( ComparisonOperator.GREATER_THAN, lhsCtx, rhsCtx );
2572+
case HqlParser.GREATER_EQUAL:
2573+
return createComparisonPredicate( ComparisonOperator.GREATER_THAN_OR_EQUAL, lhsCtx, rhsCtx );
25622574
default:
25632575
throw new AssertionError( "Unknown binary expression predicate: " + operationSymbol );
25642576
}
25652577
}
25662578

2567-
@Override
2568-
public Object visitComparisonOperator(HqlParser.ComparisonOperatorContext ctx) {
2569-
final TerminalNode firstToken = (TerminalNode) ctx.getChild( 0 );
2570-
switch ( firstToken.getSymbol().getType() ) {
2571-
case HqlLexer.EQUAL:
2572-
return ComparisonOperator.EQUAL;
2573-
case HqlLexer.NOT_EQUAL:
2574-
return ComparisonOperator.NOT_EQUAL;
2575-
case HqlLexer.LESS:
2576-
return ComparisonOperator.LESS_THAN;
2577-
case HqlLexer.LESS_EQUAL:
2578-
return ComparisonOperator.LESS_THAN_OR_EQUAL;
2579-
case HqlLexer.GREATER:
2580-
return ComparisonOperator.GREATER_THAN;
2581-
case HqlLexer.GREATER_EQUAL:
2582-
return ComparisonOperator.GREATER_THAN_OR_EQUAL;
2583-
default:
2584-
throw new ParsingException("Unrecognized comparison operator");
2585-
}
2586-
}
2587-
2588-
@Override
2589-
public SqmPredicate visitComparisonPredicate(HqlParser.ComparisonPredicateContext ctx) {
2590-
final ComparisonOperator comparisonOperator = (ComparisonOperator) ctx.comparisonOperator().accept( this );
2591-
final HqlParser.ExpressionContext leftExpressionContext = ctx.expression( 0 );
2592-
final HqlParser.ExpressionContext rightExpressionContext = ctx.expression( 1 );
2593-
return createComparisonPredicate( comparisonOperator, leftExpressionContext, rightExpressionContext );
2594-
}
2595-
25962579
@Override
25972580
public SqmPredicate visitIsDistinctFromPredicate(HqlParser.IsDistinctFromPredicateContext ctx) {
25982581
final HqlParser.ExpressionContext leftExpressionContext = ctx.expression( 0 );

0 commit comments

Comments
 (0)