Skip to content

Commit ca0135a

Browse files
committed
HHH-19240 Fold IsDistinctFromPredicate into BinaryExpressionPredicate rule
1 parent 5615bca commit ca0135a

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
@@ -655,13 +655,13 @@ predicate
655655
//highest to lowest precedence
656656
: LEFT_PAREN predicate RIGHT_PAREN # GroupedPredicate
657657
| expression IS NOT? (NULL|EMPTY|TRUE|FALSE) # UnaryIsPredicate
658-
| expression IS NOT? DISTINCT FROM expression # IsDistinctFromPredicate
659658
| expression NOT? MEMBER OF? path # MemberOfPredicate
660659
| expression NOT? IN inList # InPredicate
661660
| expression NOT? BETWEEN expression AND expression # BetweenPredicate
662661
| expression NOT? (LIKE | ILIKE) REGEXP? expression likeEscape? # LikePredicate
663662
| expression
664663
( NOT? (CONTAINS | INCLUDES | INTERSECTS)
664+
| IS NOT? DISTINCT FROM
665665
| EQUAL
666666
| NOT_EQUAL
667667
| 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
@@ -2436,7 +2436,8 @@ public SqmPredicate visitBinaryExpressionPredicate(HqlParser.BinaryExpressionPre
24362436
operationSymbol = ((TerminalNode) ctx.getChild( 2 )).getSymbol();
24372437
}
24382438
else {
2439-
negated = false;
2439+
negated = firstSymbol.getType() == HqlParser.IS
2440+
&& ((TerminalNode) ctx.getChild( 2 )).getSymbol().getType() == HqlParser.NOT;
24402441
operationSymbol = firstSymbol;
24412442
}
24422443
final var expressions = ctx.expression();
@@ -2519,20 +2520,16 @@ public SqmPredicate visitBinaryExpressionPredicate(HqlParser.BinaryExpressionPre
25192520
createComparisonPredicate( ComparisonOperator.GREATER_THAN, lhsCtx, rhsCtx );
25202521
case HqlParser.GREATER_EQUAL ->
25212522
createComparisonPredicate( ComparisonOperator.GREATER_THAN_OR_EQUAL, lhsCtx, rhsCtx );
2523+
case HqlParser.IS -> {
2524+
final var comparisonOperator = !negated
2525+
? ComparisonOperator.DISTINCT_FROM
2526+
: ComparisonOperator.NOT_DISTINCT_FROM;
2527+
yield createComparisonPredicate( comparisonOperator, lhsCtx, rhsCtx );
2528+
}
25222529
default -> throw new AssertionError( "Unknown binary expression predicate: " + operationSymbol );
25232530
};
25242531
}
25252532

2526-
@Override
2527-
public SqmPredicate visitIsDistinctFromPredicate(HqlParser.IsDistinctFromPredicateContext ctx) {
2528-
final var leftExpressionContext = ctx.expression( 0 );
2529-
final var rightExpressionContext = ctx.expression( 1 );
2530-
final var comparisonOperator = ctx.NOT() == null
2531-
? ComparisonOperator.DISTINCT_FROM
2532-
: ComparisonOperator.NOT_DISTINCT_FROM;
2533-
return createComparisonPredicate( comparisonOperator, leftExpressionContext, rightExpressionContext );
2534-
}
2535-
25362533
private SqmComparisonPredicate createComparisonPredicate(
25372534
ComparisonOperator comparisonOperator,
25382535
HqlParser.ExpressionContext leftExpressionContext,

0 commit comments

Comments
 (0)