brj 2005/11/13 08:14:04
Modified: src/test/org/apache/ojb/broker Tag: OJB_1_0_RELEASE
QueryTest.java
src/java/org/apache/ojb/broker/accesslayer Tag:
OJB_1_0_RELEASE RsIterator.java
Log:
fix for Resultset#absolute(0)
Revision Changes Path
No revision
No revision
1.61.2.18 +14 -6 db-ojb/src/test/org/apache/ojb/broker/QueryTest.java
Index: QueryTest.java
===================================================================
RCS file: /home/cvs/db-ojb/src/test/org/apache/ojb/broker/QueryTest.java,v
retrieving revision 1.61.2.17
retrieving revision 1.61.2.18
diff -u -r1.61.2.17 -r1.61.2.18
--- QueryTest.java 3 Nov 2005 11:53:41 -0000 1.61.2.17
+++ QueryTest.java 13 Nov 2005 16:14:04 -0000 1.61.2.18
@@ -849,12 +849,11 @@
}
/**
- * Simple ReportQuery returning rows with 2 columns of Person
+ * Simple ReportQuery returning rows with 3 columns of Person
* needs SQL paging
*/
- public void _testReportQueryWithStartAndEnd()
+ public void testReportQueryWithStartAndEnd()
{
-
Criteria crit = new Criteria();
Collection results = new Vector();
crit.addLike("firstname", "%o%");
@@ -865,14 +864,23 @@
q.setStartAtIndex(3);
q.setEndAtIndex(5);
Iterator iter = broker.getReportQueryIteratorByQuery(q);
-
assertNotNull(iter);
while(iter.hasNext())
{
results.add(iter.next());
}
- assertTrue(results.size() == 4);
+ assertTrue(results.size() == 3);
+ results.clear();
+ q.setStartAtIndex(1);
+ q.setEndAtIndex(5);
+ iter = broker.getReportQueryIteratorByQuery(q);
+ assertNotNull(iter);
+ while(iter.hasNext())
+ {
+ results.add(iter.next());
+ }
+ assertTrue(results.size() == 5);
}
/**
No revision
No revision
1.63.2.17 +67 -35
db-ojb/src/java/org/apache/ojb/broker/accesslayer/RsIterator.java
Index: RsIterator.java
===================================================================
RCS file:
/home/cvs/db-ojb/src/java/org/apache/ojb/broker/accesslayer/RsIterator.java,v
retrieving revision 1.63.2.16
retrieving revision 1.63.2.17
diff -u -r1.63.2.16 -r1.63.2.17
--- RsIterator.java 5 Oct 2005 18:01:25 -0000 1.63.2.16
+++ RsIterator.java 13 Nov 2005 16:14:04 -0000 1.63.2.17
@@ -674,62 +674,94 @@
* respect to the beginning of the iterator. The first row is row 1, the
* second is row 2, and so on.
*
- * @param row
- * the row to move to in this iterator, by absolute number
+ * @param row the row to move to in this iterator, by absolute number
*/
public boolean absolute(int row) throws PersistenceBrokerException
{
boolean retval = false;
if (supportsAdvancedJDBCCursorControl())
{
+ retval = absoluteAdvanced(row);
+ }
+ else
+ {
+ retval = absoluteBasic(row);
+ }
+ return retval;
+ }
+
+ /**
+ * absolute for basicJDBCSupport
+ * @param row
+ * @return
+ */
+ private boolean absoluteBasic(int row)
+ {
+ boolean retval = false;
+
+ if (row > m_current_row)
+ {
try
{
- if (getRsAndStmt().m_rs != null)
+ while (m_current_row < row && getRsAndStmt().m_rs.next())
+ {
+ m_current_row++;
+ }
+ if (m_current_row == row)
+ {
+ retval = true;
+ }
+ else
{
- retval = getRsAndStmt().m_rs.absolute(row);
- m_current_row = row;
- setHasCalledCheck(false);
+ setHasCalledCheck(true);
+ setHasNext(false);
+ retval = false;
+ autoReleaseDbResources();
}
}
- catch (SQLException e)
+ catch (Exception ex)
{
- advancedJDBCSupport = false;
+ setHasCalledCheck(true);
+ setHasNext(false);
+ retval = false;
}
}
else
{
- if (row > m_current_row)
+ logger.info("Your driver does not support advanced JDBC
Functionality, " +
+ "you cannot call absolute() with a position < current");
+ }
+ return retval;
+ }
+
+ /**
+ * absolute for advancedJDBCSupport
+ * @param row
+ * @return
+ */
+ private boolean absoluteAdvanced(int row)
+ {
+ boolean retval = false;
+
+ try
+ {
+ if (getRsAndStmt().m_rs != null)
{
- try
+ if (row == 0)
{
- while (m_current_row < row && getRsAndStmt().m_rs.next())
- {
- m_current_row++;
- }
- if (m_current_row == row)
- {
- retval = true;
- }
- else
- {
- setHasCalledCheck(true);
- setHasNext(false);
- retval = false;
- autoReleaseDbResources();
- }
+ getRsAndStmt().m_rs.beforeFirst();
}
- catch (Exception ex)
+ else
{
- setHasCalledCheck(true);
- setHasNext(false);
- retval = false;
+ retval = getRsAndStmt().m_rs.absolute(row);
}
+ m_current_row = row;
+ setHasCalledCheck(false);
}
- else
- {
- logger.info(
- "Your driver does not support advanced JDBC
Functionality, you cannot call absolute() with a position < current");
- }
+ }
+ catch (SQLException e)
+ {
+ advancedJDBCSupport = false;
}
return retval;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]