Skip to content

Commit 96ec0e8

Browse files
committed
HHH-19314 Fix fetch clause expression value retrieval
1 parent 4d853c1 commit 96ec0e8

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

hibernate-core/src/main/java/org/hibernate/sql/ast/spi/AbstractSqlAstTranslator.java

+15-2
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,7 @@
190190
import org.hibernate.sql.exec.internal.AbstractJdbcParameter;
191191
import org.hibernate.sql.exec.internal.JdbcOperationQueryInsertImpl;
192192
import org.hibernate.sql.exec.internal.JdbcParameterBindingImpl;
193+
import org.hibernate.sql.exec.internal.JdbcParameterImpl;
193194
import org.hibernate.sql.exec.internal.JdbcParametersImpl;
194195
import org.hibernate.sql.exec.internal.SqlTypedMappingJdbcParameter;
195196
import org.hibernate.sql.exec.spi.ExecutionContext;
@@ -6853,9 +6854,21 @@ private int getSortSelectionIndex(QuerySpec querySpec, SortSpecification sortSpe
68536854

68546855
private boolean isFetchFirstRowOnly(QueryPart queryPart) {
68556856
return queryPart.getFetchClauseType() == FetchClauseType.ROWS_ONLY
6856-
&& queryPart.getFetchClauseExpression() instanceof QueryLiteral<?>
6857+
&& ( queryPart.getFetchClauseExpression() instanceof QueryLiteral<?>
68576858
&& Integer.valueOf( 1 )
6858-
.equals( ( (QueryLiteral<?>) queryPart.getFetchClauseExpression() ).getLiteralValue() );
6859+
.equals( ( (QueryLiteral) queryPart.getFetchClauseExpression() ).getLiteralValue() )
6860+
|| queryPart.getFetchClauseExpression() instanceof SqmParameterInterpretation
6861+
&& isParameterValueEqualToOne( (SqmParameterInterpretation) queryPart.getFetchClauseExpression() )
6862+
);
6863+
}
6864+
6865+
private boolean isParameterValueEqualToOne(SqmParameterInterpretation sqmParameterInterpretation) {
6866+
if ( sqmParameterInterpretation.getResolvedExpression() instanceof JdbcParameterImpl ) {
6867+
assert jdbcParameterBindings != null;
6868+
final JdbcParameterBinding binding = jdbcParameterBindings.getBinding( (JdbcParameterImpl)sqmParameterInterpretation.getResolvedExpression() );
6869+
return binding != null && Integer.valueOf( 1 ).equals( binding.getBindValue() );
6870+
}
6871+
return false;
68596872
}
68606873

68616874
private SelectStatement stripToSelectClause(SelectStatement statement) {

0 commit comments

Comments
 (0)