Skip to content

Commit 4a5308a

Browse files
committed
HHH-19240 Fold IsDistinctFromPredicate into BinaryExpressionPredicate rule
(cherry picked from commit ca0135a)
1 parent 7d44d08 commit 4a5308a

File tree

2 files changed

+9
-12
lines changed

2 files changed

+9
-12
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -658,13 +658,13 @@ predicate
658658
//highest to lowest precedence
659659
: LEFT_PAREN predicate RIGHT_PAREN # GroupedPredicate
660660
| expression IS NOT? (NULL|EMPTY|TRUE|FALSE) # UnaryIsPredicate
661-
| expression IS NOT? DISTINCT FROM expression # IsDistinctFromPredicate
662661
| expression NOT? MEMBER OF? path # MemberOfPredicate
663662
| expression NOT? IN inList # InPredicate
664663
| expression NOT? BETWEEN expression AND expression # BetweenPredicate
665664
| expression NOT? (LIKE | ILIKE) expression likeEscape? # LikePredicate
666665
| expression
667666
( NOT? (CONTAINS | INCLUDES | INTERSECTS)
667+
| IS NOT? DISTINCT FROM
668668
| EQUAL
669669
| NOT_EQUAL
670670
| GREATER

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

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2488,7 +2488,8 @@ public SqmPredicate visitBinaryExpressionPredicate(HqlParser.BinaryExpressionPre
24882488
operationSymbol = ((TerminalNode) ctx.getChild( 2 )).getSymbol();
24892489
}
24902490
else {
2491-
negated = false;
2491+
negated = firstSymbol.getType() == HqlParser.IS
2492+
&& ((TerminalNode) ctx.getChild( 2 )).getSymbol().getType() == HqlParser.NOT;
24922493
operationSymbol = firstSymbol;
24932494
}
24942495
final var expressions = ctx.expression();
@@ -2571,21 +2572,17 @@ public SqmPredicate visitBinaryExpressionPredicate(HqlParser.BinaryExpressionPre
25712572
return createComparisonPredicate( ComparisonOperator.GREATER_THAN, lhsCtx, rhsCtx );
25722573
case HqlParser.GREATER_EQUAL:
25732574
return createComparisonPredicate( ComparisonOperator.GREATER_THAN_OR_EQUAL, lhsCtx, rhsCtx );
2575+
case HqlParser.IS: {
2576+
final ComparisonOperator comparisonOperator = !negated
2577+
? ComparisonOperator.DISTINCT_FROM
2578+
: ComparisonOperator.NOT_DISTINCT_FROM;
2579+
return createComparisonPredicate( comparisonOperator, lhsCtx, rhsCtx );
2580+
}
25742581
default:
25752582
throw new AssertionError( "Unknown binary expression predicate: " + operationSymbol );
25762583
}
25772584
}
25782585

2579-
@Override
2580-
public SqmPredicate visitIsDistinctFromPredicate(HqlParser.IsDistinctFromPredicateContext ctx) {
2581-
final HqlParser.ExpressionContext leftExpressionContext = ctx.expression( 0 );
2582-
final HqlParser.ExpressionContext rightExpressionContext = ctx.expression( 1 );
2583-
final ComparisonOperator comparisonOperator = ctx.NOT() == null
2584-
? ComparisonOperator.DISTINCT_FROM
2585-
: ComparisonOperator.NOT_DISTINCT_FROM;
2586-
return createComparisonPredicate( comparisonOperator, leftExpressionContext, rightExpressionContext );
2587-
}
2588-
25892586
private SqmComparisonPredicate createComparisonPredicate(
25902587
ComparisonOperator comparisonOperator,
25912588
HqlParser.ExpressionContext leftExpressionContext,

0 commit comments

Comments
 (0)