mirror of
https://github.com/hibernate/hibernate-orm
synced 2025-02-26 05:14:57 +00:00
HHH-6076 - query with setFirstResult throws Exception on derby
This commit is contained in:
parent
7b4998d1ce
commit
de38d784c7
@ -1685,6 +1685,19 @@ private static boolean useLimit(final RowSelection selection, final Dialect dial
|
|||||||
return dialect.supportsLimit() && hasMaxRows( selection );
|
return dialect.supportsLimit() && hasMaxRows( selection );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private ScrollMode getScrollMode(boolean scroll, QueryParameters queryParameters, boolean hasFirstRow, boolean useLimitOffSet) {
|
||||||
|
final boolean canScroll = getFactory().getSettings().isScrollableResultSetsEnabled();
|
||||||
|
if ( !canScroll ) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if ( scroll ) {
|
||||||
|
return queryParameters.getScrollMode();
|
||||||
|
}
|
||||||
|
if ( hasFirstRow && !useLimitOffSet ) {
|
||||||
|
return ScrollMode.SCROLL_INSENSITIVE;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Obtain a <tt>PreparedStatement</tt> with all parameters pre-bound.
|
* Obtain a <tt>PreparedStatement</tt> with all parameters pre-bound.
|
||||||
* Bind JDBC-style <tt>?</tt> parameters, named parameters, and
|
* Bind JDBC-style <tt>?</tt> parameters, named parameters, and
|
||||||
@ -1701,24 +1714,23 @@ protected final PreparedStatement prepareQueryStatement(
|
|||||||
final RowSelection selection = queryParameters.getRowSelection();
|
final RowSelection selection = queryParameters.getRowSelection();
|
||||||
boolean useLimit = useLimit( selection, dialect );
|
boolean useLimit = useLimit( selection, dialect );
|
||||||
boolean hasFirstRow = getFirstRow( selection ) > 0;
|
boolean hasFirstRow = getFirstRow( selection ) > 0;
|
||||||
boolean useOffset = hasFirstRow && useLimit && dialect.supportsLimitOffset();
|
boolean useLimitOffset = hasFirstRow && useLimit && dialect.supportsLimitOffset();
|
||||||
boolean callable = queryParameters.isCallable();
|
boolean callable = queryParameters.isCallable();
|
||||||
|
|
||||||
final boolean canScroll = getFactory().getSettings().isScrollableResultSetsEnabled();
|
final boolean canScroll = getFactory().getSettings().isScrollableResultSetsEnabled();
|
||||||
final boolean useScrollableResultSetToSkip = hasFirstRow &&
|
final boolean useScrollableResultSetToSkip = hasFirstRow &&
|
||||||
!useOffset &&
|
!useLimitOffset && canScroll;
|
||||||
getFactory().getSettings().isScrollableResultSetsEnabled();
|
ScrollMode scrollMode = getScrollMode(scroll,queryParameters,hasFirstRow,useLimit);
|
||||||
final ScrollMode scrollMode =
|
//
|
||||||
canScroll
|
// if(canScroll && ( scroll || useScrollableResultSetToSkip )){
|
||||||
? scroll || useScrollableResultSetToSkip
|
// scrollMode = scroll ? queryParameters.getScrollMode() : ScrollMode.SCROLL_INSENSITIVE;
|
||||||
? queryParameters.getScrollMode()
|
// }else{
|
||||||
: ScrollMode.SCROLL_INSENSITIVE
|
// scrollMode = null;
|
||||||
: null;
|
// }
|
||||||
|
|
||||||
if ( useLimit ) {
|
if ( useLimit ) {
|
||||||
sql = dialect.getLimitString(
|
sql = dialect.getLimitString(
|
||||||
sql.trim(), //use of trim() here is ugly?
|
sql.trim(), //use of trim() here is ugly?
|
||||||
useOffset ? getFirstRow(selection) : 0,
|
useLimitOffset ? getFirstRow(selection) : 0,
|
||||||
getMaxOrLimit(selection, dialect)
|
getMaxOrLimit(selection, dialect)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -91,6 +91,23 @@ public void testLimit() {
|
|||||||
|
|
||||||
cleanupTestData();
|
cleanupTestData();
|
||||||
}
|
}
|
||||||
|
@Test
|
||||||
|
public void testOffset(){
|
||||||
|
prepareTestData();
|
||||||
|
Session session = openSession();
|
||||||
|
session.beginTransaction();
|
||||||
|
List result;
|
||||||
|
|
||||||
|
result = generateBaseHQLQuery( session )
|
||||||
|
.setFirstResult( 3 )
|
||||||
|
.list();
|
||||||
|
result = generateBaseCriteria( session )
|
||||||
|
.setFirstResult( 3 )
|
||||||
|
.list();
|
||||||
|
session.getTransaction().commit();
|
||||||
|
session.close();
|
||||||
|
cleanupTestData();
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@RequiresDialectFeature(
|
@RequiresDialectFeature(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user