Skip to content

Commit 0b3477c

Browse files
committed
HHH-19240 Fold IsDistinctFromPredicate into BinaryExpressionPredicate rule
1 parent 51af92d commit 0b3477c

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
@@ -2464,7 +2464,8 @@ public SqmPredicate visitBinaryExpressionPredicate(HqlParser.BinaryExpressionPre
24642464
operationSymbol = ((TerminalNode) ctx.getChild( 2 )).getSymbol();
24652465
}
24662466
else {
2467-
negated = false;
2467+
negated = firstSymbol.getType() == HqlParser.IS
2468+
&& ((TerminalNode) ctx.getChild( 2 )).getSymbol().getType() == HqlParser.NOT;
24682469
operationSymbol = firstSymbol;
24692470
}
24702471
final var expressions = ctx.expression();
@@ -2547,20 +2548,16 @@ public SqmPredicate visitBinaryExpressionPredicate(HqlParser.BinaryExpressionPre
25472548
createComparisonPredicate( ComparisonOperator.GREATER_THAN, lhsCtx, rhsCtx );
25482549
case HqlParser.GREATER_EQUAL ->
25492550
createComparisonPredicate( ComparisonOperator.GREATER_THAN_OR_EQUAL, lhsCtx, rhsCtx );
2551+
case HqlParser.IS -> {
2552+
final ComparisonOperator comparisonOperator = !negated
2553+
? ComparisonOperator.DISTINCT_FROM
2554+
: ComparisonOperator.NOT_DISTINCT_FROM;
2555+
yield createComparisonPredicate( comparisonOperator, lhsCtx, rhsCtx );
2556+
}
25502557
default -> throw new AssertionError( "Unknown binary expression predicate: " + operationSymbol );
25512558
};
25522559
}
25532560

2554-
@Override
2555-
public SqmPredicate visitIsDistinctFromPredicate(HqlParser.IsDistinctFromPredicateContext ctx) {
2556-
final var leftExpressionContext = ctx.expression( 0 );
2557-
final var rightExpressionContext = ctx.expression( 1 );
2558-
final ComparisonOperator comparisonOperator = ctx.NOT() == null
2559-
? ComparisonOperator.DISTINCT_FROM
2560-
: ComparisonOperator.NOT_DISTINCT_FROM;
2561-
return createComparisonPredicate( comparisonOperator, leftExpressionContext, rightExpressionContext );
2562-
}
2563-
25642561
private SqmComparisonPredicate createComparisonPredicate(
25652562
ComparisonOperator comparisonOperator,
25662563
HqlParser.ExpressionContext leftExpressionContext,

0 commit comments

Comments
 (0)