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/11 15:41:26 UTC
svn commit: r675950 - in /cayenne/main/trunk: docs/doc/src/main/resources/
framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/
framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/hsqldb/
framework/ca...
Author: aadamchik
Date: Fri Jul 11 06:41:25 2008
New Revision: 675950
URL: http://svn.apache.org/viewvc?rev=675950&view=rev
Log:
CAY-1068 Add support for start index/offset of queries (patch 2)
Added:
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/postgres/PostgresSelectAction.java
Modified:
cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/JDBCResultIterator.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/HSQLActionBuilder.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLActionBuilder.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/PostgresActionBuilder.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/jdbc/JDBCResultIteratorTest.java
Modified: cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt?rev=675950&r1=675949&r2=675950&view=diff
==============================================================================
--- cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt (original)
+++ cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt Fri Jul 11 06:41:25 2008
@@ -23,6 +23,7 @@
CAY-1058 Add a maven plugin for starting up the modeler.
CAY-1060 CM: Allow multiple item selections
CAY-1061 ResourceFinder: abstract API for looking up resources, including multiple resources for a given name
+CAY-1068 Add support for start index/offset of queries
CAY-1085 Use standard JDBC API for writing Oracle LOBs
Bug fixes since M4:
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/JDBCResultIterator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/JDBCResultIterator.java?rev=675950&r1=675949&r2=675950&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/JDBCResultIterator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/JDBCResultIterator.java Fri Jul 11 06:41:25 2008
@@ -66,54 +66,12 @@
protected boolean nextRow;
protected int fetchedSoFar;
protected int fetchLimit;
- protected int fetchOffset;
private String[] labels;
private int[] types;
/**
* Creates new JDBCResultIterator that reads from provided ResultSet.
- *
- * @since 3.0
- */
- public JDBCResultIterator(Connection connection, Statement statement,
- ResultSet resultSet, RowDescriptor descriptor, int fetchLimit, int fetchOffset)
- throws CayenneException {
-
- this.fetchOffset = fetchOffset;
- this.connection = connection;
- this.statement = statement;
- this.resultSet = resultSet;
- this.rowDescriptor = descriptor;
- this.fetchLimit = fetchLimit;
- this.mapCapacity = (int) Math.ceil((descriptor.getWidth()) / 0.75);
-
- try {
- int i = 0;
- while (i++ < fetchOffset && resultSet.next());
- }
- catch (SQLException e) {
- throw new CayenneException("Error rewinding ResultSet", e);
- }
-
- checkNextRow();
-
- if (nextRow) {
- // extract column parameters to speed up processing...
- ColumnDescriptor[] columns = descriptor.getColumns();
- int width = columns.length;
- labels = new String[width];
- types = new int[width];
-
- for (int i = 0; i < width; i++) {
- labels[i] = columns[i].getLabel();
- types[i] = columns[i].getJdbcType();
- }
- }
- }
-
- /**
- * Creates new JDBCResultIterator that reads from provided ResultSet.
*/
public JDBCResultIterator(Connection connection, Statement statement,
ResultSet resultSet, RowDescriptor descriptor, int fetchLimit)
@@ -244,10 +202,9 @@
throw new CayenneException(
"An attempt to read uninitialized row or past the end of the iterator.");
}
-
checkNextRow();
}
-
+
/**
* Closes ResultIterator and associated ResultSet. This method must be called
* explicitly when the user is finished processing the records. Otherwise unused
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=675950&r1=675949&r2=675950&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 Fri Jul 11 06:41:25 2008
@@ -25,22 +25,18 @@
import java.sql.SQLException;
import java.util.List;
+import org.apache.cayenne.DataRow;
import org.apache.cayenne.access.OperationObserver;
import org.apache.cayenne.access.QueryLogger;
import org.apache.cayenne.access.ResultIterator;
import org.apache.cayenne.access.trans.SelectTranslator;
import org.apache.cayenne.access.util.DistinctResultIterator;
import org.apache.cayenne.dba.DbAdapter;
-import org.apache.cayenne.dba.hsqldb.HSQLSelectTranslator;
-import org.apache.cayenne.dba.mysql.MySQLSelectTranslator;
-import org.apache.cayenne.dba.oracle.OracleSelectTranslator;
-import org.apache.cayenne.dba.postgres.PostgresSelectTranslator;
import org.apache.cayenne.map.EntityResolver;
import org.apache.cayenne.query.PrefetchProcessor;
import org.apache.cayenne.query.PrefetchTreeNode;
import org.apache.cayenne.query.QueryMetadata;
import org.apache.cayenne.query.SelectQuery;
-import org.apache.cayenne.DataRow;
/**
* A SQLAction that handles SelectQuery execution.
@@ -76,34 +72,20 @@
PreparedStatement prepStmt = translator.createStatement();
ResultSet rs = prepStmt.executeQuery();
+ int i = getInitialCursorPosition();
+ while (i-- > 0 && rs.next())
+ ;
+
RowDescriptor descriptor = new RowDescriptorBuilder().setColumns(
translator.getResultColumns()).getDescriptor(
getAdapter().getExtendedTypes());
- JDBCResultIterator workerIterator;
-
- if (translator instanceof MySQLSelectTranslator
- || translator instanceof OracleSelectTranslator
- || translator instanceof PostgresSelectTranslator
- || translator instanceof HSQLSelectTranslator) {
-
- workerIterator = new JDBCResultIterator(
- connection,
- prepStmt,
- rs,
- descriptor,
- query.getFetchLimit());
-
- }
- else {
- workerIterator = new JDBCResultIterator(
- connection,
- prepStmt,
- rs,
- descriptor,
- query.getFetchLimit(),
- query.getFetchOffset());
- }
+ JDBCResultIterator workerIterator = new JDBCResultIterator(
+ connection,
+ prepStmt,
+ rs,
+ descriptor,
+ query.getFetchLimit());
workerIterator.setPostProcessor(DataRowPostProcessor
.createPostProcessor(translator));
@@ -180,4 +162,8 @@
}
}
}
+
+ protected int getInitialCursorPosition() {
+ return query.getFetchOffset();
+ }
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLActionBuilder.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLActionBuilder.java?rev=675950&r1=675949&r2=675950&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLActionBuilder.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLActionBuilder.java Fri Jul 11 06:41:25 2008
@@ -22,7 +22,6 @@
import java.sql.Connection;
import org.apache.cayenne.access.jdbc.ProcedureAction;
-import org.apache.cayenne.access.jdbc.SelectAction;
import org.apache.cayenne.access.trans.ProcedureTranslator;
import org.apache.cayenne.access.trans.SelectTranslator;
import org.apache.cayenne.dba.JdbcActionBuilder;
@@ -40,7 +39,7 @@
@Override
public SQLAction objectSelectAction(SelectQuery query) {
- return new SelectAction(query, adapter, entityResolver) {
+ return new HSQLSelectAction(query, adapter, entityResolver) {
@Override
protected SelectTranslator createTranslator(Connection connection) {
Added: 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=675950&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLSelectAction.java (added)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLSelectAction.java Fri Jul 11 06:41:25 2008
@@ -0,0 +1,40 @@
+/*****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ****************************************************************/
+package org.apache.cayenne.dba.hsqldb;
+
+import org.apache.cayenne.access.jdbc.SelectAction;
+import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.map.EntityResolver;
+import org.apache.cayenne.query.SelectQuery;
+
+/**
+ * @since 3.0
+ */
+class HSQLSelectAction extends SelectAction {
+
+ HSQLSelectAction(SelectQuery query, DbAdapter adapter, EntityResolver entityResolver) {
+ super(query, adapter, entityResolver);
+ }
+
+ @Override
+ protected int getInitialCursorPosition() {
+ return 0;
+ }
+
+}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLActionBuilder.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLActionBuilder.java?rev=675950&r1=675949&r2=675950&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLActionBuilder.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLActionBuilder.java Fri Jul 11 06:41:25 2008
@@ -42,7 +42,7 @@
@Override
public SQLAction objectSelectAction(SelectQuery query) {
- return new SelectAction(query, adapter, entityResolver) {
+ return new MySQLSelectAction(query, adapter, entityResolver) {
@Override
protected SelectTranslator createTranslator(Connection connection) {
Added: 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=675950&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLSelectAction.java (added)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLSelectAction.java Fri Jul 11 06:41:25 2008
@@ -0,0 +1,39 @@
+/*****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ****************************************************************/
+package org.apache.cayenne.dba.mysql;
+
+import org.apache.cayenne.access.jdbc.SelectAction;
+import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.map.EntityResolver;
+import org.apache.cayenne.query.SelectQuery;
+
+/**
+ * @since 3.0
+ */
+class MySQLSelectAction extends SelectAction {
+
+ MySQLSelectAction(SelectQuery query, DbAdapter adapter, EntityResolver entityResolver) {
+ super(query, adapter, entityResolver);
+ }
+
+ @Override
+ protected int getInitialCursorPosition() {
+ 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=675950&r1=675949&r2=675950&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 Fri Jul 11 06:41:25 2008
@@ -47,4 +47,9 @@
translator.setConnection(connection);
return translator;
}
+
+ @Override
+ protected int getInitialCursorPosition() {
+ return 0;
+ }
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/postgres/PostgresActionBuilder.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/postgres/PostgresActionBuilder.java?rev=675950&r1=675949&r2=675950&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/postgres/PostgresActionBuilder.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/postgres/PostgresActionBuilder.java Fri Jul 11 06:41:25 2008
@@ -21,7 +21,6 @@
import java.sql.Connection;
-import org.apache.cayenne.access.jdbc.SelectAction;
import org.apache.cayenne.access.trans.SelectTranslator;
import org.apache.cayenne.dba.JdbcActionBuilder;
import org.apache.cayenne.dba.JdbcAdapter;
@@ -47,7 +46,7 @@
@Override
public SQLAction objectSelectAction(SelectQuery query) {
- return new SelectAction(query, adapter, entityResolver) {
+ return new PostgresSelectAction(query, adapter, entityResolver) {
@Override
protected SelectTranslator createTranslator(Connection connection) {
Added: 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=675950&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/postgres/PostgresSelectAction.java (added)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/postgres/PostgresSelectAction.java Fri Jul 11 06:41:25 2008
@@ -0,0 +1,40 @@
+/*****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ****************************************************************/
+package org.apache.cayenne.dba.postgres;
+
+import org.apache.cayenne.access.jdbc.SelectAction;
+import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.map.EntityResolver;
+import org.apache.cayenne.query.SelectQuery;
+
+/**
+ * @since 3.0
+ */
+class PostgresSelectAction extends SelectAction {
+
+ PostgresSelectAction(SelectQuery query, DbAdapter adapter,
+ EntityResolver entityResolver) {
+ super(query, adapter, entityResolver);
+ }
+
+ @Override
+ protected int getInitialCursorPosition() {
+ return 0;
+ }
+}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/jdbc/JDBCResultIteratorTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/jdbc/JDBCResultIteratorTest.java?rev=675950&r1=675949&r2=675950&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/jdbc/JDBCResultIteratorTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/jdbc/JDBCResultIteratorTest.java Fri Jul 11 06:41:25 2008
@@ -82,41 +82,6 @@
assertFalse(c.isClosed());
}
- public void testOffsetConstructorFail() throws Exception {
- MockConnection c = new MockConnection();
- MockStatement s = new MockStatement(c);
- MockResultSet rs = new MockResultSet("rs");
- rs.addColumn("a", new Object[] {
- "1", "2", "3"
- });
- RowDescriptor descriptor = new RowDescriptorBuilder()
- .setResultSet(rs)
- .getDescriptor(new ExtendedTypeMap());
- JDBCResultIterator it = new JDBCResultIterator(c, s, rs, descriptor, 0, 5);
- try {
- it.nextDataRow();
- fail("Exception expected");
- }
- catch (CayenneException e) {
- System.out.println("ok");
- }
- }
-
- public void testOffsetConstructorSuccess() throws Exception {
- MockConnection c = new MockConnection();
- MockStatement s = new MockStatement(c);
- MockResultSet rs = new MockResultSet("rs");
- rs.addColumn("a", new Object[] {
- "1", "2", "3"
- });
- RowDescriptor descriptor = new RowDescriptorBuilder()
- .setResultSet(rs)
- .getDescriptor(new ExtendedTypeMap());
- JDBCResultIterator it = new JDBCResultIterator(c, s, rs, descriptor, 1, 2);
- Map<String, Object> row = it.nextDataRow();
- assertNotNull(row);
- }
-
JDBCResultIterator makeIterator() throws Exception {
Connection c = new MockConnection();