From f43de6a7e6533efd6bcac8f9c55324754496c6b1 Mon Sep 17 00:00:00 2001 From: Arseni Bulatski Date: Wed, 4 Oct 2017 10:39:37 +0300 Subject: [PATCH] CAY-2200 Update DB2 support. Many tests cases are failing now. --- .../cayenne/dbsync/merge/token/ValueForNullIT.java | 10 ++++++++++ .../dbsync/merge/token/db/SetPrimaryKeyToDbIT.java | 13 ++++++++++++- .../org/apache/cayenne/unit/DB2UnitDbAdapter.java | 7 +++++++ .../java/org/apache/cayenne/unit/UnitDbAdapter.java | 3 +++ .../apache/cayenne/unit/di/server/DBCleaner.java | 6 +++++- docs/doc/src/main/resources/RELEASE-NOTES.txt | 2 +- 6 files changed, 38 insertions(+), 3 deletions(-) diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/token/ValueForNullIT.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/token/ValueForNullIT.java index 823b56bf5b..3bdbfb35a8 100644 --- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/token/ValueForNullIT.java +++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/token/ValueForNullIT.java @@ -34,8 +34,10 @@ import org.apache.cayenne.map.ObjAttribute; import org.apache.cayenne.map.ObjEntity; import org.apache.cayenne.query.SelectQuery; +import org.apache.cayenne.test.jdbc.DBHelper; import org.junit.Test; +import java.sql.Connection; import java.sql.Types; import java.util.List; @@ -49,6 +51,8 @@ public class ValueForNullIT extends MergeCase { @Inject private DataContext context; + @Inject + DBHelper dbHelper; @Test public void test() throws Exception { @@ -59,6 +63,7 @@ public void test() throws Exception { // insert some rows before adding "not null" column final int nrows = 10; + for (int i = 0; i < nrows; i++) { DataObject o = (DataObject) context.newObject("Painting"); o.writeProperty("paintingTitle", "ptitle" + i); @@ -92,6 +97,11 @@ public void test() throws Exception { // check that is was merged assertTokensAndExecute(0, 0); + //used to REORG TABLE only for db2 + try(Connection con = dbHelper.getConnection()) { + accessStackAdapter.cleanDB(con, dbEntity.getFullyQualifiedName()); + } + // check values for null Expression qual = ExpressionFactory.matchExp(objAttr.getName(), DEFAULT_VALUE_STRING); SelectQuery query = new SelectQuery("Painting", qual); diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/token/db/SetPrimaryKeyToDbIT.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/token/db/SetPrimaryKeyToDbIT.java index 1676bb7b9b..578aaf94f2 100644 --- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/token/db/SetPrimaryKeyToDbIT.java +++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/token/db/SetPrimaryKeyToDbIT.java @@ -19,17 +19,22 @@ package org.apache.cayenne.dbsync.merge.token.db; +import java.sql.Connection; import java.sql.Types; import org.apache.cayenne.dbsync.merge.MergeCase; +import org.apache.cayenne.di.Inject; import org.apache.cayenne.map.DbAttribute; import org.apache.cayenne.map.DbEntity; +import org.apache.cayenne.test.jdbc.DBHelper; import org.junit.Test; public class SetPrimaryKeyToDbIT extends MergeCase { - + @Inject + DBHelper dbHelper; @Test public void test() throws Exception { + dropTableIfPresent("NEW_TABLE"); assertTokensAndExecute(0, 0); @@ -37,6 +42,7 @@ public void test() throws Exception { DbAttribute e1col1 = new DbAttribute("ID1", Types.INTEGER, dbEntity1); e1col1.setMandatory(true); + e1col1.setPrimaryKey(true); dbEntity1.addAttribute(e1col1); map.addDbEntity(dbEntity1); @@ -51,6 +57,11 @@ public void test() throws Exception { assertTokensAndExecute(2, 0); assertTokensAndExecute(0, 0); + //used to REORG TABLE only for db2 + try(Connection con = dbHelper.getConnection()) { + accessStackAdapter.cleanDB(con, dbEntity1.getFullyQualifiedName()); + } + e1col1.setPrimaryKey(false); e1col2.setPrimaryKey(true); diff --git a/cayenne-server/src/test/java/org/apache/cayenne/unit/DB2UnitDbAdapter.java b/cayenne-server/src/test/java/org/apache/cayenne/unit/DB2UnitDbAdapter.java index 0eeb26b0e0..707b422042 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/unit/DB2UnitDbAdapter.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/unit/DB2UnitDbAdapter.java @@ -73,4 +73,11 @@ public boolean supportsExpressionInHaving() { public boolean supportsSelectBooleanExpression() { return false; } + + @Override + public void cleanDB(Connection conn, String tableName) throws Exception { + StringBuffer sql = new StringBuffer(); + sql.append("Call Sysproc.admin_cmd ('reorg Table ").append(tableName).append(" ')"); + executeDDL(conn,sql.toString()); + } } diff --git a/cayenne-server/src/test/java/org/apache/cayenne/unit/UnitDbAdapter.java b/cayenne-server/src/test/java/org/apache/cayenne/unit/UnitDbAdapter.java index 0a832437b3..3373d23ab6 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/unit/UnitDbAdapter.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/unit/UnitDbAdapter.java @@ -24,6 +24,7 @@ import org.apache.cayenne.configuration.RuntimeProperties; import org.apache.cayenne.dba.DbAdapter; import org.apache.cayenne.dba.QuotingStrategy; +import org.apache.cayenne.dba.db2.DB2Adapter; import org.apache.cayenne.di.Inject; import org.apache.cayenne.exp.parser.ASTExtract; import org.apache.cayenne.map.DataMap; @@ -403,4 +404,6 @@ public boolean supportsSelectBooleanExpression() { public boolean supportsExtractPart(ASTExtract.DateTimePart part) { return true; } + + public void cleanDB(Connection conn, String tableName) throws Exception {} } diff --git a/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/DBCleaner.java b/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/DBCleaner.java index 04f8629583..27d9ffc9e9 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/DBCleaner.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/DBCleaner.java @@ -30,6 +30,7 @@ import org.apache.cayenne.unit.UnitDbAdapter; import java.net.URL; +import java.sql.Connection; import java.sql.SQLException; import java.util.List; @@ -52,7 +53,7 @@ public DBCleaner(FlavoredDBHelper dbHelper, String location) { this.location = location; } - public void clean() throws SQLException { + public void clean() throws Exception { XMLDataChannelDescriptorLoader loader = new XMLDataChannelDescriptorLoader(); injector.injectMembers(loader); @@ -63,6 +64,9 @@ public void clean() throws SQLException { List entities = schemaBuilder.dbEntitiesInDeleteOrder(map); for (DbEntity entity : entities) { + try(Connection con = dbHelper.getConnection()) { + accessStackAdapter.cleanDB(con, entity.getName()); + } dbHelper.deleteAll(entity.getName()); } } diff --git a/docs/doc/src/main/resources/RELEASE-NOTES.txt b/docs/doc/src/main/resources/RELEASE-NOTES.txt index d330e5f8bd..0f5d02dad2 100644 --- a/docs/doc/src/main/resources/RELEASE-NOTES.txt +++ b/docs/doc/src/main/resources/RELEASE-NOTES.txt @@ -24,7 +24,7 @@ CAY-2346 Field-based data object with Map-based storage fallback CAY-2351 Remove commons-collections usage completely Bug Fixes: - +CAY-2200 Update DB2 support. Many tests cases are failing now. CAY-2312 Modeler: Undo does not work for checkboxes CAY-2318 Modeler: Query. Exception after Undo clicking CAY-2319 Modeler: Embeddable > Attributes. Undo does not cancel pasted objects