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/11/02 08:10:02 UTC

[14/48] Installing Maven Failsafe Plugin

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e42c376c/cayenne-server/src/test/java/org/apache/cayenne/access/jdbc/SQLTemplateActionTest.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/jdbc/SQLTemplateActionTest.java b/cayenne-server/src/test/java/org/apache/cayenne/access/jdbc/SQLTemplateActionTest.java
deleted file mode 100644
index 11af3b8..0000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/jdbc/SQLTemplateActionTest.java
+++ /dev/null
@@ -1,365 +0,0 @@
-/*****************************************************************
- *   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.access.jdbc;
-
-import java.sql.Connection;
-import java.sql.Date;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.cayenne.DataRow;
-import org.apache.cayenne.ObjectContext;
-import org.apache.cayenne.access.DataNode;
-import org.apache.cayenne.access.MockOperationObserver;
-import org.apache.cayenne.dba.JdbcAdapter;
-import org.apache.cayenne.di.Inject;
-import org.apache.cayenne.query.Query;
-import org.apache.cayenne.query.SQLAction;
-import org.apache.cayenne.query.SQLTemplate;
-import org.apache.cayenne.query.SelectQuery;
-import org.apache.cayenne.query.SortOrder;
-import org.apache.cayenne.test.jdbc.DBHelper;
-import org.apache.cayenne.test.jdbc.TableHelper;
-import org.apache.cayenne.testdo.testmap.Artist;
-import org.apache.cayenne.unit.di.server.ServerCase;
-import org.apache.cayenne.unit.di.server.ServerCaseDataSourceFactory;
-import org.apache.cayenne.unit.di.server.UseServerRuntime;
-import org.apache.cayenne.unit.util.SQLTemplateCustomizer;
-
-@UseServerRuntime(ServerCase.TESTMAP_PROJECT)
-public class SQLTemplateActionTest extends ServerCase {
-
-    @Inject
-    protected ServerCaseDataSourceFactory dataSourceFactory;
-
-    @Inject
-    protected DataNode node;
-
-    @Inject
-    protected JdbcAdapter adapter;
-
-    @Inject
-    protected ObjectContext objectContext;
-
-    @Inject
-    protected DBHelper dbHelper;
-
-    @Inject
-    protected SQLTemplateCustomizer sqlTemplateCustomizer;
-
-    protected TableHelper tArtist;
-
-    @Override
-    protected void setUpAfterInjection() throws Exception {
-        dbHelper.deleteAll("PAINTING_INFO");
-        dbHelper.deleteAll("PAINTING");
-        dbHelper.deleteAll("ARTIST_EXHIBIT");
-        dbHelper.deleteAll("ARTIST_GROUP");
-        dbHelper.deleteAll("ARTIST");
-
-        tArtist = new TableHelper(dbHelper, "ARTIST");
-        tArtist.setColumns("ARTIST_ID", "ARTIST_NAME", "DATE_OF_BIRTH");
-    }
-
-    protected void createFourArtists() throws Exception {
-
-        Date date = new Date(System.currentTimeMillis());
-
-        tArtist.insert(11, "artist2", date);
-        tArtist.insert(101, "artist3", date);
-        tArtist.insert(201, "artist4", date);
-        tArtist.insert(3001, "artist5", date);
-    }
-
-    public void testProperties() throws Exception {
-        SQLTemplate template = new SQLTemplate(Object.class, "AAAAA");      
-  
-        SQLTemplateAction action = new SQLTemplateAction(template, node);
-        assertSame(template, action.getQuery());
-        assertSame(node, action.dataNode);
-    }
-
-    public void testExecuteSelect() throws Exception {
-        createFourArtists();
-
-        String templateString = "SELECT * FROM ARTIST WHERE ARTIST_ID = #bind($id)";
-        SQLTemplate template = new SQLTemplate(Object.class, templateString);
-        sqlTemplateCustomizer.updateSQLTemplate(template);
-
-        Map<String, Object> bindings = new HashMap<String, Object>();
-        bindings.put("id", 201l);
-        template.setParameters(bindings);
-
-        // must ensure the right SQLTemplateAction is created
-
-        SQLAction plan = adapter.getAction(template, node);
-        assertTrue(plan instanceof SQLTemplateAction);
-
-        MockOperationObserver observer = new MockOperationObserver();
-        Connection c = dataSourceFactory.getSharedDataSource().getConnection();
-
-        try {
-            plan.performAction(c, observer);
-        }
-        finally {
-            c.close();
-        }
-
-        List<DataRow> rows = observer.rowsForQuery(template);
-        assertNotNull(rows);
-        assertEquals(1, rows.size());
-        DataRow row = rows.get(0);
-
-        // In the absence of ObjEntity most DB's return a Long here, except for Oracle
-        // that has no BIGINT type and
-        // returns BigDecimal, so do a Number comparison
-        Number id = (Number) row.get("ARTIST_ID");
-        assertNotNull(id);
-        assertEquals(((Number) bindings.get("id")).longValue(), id.longValue());
-        assertEquals("artist4", row.get("ARTIST_NAME"));
-        assertTrue(row.containsKey("DATE_OF_BIRTH"));
-    }
-
-    public void testSelectUtilDate() throws Exception {
-        createFourArtists();
-
-        String templateString = "SELECT #result('DATE_OF_BIRTH' 'java.util.Date' 'DOB') "
-                + "FROM ARTIST WHERE ARTIST_ID = #bind($id)";
-        SQLTemplate template = new SQLTemplate(Object.class, templateString);
-        sqlTemplateCustomizer.updateSQLTemplate(template);
-
-        Map<String, Object> bindings = new HashMap<String, Object>();
-        bindings.put("id", 101);
-        template.setParameters(bindings);
-
-        SQLAction plan = adapter.getAction(template, node);
-
-        MockOperationObserver observer = new MockOperationObserver();
-        Connection c = dataSourceFactory.getSharedDataSource().getConnection();
-
-        try {
-            plan.performAction(c, observer);
-        }
-        finally {
-            c.close();
-        }
-
-        List<DataRow> rows = observer.rowsForQuery(template);
-        assertNotNull(rows);
-        assertEquals(1, rows.size());
-        DataRow row = rows.get(0);
-
-        assertNotNull(row.get("DOB"));
-        assertEquals(java.util.Date.class, row.get("DOB").getClass());
-    }
-
-    public void testSelectSQLDate() throws Exception {
-        createFourArtists();
-
-        String templateString = "SELECT #result('DATE_OF_BIRTH' 'java.sql.Date' 'DOB') "
-                + "FROM ARTIST WHERE ARTIST_ID = #bind($id)";
-        SQLTemplate template = new SQLTemplate(Object.class, templateString);
-        sqlTemplateCustomizer.updateSQLTemplate(template);
-
-        Map<String, Object> bindings = new HashMap<String, Object>();
-        bindings.put("id", 101);
-        template.setParameters(bindings);
-
-        SQLAction plan = adapter.getAction(template, node);
-
-        MockOperationObserver observer = new MockOperationObserver();
-        Connection c = dataSourceFactory.getSharedDataSource().getConnection();
-
-        try {
-            plan.performAction(c, observer);
-        }
-        finally {
-            c.close();
-        }
-
-        List<DataRow> rows = observer.rowsForQuery(template);
-        assertNotNull(rows);
-        assertEquals(1, rows.size());
-        DataRow row = rows.get(0);
-
-        assertNotNull(row.get("DOB"));
-        assertEquals(java.sql.Date.class, row.get("DOB").getClass());
-    }
-
-    public void testSelectSQLTimestamp() throws Exception {
-        createFourArtists();
-
-        String templateString = "SELECT #result('DATE_OF_BIRTH' 'java.sql.Timestamp' 'DOB') "
-                + "FROM ARTIST WHERE ARTIST_ID = #bind($id)";
-        SQLTemplate template = new SQLTemplate(Object.class, templateString);
-        sqlTemplateCustomizer.updateSQLTemplate(template);
-
-        Map<String, Object> bindings = new HashMap<String, Object>();
-        bindings.put("id", 201);
-        template.setParameters(bindings);
-
-        SQLAction plan = adapter.getAction(template, node);
-
-        MockOperationObserver observer = new MockOperationObserver();
-        Connection c = dataSourceFactory.getSharedDataSource().getConnection();
-
-        try {
-            plan.performAction(c, observer);
-        }
-        finally {
-            c.close();
-        }
-
-        List<DataRow> rows = observer.rowsForQuery(template);
-        assertNotNull(rows);
-        assertEquals(1, rows.size());
-        DataRow row = rows.get(0);
-
-        assertNotNull(row.get("DOB"));
-        // Sybase returns a Timestamp subclass... so can't test equality
-        assertTrue(java.sql.Timestamp.class.isAssignableFrom(row.get("DOB").getClass()));
-    }
-
-    public void testExecuteUpdate() throws Exception {
-        String templateString = "INSERT INTO ARTIST (ARTIST_ID, ARTIST_NAME, DATE_OF_BIRTH) "
-                + "VALUES (#bind($id), #bind($name), #bind($dob 'DATE'))";
-        SQLTemplate template = new SQLTemplate(Object.class, templateString);
-
-        Map<String, Object> bindings = new HashMap<String, Object>();
-        bindings.put("id", new Long(1));
-        bindings.put("name", "a1");
-        bindings.put("dob", new Date(System.currentTimeMillis()));
-        template.setParameters(bindings);
-
-        SQLAction action = adapter.getAction(template, node);
-
-        Connection c = dataSourceFactory.getSharedDataSource().getConnection();
-        try {
-            MockOperationObserver observer = new MockOperationObserver();
-            action.performAction(c, observer);
-
-            int[] batches = observer.countsForQuery(template);
-            assertNotNull(batches);
-            assertEquals(1, batches.length);
-            assertEquals(1, batches[0]);
-        }
-        finally {
-            c.close();
-        }
-
-        assertEquals(1, tArtist.getRowCount());
-        assertEquals(1l, tArtist.getLong("ARTIST_ID"));
-        assertEquals("a1", tArtist.getString("ARTIST_NAME").trim());
-    }
-
-    public void testExecuteUpdateNoParameters() throws Exception {
-        createFourArtists();
-
-        SQLTemplate template = new SQLTemplate(
-                Object.class,
-                "delete from ARTIST where ARTIST_NAME like 'a%'");
-
-        SQLAction action = adapter.getAction(template, node);
-
-        Connection c = dataSourceFactory.getSharedDataSource().getConnection();
-        try {
-            MockOperationObserver observer = new MockOperationObserver();
-            action.performAction(c, observer);
-
-            int[] batches = observer.countsForQuery(template);
-            assertNotNull(batches);
-            assertEquals(1, batches.length);
-            assertEquals(4, batches[0]);
-        }
-        finally {
-            c.close();
-        }
-    }
-
-    public void testExecuteUpdateBatch() throws Exception {
-        String templateString = "INSERT INTO ARTIST (ARTIST_ID, ARTIST_NAME, DATE_OF_BIRTH) "
-                + "VALUES (#bind($id), #bind($name), #bind($dob 'DATE'))";
-        SQLTemplate template = new SQLTemplate(Object.class, templateString);
-
-        Map<String, Object> bindings1 = new HashMap<String, Object>();
-        bindings1.put("id", new Long(1));
-        bindings1.put("name", "a1");
-        bindings1.put("dob", new Date(System.currentTimeMillis()));
-
-        Map<String, Object> bindings2 = new HashMap<String, Object>();
-        bindings2.put("id", new Long(33));
-        bindings2.put("name", "a$$$$$");
-        bindings2.put("dob", new Date(System.currentTimeMillis()));
-        template.setParameters(new Map[] {
-                bindings1, bindings2
-        });
-
-        SQLAction genericAction = adapter.getAction(template, node);
-        assertTrue(genericAction instanceof SQLTemplateAction);
-        SQLTemplateAction action = (SQLTemplateAction) genericAction;
-
-        assertSame(node, action.dataNode);
-        assertSame(template, action.getQuery());
-
-        Connection c = dataSourceFactory.getSharedDataSource().getConnection();
-        try {
-            MockOperationObserver observer = new MockOperationObserver();
-            action.performAction(c, observer);
-
-            int[] batches = observer.countsForQuery(template);
-            assertNotNull(batches);
-            assertEquals(2, batches.length);
-            assertEquals(1, batches[0]);
-            assertEquals(1, batches[1]);
-        }
-        finally {
-            c.close();
-        }
-
-        MockOperationObserver observer = new MockOperationObserver();
-        SelectQuery query = new SelectQuery(Artist.class);
-        query.addOrdering("db:ARTIST_ID", SortOrder.ASCENDING);
-        node.performQueries(Collections.singletonList((Query) query), observer);
-
-        List<DataRow> data = observer.rowsForQuery(query);
-        assertEquals(2, data.size());
-        DataRow row1 = data.get(0);
-        assertEquals(bindings1.get("id"), row1.get("ARTIST_ID"));
-        assertEquals(bindings1.get("name"), row1.get("ARTIST_NAME"));
-        // to compare dates we need to create the binding correctly
-        // assertEquals(bindings1.get("dob"), row.get("DATE_OF_BIRTH"));
-
-        DataRow row2 = data.get(1);
-        assertEquals(bindings2.get("id"), row2.get("ARTIST_ID"));
-        assertEquals(bindings2.get("name"), row2.get("ARTIST_NAME"));
-        // to compare dates we need to create the binding correctly
-        // assertEquals(bindings2.get("dob"), row2.get("DATE_OF_BIRTH"));
-    }
-
-    public void testExtractTemplateString() throws Exception {
-        SQLTemplate template = new SQLTemplate(Artist.class, "A\nBC");
-        SQLTemplateAction action = new SQLTemplateAction(template, node);
-
-        assertEquals("A BC", action.extractTemplateString());
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e42c376c/cayenne-server/src/test/java/org/apache/cayenne/access/jdbc/SelectActionIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/jdbc/SelectActionIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/jdbc/SelectActionIT.java
new file mode 100644
index 0000000..40849fd
--- /dev/null
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/jdbc/SelectActionIT.java
@@ -0,0 +1,98 @@
+/*****************************************************************
+ *   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.access.jdbc;
+
+import org.apache.cayenne.DataRow;
+import org.apache.cayenne.access.DataContext;
+import org.apache.cayenne.di.Inject;
+import org.apache.cayenne.exp.Expression;
+import org.apache.cayenne.query.SelectQuery;
+import org.apache.cayenne.test.jdbc.DBHelper;
+import org.apache.cayenne.testdo.testmap.ClobTestEntity;
+import org.apache.cayenne.testdo.testmap.ClobTestRelation;
+import org.apache.cayenne.unit.UnitDbAdapter;
+import org.apache.cayenne.unit.di.server.ServerCase;
+import org.apache.cayenne.unit.di.server.UseServerRuntime;
+
+import java.util.List;
+
+@UseServerRuntime(ServerCase.TESTMAP_PROJECT)
+public class SelectActionIT extends ServerCase {
+
+    @Inject
+    private DataContext context;
+
+    @Inject
+    private UnitDbAdapter accessStackAdapter;
+
+    @Inject
+    private DBHelper dbHelper;
+
+    @Override
+    protected void setUpAfterInjection() throws Exception {
+        dbHelper.deleteAll("CLOB_TEST_RELATION");
+        
+        if (accessStackAdapter.supportsLobs()) {
+            dbHelper.deleteAll("CLOB_TEST");
+        }
+    }
+
+    public void testFetchLimit_DistinctResultIterator() throws Exception {
+        if (accessStackAdapter.supportsLobs()) {
+
+            insertClobDb();
+
+            Expression qual = Expression.fromString("clobValue.value = 100");
+            SelectQuery select = new SelectQuery(ClobTestEntity.class, qual);
+            select.setFetchLimit(25);
+            List<DataRow> resultRows = context.performQuery(select);
+
+            assertNotNull(resultRows);
+            assertEquals(25, resultRows.size());
+        }
+    }
+
+    protected void insertClobDb() {
+        ClobTestEntity obj;
+        for (int i = 0; i < 80; i++) {
+            if (i < 20) {
+                obj = (ClobTestEntity) context.newObject("ClobTestEntity");
+                obj.setClobCol("a1" + i);
+                insetrClobRel(obj);
+            }
+            else {
+                obj = (ClobTestEntity) context.newObject("ClobTestEntity");
+                obj.setClobCol("a2");
+                insetrClobRel(obj);
+            }
+        }
+
+        context.commitChanges();
+    }
+
+    protected void insetrClobRel(ClobTestEntity clobId) {
+        ClobTestRelation obj;
+
+        for (int i = 0; i < 20; i++) {
+            obj = (ClobTestRelation) context.newObject("ClobTestRelation");
+            obj.setValue(100);
+            obj.setClobId(clobId);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e42c376c/cayenne-server/src/test/java/org/apache/cayenne/access/jdbc/SelectActionTest.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/jdbc/SelectActionTest.java b/cayenne-server/src/test/java/org/apache/cayenne/access/jdbc/SelectActionTest.java
deleted file mode 100644
index 2e94cbb..0000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/jdbc/SelectActionTest.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*****************************************************************
- *   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.access.jdbc;
-
-import java.util.List;
-
-import org.apache.cayenne.DataRow;
-import org.apache.cayenne.access.DataContext;
-import org.apache.cayenne.di.Inject;
-import org.apache.cayenne.exp.Expression;
-import org.apache.cayenne.query.SelectQuery;
-import org.apache.cayenne.test.jdbc.DBHelper;
-import org.apache.cayenne.testdo.testmap.ClobTestEntity;
-import org.apache.cayenne.testdo.testmap.ClobTestRelation;
-import org.apache.cayenne.unit.UnitDbAdapter;
-import org.apache.cayenne.unit.di.server.ServerCase;
-import org.apache.cayenne.unit.di.server.UseServerRuntime;
-
-@UseServerRuntime(ServerCase.TESTMAP_PROJECT)
-public class SelectActionTest extends ServerCase {
-
-    @Inject
-    private DataContext context;
-
-    @Inject
-    private UnitDbAdapter accessStackAdapter;
-
-    @Inject
-    private DBHelper dbHelper;
-
-    @Override
-    protected void setUpAfterInjection() throws Exception {
-        dbHelper.deleteAll("CLOB_TEST_RELATION");
-        
-        if (accessStackAdapter.supportsLobs()) {
-            dbHelper.deleteAll("CLOB_TEST");
-        }
-    }
-
-    public void testFetchLimit_DistinctResultIterator() throws Exception {
-        if (accessStackAdapter.supportsLobs()) {
-
-            insertClobDb();
-
-            Expression qual = Expression.fromString("clobValue.value = 100");
-            SelectQuery select = new SelectQuery(ClobTestEntity.class, qual);
-            select.setFetchLimit(25);
-            List<DataRow> resultRows = context.performQuery(select);
-
-            assertNotNull(resultRows);
-            assertEquals(25, resultRows.size());
-        }
-    }
-
-    protected void insertClobDb() {
-        ClobTestEntity obj;
-        for (int i = 0; i < 80; i++) {
-            if (i < 20) {
-                obj = (ClobTestEntity) context.newObject("ClobTestEntity");
-                obj.setClobCol("a1" + i);
-                insetrClobRel(obj);
-            }
-            else {
-                obj = (ClobTestEntity) context.newObject("ClobTestEntity");
-                obj.setClobCol("a2");
-                insetrClobRel(obj);
-            }
-        }
-
-        context.commitChanges();
-    }
-
-    protected void insetrClobRel(ClobTestEntity clobId) {
-        ClobTestRelation obj;
-
-        for (int i = 0; i < 20; i++) {
-            obj = (ClobTestRelation) context.newObject("ClobTestRelation");
-            obj.setValue(100);
-            obj.setClobId(clobId);
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e42c376c/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/DefaultBatchTranslatorIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/DefaultBatchTranslatorIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/DefaultBatchTranslatorIT.java
new file mode 100644
index 0000000..542f7cd
--- /dev/null
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/DefaultBatchTranslatorIT.java
@@ -0,0 +1,136 @@
+/*****************************************************************
+ *   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.access.translator.batch;
+
+import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.dba.JdbcAdapter;
+import org.apache.cayenne.di.AdhocObjectFactory;
+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;
+
+import java.sql.Types;
+
+import static org.mockito.Mockito.mock;
+
+@UseServerRuntime(ServerCase.TESTMAP_PROJECT)
+public class DefaultBatchTranslatorIT extends ServerCase {
+
+    @Inject
+    private AdhocObjectFactory objectFactory;
+
+    public void testConstructor() throws Exception {
+        DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName());
+        DefaultBatchTranslator builder = new DefaultBatchTranslator(mock(BatchQuery.class), adapter, null) {
+            @Override
+            protected String createSql() {
+                return null;
+            }
+
+            @Override
+            protected BatchParameterBinding[] createBindings() {
+                return new BatchParameterBinding[0];
+            }
+
+            @Override
+            protected BatchParameterBinding[] doUpdateBindings(BatchQueryRow row) {
+                return new BatchParameterBinding[0];
+            }
+        };
+
+        assertSame(adapter, builder.adapter);
+    }
+
+    public void testAppendDbAttribute1() throws Exception {
+        DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName());
+        String trimFunction = "testTrim";
+
+        DefaultBatchTranslator builder = new DefaultBatchTranslator(mock(BatchQuery.class), adapter, trimFunction) {
+
+            @Override
+            protected String createSql() {
+                return null;
+            }
+
+            @Override
+            protected BatchParameterBinding[] createBindings() {
+                return new BatchParameterBinding[0];
+            }
+
+            @Override
+            protected BatchParameterBinding[] doUpdateBindings(BatchQueryRow row) {
+                return new BatchParameterBinding[0];
+            }
+        };
+
+        StringBuilder buf = new StringBuilder();
+        DbEntity entity = new DbEntity("Test");
+        DbAttribute attr = new DbAttribute("testAttr", Types.CHAR, null);
+        attr.setEntity(entity);
+        builder.appendDbAttribute(buf, attr);
+        assertEquals("testTrim(testAttr)", buf.toString());
+
+        buf = new StringBuilder();
+        attr = new DbAttribute("testAttr", Types.VARCHAR, null);
+        attr.setEntity(entity);
+        builder.appendDbAttribute(buf, attr);
+        assertEquals("testAttr", buf.toString());
+    }
+
+    public void testAppendDbAttribute2() throws Exception {
+        DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName());
+
+        DefaultBatchTranslator builder = new DefaultBatchTranslator(mock(BatchQuery.class), adapter, null) {
+            @Override
+            protected String createSql() {
+                return null;
+            }
+
+            @Override
+            protected BatchParameterBinding[] createBindings() {
+                return new BatchParameterBinding[0];
+            }
+
+            @Override
+            protected BatchParameterBinding[] doUpdateBindings(BatchQueryRow row) {
+                return new BatchParameterBinding[0];
+            }
+        };
+
+        StringBuilder buf = new StringBuilder();
+        DbEntity entity = new DbEntity("Test");
+
+        DbAttribute attr = new DbAttribute("testAttr", Types.CHAR, null);
+        attr.setEntity(entity);
+        builder.appendDbAttribute(buf, attr);
+        assertEquals("testAttr", buf.toString());
+
+        buf = new StringBuilder();
+        attr = new DbAttribute("testAttr", Types.VARCHAR, null);
+        attr.setEntity(entity);
+
+        builder.appendDbAttribute(buf, attr);
+        assertEquals("testAttr", buf.toString());
+    }
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e42c376c/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/DefaultBatchTranslatorTest.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/DefaultBatchTranslatorTest.java b/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/DefaultBatchTranslatorTest.java
deleted file mode 100644
index 53af3b7..0000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/DefaultBatchTranslatorTest.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*****************************************************************
- *   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.access.translator.batch;
-
-import static org.mockito.Mockito.mock;
-
-import java.sql.Types;
-
-import org.apache.cayenne.dba.DbAdapter;
-import org.apache.cayenne.dba.JdbcAdapter;
-import org.apache.cayenne.di.AdhocObjectFactory;
-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;
-
-@UseServerRuntime(ServerCase.TESTMAP_PROJECT)
-public class DefaultBatchTranslatorTest extends ServerCase {
-
-    @Inject
-    private AdhocObjectFactory objectFactory;
-
-    public void testConstructor() throws Exception {
-        DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName());
-        DefaultBatchTranslator builder = new DefaultBatchTranslator(mock(BatchQuery.class), adapter, null) {
-            @Override
-            protected String createSql() {
-                return null;
-            }
-
-            @Override
-            protected BatchParameterBinding[] createBindings() {
-                return new BatchParameterBinding[0];
-            }
-
-            @Override
-            protected BatchParameterBinding[] doUpdateBindings(BatchQueryRow row) {
-                return new BatchParameterBinding[0];
-            }
-        };
-
-        assertSame(adapter, builder.adapter);
-    }
-
-    public void testAppendDbAttribute1() throws Exception {
-        DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName());
-        String trimFunction = "testTrim";
-
-        DefaultBatchTranslator builder = new DefaultBatchTranslator(mock(BatchQuery.class), adapter, trimFunction) {
-
-            @Override
-            protected String createSql() {
-                return null;
-            }
-
-            @Override
-            protected BatchParameterBinding[] createBindings() {
-                return new BatchParameterBinding[0];
-            }
-
-            @Override
-            protected BatchParameterBinding[] doUpdateBindings(BatchQueryRow row) {
-                return new BatchParameterBinding[0];
-            }
-        };
-
-        StringBuilder buf = new StringBuilder();
-        DbEntity entity = new DbEntity("Test");
-        DbAttribute attr = new DbAttribute("testAttr", Types.CHAR, null);
-        attr.setEntity(entity);
-        builder.appendDbAttribute(buf, attr);
-        assertEquals("testTrim(testAttr)", buf.toString());
-
-        buf = new StringBuilder();
-        attr = new DbAttribute("testAttr", Types.VARCHAR, null);
-        attr.setEntity(entity);
-        builder.appendDbAttribute(buf, attr);
-        assertEquals("testAttr", buf.toString());
-    }
-
-    public void testAppendDbAttribute2() throws Exception {
-        DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName());
-
-        DefaultBatchTranslator builder = new DefaultBatchTranslator(mock(BatchQuery.class), adapter, null) {
-            @Override
-            protected String createSql() {
-                return null;
-            }
-
-            @Override
-            protected BatchParameterBinding[] createBindings() {
-                return new BatchParameterBinding[0];
-            }
-
-            @Override
-            protected BatchParameterBinding[] doUpdateBindings(BatchQueryRow row) {
-                return new BatchParameterBinding[0];
-            }
-        };
-
-        StringBuilder buf = new StringBuilder();
-        DbEntity entity = new DbEntity("Test");
-
-        DbAttribute attr = new DbAttribute("testAttr", Types.CHAR, null);
-        attr.setEntity(entity);
-        builder.appendDbAttribute(buf, attr);
-        assertEquals("testAttr", buf.toString());
-
-        buf = new StringBuilder();
-        attr = new DbAttribute("testAttr", Types.VARCHAR, null);
-        attr.setEntity(entity);
-
-        builder.appendDbAttribute(buf, attr);
-        assertEquals("testAttr", buf.toString());
-    }
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e42c376c/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/DeleteBatchTranslatorIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/DeleteBatchTranslatorIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/DeleteBatchTranslatorIT.java
new file mode 100644
index 0000000..e43e8bd
--- /dev/null
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/DeleteBatchTranslatorIT.java
@@ -0,0 +1,153 @@
+/*****************************************************************
+ *   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.access.translator.batch;
+
+import org.apache.cayenne.configuration.server.ServerRuntime;
+import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.dba.JdbcAdapter;
+import org.apache.cayenne.di.AdhocObjectFactory;
+import org.apache.cayenne.di.Inject;
+import org.apache.cayenne.map.DbAttribute;
+import org.apache.cayenne.map.DbEntity;
+import org.apache.cayenne.query.DeleteBatchQuery;
+import org.apache.cayenne.testdo.locking.SimpleLockingTestEntity;
+import org.apache.cayenne.unit.UnitDbAdapter;
+import org.apache.cayenne.unit.di.server.ServerCase;
+import org.apache.cayenne.unit.di.server.UseServerRuntime;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import static org.mockito.Mockito.mock;
+
+@UseServerRuntime(ServerCase.LOCKING_PROJECT)
+public class DeleteBatchTranslatorIT extends ServerCase {
+
+    @Inject
+    private ServerRuntime runtime;
+
+    @Inject
+    private DbAdapter adapter;
+
+    @Inject
+    private UnitDbAdapter unitAdapter;
+
+    @Inject
+    private AdhocObjectFactory objectFactory;
+
+    public void testConstructor() throws Exception {
+        DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName());
+
+        DeleteBatchTranslator builder = new DeleteBatchTranslator(mock(DeleteBatchQuery.class), adapter, null);
+
+        assertSame(adapter, builder.adapter);
+    }
+
+    public void testCreateSqlString() throws Exception {
+        DbEntity entity = runtime.getDataDomain().getEntityResolver().getObjEntity(SimpleLockingTestEntity.class)
+                .getDbEntity();
+
+        List<DbAttribute> idAttributes = Collections.singletonList(entity.getAttribute("LOCKING_TEST_ID"));
+
+        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, null);
+        String generatedSql = builder.getSql();
+        assertNotNull(generatedSql);
+        assertEquals("DELETE FROM " + entity.getName() + " WHERE LOCKING_TEST_ID = ?", generatedSql);
+    }
+
+    public void testCreateSqlStringWithNulls() throws Exception {
+        DbEntity entity = runtime.getDataDomain().getEntityResolver().getObjEntity(SimpleLockingTestEntity.class)
+                .getDbEntity();
+
+        List<DbAttribute> idAttributes = Arrays.asList(entity.getAttribute("LOCKING_TEST_ID"),
+                entity.getAttribute("NAME"));
+
+        Collection<String> nullAttributes = Collections.singleton("NAME");
+
+        DeleteBatchQuery deleteQuery = new DeleteBatchQuery(entity, idAttributes, nullAttributes, 1);
+
+        DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName());
+        DeleteBatchTranslator builder = new DeleteBatchTranslator(deleteQuery, adapter, null);
+        String generatedSql = builder.getSql();
+        assertNotNull(generatedSql);
+        assertEquals("DELETE FROM " + entity.getName() + " WHERE LOCKING_TEST_ID = ? AND NAME IS NULL", generatedSql);
+    }
+
+    public void testCreateSqlStringWithIdentifiersQuote() throws Exception {
+        DbEntity entity = runtime.getDataDomain().getEntityResolver().getObjEntity(SimpleLockingTestEntity.class)
+                .getDbEntity();
+        try {
+
+            entity.getDataMap().setQuotingSQLIdentifiers(true);
+            List<DbAttribute> idAttributes = Collections.singletonList(entity.getAttribute("LOCKING_TEST_ID"));
+
+            DeleteBatchQuery deleteQuery = new DeleteBatchQuery(entity, idAttributes, Collections.<String> emptySet(), 1);
+            JdbcAdapter adapter = (JdbcAdapter) this.adapter;
+            DeleteBatchTranslator builder = new DeleteBatchTranslator(deleteQuery, adapter, null);
+            String generatedSql = builder.getSql();
+
+            String charStart = unitAdapter.getIdentifiersStartQuote();
+            String charEnd = unitAdapter.getIdentifiersEndQuote();
+
+            assertNotNull(generatedSql);
+            assertEquals("DELETE FROM " + charStart + entity.getName() + charEnd + " WHERE " + charStart
+                    + "LOCKING_TEST_ID" + charEnd + " = ?", generatedSql);
+        } finally {
+            entity.getDataMap().setQuotingSQLIdentifiers(false);
+        }
+
+    }
+
+    public void testCreateSqlStringWithNullsWithIdentifiersQuote() throws Exception {
+        DbEntity entity = runtime.getDataDomain().getEntityResolver().getObjEntity(SimpleLockingTestEntity.class)
+                .getDbEntity();
+        try {
+
+            entity.getDataMap().setQuotingSQLIdentifiers(true);
+
+            List<DbAttribute> idAttributes = Arrays.asList(entity.getAttribute("LOCKING_TEST_ID"),
+                    entity.getAttribute("NAME"));
+
+            Collection<String> nullAttributes = Collections.singleton("NAME");
+
+            DeleteBatchQuery deleteQuery = new DeleteBatchQuery(entity, idAttributes, nullAttributes, 1);
+
+            JdbcAdapter adapter = (JdbcAdapter) this.adapter;
+
+            DeleteBatchTranslator builder = new DeleteBatchTranslator(deleteQuery, adapter, null);
+            String generatedSql = builder.getSql();
+
+            String charStart = unitAdapter.getIdentifiersStartQuote();
+            String charEnd = unitAdapter.getIdentifiersEndQuote();
+            assertNotNull(generatedSql);
+
+            assertEquals("DELETE FROM " + charStart + entity.getName() + charEnd + " WHERE " + charStart
+                    + "LOCKING_TEST_ID" + charEnd + " = ? AND " + charStart + "NAME" + charEnd + " IS NULL",
+                    generatedSql);
+        } finally {
+            entity.getDataMap().setQuotingSQLIdentifiers(false);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e42c376c/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/DeleteBatchTranslatorTest.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/DeleteBatchTranslatorTest.java b/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/DeleteBatchTranslatorTest.java
deleted file mode 100644
index b91b882..0000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/DeleteBatchTranslatorTest.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*****************************************************************
- *   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.access.translator.batch;
-
-import static org.mockito.Mockito.mock;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.cayenne.access.translator.batch.DeleteBatchTranslator;
-import org.apache.cayenne.configuration.server.ServerRuntime;
-import org.apache.cayenne.dba.DbAdapter;
-import org.apache.cayenne.dba.JdbcAdapter;
-import org.apache.cayenne.di.AdhocObjectFactory;
-import org.apache.cayenne.di.Inject;
-import org.apache.cayenne.map.DbAttribute;
-import org.apache.cayenne.map.DbEntity;
-import org.apache.cayenne.query.DeleteBatchQuery;
-import org.apache.cayenne.testdo.locking.SimpleLockingTestEntity;
-import org.apache.cayenne.unit.UnitDbAdapter;
-import org.apache.cayenne.unit.di.server.ServerCase;
-import org.apache.cayenne.unit.di.server.UseServerRuntime;
-
-@UseServerRuntime(ServerCase.LOCKING_PROJECT)
-public class DeleteBatchTranslatorTest extends ServerCase {
-
-    @Inject
-    private ServerRuntime runtime;
-
-    @Inject
-    private DbAdapter adapter;
-
-    @Inject
-    private UnitDbAdapter unitAdapter;
-
-    @Inject
-    private AdhocObjectFactory objectFactory;
-
-    public void testConstructor() throws Exception {
-        DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName());
-
-        DeleteBatchTranslator builder = new DeleteBatchTranslator(mock(DeleteBatchQuery.class), adapter, null);
-
-        assertSame(adapter, builder.adapter);
-    }
-
-    public void testCreateSqlString() throws Exception {
-        DbEntity entity = runtime.getDataDomain().getEntityResolver().getObjEntity(SimpleLockingTestEntity.class)
-                .getDbEntity();
-
-        List<DbAttribute> idAttributes = Collections.singletonList(entity.getAttribute("LOCKING_TEST_ID"));
-
-        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, null);
-        String generatedSql = builder.getSql();
-        assertNotNull(generatedSql);
-        assertEquals("DELETE FROM " + entity.getName() + " WHERE LOCKING_TEST_ID = ?", generatedSql);
-    }
-
-    public void testCreateSqlStringWithNulls() throws Exception {
-        DbEntity entity = runtime.getDataDomain().getEntityResolver().getObjEntity(SimpleLockingTestEntity.class)
-                .getDbEntity();
-
-        List<DbAttribute> idAttributes = Arrays.asList(entity.getAttribute("LOCKING_TEST_ID"),
-                entity.getAttribute("NAME"));
-
-        Collection<String> nullAttributes = Collections.singleton("NAME");
-
-        DeleteBatchQuery deleteQuery = new DeleteBatchQuery(entity, idAttributes, nullAttributes, 1);
-
-        DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName());
-        DeleteBatchTranslator builder = new DeleteBatchTranslator(deleteQuery, adapter, null);
-        String generatedSql = builder.getSql();
-        assertNotNull(generatedSql);
-        assertEquals("DELETE FROM " + entity.getName() + " WHERE LOCKING_TEST_ID = ? AND NAME IS NULL", generatedSql);
-    }
-
-    public void testCreateSqlStringWithIdentifiersQuote() throws Exception {
-        DbEntity entity = runtime.getDataDomain().getEntityResolver().getObjEntity(SimpleLockingTestEntity.class)
-                .getDbEntity();
-        try {
-
-            entity.getDataMap().setQuotingSQLIdentifiers(true);
-            List<DbAttribute> idAttributes = Collections.singletonList(entity.getAttribute("LOCKING_TEST_ID"));
-
-            DeleteBatchQuery deleteQuery = new DeleteBatchQuery(entity, idAttributes, Collections.<String> emptySet(), 1);
-            JdbcAdapter adapter = (JdbcAdapter) this.adapter;
-            DeleteBatchTranslator builder = new DeleteBatchTranslator(deleteQuery, adapter, null);
-            String generatedSql = builder.getSql();
-
-            String charStart = unitAdapter.getIdentifiersStartQuote();
-            String charEnd = unitAdapter.getIdentifiersEndQuote();
-
-            assertNotNull(generatedSql);
-            assertEquals("DELETE FROM " + charStart + entity.getName() + charEnd + " WHERE " + charStart
-                    + "LOCKING_TEST_ID" + charEnd + " = ?", generatedSql);
-        } finally {
-            entity.getDataMap().setQuotingSQLIdentifiers(false);
-        }
-
-    }
-
-    public void testCreateSqlStringWithNullsWithIdentifiersQuote() throws Exception {
-        DbEntity entity = runtime.getDataDomain().getEntityResolver().getObjEntity(SimpleLockingTestEntity.class)
-                .getDbEntity();
-        try {
-
-            entity.getDataMap().setQuotingSQLIdentifiers(true);
-
-            List<DbAttribute> idAttributes = Arrays.asList(entity.getAttribute("LOCKING_TEST_ID"),
-                    entity.getAttribute("NAME"));
-
-            Collection<String> nullAttributes = Collections.singleton("NAME");
-
-            DeleteBatchQuery deleteQuery = new DeleteBatchQuery(entity, idAttributes, nullAttributes, 1);
-
-            JdbcAdapter adapter = (JdbcAdapter) this.adapter;
-
-            DeleteBatchTranslator builder = new DeleteBatchTranslator(deleteQuery, adapter, null);
-            String generatedSql = builder.getSql();
-
-            String charStart = unitAdapter.getIdentifiersStartQuote();
-            String charEnd = unitAdapter.getIdentifiersEndQuote();
-            assertNotNull(generatedSql);
-
-            assertEquals("DELETE FROM " + charStart + entity.getName() + charEnd + " WHERE " + charStart
-                    + "LOCKING_TEST_ID" + charEnd + " = ? AND " + charStart + "NAME" + charEnd + " IS NULL",
-                    generatedSql);
-        } finally {
-            entity.getDataMap().setQuotingSQLIdentifiers(false);
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e42c376c/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/InsertBatchTranslatorIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/InsertBatchTranslatorIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/InsertBatchTranslatorIT.java
new file mode 100644
index 0000000..1a631db
--- /dev/null
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/InsertBatchTranslatorIT.java
@@ -0,0 +1,93 @@
+/*****************************************************************
+ *   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.access.translator.batch;
+
+import org.apache.cayenne.configuration.server.ServerRuntime;
+import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.dba.JdbcAdapter;
+import org.apache.cayenne.di.AdhocObjectFactory;
+import org.apache.cayenne.di.Inject;
+import org.apache.cayenne.map.DbEntity;
+import org.apache.cayenne.query.InsertBatchQuery;
+import org.apache.cayenne.testdo.locking.SimpleLockingTestEntity;
+import org.apache.cayenne.unit.UnitDbAdapter;
+import org.apache.cayenne.unit.di.server.ServerCase;
+import org.apache.cayenne.unit.di.server.UseServerRuntime;
+
+import static org.mockito.Mockito.mock;
+
+@UseServerRuntime(ServerCase.LOCKING_PROJECT)
+public class InsertBatchTranslatorIT extends ServerCase {
+
+    @Inject
+    private ServerRuntime runtime;
+
+    @Inject
+    private DbAdapter adapter;
+
+    @Inject
+    private UnitDbAdapter unitAdapter;
+
+    @Inject
+    private AdhocObjectFactory objectFactory;
+
+    public void testConstructor() throws Exception {
+        DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName());
+
+        InsertBatchTranslator builder = new InsertBatchTranslator(mock(InsertBatchQuery.class), adapter);
+
+        assertSame(adapter, builder.adapter);
+    }
+
+    public void testCreateSqlString() throws Exception {
+        DbEntity entity = runtime.getDataDomain().getEntityResolver().getObjEntity(SimpleLockingTestEntity.class)
+                .getDbEntity();
+
+        DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName());
+        InsertBatchQuery insertQuery = new InsertBatchQuery(entity, 1);
+        InsertBatchTranslator builder = new InsertBatchTranslator(insertQuery, adapter);
+        String generatedSql = builder.getSql();
+        assertNotNull(generatedSql);
+        assertEquals("INSERT INTO " + entity.getName() + " (DESCRIPTION, LOCKING_TEST_ID, NAME) VALUES (?, ?, ?)",
+                generatedSql);
+    }
+
+    public void testCreateSqlStringWithIdentifiersQuote() throws Exception {
+        DbEntity entity = runtime.getDataDomain().getEntityResolver().getObjEntity(SimpleLockingTestEntity.class)
+                .getDbEntity();
+        try {
+
+            entity.getDataMap().setQuotingSQLIdentifiers(true);
+
+            JdbcAdapter adapter = (JdbcAdapter) this.adapter;
+
+            InsertBatchQuery insertQuery = new InsertBatchQuery(entity, 1);
+            InsertBatchTranslator builder = new InsertBatchTranslator(insertQuery, adapter);
+            String generatedSql = builder.getSql();
+            String charStart = unitAdapter.getIdentifiersStartQuote();
+            String charEnd = unitAdapter.getIdentifiersEndQuote();
+            assertNotNull(generatedSql);
+            assertEquals("INSERT INTO " + charStart + entity.getName() + charEnd + " (" + charStart + "DESCRIPTION"
+                    + charEnd + ", " + charStart + "LOCKING_TEST_ID" + charEnd + ", " + charStart + "NAME" + charEnd
+                    + ") VALUES (?, ?, ?)", generatedSql);
+        } finally {
+            entity.getDataMap().setQuotingSQLIdentifiers(false);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e42c376c/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/InsertBatchTranslatorTest.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/InsertBatchTranslatorTest.java b/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/InsertBatchTranslatorTest.java
deleted file mode 100644
index 3d1e5de..0000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/InsertBatchTranslatorTest.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*****************************************************************
- *   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.access.translator.batch;
-
-import static org.mockito.Mockito.mock;
-
-import org.apache.cayenne.access.translator.batch.InsertBatchTranslator;
-import org.apache.cayenne.configuration.server.ServerRuntime;
-import org.apache.cayenne.dba.DbAdapter;
-import org.apache.cayenne.dba.JdbcAdapter;
-import org.apache.cayenne.di.AdhocObjectFactory;
-import org.apache.cayenne.di.Inject;
-import org.apache.cayenne.map.DbEntity;
-import org.apache.cayenne.query.InsertBatchQuery;
-import org.apache.cayenne.testdo.locking.SimpleLockingTestEntity;
-import org.apache.cayenne.unit.UnitDbAdapter;
-import org.apache.cayenne.unit.di.server.ServerCase;
-import org.apache.cayenne.unit.di.server.UseServerRuntime;
-
-@UseServerRuntime(ServerCase.LOCKING_PROJECT)
-public class InsertBatchTranslatorTest extends ServerCase {
-
-    @Inject
-    private ServerRuntime runtime;
-
-    @Inject
-    private DbAdapter adapter;
-
-    @Inject
-    private UnitDbAdapter unitAdapter;
-
-    @Inject
-    private AdhocObjectFactory objectFactory;
-
-    public void testConstructor() throws Exception {
-        DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName());
-
-        InsertBatchTranslator builder = new InsertBatchTranslator(mock(InsertBatchQuery.class), adapter);
-
-        assertSame(adapter, builder.adapter);
-    }
-
-    public void testCreateSqlString() throws Exception {
-        DbEntity entity = runtime.getDataDomain().getEntityResolver().getObjEntity(SimpleLockingTestEntity.class)
-                .getDbEntity();
-
-        DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName());
-        InsertBatchQuery insertQuery = new InsertBatchQuery(entity, 1);
-        InsertBatchTranslator builder = new InsertBatchTranslator(insertQuery, adapter);
-        String generatedSql = builder.getSql();
-        assertNotNull(generatedSql);
-        assertEquals("INSERT INTO " + entity.getName() + " (DESCRIPTION, LOCKING_TEST_ID, NAME) VALUES (?, ?, ?)",
-                generatedSql);
-    }
-
-    public void testCreateSqlStringWithIdentifiersQuote() throws Exception {
-        DbEntity entity = runtime.getDataDomain().getEntityResolver().getObjEntity(SimpleLockingTestEntity.class)
-                .getDbEntity();
-        try {
-
-            entity.getDataMap().setQuotingSQLIdentifiers(true);
-
-            JdbcAdapter adapter = (JdbcAdapter) this.adapter;
-
-            InsertBatchQuery insertQuery = new InsertBatchQuery(entity, 1);
-            InsertBatchTranslator builder = new InsertBatchTranslator(insertQuery, adapter);
-            String generatedSql = builder.getSql();
-            String charStart = unitAdapter.getIdentifiersStartQuote();
-            String charEnd = unitAdapter.getIdentifiersEndQuote();
-            assertNotNull(generatedSql);
-            assertEquals("INSERT INTO " + charStart + entity.getName() + charEnd + " (" + charStart + "DESCRIPTION"
-                    + charEnd + ", " + charStart + "LOCKING_TEST_ID" + charEnd + ", " + charStart + "NAME" + charEnd
-                    + ") VALUES (?, ?, ?)", generatedSql);
-        } finally {
-            entity.getDataMap().setQuotingSQLIdentifiers(false);
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e42c376c/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/SoftDeleteBatchTranslatorIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/SoftDeleteBatchTranslatorIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/SoftDeleteBatchTranslatorIT.java
new file mode 100644
index 0000000..1309e7c
--- /dev/null
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/SoftDeleteBatchTranslatorIT.java
@@ -0,0 +1,173 @@
+/*****************************************************************
+ *   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.access.translator.batch;
+
+import org.apache.cayenne.ObjectContext;
+import org.apache.cayenne.PersistenceState;
+import org.apache.cayenne.access.DataNode;
+import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.dba.JdbcAdapter;
+import org.apache.cayenne.di.AdhocObjectFactory;
+import org.apache.cayenne.di.Inject;
+import org.apache.cayenne.exp.ExpressionFactory;
+import org.apache.cayenne.map.DbAttribute;
+import org.apache.cayenne.map.DbEntity;
+import org.apache.cayenne.query.DeleteBatchQuery;
+import org.apache.cayenne.query.SQLTemplate;
+import org.apache.cayenne.query.SelectQuery;
+import org.apache.cayenne.test.parallel.ParallelTestContainer;
+import org.apache.cayenne.testdo.locking.SoftDelete;
+import org.apache.cayenne.unit.UnitDbAdapter;
+import org.apache.cayenne.unit.di.server.ServerCase;
+import org.apache.cayenne.unit.di.server.UseServerRuntime;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+@UseServerRuntime(ServerCase.LOCKING_PROJECT)
+public class SoftDeleteBatchTranslatorIT extends ServerCase {
+
+    @Inject
+    private ObjectContext context;
+
+    @Inject
+    protected DbAdapter adapter;
+
+    @Inject
+    private DataNode dataNode;
+
+    @Inject
+    private UnitDbAdapter unitAdapter;
+
+    @Inject
+    private AdhocObjectFactory objectFactory;
+
+    private DeleteBatchTranslator createTranslator(DeleteBatchQuery query) {
+        JdbcAdapter adapter = objectFactory.newInstance(JdbcAdapter.class, JdbcAdapter.class.getName());
+        return createTranslator(query, adapter);
+    }
+
+    private DeleteBatchTranslator createTranslator(DeleteBatchQuery query, JdbcAdapter adapter) {
+        return (DeleteBatchTranslator) new SoftDeleteTranslatorFactory().translator(query, adapter, null);
+    }
+
+    public void testCreateSqlString() throws Exception {
+        DbEntity entity = context.getEntityResolver().getObjEntity(SoftDelete.class).getDbEntity();
+
+        List<DbAttribute> idAttributes = Collections.singletonList(entity.getAttribute("ID"));
+
+        DeleteBatchQuery deleteQuery = new DeleteBatchQuery(entity, idAttributes, Collections.<String> emptySet(), 1);
+        DeleteBatchTranslator builder = createTranslator(deleteQuery);
+        String generatedSql = builder.getSql();
+        assertNotNull(generatedSql);
+        assertEquals("UPDATE " + entity.getName() + " SET DELETED = ? WHERE ID = ?", generatedSql);
+    }
+
+    public void testCreateSqlStringWithNulls() throws Exception {
+        DbEntity entity = context.getEntityResolver().getObjEntity(SoftDelete.class).getDbEntity();
+
+        List<DbAttribute> idAttributes = Arrays.asList(entity.getAttribute("ID"), entity.getAttribute("NAME"));
+
+        Collection<String> nullAttributes = Collections.singleton("NAME");
+
+        DeleteBatchQuery deleteQuery = new DeleteBatchQuery(entity, idAttributes, nullAttributes, 1);
+        DeleteBatchTranslator builder = createTranslator(deleteQuery);
+        String generatedSql = builder.getSql();
+        assertNotNull(generatedSql);
+        assertEquals("UPDATE " + entity.getName() + " SET DELETED = ? WHERE ID = ? AND NAME IS NULL", generatedSql);
+    }
+
+    public void testCreateSqlStringWithIdentifiersQuote() throws Exception {
+        DbEntity entity = context.getEntityResolver().getObjEntity(SoftDelete.class).getDbEntity();
+        try {
+
+            entity.getDataMap().setQuotingSQLIdentifiers(true);
+
+            List<DbAttribute> idAttributes = Collections.singletonList(entity.getAttribute("ID"));
+
+            DeleteBatchQuery deleteQuery = new DeleteBatchQuery(entity, idAttributes, Collections.<String> emptySet(),
+                    1);
+            JdbcAdapter adapter = (JdbcAdapter) this.adapter;
+            DeleteBatchTranslator builder = createTranslator(deleteQuery, adapter);
+            String generatedSql = builder.getSql();
+
+            String charStart = unitAdapter.getIdentifiersStartQuote();
+            String charEnd = unitAdapter.getIdentifiersEndQuote();
+
+            assertNotNull(generatedSql);
+            assertEquals("UPDATE " + charStart + entity.getName() + charEnd + " SET " + charStart + "DELETED" + charEnd
+                    + " = ? WHERE " + charStart + "ID" + charEnd + " = ?", generatedSql);
+        } finally {
+            entity.getDataMap().setQuotingSQLIdentifiers(false);
+        }
+
+    }
+
+    public void testUpdate() throws Exception {
+
+        final DbEntity entity = context.getEntityResolver().getObjEntity(SoftDelete.class).getDbEntity();
+
+        JdbcAdapter adapter = (JdbcAdapter) this.adapter;
+        BatchTranslatorFactory oldFactory = dataNode.getBatchTranslatorFactory();
+        try {
+            dataNode.setBatchTranslatorFactory(new SoftDeleteTranslatorFactory());
+
+            final SoftDelete test = context.newObject(SoftDelete.class);
+            test.setName("SoftDeleteBatchQueryBuilderTest");
+            context.commitChanges();
+
+            final SelectQuery query = new SelectQuery(SoftDelete.class);
+
+            new ParallelTestContainer() {
+
+                @Override
+                protected void assertResult() throws Exception {
+                    query.setQualifier(ExpressionFactory.matchExp("name", test.getName()));
+                    assertEquals(1, context.performQuery(query).size());
+
+                    query.andQualifier(ExpressionFactory.matchDbExp("DELETED", true));
+                    assertEquals(0, context.performQuery(query).size());
+                }
+            }.runTest(200);
+
+            context.deleteObjects(test);
+            assertEquals(test.getPersistenceState(), PersistenceState.DELETED);
+            context.commitChanges();
+
+            new ParallelTestContainer() {
+
+                @Override
+                protected void assertResult() throws Exception {
+                    query.setQualifier(ExpressionFactory.matchExp("name", test.getName()));
+                    assertEquals(0, context.performQuery(query).size());
+
+                    SQLTemplate template = new SQLTemplate(entity, "SELECT * FROM SOFT_DELETE");
+                    template.setFetchingDataRows(true);
+                    assertEquals(1, context.performQuery(template).size());
+                }
+            }.runTest(200);
+        } finally {
+            context.performQuery(new SQLTemplate(entity, "DELETE FROM SOFT_DELETE"));
+            dataNode.setBatchTranslatorFactory(oldFactory);
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e42c376c/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/SoftDeleteBatchTranslatorTest.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/SoftDeleteBatchTranslatorTest.java b/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/SoftDeleteBatchTranslatorTest.java
deleted file mode 100644
index 942ae13..0000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/SoftDeleteBatchTranslatorTest.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*****************************************************************
- *   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.access.translator.batch;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.cayenne.ObjectContext;
-import org.apache.cayenne.PersistenceState;
-import org.apache.cayenne.access.DataNode;
-import org.apache.cayenne.access.translator.batch.BatchTranslatorFactory;
-import org.apache.cayenne.access.translator.batch.DeleteBatchTranslator;
-import org.apache.cayenne.access.translator.batch.SoftDeleteTranslatorFactory;
-import org.apache.cayenne.dba.DbAdapter;
-import org.apache.cayenne.dba.JdbcAdapter;
-import org.apache.cayenne.di.AdhocObjectFactory;
-import org.apache.cayenne.di.Inject;
-import org.apache.cayenne.exp.ExpressionFactory;
-import org.apache.cayenne.map.DbAttribute;
-import org.apache.cayenne.map.DbEntity;
-import org.apache.cayenne.query.DeleteBatchQuery;
-import org.apache.cayenne.query.SQLTemplate;
-import org.apache.cayenne.query.SelectQuery;
-import org.apache.cayenne.test.parallel.ParallelTestContainer;
-import org.apache.cayenne.testdo.locking.SoftDelete;
-import org.apache.cayenne.unit.UnitDbAdapter;
-import org.apache.cayenne.unit.di.server.ServerCase;
-import org.apache.cayenne.unit.di.server.UseServerRuntime;
-
-@UseServerRuntime(ServerCase.LOCKING_PROJECT)
-public class SoftDeleteBatchTranslatorTest extends ServerCase {
-
-    @Inject
-    private ObjectContext context;
-
-    @Inject
-    protected DbAdapter adapter;
-
-    @Inject
-    private DataNode dataNode;
-
-    @Inject
-    private UnitDbAdapter unitAdapter;
-
-    @Inject
-    private AdhocObjectFactory objectFactory;
-
-    private DeleteBatchTranslator createTranslator(DeleteBatchQuery query) {
-        JdbcAdapter adapter = objectFactory.newInstance(JdbcAdapter.class, JdbcAdapter.class.getName());
-        return createTranslator(query, adapter);
-    }
-
-    private DeleteBatchTranslator createTranslator(DeleteBatchQuery query, JdbcAdapter adapter) {
-        return (DeleteBatchTranslator) new SoftDeleteTranslatorFactory().translator(query, adapter, null);
-    }
-
-    public void testCreateSqlString() throws Exception {
-        DbEntity entity = context.getEntityResolver().getObjEntity(SoftDelete.class).getDbEntity();
-
-        List<DbAttribute> idAttributes = Collections.singletonList(entity.getAttribute("ID"));
-
-        DeleteBatchQuery deleteQuery = new DeleteBatchQuery(entity, idAttributes, Collections.<String> emptySet(), 1);
-        DeleteBatchTranslator builder = createTranslator(deleteQuery);
-        String generatedSql = builder.getSql();
-        assertNotNull(generatedSql);
-        assertEquals("UPDATE " + entity.getName() + " SET DELETED = ? WHERE ID = ?", generatedSql);
-    }
-
-    public void testCreateSqlStringWithNulls() throws Exception {
-        DbEntity entity = context.getEntityResolver().getObjEntity(SoftDelete.class).getDbEntity();
-
-        List<DbAttribute> idAttributes = Arrays.asList(entity.getAttribute("ID"), entity.getAttribute("NAME"));
-
-        Collection<String> nullAttributes = Collections.singleton("NAME");
-
-        DeleteBatchQuery deleteQuery = new DeleteBatchQuery(entity, idAttributes, nullAttributes, 1);
-        DeleteBatchTranslator builder = createTranslator(deleteQuery);
-        String generatedSql = builder.getSql();
-        assertNotNull(generatedSql);
-        assertEquals("UPDATE " + entity.getName() + " SET DELETED = ? WHERE ID = ? AND NAME IS NULL", generatedSql);
-    }
-
-    public void testCreateSqlStringWithIdentifiersQuote() throws Exception {
-        DbEntity entity = context.getEntityResolver().getObjEntity(SoftDelete.class).getDbEntity();
-        try {
-
-            entity.getDataMap().setQuotingSQLIdentifiers(true);
-
-            List<DbAttribute> idAttributes = Collections.singletonList(entity.getAttribute("ID"));
-
-            DeleteBatchQuery deleteQuery = new DeleteBatchQuery(entity, idAttributes, Collections.<String> emptySet(),
-                    1);
-            JdbcAdapter adapter = (JdbcAdapter) this.adapter;
-            DeleteBatchTranslator builder = createTranslator(deleteQuery, adapter);
-            String generatedSql = builder.getSql();
-
-            String charStart = unitAdapter.getIdentifiersStartQuote();
-            String charEnd = unitAdapter.getIdentifiersEndQuote();
-
-            assertNotNull(generatedSql);
-            assertEquals("UPDATE " + charStart + entity.getName() + charEnd + " SET " + charStart + "DELETED" + charEnd
-                    + " = ? WHERE " + charStart + "ID" + charEnd + " = ?", generatedSql);
-        } finally {
-            entity.getDataMap().setQuotingSQLIdentifiers(false);
-        }
-
-    }
-
-    public void testUpdate() throws Exception {
-
-        final DbEntity entity = context.getEntityResolver().getObjEntity(SoftDelete.class).getDbEntity();
-
-        JdbcAdapter adapter = (JdbcAdapter) this.adapter;
-        BatchTranslatorFactory oldFactory = dataNode.getBatchTranslatorFactory();
-        try {
-            dataNode.setBatchTranslatorFactory(new SoftDeleteTranslatorFactory());
-
-            final SoftDelete test = context.newObject(SoftDelete.class);
-            test.setName("SoftDeleteBatchQueryBuilderTest");
-            context.commitChanges();
-
-            final SelectQuery query = new SelectQuery(SoftDelete.class);
-
-            new ParallelTestContainer() {
-
-                @Override
-                protected void assertResult() throws Exception {
-                    query.setQualifier(ExpressionFactory.matchExp("name", test.getName()));
-                    assertEquals(1, context.performQuery(query).size());
-
-                    query.andQualifier(ExpressionFactory.matchDbExp("DELETED", true));
-                    assertEquals(0, context.performQuery(query).size());
-                }
-            }.runTest(200);
-
-            context.deleteObjects(test);
-            assertEquals(test.getPersistenceState(), PersistenceState.DELETED);
-            context.commitChanges();
-
-            new ParallelTestContainer() {
-
-                @Override
-                protected void assertResult() throws Exception {
-                    query.setQualifier(ExpressionFactory.matchExp("name", test.getName()));
-                    assertEquals(0, context.performQuery(query).size());
-
-                    SQLTemplate template = new SQLTemplate(entity, "SELECT * FROM SOFT_DELETE");
-                    template.setFetchingDataRows(true);
-                    assertEquals(1, context.performQuery(template).size());
-                }
-            }.runTest(200);
-        } finally {
-            context.performQuery(new SQLTemplate(entity, "DELETE FROM SOFT_DELETE"));
-            dataNode.setBatchTranslatorFactory(oldFactory);
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e42c376c/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/UpdateBatchTranslatorIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/UpdateBatchTranslatorIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/UpdateBatchTranslatorIT.java
new file mode 100644
index 0000000..4b77c84
--- /dev/null
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/UpdateBatchTranslatorIT.java
@@ -0,0 +1,159 @@
+/*****************************************************************
+ *   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.access.translator.batch;
+
+import org.apache.cayenne.configuration.server.ServerRuntime;
+import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.dba.JdbcAdapter;
+import org.apache.cayenne.di.AdhocObjectFactory;
+import org.apache.cayenne.di.Inject;
+import org.apache.cayenne.map.DbEntity;
+import org.apache.cayenne.query.UpdateBatchQuery;
+import org.apache.cayenne.testdo.locking.SimpleLockingTestEntity;
+import org.apache.cayenne.unit.UnitDbAdapter;
+import org.apache.cayenne.unit.di.server.ServerCase;
+import org.apache.cayenne.unit.di.server.UseServerRuntime;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import static org.mockito.Mockito.mock;
+
+@UseServerRuntime(ServerCase.LOCKING_PROJECT)
+public class UpdateBatchTranslatorIT extends ServerCase {
+
+    @Inject
+    private ServerRuntime runtime;
+
+    @Inject
+    private DbAdapter adapter;
+
+    @Inject
+    private UnitDbAdapter unitAdapter;
+
+    @Inject
+    private AdhocObjectFactory objectFactory;
+
+    public void testConstructor() throws Exception {
+        DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName());
+        UpdateBatchTranslator builder = new UpdateBatchTranslator(mock(UpdateBatchQuery.class), adapter, null);
+        assertSame(adapter, builder.adapter);
+    }
+
+    public void testCreateSqlString() throws Exception {
+        DbEntity entity = runtime.getDataDomain().getEntityResolver().getObjEntity(SimpleLockingTestEntity.class)
+                .getDbEntity();
+
+        List idAttributes = Collections.singletonList(entity.getAttribute("LOCKING_TEST_ID"));
+        List updatedAttributes = Collections.singletonList(entity.getAttribute("DESCRIPTION"));
+
+        UpdateBatchQuery updateQuery = new UpdateBatchQuery(entity, idAttributes, updatedAttributes,
+                Collections.<String> emptySet(), 1);
+
+        DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName());
+        UpdateBatchTranslator builder = new UpdateBatchTranslator(updateQuery, adapter, null);
+        String generatedSql = builder.getSql();
+        assertNotNull(generatedSql);
+        assertEquals("UPDATE " + entity.getName() + " SET DESCRIPTION = ? WHERE LOCKING_TEST_ID = ?", generatedSql);
+    }
+
+    public void testCreateSqlStringWithNulls() throws Exception {
+        DbEntity entity = runtime.getDataDomain().getEntityResolver().getObjEntity(SimpleLockingTestEntity.class)
+                .getDbEntity();
+
+        List idAttributes = Arrays.asList(entity.getAttribute("LOCKING_TEST_ID"), entity.getAttribute("NAME"));
+
+        List updatedAttributes = Collections.singletonList(entity.getAttribute("DESCRIPTION"));
+
+        Collection nullAttributes = Collections.singleton("NAME");
+
+        UpdateBatchQuery updateQuery = new UpdateBatchQuery(entity, idAttributes, updatedAttributes, nullAttributes, 1);
+
+        DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName());
+        UpdateBatchTranslator builder = new UpdateBatchTranslator(updateQuery, adapter, null);
+        String generatedSql = builder.getSql();
+        assertNotNull(generatedSql);
+
+        assertEquals("UPDATE " + entity.getName() + " SET DESCRIPTION = ? WHERE LOCKING_TEST_ID = ? AND NAME IS NULL",
+                generatedSql);
+    }
+
+    public void testCreateSqlStringWithIdentifiersQuote() throws Exception {
+        DbEntity entity = runtime.getDataDomain().getEntityResolver().getObjEntity(SimpleLockingTestEntity.class)
+                .getDbEntity();
+        try {
+
+            entity.getDataMap().setQuotingSQLIdentifiers(true);
+            List idAttributes = Collections.singletonList(entity.getAttribute("LOCKING_TEST_ID"));
+            List updatedAttributes = Collections.singletonList(entity.getAttribute("DESCRIPTION"));
+
+            UpdateBatchQuery updateQuery = new UpdateBatchQuery(entity, idAttributes, updatedAttributes,
+                    Collections.<String> emptySet(), 1);
+            JdbcAdapter adapter = (JdbcAdapter) this.adapter;
+
+            UpdateBatchTranslator builder = new UpdateBatchTranslator(updateQuery, adapter, null);
+            String generatedSql = builder.getSql();
+
+            String charStart = unitAdapter.getIdentifiersStartQuote();
+            String charEnd = unitAdapter.getIdentifiersEndQuote();
+
+            assertNotNull(generatedSql);
+            assertEquals("UPDATE " + charStart + entity.getName() + charEnd + " SET " + charStart + "DESCRIPTION"
+                    + charEnd + " = ? WHERE " + charStart + "LOCKING_TEST_ID" + charEnd + " = ?", generatedSql);
+
+        } finally {
+            entity.getDataMap().setQuotingSQLIdentifiers(false);
+        }
+    }
+
+    public void testCreateSqlStringWithNullsWithIdentifiersQuote() throws Exception {
+        DbEntity entity = runtime.getDataDomain().getEntityResolver().getObjEntity(SimpleLockingTestEntity.class)
+                .getDbEntity();
+        try {
+
+            entity.getDataMap().setQuotingSQLIdentifiers(true);
+            List idAttributes = Arrays.asList(entity.getAttribute("LOCKING_TEST_ID"), entity.getAttribute("NAME"));
+
+            List updatedAttributes = Collections.singletonList(entity.getAttribute("DESCRIPTION"));
+
+            Collection nullAttributes = Collections.singleton("NAME");
+
+            UpdateBatchQuery updateQuery = new UpdateBatchQuery(entity, idAttributes, updatedAttributes,
+                    nullAttributes, 1);
+            JdbcAdapter adapter = (JdbcAdapter) this.adapter;
+
+            UpdateBatchTranslator builder = new UpdateBatchTranslator(updateQuery, adapter, null);
+            String generatedSql = builder.getSql();
+            assertNotNull(generatedSql);
+
+            String charStart = unitAdapter.getIdentifiersStartQuote();
+            String charEnd = unitAdapter.getIdentifiersEndQuote();
+            assertEquals("UPDATE " + charStart + entity.getName() + charEnd + " SET " + charStart + "DESCRIPTION"
+                    + charEnd + " = ? WHERE " + charStart + "LOCKING_TEST_ID" + charEnd + " = ? AND " + charStart
+                    + "NAME" + charEnd + " IS NULL", generatedSql);
+
+        } finally {
+            entity.getDataMap().setQuotingSQLIdentifiers(false);
+        }
+    }
+
+}