Skip to content

Commit a3c5793

Browse files
committed
HHH-18991 enable use of parameters in Restrictions
the test failures demonstrate the problem
1 parent d318379 commit a3c5793

File tree

4 files changed

+6
-30
lines changed

4 files changed

+6
-30
lines changed

hibernate-core/src/main/java/org/hibernate/query/range/CaseInsensitiveValue.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
package org.hibernate.query.range;
66

77
import jakarta.persistence.criteria.CriteriaBuilder;
8-
import jakarta.persistence.criteria.Expression;
98
import jakarta.persistence.criteria.Path;
109
import jakarta.persistence.criteria.Predicate;
1110

@@ -24,14 +23,9 @@ record CaseInsensitiveValue(String value) implements Range<String> {
2423

2524
@Override
2625
public Predicate toPredicate(Path<? extends String> path, CriteriaBuilder builder) {
27-
// TODO: it would be much better to not do use literal,
28-
// and let it be treated as a parameter, but we
29-
// we run into the usual bug with parameters in
30-
// manipulated SQM trees
3126
@SuppressWarnings("unchecked")
3227
final Path<String> stringPath = (Path<String>) path; // safe, because String is final
33-
final Expression<String> literal = builder.literal( value.toLowerCase( Locale.ROOT ) );
34-
return builder.lower( stringPath ).equalTo( literal );
28+
return builder.lower( stringPath ).equalTo( value.toLowerCase( Locale.ROOT ) );
3529
}
3630

3731
@Override

hibernate-core/src/main/java/org/hibernate/query/range/LowerBound.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
package org.hibernate.query.range;
66

77
import jakarta.persistence.criteria.CriteriaBuilder;
8-
import jakarta.persistence.criteria.Expression;
98
import jakarta.persistence.criteria.Path;
109
import jakarta.persistence.criteria.Predicate;
1110
import org.hibernate.internal.util.ReflectHelper;
@@ -24,14 +23,9 @@ record LowerBound<U extends Comparable<U>>(U bound, boolean open) implements Ran
2423

2524
@Override
2625
public Predicate toPredicate(Path<? extends U> path, CriteriaBuilder builder) {
27-
// TODO: it would be much better to not do use literal,
28-
// and let it be treated as a parameter, but we
29-
// we run into the usual bug with parameters in
30-
// manipulated SQM trees
31-
final Expression<U> literal = builder.literal( bound );
3226
return open
33-
? builder.greaterThan( path, literal )
34-
: builder.greaterThanOrEqualTo( path, literal );
27+
? builder.greaterThan( path, bound )
28+
: builder.greaterThanOrEqualTo( path, bound );
3529
}
3630

3731
@Override

hibernate-core/src/main/java/org/hibernate/query/range/UpperBound.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
package org.hibernate.query.range;
66

77
import jakarta.persistence.criteria.CriteriaBuilder;
8-
import jakarta.persistence.criteria.Expression;
98
import jakarta.persistence.criteria.Path;
109
import jakarta.persistence.criteria.Predicate;
1110

@@ -23,14 +22,9 @@ record UpperBound<U extends Comparable<U>>(U bound, boolean open) implements Ran
2322

2423
@Override
2524
public Predicate toPredicate(Path<? extends U> path, CriteriaBuilder builder) {
26-
// TODO: it would be much better to not do use literal,
27-
// and let it be treated as a parameter, but we
28-
// we run into the usual bug with parameters in
29-
// manipulated SQM trees
30-
final Expression<U> literal = builder.literal( bound );
3125
return open
32-
? builder.lessThan( path, literal )
33-
: builder.lessThanOrEqualTo( path, literal );
26+
? builder.lessThan( path, bound )
27+
: builder.lessThanOrEqualTo( path, bound );
3428
}
3529

3630
@Override @SuppressWarnings("unchecked")

hibernate-core/src/main/java/org/hibernate/query/range/Value.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
package org.hibernate.query.range;
66

77
import jakarta.persistence.criteria.CriteriaBuilder;
8-
import jakarta.persistence.criteria.Expression;
98
import jakarta.persistence.criteria.Path;
109
import jakarta.persistence.criteria.Predicate;
1110
import org.hibernate.internal.util.ReflectHelper;
@@ -24,12 +23,7 @@ record Value<U>(U value) implements Range<U> {
2423

2524
@Override
2625
public Predicate toPredicate(Path<? extends U> path, CriteriaBuilder builder) {
27-
// TODO: it would be much better to not do use literal,
28-
// and let it be treated as a parameter, but we
29-
// we run into the usual bug with parameters in
30-
// manipulated SQM trees
31-
final Expression<U> literal = builder.literal( value );
32-
return path.equalTo( literal );
26+
return path.equalTo( value );
3327
}
3428

3529
@Override

0 commit comments

Comments
 (0)