From: <one...@us...> - 2003-05-04 06:09:42
|
Update of /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/loader In directory sc8-pr-cvs1:/tmp/cvs-serv11014/loader Modified Files: Loader.java Log Message: improved Limit clause stuff Index: Loader.java =================================================================== RCS file: /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/loader/Loader.java,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -d -r1.22 -r1.23 *** Loader.java 3 May 2003 09:05:45 -0000 1.22 --- Loader.java 4 May 2003 06:09:39 -0000 1.23 *************** *** 17,20 **** --- 17,21 ---- import net.sf.hibernate.collection.CollectionPersister; import net.sf.hibernate.collection.PersistentCollection; + import net.sf.hibernate.dialect.Dialect; import net.sf.hibernate.engine.Key; import net.sf.hibernate.engine.RowSelection; *************** *** 383,391 **** } ! private boolean usePagingSelect(RowSelection selection, SessionImplementor session) { ! return session.getFactory().getDialect().supportsPagingSelect() && ( ! selection!=null && ! selection.getMaxRows()!=null ! ); } --- 384,392 ---- } ! private boolean useLimit(RowSelection selection, SessionImplementor session) { ! Dialect d = session.getFactory().getDialect(); ! return d.supportsLimit() && ! ( selection!=null && selection.getMaxRows()!=null ) && //there is a max rows ! ( d.preferLimit() || getFirstRow(selection)!=0 ); } *************** *** 404,415 **** ) throws SQLException, HibernateException { ! boolean usePagingSelect = usePagingSelect(selection, session); boolean scrollable = session.getFactory().useScrollableResultSets() && ( scroll || ! ( !usePagingSelect && getFirstRow(selection)!=0 ) ); ! if (usePagingSelect) sql = session.getFactory().getDialect().getPagingSelect(sql); PreparedStatement st = session.getBatcher().prepareQueryStatement(sql, scrollable); --- 405,416 ---- ) throws SQLException, HibernateException { ! boolean useLimit = useLimit(selection, session); boolean scrollable = session.getFactory().useScrollableResultSets() && ( scroll || ! ( !useLimit && getFirstRow(selection)!=0 ) ); ! if (useLimit) sql = session.getFactory().getDialect().getLimitString(sql); PreparedStatement st = session.getBatcher().prepareQueryStatement(sql, scrollable); *************** *** 427,431 **** col += bindNamedParameters(st, namedParams, col, session); ! if (usePagingSelect) bindPagingSelectParameters(st, col, selection, session); } catch (SQLException sqle) { --- 428,432 ---- col += bindNamedParameters(st, namedParams, col, session); ! if (useLimit) bindPagingSelectParameters(st, col, selection, session); } catch (SQLException sqle) { *************** *** 445,449 **** int firstRow = (selection==null || selection.getFirstRow()==null ) ? 0 : selection.getFirstRow().intValue(); int lastRow = firstRow + selection.getMaxRows().intValue(); ! boolean reverse = session.getFactory().getDialect().reversePagingSelectOrder(); st.setInt( index + (reverse?1:0), firstRow ); st.setInt( index + (reverse?0:1), lastRow ); --- 446,450 ---- int firstRow = (selection==null || selection.getFirstRow()==null ) ? 0 : selection.getFirstRow().intValue(); int lastRow = firstRow + selection.getMaxRows().intValue(); ! boolean reverse = session.getFactory().getDialect().reverseLimitParameterOrder(); st.setInt( index + (reverse?1:0), firstRow ); st.setInt( index + (reverse?0:1), lastRow ); *************** *** 467,476 **** throws SQLException, HibernateException { ! boolean usePagingSelect = usePagingSelect(selection, session); try { ! if (!usePagingSelect) setMaxRows(st, selection); ResultSet rs = st.executeQuery(); ! if (!usePagingSelect) advance(rs, selection, session); return rs; } --- 468,477 ---- throws SQLException, HibernateException { ! boolean useLimit = useLimit(selection, session); try { ! if (!useLimit) setMaxRows(st, selection); ResultSet rs = st.executeQuery(); ! if (!useLimit) advance(rs, selection, session); return rs; } |