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/17 11:59:01 UTC

svn commit: r1578297 - in /cayenne/main/trunk/cayenne-server/src: main/java/org/apache/cayenne/access/ main/java/org/apache/cayenne/access/jdbc/ main/java/org/apache/cayenne/access/translator/batch/ main/java/org/apache/cayenne/dba/oracle/ test/java/or...

Author: aadamchik
Date: Mon Mar 17 10:59:00 2014
New Revision: 1578297

URL: http://svn.apache.org/r1578297
Log:
CAY-1912 BatchQueryBuilder refactoring

making BatchTranslator an interface
making trim function part of the interface

Added:
    cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/DefaultBatchTranslator.java
      - copied, changed from r1578296, cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/BatchTranslator.java
    cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/DefaultBatchTranslatorTest.java
      - copied, changed from r1578296, cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/BatchTranslatorTest.java
Removed:
    cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/BatchTranslatorTest.java
Modified:
    cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/DataNode.java
    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/translator/batch/BatchTranslator.java
    cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/BatchTranslatorFactory.java
    cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/DefaultBatchTranslatorFactory.java
    cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/DeleteBatchTranslator.java
    cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/InsertBatchTranslator.java
    cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/SoftDeleteBatchTranslator.java
    cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/SoftDeleteTranslatorFactory.java
    cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/UpdateBatchTranslator.java
    cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBBatchAction.java
    cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBBatchTranslator.java
    cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBInsertBatchTranslator.java
    cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBUpdateBatchTranslator.java
    cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleBatchAction.java
    cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/jdbc/BatchActionLockingTest.java
    cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/DeleteBatchTranslatorTest.java
    cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/SoftDeleteBatchTranslatorTest.java
    cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/UpdateBatchTranslatorTest.java

Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/DataNode.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/DataNode.java?rev=1578297&r1=1578296&r2=1578297&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/DataNode.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/DataNode.java Mon Mar 17 10:59:00 2014
@@ -38,6 +38,7 @@ import org.apache.cayenne.access.jdbc.Co
 import org.apache.cayenne.access.jdbc.RowDescriptor;
 import org.apache.cayenne.access.jdbc.reader.RowReader;
 import org.apache.cayenne.access.jdbc.reader.RowReaderFactory;
+import org.apache.cayenne.access.translator.batch.BatchTranslator;
 import org.apache.cayenne.access.translator.batch.BatchTranslatorFactory;
 import org.apache.cayenne.dba.DbAdapter;
 import org.apache.cayenne.log.JdbcEventLogger;
@@ -45,6 +46,7 @@ import org.apache.cayenne.log.NoopJdbcEv
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.EntityResolver;
 import org.apache.cayenne.map.ObjAttribute;
+import org.apache.cayenne.query.BatchQuery;
 import org.apache.cayenne.query.Query;
 import org.apache.cayenne.query.QueryMetadata;
 import org.apache.cayenne.util.ToStringBuilder;
@@ -460,6 +462,13 @@ public class DataNode implements QueryEn
             Map<ObjAttribute, ColumnDescriptor> attributeOverrides) {
         return rowReaderFactory.rowReader(descriptor, queryMetadata, getAdapter(), attributeOverrides);
     }
+    
+    /**
+     * @since 3.2
+     */
+    public BatchTranslator batchTranslator(BatchQuery query, String trimFunction) {
+        return batchTranslatorFactory.translator(query, getAdapter(), trimFunction);
+    }
 
     /**
      * @since 3.2

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=1578297&r1=1578296&r2=1578297&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 Mon Mar 17 10:59:00 2014
@@ -36,7 +36,6 @@ import org.apache.cayenne.access.Optimis
 import org.apache.cayenne.access.jdbc.reader.RowReader;
 import org.apache.cayenne.access.translator.batch.BatchParameterBinding;
 import org.apache.cayenne.access.translator.batch.BatchTranslator;
-import org.apache.cayenne.access.translator.batch.BatchTranslatorFactory;
 import org.apache.cayenne.dba.DbAdapter;
 import org.apache.cayenne.dba.TypesMapping;
 import org.apache.cayenne.log.JdbcEventLogger;
@@ -95,13 +94,7 @@ public class BatchAction extends BaseSQL
     }
 
     protected BatchTranslator createTranslator() throws CayenneException {
-        BatchTranslatorFactory factory = dataNode.getBatchTranslatorFactory();
-
-        if (factory == null) {
-            throw new IllegalStateException("Adapter BatchQueryBuilderFactory is null");
-        }
-
-        return factory.translator(query, dataNode.getAdapter());
+        return dataNode.batchTranslator(query, null);
     }
 
     protected void runAsBatch(Connection con, BatchTranslator translator, OperationObserver delegate)

Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/BatchTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/BatchTranslator.java?rev=1578297&r1=1578296&r2=1578297&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/BatchTranslator.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/BatchTranslator.java Mon Mar 17 10:59:00 2014
@@ -20,71 +20,27 @@
 package org.apache.cayenne.access.translator.batch;
 
 import java.io.IOException;
-import java.sql.Types;
 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.BatchQuery;
 import org.apache.cayenne.query.BatchQueryRow;
 
 /**
  * Superclass of batch query translators.
+ * 
+ * @since 3.2
  */
-public abstract class BatchTranslator {
-
-    protected BatchQuery query;
-    protected DbAdapter adapter;
-    protected String trimFunction;
-
-    public BatchTranslator(BatchQuery query, DbAdapter adapter) {
-        this.query = query;
-        this.adapter = adapter;
-    }
+public interface BatchTranslator {
 
     /**
      * Translates BatchQuery into an SQL string formatted to use in a
      * PreparedStatement.
-     * 
-     * @since 3.2
-     * @throws IOException
      */
-    public abstract String createSqlString() throws IOException;
-
-    /**
-     * Appends the name of the column to the query buffer. Subclasses use this
-     * method to append column names in the WHERE clause, i.e. for the columns
-     * that are not being updated.
-     */
-    protected void appendDbAttribute(StringBuilder buf, DbAttribute dbAttribute) {
-
-        // TODO: (Andrus) is there a need for trimming binary types?
-        boolean trim = dbAttribute.getType() == Types.CHAR && trimFunction != null;
-        if (trim) {
-            buf.append(trimFunction).append('(');
-        }
-
-        QuotingStrategy strategy = adapter.getQuotingStrategy();
-
-        buf.append(strategy.quotedName(dbAttribute));
-
-        if (trim) {
-            buf.append(')');
-        }
-    }
-
-    public String getTrimFunction() {
-        return trimFunction;
-    }
-
-    public void setTrimFunction(String string) {
-        trimFunction = string;
-    }
+    String createSqlString() throws IOException;
 
     /**
      * Returns PreparedStatement bindings for a given row.
      */
-    public abstract List<BatchParameterBinding> createBindings(BatchQueryRow row);
+    List<BatchParameterBinding> createBindings(BatchQueryRow row);
 
+    String getTrimFunction();
 }

Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/BatchTranslatorFactory.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/BatchTranslatorFactory.java?rev=1578297&r1=1578296&r2=1578297&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/BatchTranslatorFactory.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/BatchTranslatorFactory.java Mon Mar 17 10:59:00 2014
@@ -32,5 +32,5 @@ public interface BatchTranslatorFactory 
     /**
      * Creates a proper translator for a BatchQuery
      */
-    BatchTranslator translator(BatchQuery query, DbAdapter adapter);
+    BatchTranslator translator(BatchQuery query, DbAdapter adapter, String trimFunction);
 }

Copied: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/DefaultBatchTranslator.java (from r1578296, cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/BatchTranslator.java)
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/DefaultBatchTranslator.java?p2=cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/DefaultBatchTranslator.java&p1=cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/BatchTranslator.java&r1=1578296&r2=1578297&rev=1578297&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/BatchTranslator.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/DefaultBatchTranslator.java Mon Mar 17 10:59:00 2014
@@ -16,7 +16,6 @@
  *  specific language governing permissions and limitations
  *  under the License.
  ****************************************************************/
-
 package org.apache.cayenne.access.translator.batch;
 
 import java.io.IOException;
@@ -31,28 +30,40 @@ import org.apache.cayenne.query.BatchQue
 
 /**
  * Superclass of batch query translators.
+ * 
+ * @since 3.2
  */
-public abstract class BatchTranslator {
+public abstract class DefaultBatchTranslator implements BatchTranslator {
 
     protected BatchQuery query;
     protected DbAdapter adapter;
     protected String trimFunction;
 
-    public BatchTranslator(BatchQuery query, DbAdapter adapter) {
+    public DefaultBatchTranslator(BatchQuery query, DbAdapter adapter, String trimFunction) {
         this.query = query;
         this.adapter = adapter;
+        this.trimFunction = trimFunction;
+    }
+
+    @Override
+    public String getTrimFunction() {
+        return trimFunction;
     }
 
     /**
      * Translates BatchQuery into an SQL string formatted to use in a
      * PreparedStatement.
-     * 
-     * @since 3.2
-     * @throws IOException
      */
+    @Override
     public abstract String createSqlString() throws IOException;
 
     /**
+     * Returns PreparedStatement bindings for a given row.
+     */
+    @Override
+    public abstract List<BatchParameterBinding> createBindings(BatchQueryRow row);
+
+    /**
      * Appends the name of the column to the query buffer. Subclasses use this
      * method to append column names in the WHERE clause, i.e. for the columns
      * that are not being updated.
@@ -74,17 +85,4 @@ public abstract class BatchTranslator {
         }
     }
 
-    public String getTrimFunction() {
-        return trimFunction;
-    }
-
-    public void setTrimFunction(String string) {
-        trimFunction = string;
-    }
-
-    /**
-     * Returns PreparedStatement bindings for a given row.
-     */
-    public abstract List<BatchParameterBinding> createBindings(BatchQueryRow row);
-
 }

Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/DefaultBatchTranslatorFactory.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/DefaultBatchTranslatorFactory.java?rev=1578297&r1=1578296&r2=1578297&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/DefaultBatchTranslatorFactory.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/DefaultBatchTranslatorFactory.java Mon Mar 17 10:59:00 2014
@@ -33,28 +33,28 @@ import org.apache.cayenne.query.UpdateBa
 public class DefaultBatchTranslatorFactory implements BatchTranslatorFactory {
 
     @Override
-    public BatchTranslator translator(BatchQuery query, DbAdapter adapter) {
+    public BatchTranslator translator(BatchQuery query, DbAdapter adapter, String trimFunction) {
         if (query instanceof InsertBatchQuery) {
             return insertTranslator((InsertBatchQuery) query, adapter);
         } else if (query instanceof UpdateBatchQuery) {
-            return updateTranslator((UpdateBatchQuery) query, adapter);
+            return updateTranslator((UpdateBatchQuery) query, adapter, trimFunction);
         } else if (query instanceof DeleteBatchQuery) {
-            return deleteTranslator((DeleteBatchQuery) query, adapter);
+            return deleteTranslator((DeleteBatchQuery) query, adapter, trimFunction);
         } else {
             throw new CayenneRuntimeException("Unsupported batch query: " + query);
         }
     }
 
-    protected BatchTranslator deleteTranslator(DeleteBatchQuery query, DbAdapter adapter) {
-        return new DeleteBatchTranslator(query, adapter);
+    protected BatchTranslator deleteTranslator(DeleteBatchQuery query, DbAdapter adapter, String trimFunction) {
+        return new DeleteBatchTranslator(query, adapter, trimFunction);
     }
 
     protected BatchTranslator insertTranslator(InsertBatchQuery query, DbAdapter adapter) {
         return new InsertBatchTranslator(query, adapter);
     }
 
-    protected BatchTranslator updateTranslator(UpdateBatchQuery query, DbAdapter adapter) {
-        return new UpdateBatchTranslator(query, adapter);
+    protected BatchTranslator updateTranslator(UpdateBatchQuery query, DbAdapter adapter, String trimFunction) {
+        return new UpdateBatchTranslator(query, adapter, trimFunction);
     }
 
 }

Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/DeleteBatchTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/DeleteBatchTranslator.java?rev=1578297&r1=1578296&r2=1578297&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/DeleteBatchTranslator.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/DeleteBatchTranslator.java Mon Mar 17 10:59:00 2014
@@ -34,10 +34,10 @@ import org.apache.cayenne.query.DeleteBa
  * Translator for delete BatchQueries. Creates parameterized DELETE SQL
  * statements.
  */
-public class DeleteBatchTranslator extends BatchTranslator {
+public class DeleteBatchTranslator extends DefaultBatchTranslator {
 
-    public DeleteBatchTranslator(DeleteBatchQuery query, DbAdapter adapter) {
-        super(query, adapter);
+    public DeleteBatchTranslator(DeleteBatchQuery query, DbAdapter adapter, String trimFunction) {
+        super(query, adapter, trimFunction);
     }
 
     @Override

Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/InsertBatchTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/InsertBatchTranslator.java?rev=1578297&r1=1578296&r2=1578297&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/InsertBatchTranslator.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/InsertBatchTranslator.java Mon Mar 17 10:59:00 2014
@@ -32,10 +32,12 @@ import org.apache.cayenne.query.InsertBa
 /**
  * Translator of InsertBatchQueries.
  */
-public class InsertBatchTranslator extends BatchTranslator {
+public class InsertBatchTranslator extends DefaultBatchTranslator {
 
     public InsertBatchTranslator(InsertBatchQuery query, DbAdapter adapter) {
-        super(query, adapter);
+        // no trimming is needed here, so passing hardcoded NULL for trim
+        // function
+        super(query, adapter, null);
     }
 
     /**

Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/SoftDeleteBatchTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/SoftDeleteBatchTranslator.java?rev=1578297&r1=1578296&r2=1578297&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/SoftDeleteBatchTranslator.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/SoftDeleteBatchTranslator.java Mon Mar 17 10:59:00 2014
@@ -19,7 +19,6 @@
 package org.apache.cayenne.access.translator.batch;
 
 import java.io.IOException;
-import java.sql.Types;
 import java.util.List;
 
 import org.apache.cayenne.dba.DbAdapter;
@@ -36,16 +35,14 @@ public class SoftDeleteBatchTranslator e
 
     private String deletedFieldName;
 
-    public SoftDeleteBatchTranslator(DeleteBatchQuery query, DbAdapter adapter, String deletedFieldName) {
-        super(query, adapter);
+    public SoftDeleteBatchTranslator(DeleteBatchQuery query, DbAdapter adapter, String trimFunction,
+            String deletedFieldName) {
+        super(query, adapter, trimFunction);
         this.deletedFieldName = deletedFieldName;
     }
 
     @Override
     public String createSqlString() throws IOException {
-        if (!needSoftDelete()) {
-            return super.createSqlString();
-        }
 
         QuotingStrategy strategy = adapter.getQuotingStrategy();
 
@@ -63,19 +60,10 @@ public class SoftDeleteBatchTranslator e
 
         List<BatchParameterBinding> bindings = super.createBindings(row);
 
-        if (needSoftDelete()) {
-            DbAttribute deleteAttribute = query.getDbEntity().getAttribute(deletedFieldName);
-            bindings.add(0, new BatchParameterBinding(deleteAttribute, true));
-        }
+        DbAttribute deleteAttribute = query.getDbEntity().getAttribute(deletedFieldName);
+        bindings.add(0, new BatchParameterBinding(deleteAttribute, true));
 
         return bindings;
     }
 
-    /**
-     * @return whether 'soft' deletion should be used
-     */
-    protected boolean needSoftDelete() {
-        DbAttribute attr = query.getDbEntity().getAttribute(deletedFieldName);
-        return attr != null && attr.getType() == Types.BOOLEAN;
-    }
 }

Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/SoftDeleteTranslatorFactory.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/SoftDeleteTranslatorFactory.java?rev=1578297&r1=1578296&r2=1578297&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/SoftDeleteTranslatorFactory.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/SoftDeleteTranslatorFactory.java Mon Mar 17 10:59:00 2014
@@ -18,7 +18,10 @@
  ****************************************************************/
 package org.apache.cayenne.access.translator.batch;
 
+import java.sql.Types;
+
 import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.query.DeleteBatchQuery;
 
 /**
@@ -32,25 +35,30 @@ public class SoftDeleteTranslatorFactory
      * Default name of 'deleted' field
      */
     public static final String DEFAULT_DELETED_FIELD_NAME = "DELETED";
-    
+
     /**
      * Name of 'deleted' field
      */
     private String deletedFieldName;
-    
+
     public SoftDeleteTranslatorFactory() {
         this(DEFAULT_DELETED_FIELD_NAME);
     }
-    
+
     public SoftDeleteTranslatorFactory(String deletedFieldName) {
         this.deletedFieldName = deletedFieldName;
     }
-    
+
     @Override
-    protected BatchTranslator deleteTranslator(DeleteBatchQuery query, DbAdapter adapter) {
-        return new SoftDeleteBatchTranslator(query, adapter, deletedFieldName);
+    protected BatchTranslator deleteTranslator(DeleteBatchQuery query, DbAdapter adapter, String trimFunction) {
+
+        DbAttribute attr = query.getDbEntity().getAttribute(deletedFieldName);
+        boolean needsSoftDelete = attr != null && attr.getType() == Types.BOOLEAN;
+
+        return needsSoftDelete ? new SoftDeleteBatchTranslator(query, adapter, trimFunction, deletedFieldName) : super
+                .deleteTranslator(query, adapter, trimFunction);
     }
-    
+
     /**
      * @return name of 'deleted' field
      */

Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/UpdateBatchTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/UpdateBatchTranslator.java?rev=1578297&r1=1578296&r2=1578297&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/UpdateBatchTranslator.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/UpdateBatchTranslator.java Mon Mar 17 10:59:00 2014
@@ -33,11 +33,10 @@ import org.apache.cayenne.query.UpdateBa
 /**
  * A translator for UpdateBatchQueries that produces parameterized SQL.
  */
+public class UpdateBatchTranslator extends DefaultBatchTranslator {
 
-public class UpdateBatchTranslator extends BatchTranslator {
-
-    public UpdateBatchTranslator(UpdateBatchQuery query, DbAdapter adapter) {
-        super(query, adapter);
+    public UpdateBatchTranslator(UpdateBatchQuery query, DbAdapter adapter, String trimFunction) {
+        super(query, adapter, trimFunction);
     }
 
     @Override

Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBBatchAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBBatchAction.java?rev=1578297&r1=1578296&r2=1578297&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBBatchAction.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBBatchAction.java Mon Mar 17 10:59:00 2014
@@ -76,14 +76,13 @@ class Oracle8LOBBatchAction implements S
 
         Oracle8LOBBatchTranslator translator;
         if (query instanceof InsertBatchQuery) {
-            translator = new Oracle8LOBInsertBatchTranslator((InsertBatchQuery) query, adapter);
+            translator = new Oracle8LOBInsertBatchTranslator((InsertBatchQuery) query, adapter, OracleAdapter.TRIM_FUNCTION);
         } else if (query instanceof UpdateBatchQuery) {
-            translator = new Oracle8LOBUpdateBatchTranslator((UpdateBatchQuery) query, adapter);
+            translator = new Oracle8LOBUpdateBatchTranslator((UpdateBatchQuery) query, adapter, OracleAdapter.TRIM_FUNCTION);
         } else {
             throw new CayenneException("Unsupported batch type for special LOB processing: " + query);
         }
 
-        translator.setTrimFunction(OracleAdapter.TRIM_FUNCTION);
         translator.setNewBlobFunction(OracleAdapter.NEW_BLOB_FUNCTION);
         translator.setNewClobFunction(OracleAdapter.NEW_CLOB_FUNCTION);
 

Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBBatchTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBBatchTranslator.java?rev=1578297&r1=1578296&r2=1578297&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBBatchTranslator.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBBatchTranslator.java Mon Mar 17 10:59:00 2014
@@ -27,7 +27,7 @@ import java.util.List;
 
 import org.apache.cayenne.CayenneRuntimeException;
 import org.apache.cayenne.access.translator.batch.BatchParameterBinding;
-import org.apache.cayenne.access.translator.batch.BatchTranslator;
+import org.apache.cayenne.access.translator.batch.DefaultBatchTranslator;
 import org.apache.cayenne.dba.DbAdapter;
 import org.apache.cayenne.dba.QuotingStrategy;
 import org.apache.cayenne.dba.TypesMapping;
@@ -39,13 +39,13 @@ import org.apache.cayenne.query.BatchQue
  * Superclass of query builders for the DML operations involving LOBs.
  * 
  */
-abstract class Oracle8LOBBatchTranslator extends BatchTranslator {
+abstract class Oracle8LOBBatchTranslator extends DefaultBatchTranslator {
 
     protected String newClobFunction;
     protected String newBlobFunction;
 
-    Oracle8LOBBatchTranslator(BatchQuery query, DbAdapter adapter) {
-        super(query, adapter);
+    Oracle8LOBBatchTranslator(BatchQuery query, DbAdapter adapter, String trimFunction) {
+        super(query, adapter, trimFunction);
     }
 
     abstract List<Object> getValuesForLOBUpdateParameters(BatchQueryRow row);

Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBInsertBatchTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBInsertBatchTranslator.java?rev=1578297&r1=1578296&r2=1578297&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBInsertBatchTranslator.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBInsertBatchTranslator.java Mon Mar 17 10:59:00 2014
@@ -31,8 +31,8 @@ import org.apache.cayenne.query.InsertBa
 
 class Oracle8LOBInsertBatchTranslator extends Oracle8LOBBatchTranslator {
 
-    Oracle8LOBInsertBatchTranslator(InsertBatchQuery query, DbAdapter adapter) {
-        super(query, adapter);
+    Oracle8LOBInsertBatchTranslator(InsertBatchQuery query, DbAdapter adapter, String trimFunction) {
+        super(query, adapter, trimFunction);
     }
 
     @Override

Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBUpdateBatchTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBUpdateBatchTranslator.java?rev=1578297&r1=1578296&r2=1578297&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBUpdateBatchTranslator.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBUpdateBatchTranslator.java Mon Mar 17 10:59:00 2014
@@ -31,8 +31,8 @@ import org.apache.cayenne.query.UpdateBa
 
 class Oracle8LOBUpdateBatchTranslator extends Oracle8LOBBatchTranslator {
 
-    Oracle8LOBUpdateBatchTranslator(UpdateBatchQuery query, DbAdapter adapter) {
-        super(query, adapter);
+    Oracle8LOBUpdateBatchTranslator(UpdateBatchQuery query, DbAdapter adapter, String trimFunction) {
+        super(query, adapter, trimFunction);
     }
 
     @Override

Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleBatchAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleBatchAction.java?rev=1578297&r1=1578296&r2=1578297&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleBatchAction.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleBatchAction.java Mon Mar 17 10:59:00 2014
@@ -39,9 +39,6 @@ class OracleBatchAction extends BatchAct
 
     @Override
     protected BatchTranslator createTranslator() throws CayenneException {
-        // intercept super call to configure the builder...
-        BatchTranslator builder = super.createTranslator();
-        builder.setTrimFunction(OracleAdapter.TRIM_FUNCTION);
-        return builder;
+        return dataNode.batchTranslator(query, OracleAdapter.TRIM_FUNCTION);
     }
 }

Modified: cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/jdbc/BatchActionLockingTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/jdbc/BatchActionLockingTest.java?rev=1578297&r1=1578296&r2=1578297&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/jdbc/BatchActionLockingTest.java (original)
+++ cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/jdbc/BatchActionLockingTest.java Mon Mar 17 10:59:00 2014
@@ -81,7 +81,7 @@ public class BatchActionLockingTest exte
         batchQuery.setUsingOptimisticLocking(true);
         batchQuery.add(qualifierSnapshot);
 
-        DeleteBatchTranslator batchQueryBuilder = new DeleteBatchTranslator(batchQuery, adapter);
+        DeleteBatchTranslator batchQueryBuilder = new DeleteBatchTranslator(batchQuery, adapter, null);
 
         MockConnection mockConnection = new MockConnection();
         PreparedStatementResultSetHandler preparedStatementResultSetHandler = mockConnection
@@ -122,7 +122,7 @@ public class BatchActionLockingTest exte
         batchQuery.setUsingOptimisticLocking(true);
         batchQuery.add(qualifierSnapshot);
 
-        DeleteBatchTranslator batchQueryBuilder = new DeleteBatchTranslator(batchQuery, adapter);
+        DeleteBatchTranslator batchQueryBuilder = new DeleteBatchTranslator(batchQuery, adapter, null);
 
         MockConnection mockConnection = new MockConnection();
         PreparedStatementResultSetHandler preparedStatementResultSetHandler = mockConnection

Copied: cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/DefaultBatchTranslatorTest.java (from r1578296, cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/BatchTranslatorTest.java)
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/DefaultBatchTranslatorTest.java?p2=cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/DefaultBatchTranslatorTest.java&p1=cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/BatchTranslatorTest.java&r1=1578296&r2=1578297&rev=1578297&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/BatchTranslatorTest.java (original)
+++ cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/DefaultBatchTranslatorTest.java Mon Mar 17 10:59:00 2014
@@ -21,13 +21,10 @@ package org.apache.cayenne.access.transl
 
 import static org.mockito.Mockito.mock;
 
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
 import java.sql.Types;
 import java.util.Collections;
 import java.util.List;
 
-import org.apache.cayenne.access.translator.batch.BatchTranslator;
 import org.apache.cayenne.dba.DbAdapter;
 import org.apache.cayenne.dba.JdbcAdapter;
 import org.apache.cayenne.di.AdhocObjectFactory;
@@ -40,14 +37,14 @@ import org.apache.cayenne.unit.di.server
 import org.apache.cayenne.unit.di.server.UseServerRuntime;
 
 @UseServerRuntime(ServerCase.TESTMAP_PROJECT)
-public class BatchTranslatorTest extends ServerCase {
+public class DefaultBatchTranslatorTest extends ServerCase {
 
     @Inject
     private AdhocObjectFactory objectFactory;
 
     public void testConstructor() throws Exception {
         DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName());
-        BatchTranslator builder = new BatchTranslator(mock(BatchQuery.class), adapter) {
+        DefaultBatchTranslator builder = new DefaultBatchTranslator(mock(BatchQuery.class), adapter, null) {
             @Override
             public String createSqlString() {
                 return null;
@@ -66,7 +63,7 @@ public class BatchTranslatorTest extends
         DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName());
         String trimFunction = "testTrim";
 
-        BatchTranslator builder = new BatchTranslator(mock(BatchQuery.class), adapter) {
+        DefaultBatchTranslator builder = new DefaultBatchTranslator(mock(BatchQuery.class), adapter, trimFunction) {
             @Override
             public String createSqlString() {
                 return null;
@@ -78,8 +75,6 @@ public class BatchTranslatorTest extends
             }
         };
 
-        builder.setTrimFunction(trimFunction);
-
         StringBuilder buf = new StringBuilder();
         DbEntity entity = new DbEntity("Test");
         DbAttribute attr = new DbAttribute("testAttr", Types.CHAR, null);
@@ -97,7 +92,7 @@ public class BatchTranslatorTest extends
     public void testAppendDbAttribute2() throws Exception {
         DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName());
 
-        BatchTranslator builder = new BatchTranslator(mock(BatchQuery.class), adapter) {
+        DefaultBatchTranslator builder = new DefaultBatchTranslator(mock(BatchQuery.class), adapter, null) {
             @Override
             public String createSqlString() {
                 return null;

Modified: cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/DeleteBatchTranslatorTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/DeleteBatchTranslatorTest.java?rev=1578297&r1=1578296&r2=1578297&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/DeleteBatchTranslatorTest.java (original)
+++ cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/DeleteBatchTranslatorTest.java Mon Mar 17 10:59:00 2014
@@ -58,7 +58,7 @@ public class DeleteBatchTranslatorTest e
     public void testConstructor() throws Exception {
         DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName());
 
-        DeleteBatchTranslator builder = new DeleteBatchTranslator(mock(DeleteBatchQuery.class), adapter);
+        DeleteBatchTranslator builder = new DeleteBatchTranslator(mock(DeleteBatchQuery.class), adapter, null);
 
         assertSame(adapter, builder.adapter);
     }
@@ -72,7 +72,7 @@ public class DeleteBatchTranslatorTest e
         DeleteBatchQuery deleteQuery = new DeleteBatchQuery(entity, idAttributes, Collections.<String> emptySet(), 1);
 
         DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName());
-        DeleteBatchTranslator builder = new DeleteBatchTranslator(deleteQuery, adapter);
+        DeleteBatchTranslator builder = new DeleteBatchTranslator(deleteQuery, adapter, null);
         String generatedSql = builder.createSqlString();
         assertNotNull(generatedSql);
         assertEquals("DELETE FROM " + entity.getName() + " WHERE LOCKING_TEST_ID = ?", generatedSql);
@@ -90,7 +90,7 @@ public class DeleteBatchTranslatorTest e
         DeleteBatchQuery deleteQuery = new DeleteBatchQuery(entity, idAttributes, nullAttributes, 1);
 
         DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName());
-        DeleteBatchTranslator builder = new DeleteBatchTranslator(deleteQuery, adapter);
+        DeleteBatchTranslator builder = new DeleteBatchTranslator(deleteQuery, adapter, null);
         String generatedSql = builder.createSqlString();
         assertNotNull(generatedSql);
         assertEquals("DELETE FROM " + entity.getName() + " WHERE LOCKING_TEST_ID = ? AND NAME IS NULL", generatedSql);
@@ -106,7 +106,7 @@ public class DeleteBatchTranslatorTest e
 
             DeleteBatchQuery deleteQuery = new DeleteBatchQuery(entity, idAttributes, Collections.<String> emptySet(), 1);
             JdbcAdapter adapter = (JdbcAdapter) this.adapter;
-            DeleteBatchTranslator builder = new DeleteBatchTranslator(deleteQuery, adapter);
+            DeleteBatchTranslator builder = new DeleteBatchTranslator(deleteQuery, adapter, null);
             String generatedSql = builder.createSqlString();
 
             String charStart = unitAdapter.getIdentifiersStartQuote();
@@ -137,7 +137,7 @@ public class DeleteBatchTranslatorTest e
 
             JdbcAdapter adapter = (JdbcAdapter) this.adapter;
 
-            DeleteBatchTranslator builder = new DeleteBatchTranslator(deleteQuery, adapter);
+            DeleteBatchTranslator builder = new DeleteBatchTranslator(deleteQuery, adapter, null);
             String generatedSql = builder.createSqlString();
 
             String charStart = unitAdapter.getIdentifiersStartQuote();

Modified: cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/SoftDeleteBatchTranslatorTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/SoftDeleteBatchTranslatorTest.java?rev=1578297&r1=1578296&r2=1578297&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/SoftDeleteBatchTranslatorTest.java (original)
+++ cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/SoftDeleteBatchTranslatorTest.java Mon Mar 17 10:59:00 2014
@@ -63,13 +63,13 @@ public class SoftDeleteBatchTranslatorTe
     @Inject
     private AdhocObjectFactory objectFactory;
 
-    private DeleteBatchTranslator createBuilder(DeleteBatchQuery query) {
+    private DeleteBatchTranslator createTranslator(DeleteBatchQuery query) {
         JdbcAdapter adapter = objectFactory.newInstance(JdbcAdapter.class, JdbcAdapter.class.getName());
-        return createBuilder(query, adapter);
+        return createTranslator(query, adapter);
     }
 
-    private DeleteBatchTranslator createBuilder(DeleteBatchQuery query, JdbcAdapter adapter) {
-        return (DeleteBatchTranslator) new SoftDeleteTranslatorFactory().deleteTranslator(query, adapter);
+    private DeleteBatchTranslator createTranslator(DeleteBatchQuery query, JdbcAdapter adapter) {
+        return (DeleteBatchTranslator) new SoftDeleteTranslatorFactory().translator(query, adapter, null);
     }
 
     public void testCreateSqlString() throws Exception {
@@ -78,7 +78,7 @@ public class SoftDeleteBatchTranslatorTe
         List<DbAttribute> idAttributes = Collections.singletonList(entity.getAttribute("SOFT_TEST_ID"));
 
         DeleteBatchQuery deleteQuery = new DeleteBatchQuery(entity, idAttributes, Collections.<String> emptySet(), 1);
-        DeleteBatchTranslator builder = createBuilder(deleteQuery);
+        DeleteBatchTranslator builder = createTranslator(deleteQuery);
         String generatedSql = builder.createSqlString();
         assertNotNull(generatedSql);
         assertEquals("UPDATE " + entity.getName() + " SET DELETED = ? WHERE SOFT_TEST_ID = ?", generatedSql);
@@ -93,7 +93,7 @@ public class SoftDeleteBatchTranslatorTe
         Collection<String> nullAttributes = Collections.singleton("NAME");
 
         DeleteBatchQuery deleteQuery = new DeleteBatchQuery(entity, idAttributes, nullAttributes, 1);
-        DeleteBatchTranslator builder = createBuilder(deleteQuery);
+        DeleteBatchTranslator builder = createTranslator(deleteQuery);
         String generatedSql = builder.createSqlString();
         assertNotNull(generatedSql);
         assertEquals("UPDATE " + entity.getName() + " SET DELETED = ? WHERE SOFT_TEST_ID = ? AND NAME IS NULL",
@@ -110,7 +110,7 @@ public class SoftDeleteBatchTranslatorTe
 
             DeleteBatchQuery deleteQuery = new DeleteBatchQuery(entity, idAttributes, Collections.<String> emptySet(), 1);
             JdbcAdapter adapter = (JdbcAdapter) this.adapter;
-            DeleteBatchTranslator builder = createBuilder(deleteQuery, adapter);
+            DeleteBatchTranslator builder = createTranslator(deleteQuery, adapter);
             String generatedSql = builder.createSqlString();
 
             String charStart = unitAdapter.getIdentifiersStartQuote();

Modified: cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/UpdateBatchTranslatorTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/UpdateBatchTranslatorTest.java?rev=1578297&r1=1578296&r2=1578297&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/UpdateBatchTranslatorTest.java (original)
+++ cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/UpdateBatchTranslatorTest.java Mon Mar 17 10:59:00 2014
@@ -56,7 +56,7 @@ public class UpdateBatchTranslatorTest e
 
     public void testConstructor() throws Exception {
         DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName());
-        UpdateBatchTranslator builder = new UpdateBatchTranslator(mock(UpdateBatchQuery.class), adapter);
+        UpdateBatchTranslator builder = new UpdateBatchTranslator(mock(UpdateBatchQuery.class), adapter, null);
         assertSame(adapter, builder.adapter);
     }
 
@@ -71,7 +71,7 @@ public class UpdateBatchTranslatorTest e
                 Collections.<String> emptySet(), 1);
 
         DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName());
-        UpdateBatchTranslator builder = new UpdateBatchTranslator(updateQuery, adapter);
+        UpdateBatchTranslator builder = new UpdateBatchTranslator(updateQuery, adapter, null);
         String generatedSql = builder.createSqlString();
         assertNotNull(generatedSql);
         assertEquals("UPDATE " + entity.getName() + " SET DESCRIPTION = ? WHERE LOCKING_TEST_ID = ?", generatedSql);
@@ -90,7 +90,7 @@ public class UpdateBatchTranslatorTest e
         UpdateBatchQuery updateQuery = new UpdateBatchQuery(entity, idAttributes, updatedAttributes, nullAttributes, 1);
 
         DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName());
-        UpdateBatchTranslator builder = new UpdateBatchTranslator(updateQuery, adapter);
+        UpdateBatchTranslator builder = new UpdateBatchTranslator(updateQuery, adapter, null);
         String generatedSql = builder.createSqlString();
         assertNotNull(generatedSql);
 
@@ -111,7 +111,7 @@ public class UpdateBatchTranslatorTest e
                     Collections.<String> emptySet(), 1);
             JdbcAdapter adapter = (JdbcAdapter) this.adapter;
 
-            UpdateBatchTranslator builder = new UpdateBatchTranslator(updateQuery, adapter);
+            UpdateBatchTranslator builder = new UpdateBatchTranslator(updateQuery, adapter, null);
             String generatedSql = builder.createSqlString();
 
             String charStart = unitAdapter.getIdentifiersStartQuote();
@@ -142,7 +142,7 @@ public class UpdateBatchTranslatorTest e
                     nullAttributes, 1);
             JdbcAdapter adapter = (JdbcAdapter) this.adapter;
 
-            UpdateBatchTranslator builder = new UpdateBatchTranslator(updateQuery, adapter);
+            UpdateBatchTranslator builder = new UpdateBatchTranslator(updateQuery, adapter, null);
             String generatedSql = builder.createSqlString();
             assertNotNull(generatedSql);