You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2008/07/13 20:46:56 UTC
svn commit: r676405 - in
/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src:
main/java/org/apache/cayenne/access/jdbc/
main/java/org/apache/cayenne/dba/hsqldb/
main/java/org/apache/cayenne/dba/mysql/
main/java/org/apache/cayenne/dba/oracle/ m...
Author: aadamchik
Date: Sun Jul 13 11:46:55 2008
New Revision: 676405
URL: http://svn.apache.org/viewvc?rev=676405&view=rev
Log:
CAY-1068 Add support for start index/offset of queries
(support for PrecedureQuery with offset)
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/BaseSQLAction.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/SelectAction.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLSelectAction.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLSelectAction.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/oracle/OracleSelectAction.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/postgres/PostgresSelectAction.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextProcedureQueryTest.java
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/BaseSQLAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/BaseSQLAction.java?rev=676405&r1=676404&r2=676405&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/BaseSQLAction.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/BaseSQLAction.java Sun Jul 13 11:46:55 2008
@@ -30,6 +30,7 @@
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.map.EntityResolver;
import org.apache.cayenne.query.Query;
+import org.apache.cayenne.query.QueryMetadata;
import org.apache.cayenne.query.SQLAction;
/**
@@ -66,12 +67,18 @@
OperationObserver delegate) throws SQLException, Exception {
long t1 = System.currentTimeMillis();
+
+ QueryMetadata metadata = query.getMetaData(getEntityResolver());
+ int i = getInitialCursorPosition(metadata.getFetchOffset());
+ while (i-- > 0 && resultSet.next())
+ ;
+
JDBCResultIterator resultReader = new JDBCResultIterator(
null,
null,
resultSet,
descriptor,
- query.getMetaData(getEntityResolver()).getFetchLimit());
+ metadata.getFetchLimit());
if (!delegate.isIteratedResult()) {
List<DataRow> resultRows = resultReader.dataRows(false);
@@ -98,4 +105,16 @@
}
}
}
+
+ /**
+ * Returns a value of the offset that will be used to rewind the ResultSet within the
+ * SQL action before reading the result rows. The default implementation returns
+ * 'queryOffset' argument. If the adapter supports setting offset at the SQL level,
+ * this method must be overridden to return zero to suppress manual offset.
+ *
+ * @since 3.0
+ */
+ protected int getInitialCursorPosition(int queryOffset) {
+ return queryOffset;
+ }
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/SelectAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/SelectAction.java?rev=676405&r1=676404&r2=676405&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/SelectAction.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/SelectAction.java Sun Jul 13 11:46:55 2008
@@ -72,7 +72,7 @@
PreparedStatement prepStmt = translator.createStatement();
ResultSet rs = prepStmt.executeQuery();
- int i = getFetchOffset();
+ int i = getInitialCursorPosition(query.getFetchOffset());
while (i-- > 0 && rs.next())
;
@@ -162,15 +162,4 @@
}
}
}
-
- /**
- * Returns a value of the offset that will be used to rewind the ResultSet before
- * starting reading the result rows. If the adapter supports setting offset at the SQL
- * level, this method must be overridden to return zero for no manual offset.
- *
- * @since 3.0
- */
- protected int getFetchOffset() {
- return query.getFetchOffset();
- }
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLSelectAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLSelectAction.java?rev=676405&r1=676404&r2=676405&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLSelectAction.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLSelectAction.java Sun Jul 13 11:46:55 2008
@@ -33,7 +33,7 @@
}
@Override
- protected int getFetchOffset() {
+ protected int getInitialCursorPosition(int queryOffset) {
return 0;
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLSelectAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLSelectAction.java?rev=676405&r1=676404&r2=676405&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLSelectAction.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLSelectAction.java Sun Jul 13 11:46:55 2008
@@ -33,7 +33,7 @@
}
@Override
- protected int getFetchOffset() {
+ protected int getInitialCursorPosition(int queryOffset) {
return 0;
}
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/oracle/OracleSelectAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/oracle/OracleSelectAction.java?rev=676405&r1=676404&r2=676405&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/oracle/OracleSelectAction.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/oracle/OracleSelectAction.java Sun Jul 13 11:46:55 2008
@@ -49,7 +49,7 @@
}
@Override
- protected int getFetchOffset() {
+ protected int getInitialCursorPosition(int queryOffset) {
return 0;
}
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/postgres/PostgresSelectAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/postgres/PostgresSelectAction.java?rev=676405&r1=676404&r2=676405&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/postgres/PostgresSelectAction.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/postgres/PostgresSelectAction.java Sun Jul 13 11:46:55 2008
@@ -34,7 +34,7 @@
}
@Override
- protected int getFetchOffset() {
+ protected int getInitialCursorPosition(int queryOffset) {
return 0;
}
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextProcedureQueryTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextProcedureQueryTest.java?rev=676405&r1=676404&r2=676405&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextProcedureQueryTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextProcedureQueryTest.java Sun Jul 13 11:46:55 2008
@@ -221,6 +221,45 @@
assertEquals(2000, p.getEstimatedPrice().intValue());
}
+ public void testFetchLimit() throws Exception {
+ if (!getAccessStackAdapter().supportsStoredProcedures()) {
+ return;
+ }
+
+ // create an artist with painting in the database
+ createArtist(1000.0);
+ createArtist(2000.0);
+ createArtist(3000.0);
+
+ ProcedureQuery q = new ProcedureQuery(SELECT_STORED_PROCEDURE);
+ q.addParameter("aName", "An Artist");
+ q.addParameter("paintingPrice", new Integer(3000));
+ q.setFetchLimit(2);
+ List artists = runProcedureSelect(q);
+
+ assertEquals(2, artists.size());
+ }
+
+ public void testFetchOffset() throws Exception {
+ if (!getAccessStackAdapter().supportsStoredProcedures()) {
+ return;
+ }
+
+ // create an artist with painting in the database
+ createArtist(1000.0);
+ createArtist(2000.0);
+ createArtist(3000.0);
+
+ ProcedureQuery q = new ProcedureQuery(SELECT_STORED_PROCEDURE);
+ q.addParameter("aName", "An Artist");
+ q.addParameter("paintingPrice", new Integer(3000));
+ q.setFetchOffset(2);
+ List artists = runProcedureSelect(q);
+
+ assertEquals(1, artists.size());
+ }
+
+
public void testOutParams() throws Exception {
if (!getAccessStackAdapter().supportsStoredProcedures()) {
return;