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 2014/03/14 17:10:55 UTC

svn commit: r1577596 - in /cayenne/main/trunk/cayenne-server/src: main/java/org/apache/cayenne/access/jdbc/ main/java/org/apache/cayenne/access/trans/ main/java/org/apache/cayenne/dba/oracle/ test/java/org/apache/cayenne/access/trans/

Author: aadamchik
Date: Fri Mar 14 16:10:54 2014
New Revision: 1577596

URL: http://svn.apache.org/r1577596
Log:
CAY-1911 BatchQuery refactoring - make Iterable

Modified:
    cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/BatchAction.java
    cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/SoftDeleteBatchQueryBuilder.java
    cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/trans/BatchQueryBuilder.java
    cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/trans/DeleteBatchQueryBuilder.java
    cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/trans/InsertBatchQueryBuilder.java
    cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/trans/UpdateBatchQueryBuilder.java
    cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleLOBBatchAction.java
    cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleLOBBatchQueryBuilder.java
    cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleLOBBatchQueryWrapper.java
    cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleLOBInsertBatchQueryBuilder.java
    cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleLOBUpdateBatchQueryBuilder.java
    cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/trans/BatchQueryBuilderTest.java

Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/BatchAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/BatchAction.java?rev=1577596&r1=1577595&r2=1577596&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/BatchAction.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/BatchAction.java Fri Mar 14 16:10:54 2014
@@ -26,7 +26,6 @@ import java.sql.SQLException;
 import java.sql.Statement;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.Map;
 
 import org.apache.cayenne.CayenneException;
 import org.apache.cayenne.ResultIterator;
@@ -40,6 +39,7 @@ import org.apache.cayenne.log.JdbcEventL
 import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.map.ObjAttribute;
 import org.apache.cayenne.query.BatchQuery;
+import org.apache.cayenne.query.BatchQueryRow;
 import org.apache.cayenne.query.DeleteBatchQuery;
 import org.apache.cayenne.query.InsertBatchQuery;
 import org.apache.cayenne.query.UpdateBatchQuery;
@@ -111,18 +111,17 @@ public class BatchAction extends BaseSQL
         logger.logQuery(queryStr, Collections.EMPTY_LIST);
 
         // run batch
-        query.reset();
 
         PreparedStatement statement = con.prepareStatement(queryStr);
         try {
-            while (query.next()) {
+            for (BatchQueryRow row : query.getRows()) {
 
                 if (isLoggable) {
                     logger.logQueryParameters("batch bind", query.getDbAttributes(),
-                            queryBuilder.getParameterValues(), query instanceof InsertBatchQuery);
+                            queryBuilder.getParameterValues(row), query instanceof InsertBatchQuery);
                 }
 
-                queryBuilder.bindParameters(statement);
+                queryBuilder.bindParameters(statement, row);
                 statement.addBatch();
             }
 
@@ -170,36 +169,28 @@ public class BatchAction extends BaseSQL
         logger.logQuery(queryStr, Collections.EMPTY_LIST);
 
         // run batch queries one by one
-        query.reset();
 
         PreparedStatement statement = (generatesKeys) ? connection.prepareStatement(queryStr,
                 Statement.RETURN_GENERATED_KEYS) : connection.prepareStatement(queryStr);
         try {
-            while (query.next()) {
+            for(BatchQueryRow row : query.getRows()) {
                 if (isLoggable) {
-                    logger.logQueryParameters("bind", query.getDbAttributes(), queryBuilder.getParameterValues(),
+                    logger.logQueryParameters("bind", query.getDbAttributes(), queryBuilder.getParameterValues(row),
                             query instanceof InsertBatchQuery);
                 }
 
-                queryBuilder.bindParameters(statement);
+                queryBuilder.bindParameters(statement, row);
 
                 int updated = statement.executeUpdate();
                 if (useOptimisticLock && updated != 1) {
-
-                    Map snapshot = Collections.EMPTY_MAP;
-                    if (query instanceof UpdateBatchQuery) {
-                        snapshot = ((UpdateBatchQuery) query).getCurrentQualifier();
-                    } else if (query instanceof DeleteBatchQuery) {
-                        snapshot = ((DeleteBatchQuery) query).getCurrentQualifier();
-                    }
-
-                    throw new OptimisticLockException(query.getObjectId(), query.getDbEntity(), queryStr, snapshot);
+                    throw new OptimisticLockException(row.getObjectId(), query.getDbEntity(), queryStr,
+                            row.getQualifier());
                 }
 
                 delegate.nextCount(query, updated);
 
                 if (generatesKeys) {
-                    processGeneratedKeys(statement, delegate);
+                    processGeneratedKeys(statement, delegate, row);
                 }
 
                 if (isLoggable) {
@@ -243,7 +234,7 @@ public class BatchAction extends BaseSQL
      * @since 3.2
      */
     @SuppressWarnings({ "rawtypes", "unchecked" })
-    protected void processGeneratedKeys(Statement statement, OperationObserver observer) throws SQLException,
+    protected void processGeneratedKeys(Statement statement, OperationObserver observer, BatchQueryRow row) throws SQLException,
             CayenneException {
 
         ResultSet keysRS = statement.getGeneratedKeys();
@@ -285,6 +276,6 @@ public class BatchAction extends BaseSQL
                 Collections.<ObjAttribute, ColumnDescriptor> emptyMap());
         ResultIterator iterator = new JDBCResultIterator(null, keysRS, rowReader);
 
-        observer.nextGeneratedRows(query, iterator, query.getObjectId());
+        observer.nextGeneratedRows(query, iterator, row.getObjectId());
     }
 }

Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/SoftDeleteBatchQueryBuilder.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/SoftDeleteBatchQueryBuilder.java?rev=1577596&r1=1577595&r2=1577596&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/SoftDeleteBatchQueryBuilder.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/SoftDeleteBatchQueryBuilder.java Fri Mar 14 16:10:54 2014
@@ -27,6 +27,7 @@ import org.apache.cayenne.access.trans.D
 import org.apache.cayenne.dba.DbAdapter;
 import org.apache.cayenne.dba.QuotingStrategy;
 import org.apache.cayenne.map.DbAttribute;
+import org.apache.cayenne.query.BatchQueryRow;
 import org.apache.cayenne.query.DeleteBatchQuery;
 
 /**
@@ -65,13 +66,13 @@ public class SoftDeleteBatchQueryBuilder
     }
 
     @Override
-    public void bindParameters(PreparedStatement statement) throws SQLException, Exception {
+    public void bindParameters(PreparedStatement statement, BatchQueryRow row) throws SQLException, Exception {
         if (needSoftDelete()) {
             // binding first parameter (which is 'deleted') as true
             adapter.bindParameter(statement, true, 1, Types.BOOLEAN, -1);
         }
 
-        super.bindParameters(statement);
+        super.bindParameters(statement, row);
     }
 
     /**

Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/trans/BatchQueryBuilder.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/trans/BatchQueryBuilder.java?rev=1577596&r1=1577595&r2=1577596&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/trans/BatchQueryBuilder.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/trans/BatchQueryBuilder.java Fri Mar 14 16:10:54 2014
@@ -30,6 +30,7 @@ import org.apache.cayenne.dba.DbAdapter;
 import org.apache.cayenne.dba.QuotingStrategy;
 import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.query.BatchQuery;
+import org.apache.cayenne.query.BatchQueryRow;
 
 /**
  * Superclass of batch query translators.
@@ -98,7 +99,7 @@ public abstract class BatchQueryBuilder 
      * 
      * @since 3.2
      */
-    public abstract void bindParameters(PreparedStatement statement) throws SQLException, Exception;
+    public abstract void bindParameters(PreparedStatement statement, BatchQueryRow row) throws SQLException, Exception;
 
     /**
      * Returns a list of values for the current batch iteration. Used primarily
@@ -106,11 +107,11 @@ public abstract class BatchQueryBuilder 
      * 
      * @since 1.2
      */
-    public List<Object> getParameterValues() {
+    public List<Object> getParameterValues(BatchQueryRow row) {
         int len = query.getDbAttributes().size();
         List<Object> values = new ArrayList<Object>(len);
         for (int i = 0; i < len; i++) {
-            values.add(query.getValue(i));
+            values.add(row.getValue(i));
         }
         return values;
     }

Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/trans/DeleteBatchQueryBuilder.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/trans/DeleteBatchQueryBuilder.java?rev=1577596&r1=1577595&r2=1577596&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/trans/DeleteBatchQueryBuilder.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/trans/DeleteBatchQueryBuilder.java Fri Mar 14 16:10:54 2014
@@ -27,6 +27,7 @@ import java.util.Iterator;
 import org.apache.cayenne.dba.DbAdapter;
 import org.apache.cayenne.dba.QuotingStrategy;
 import org.apache.cayenne.map.DbAttribute;
+import org.apache.cayenne.query.BatchQueryRow;
 import org.apache.cayenne.query.DeleteBatchQuery;
 
 /**
@@ -73,9 +74,11 @@ public class DeleteBatchQueryBuilder ext
 
     /**
      * Binds BatchQuery parameters to the PreparedStatement.
+     * 
+     * @since 3.2
      */
     @Override
-    public void bindParameters(PreparedStatement statement) throws SQLException, Exception {
+    public void bindParameters(PreparedStatement statement, BatchQueryRow row) throws SQLException, Exception {
 
         DeleteBatchQuery deleteBatch = (DeleteBatchQuery) query;
 
@@ -83,7 +86,7 @@ public class DeleteBatchQueryBuilder ext
         int i = 0;
 
         for (DbAttribute attribute : deleteBatch.getQualifierAttributes()) {
-            Object value = query.getValue(i++);
+            Object value = row.getValue(i++);
 
             // skip null attributes... they are translated as "IS NULL"
             if (deleteBatch.isNull(attribute)) {

Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/trans/InsertBatchQueryBuilder.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/trans/InsertBatchQueryBuilder.java?rev=1577596&r1=1577595&r2=1577596&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/trans/InsertBatchQueryBuilder.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/trans/InsertBatchQueryBuilder.java Fri Mar 14 16:10:54 2014
@@ -28,6 +28,7 @@ import java.util.List;
 import org.apache.cayenne.dba.DbAdapter;
 import org.apache.cayenne.dba.QuotingStrategy;
 import org.apache.cayenne.map.DbAttribute;
+import org.apache.cayenne.query.BatchQueryRow;
 import org.apache.cayenne.query.InsertBatchQuery;
 
 /**
@@ -47,7 +48,7 @@ public class InsertBatchQueryBuilder ext
      * @since 1.2
      */
     @Override
-    public void bindParameters(PreparedStatement statement) throws SQLException, Exception {
+    public void bindParameters(PreparedStatement statement, BatchQueryRow row) throws SQLException, Exception {
 
         List<DbAttribute> dbAttributes = query.getDbAttributes();
         int attributeCount = dbAttributes.size();
@@ -57,7 +58,7 @@ public class InsertBatchQueryBuilder ext
             DbAttribute attribute = dbAttributes.get(i);
             if (includeInBatch(attribute)) {
                 j++;
-                Object value = query.getValue(i);
+                Object value = row.getValue(i);
                 adapter.bindParameter(statement, value, j, attribute.getType(), attribute.getScale());
             }
         }
@@ -71,14 +72,14 @@ public class InsertBatchQueryBuilder ext
      * @since 1.2
      */
     @Override
-    public List<Object> getParameterValues() {
+    public List<Object> getParameterValues(BatchQueryRow row) {
         List<DbAttribute> attributes = query.getDbAttributes();
         int len = attributes.size();
         List<Object> values = new ArrayList<Object>(len);
         for (int i = 0; i < len; i++) {
             DbAttribute attribute = attributes.get(i);
             if (includeInBatch(attribute)) {
-                values.add(query.getValue(i));
+                values.add(row.getValue(i));
             }
         }
         return values;

Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/trans/UpdateBatchQueryBuilder.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/trans/UpdateBatchQueryBuilder.java?rev=1577596&r1=1577595&r2=1577596&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/trans/UpdateBatchQueryBuilder.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/trans/UpdateBatchQueryBuilder.java Fri Mar 14 16:10:54 2014
@@ -28,6 +28,7 @@ import java.util.List;
 import org.apache.cayenne.dba.DbAdapter;
 import org.apache.cayenne.dba.QuotingStrategy;
 import org.apache.cayenne.map.DbAttribute;
+import org.apache.cayenne.query.BatchQueryRow;
 import org.apache.cayenne.query.UpdateBatchQuery;
 
 /**
@@ -84,7 +85,7 @@ public class UpdateBatchQueryBuilder ext
      * Binds BatchQuery parameters to the PreparedStatement.
      */
     @Override
-    public void bindParameters(PreparedStatement statement) throws SQLException, Exception {
+    public void bindParameters(PreparedStatement statement, BatchQueryRow row) throws SQLException, Exception {
 
         UpdateBatchQuery updateBatch = (UpdateBatchQuery) query;
         List<DbAttribute> qualifierAttributes = updateBatch.getQualifierAttributes();
@@ -93,14 +94,14 @@ public class UpdateBatchQueryBuilder ext
         int len = updatedDbAttributes.size();
         int parameterIndex = 1;
         for (int i = 0; i < len; i++) {
-            Object value = query.getValue(i);
+            Object value = row.getValue(i);
 
             DbAttribute attribute = updatedDbAttributes.get(i);
             adapter.bindParameter(statement, value, parameterIndex++, attribute.getType(), attribute.getScale());
         }
 
         for (int i = 0; i < qualifierAttributes.size(); i++) {
-            Object value = query.getValue(len + i);
+            Object value = row.getValue(len + i);
             DbAttribute attribute = qualifierAttributes.get(i);
 
             // skip null attributes... they are translated as "IS NULL"

Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleLOBBatchAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleLOBBatchAction.java?rev=1577596&r1=1577595&r2=1577596&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleLOBBatchAction.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleLOBBatchAction.java Fri Mar 14 16:10:54 2014
@@ -38,6 +38,7 @@ import org.apache.cayenne.dba.DbAdapter;
 import org.apache.cayenne.log.JdbcEventLogger;
 import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.query.BatchQuery;
+import org.apache.cayenne.query.BatchQueryRow;
 import org.apache.cayenne.query.InsertBatchQuery;
 import org.apache.cayenne.query.SQLAction;
 import org.apache.cayenne.query.UpdateBatchQuery;
@@ -87,13 +88,12 @@ class OracleLOBBatchAction implements SQ
 
         boolean isLoggable = logger.isLoggable();
 
-        query.reset();
-        while (query.next()) {
+        for(BatchQueryRow row : query.getRows()) {
 
-            selectQuery.indexLOBAttributes();
+            selectQuery.indexLOBAttributes(row);
 
             int updated = 0;
-            String updateStr = queryBuilder.createSqlString();
+            String updateStr = queryBuilder.createSqlString(row);
 
             // 1. run row update
             logger.logQuery(updateStr, Collections.EMPTY_LIST);
@@ -101,11 +101,11 @@ class OracleLOBBatchAction implements SQ
             try {
 
                 if (isLoggable) {
-                    List bindings = queryBuilder.getValuesForLOBUpdateParameters();
+                    List bindings = queryBuilder.getValuesForLOBUpdateParameters(row);
                     logger.logQueryParameters("bind", null, bindings, query instanceof InsertBatchQuery);
                 }
 
-                queryBuilder.bindParameters(statement);
+                queryBuilder.bindParameters(statement, row);
                 updated = statement.executeUpdate();
                 logger.logUpdateCount(updated);
             } finally {
@@ -116,7 +116,7 @@ class OracleLOBBatchAction implements SQ
             }
 
             // 2. run row LOB update (SELECT...FOR UPDATE and writing out LOBs)
-            processLOBRow(connection, queryBuilder, selectQuery, qualifierAttributes);
+            processLOBRow(connection, queryBuilder, selectQuery, qualifierAttributes, row);
 
             // finally, notify delegate that the row was updated
             observer.nextCount(query, updated);
@@ -124,7 +124,7 @@ class OracleLOBBatchAction implements SQ
     }
 
     void processLOBRow(Connection con, OracleLOBBatchQueryBuilder queryBuilder, OracleLOBBatchQueryWrapper selectQuery,
-            List<DbAttribute> qualifierAttributes) throws SQLException, Exception {
+            List<DbAttribute> qualifierAttributes, BatchQueryRow row) throws SQLException, Exception {
 
         List<DbAttribute> lobAttributes = selectQuery.getDbAttributesForUpdatedLOBColumns();
         if (lobAttributes.size() == 0) {
@@ -133,7 +133,7 @@ class OracleLOBBatchAction implements SQ
 
         boolean isLoggable = logger.isLoggable();
 
-        List qualifierValues = selectQuery.getValuesForLOBSelectQualifier();
+        List qualifierValues = selectQuery.getValuesForLOBSelectQualifier(row);
         List lobValues = selectQuery.getValuesForUpdatedLOBColumns();
         int parametersSize = qualifierValues.size();
         int lobSize = lobAttributes.size();

Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleLOBBatchQueryBuilder.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleLOBBatchQueryBuilder.java?rev=1577596&r1=1577595&r2=1577596&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleLOBBatchQueryBuilder.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleLOBBatchQueryBuilder.java Fri Mar 14 16:10:54 2014
@@ -19,6 +19,7 @@
 
 package org.apache.cayenne.dba.oracle;
 
+import java.io.IOException;
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
 import java.sql.Types;
@@ -32,6 +33,7 @@ import org.apache.cayenne.dba.QuotingStr
 import org.apache.cayenne.dba.TypesMapping;
 import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.query.BatchQuery;
+import org.apache.cayenne.query.BatchQueryRow;
 
 /**
  * Superclass of query builders for the DML operations involving LOBs.
@@ -46,7 +48,14 @@ abstract class OracleLOBBatchQueryBuilde
         super(query, adapter);
     }
 
-    abstract List getValuesForLOBUpdateParameters();
+    abstract List getValuesForLOBUpdateParameters(BatchQueryRow row);
+    
+    abstract String createSqlString(BatchQueryRow row);
+    
+    @Override
+    public final String createSqlString() throws IOException {
+        throw new UnsupportedOperationException();
+    }
 
     String createLOBSelectString(List selectedLOBAttributes, List qualifierAttributes) {
 
@@ -104,9 +113,11 @@ abstract class OracleLOBBatchQueryBuilde
 
     /**
      * Binds BatchQuery parameters to the PreparedStatement.
+     * 
+     * @since 3.2
      */
     @Override
-    public void bindParameters(PreparedStatement statement) throws SQLException, Exception {
+    public void bindParameters(PreparedStatement statement, BatchQueryRow row) throws SQLException, Exception {
 
         List<DbAttribute> dbAttributes = query.getDbAttributes();
         int attributeCount = dbAttributes.size();
@@ -114,7 +125,7 @@ abstract class OracleLOBBatchQueryBuilde
         // i - attribute position in the query
         // j - PreparedStatement parameter position (starts with "1")
         for (int i = 0, j = 1; i < attributeCount; i++) {
-            Object value = query.getValue(i);
+            Object value = row.getValue(i);
             DbAttribute attribute = dbAttributes.get(i);
             int type = attribute.getType();
 

Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleLOBBatchQueryWrapper.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleLOBBatchQueryWrapper.java?rev=1577596&r1=1577595&r2=1577596&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleLOBBatchQueryWrapper.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleLOBBatchQueryWrapper.java Fri Mar 14 16:10:54 2014
@@ -30,6 +30,7 @@ import java.util.List;
 import org.apache.cayenne.CayenneRuntimeException;
 import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.query.BatchQuery;
+import org.apache.cayenne.query.BatchQueryRow;
 
 /**
  * Helper class to extract the information from BatchQueries, essential for LOB
@@ -75,14 +76,14 @@ class OracleLOBBatchQueryWrapper {
     /**
      * Indexes attributes
      */
-    void indexLOBAttributes() {
+    void indexLOBAttributes(BatchQueryRow row) {
         int len = updatedLOBAttributes.length;
         for (int i = 0; i < len; i++) {
             updatedLOBAttributes[i] = null;
 
             if (allLOBAttributes[i]) {
                 // skip null and empty LOBs
-                Object value = query.getValue(i);
+                Object value = row.getValue(i);
 
                 if (value == null) {
                     continue;
@@ -176,13 +177,13 @@ class OracleLOBBatchQueryWrapper {
         return attributes;
     }
 
-    List getValuesForLOBSelectQualifier() {
+    List getValuesForLOBSelectQualifier(BatchQueryRow row) {
 
         int len = this.qualifierAttributes.length;
         List values = new ArrayList(len);
         for (int i = 0; i < len; i++) {
             if (this.qualifierAttributes[i]) {
-                values.add(query.getValue(i));
+                values.add(row.getValue(i));
             }
         }
 

Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleLOBInsertBatchQueryBuilder.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleLOBInsertBatchQueryBuilder.java?rev=1577596&r1=1577595&r2=1577596&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleLOBInsertBatchQueryBuilder.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleLOBInsertBatchQueryBuilder.java Fri Mar 14 16:10:54 2014
@@ -26,6 +26,7 @@ import java.util.List;
 import org.apache.cayenne.dba.DbAdapter;
 import org.apache.cayenne.dba.QuotingStrategy;
 import org.apache.cayenne.map.DbAttribute;
+import org.apache.cayenne.query.BatchQueryRow;
 import org.apache.cayenne.query.InsertBatchQuery;
 
 class OracleLOBInsertBatchQueryBuilder extends OracleLOBBatchQueryBuilder {
@@ -35,13 +36,13 @@ class OracleLOBInsertBatchQueryBuilder e
     }
 
     @Override
-    List getValuesForLOBUpdateParameters() {
+    List getValuesForLOBUpdateParameters(BatchQueryRow row) {
         List<DbAttribute> dbAttributes = query.getDbAttributes();
         int len = dbAttributes.size();
 
         List values = new ArrayList(len);
         for (int i = 0; i < len; i++) {
-            Object value = query.getValue(i);
+            Object value = row.getValue(i);
             DbAttribute attribute = dbAttributes.get(i);
             if (isUpdateableColumn(value, attribute.getType())) {
                 values.add(value);
@@ -52,7 +53,7 @@ class OracleLOBInsertBatchQueryBuilder e
     }
 
     @Override
-    public String createSqlString() {
+    public String createSqlString(BatchQueryRow row) {
         List<DbAttribute> dbAttributes = query.getDbAttributes();
 
         QuotingStrategy strategy = getAdapter().getQuotingStrategy();
@@ -74,7 +75,7 @@ class OracleLOBInsertBatchQueryBuilder e
                 buffer.append(", ");
             }
 
-            appendUpdatedParameter(buffer, dbAttributes.get(i), query.getValue(i));
+            appendUpdatedParameter(buffer, dbAttributes.get(i), row.getValue(i));
         }
         buffer.append(')');
         return buffer.toString();

Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleLOBUpdateBatchQueryBuilder.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleLOBUpdateBatchQueryBuilder.java?rev=1577596&r1=1577595&r2=1577596&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleLOBUpdateBatchQueryBuilder.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleLOBUpdateBatchQueryBuilder.java Fri Mar 14 16:10:54 2014
@@ -26,6 +26,7 @@ import java.util.List;
 import org.apache.cayenne.dba.DbAdapter;
 import org.apache.cayenne.dba.QuotingStrategy;
 import org.apache.cayenne.map.DbAttribute;
+import org.apache.cayenne.query.BatchQueryRow;
 import org.apache.cayenne.query.UpdateBatchQuery;
 
 class OracleLOBUpdateBatchQueryBuilder extends OracleLOBBatchQueryBuilder {
@@ -35,7 +36,7 @@ class OracleLOBUpdateBatchQueryBuilder e
     }
 
     @Override
-    List getValuesForLOBUpdateParameters() {
+    List getValuesForLOBUpdateParameters(BatchQueryRow row) {
         int len = query.getDbAttributes().size();
         UpdateBatchQuery updateBatch = (UpdateBatchQuery) query;
 
@@ -47,21 +48,21 @@ class OracleLOBUpdateBatchQueryBuilder e
         int qualifierLen = qualifierAttributes.size();
         for (int i = 0; i < updatedLen; i++) {
             DbAttribute attribute = updatedDbAttributes.get(i);
-            Object value = query.getValue(i);
+            Object value = row.getValue(i);
             if (isUpdateableColumn(value, attribute.getType())) {
                 values.add(value);
             }
         }
 
         for (int i = 0; i < qualifierLen; i++) {
-            values.add(query.getValue(updatedLen + i));
+            values.add(row.getValue(updatedLen + i));
         }
 
         return values;
     }
 
     @Override
-    public String createSqlString() {
+    public String createSqlString(BatchQueryRow row) {
         UpdateBatchQuery updateBatch = (UpdateBatchQuery) query;
         List<DbAttribute> idDbAttributes = updateBatch.getQualifierAttributes();
         List<DbAttribute> updatedDbAttributes = updateBatch.getUpdatedAttributes();
@@ -81,7 +82,7 @@ class OracleLOBUpdateBatchQueryBuilder e
             DbAttribute attribute = updatedDbAttributes.get(i);
             buffer.append(strategy.quotedName(attribute));
             buffer.append(" = ");
-            appendUpdatedParameter(buffer, attribute, query.getValue(i));
+            appendUpdatedParameter(buffer, attribute, row.getValue(i));
         }
 
         buffer.append(" WHERE ");

Modified: cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/trans/BatchQueryBuilderTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/trans/BatchQueryBuilderTest.java?rev=1577596&r1=1577595&r2=1577596&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/trans/BatchQueryBuilderTest.java (original)
+++ cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/trans/BatchQueryBuilderTest.java Fri Mar 14 16:10:54 2014
@@ -33,6 +33,7 @@ import org.apache.cayenne.di.Inject;
 import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.query.BatchQuery;
+import org.apache.cayenne.query.BatchQueryRow;
 import org.apache.cayenne.unit.di.server.ServerCase;
 import org.apache.cayenne.unit.di.server.UseServerRuntime;
 
@@ -51,7 +52,7 @@ public class BatchQueryBuilderTest exten
             }
 
             @Override
-            public void bindParameters(PreparedStatement statement) throws SQLException, Exception {
+            public void bindParameters(PreparedStatement statement, BatchQueryRow row) throws SQLException, Exception {
             }
         };
 
@@ -69,7 +70,7 @@ public class BatchQueryBuilderTest exten
             }
 
             @Override
-            public void bindParameters(PreparedStatement statement) throws SQLException, Exception {
+            public void bindParameters(PreparedStatement statement, BatchQueryRow row) throws SQLException, Exception {
             }
         };
 
@@ -99,7 +100,7 @@ public class BatchQueryBuilderTest exten
             }
 
             @Override
-            public void bindParameters(PreparedStatement statement) throws SQLException, Exception {
+            public void bindParameters(PreparedStatement statement, BatchQueryRow row) throws SQLException, Exception {
             }
         };