You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by sk...@apache.org on 2016/12/22 11:04:58 UTC
[1/4] cayenne git commit: CAY-2177 Sync auto generated state of PK
between model and DB Status of databases that support auto generated keys
feature - tested on: DB2, MySQL, Postgres, H2,
Derby - not tested on: sqlite and SQLServer Additional changes:
Repository: cayenne
Updated Branches:
refs/heads/master d01cc37aa -> c32288d51
CAY-2177 Sync auto generated state of PK between model and DB
Status of databases that support auto generated keys feature
- tested on: DB2, MySQL, Postgres, H2, Derby
- not tested on: sqlite and SQLServer
Additional changes:
- new version for derby dependency
- turn on support for auto-generated columns in HSQLDB
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/d6d42516
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/d6d42516
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/d6d42516
Branch: refs/heads/master
Commit: d6d4251647bbafe202ebbda5b2d7c8fa19311ec2
Parents: d01cc37
Author: Nikita Timofeev <st...@gmail.com>
Authored: Wed Dec 21 18:44:35 2016 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Wed Dec 21 18:44:35 2016 +0300
----------------------------------------------------------------------
.../cayenne/dbsync/merge/DbAttributeMerger.java | 2 +-
.../merge/factory/DB2MergerTokenFactory.java | 22 +++
.../factory/DefaultMergerTokenFactory.java | 12 ++
.../merge/factory/DerbyMergerTokenFactory.java | 20 +++
.../merge/factory/H2MergerTokenFactory.java | 25 +++
.../merge/factory/HSQLMergerTokenFactory.java | 20 +++
.../merge/factory/IngresMergerTokenFactory.java | 21 +++
.../merge/factory/MergerTokenFactory.java | 4 +
.../merge/factory/MySQLMergerTokenFactory.java | 28 ++++
.../factory/PostgresMergerTokenFactory.java | 21 +++
.../factory/SQLServerMergerTokenFactory.java | 21 +++
.../merge/token/db/AddRelationshipToDb.java | 2 +-
.../merge/token/db/SetGeneratedFlagToDb.java | 88 ++++++++++
.../token/model/AddRelationshipToModel.java | 2 +-
.../token/model/SetGeneratedFlagToModel.java | 51 ++++++
.../merge/token/db/SetGeneratedFlagToDbIT.java | 161 +++++++++++++++++++
.../token/model/SetGeneratedFlagToModelIT.java | 67 ++++++++
.../cayenne/dba/hsqldb/HSQLDBAdapter.java | 5 +
.../apache/cayenne/unit/DB2UnitDbAdapter.java | 10 ++
.../apache/cayenne/unit/H2UnitDbAdapter.java | 4 +
.../cayenne/unit/HSQLDBUnitDbAdapter.java | 10 ++
.../apache/cayenne/unit/MySQLUnitDbAdapter.java | 10 ++
.../cayenne/unit/PostgresUnitDbAdapter.java | 5 +
.../org/apache/cayenne/unit/UnitDbAdapter.java | 14 +-
pom.xml | 2 +-
25 files changed, 622 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d6d42516/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DbAttributeMerger.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DbAttributeMerger.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DbAttributeMerger.java
index 5c37489..0ee74b3 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DbAttributeMerger.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DbAttributeMerger.java
@@ -158,7 +158,7 @@ class DbAttributeMerger extends AbstractMerger<DbEntity, DbAttribute> {
return;
}
-
+ tokens.add(getTokenFactory().createSetGeneratedFlagToDb(original.getEntity(), original, original.isGenerated()));
}
@Override
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d6d42516/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/DB2MergerTokenFactory.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/DB2MergerTokenFactory.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/DB2MergerTokenFactory.java
index 04669f0..83a43d0 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/DB2MergerTokenFactory.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/DB2MergerTokenFactory.java
@@ -18,9 +18,11 @@
****************************************************************/
package org.apache.cayenne.dbsync.merge.factory;
+import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dba.QuotingStrategy;
import org.apache.cayenne.dbsync.merge.token.MergerToken;
import org.apache.cayenne.dbsync.merge.token.db.SetColumnTypeToDb;
+import org.apache.cayenne.dbsync.merge.token.db.SetGeneratedFlagToDb;
import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.map.DbEntity;
@@ -44,4 +46,24 @@ public class DB2MergerTokenFactory extends DefaultMergerTokenFactory {
}
};
}
+
+ @Override
+ public MergerToken createSetGeneratedFlagToDb(DbEntity entity, DbAttribute column, boolean isGenerated) {
+ return new SetGeneratedFlagToDb(entity, column, isGenerated) {
+ @Override
+ protected void appendAutoIncrement(DbAdapter adapter, StringBuffer builder) {
+ builder.append("SET GENERATED BY DEFAULT AS IDENTITY");
+ }
+
+ @Override
+ protected void appendDropAutoIncrement(DbAdapter adapter, StringBuffer builder) {
+ builder.append("DROP IDENTITY");
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return false;
+ }
+ };
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d6d42516/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/DefaultMergerTokenFactory.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/DefaultMergerTokenFactory.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/DefaultMergerTokenFactory.java
index 54132f1..4fce6bf 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/DefaultMergerTokenFactory.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/DefaultMergerTokenFactory.java
@@ -28,6 +28,7 @@ import org.apache.cayenne.dbsync.merge.token.db.DropRelationshipToDb;
import org.apache.cayenne.dbsync.merge.token.db.DropTableToDb;
import org.apache.cayenne.dbsync.merge.token.db.SetAllowNullToDb;
import org.apache.cayenne.dbsync.merge.token.db.SetColumnTypeToDb;
+import org.apache.cayenne.dbsync.merge.token.db.SetGeneratedFlagToDb;
import org.apache.cayenne.dbsync.merge.token.db.SetNotNullToDb;
import org.apache.cayenne.dbsync.merge.token.db.SetPrimaryKeyToDb;
import org.apache.cayenne.dbsync.merge.token.db.SetValueForNullToDb;
@@ -39,6 +40,7 @@ import org.apache.cayenne.dbsync.merge.token.model.DropRelationshipToModel;
import org.apache.cayenne.dbsync.merge.token.model.DropTableToModel;
import org.apache.cayenne.dbsync.merge.token.model.SetAllowNullToModel;
import org.apache.cayenne.dbsync.merge.token.model.SetColumnTypeToModel;
+import org.apache.cayenne.dbsync.merge.token.model.SetGeneratedFlagToModel;
import org.apache.cayenne.dbsync.merge.token.model.SetNotNullToModel;
import org.apache.cayenne.dbsync.merge.token.model.SetPrimaryKeyToModel;
import org.apache.cayenne.map.DbAttribute;
@@ -178,4 +180,14 @@ public class DefaultMergerTokenFactory implements MergerTokenFactory {
primaryKeyNew,
detectedPrimaryKeyName);
}
+
+ @Override
+ public MergerToken createSetGeneratedFlagToDb(DbEntity entity, DbAttribute column, boolean isGenerated) {
+ return new SetGeneratedFlagToDb(entity, column, isGenerated);
+ }
+
+ @Override
+ public MergerToken createSetGeneratedFlagToModel(DbEntity entity, DbAttribute column, boolean isGenerated) {
+ return new SetGeneratedFlagToModel(entity, column, isGenerated);
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d6d42516/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/DerbyMergerTokenFactory.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/DerbyMergerTokenFactory.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/DerbyMergerTokenFactory.java
index b91234d..c8d5b1d 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/DerbyMergerTokenFactory.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/DerbyMergerTokenFactory.java
@@ -23,6 +23,7 @@ import org.apache.cayenne.dba.QuotingStrategy;
import org.apache.cayenne.dbsync.merge.token.MergerToken;
import org.apache.cayenne.dbsync.merge.token.db.SetAllowNullToDb;
import org.apache.cayenne.dbsync.merge.token.db.SetColumnTypeToDb;
+import org.apache.cayenne.dbsync.merge.token.db.SetGeneratedFlagToDb;
import org.apache.cayenne.dbsync.merge.token.db.SetNotNullToDb;
import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.map.DbEntity;
@@ -82,4 +83,23 @@ public class DerbyMergerTokenFactory extends DefaultMergerTokenFactory {
};
}
+ @Override
+ public MergerToken createSetGeneratedFlagToDb(DbEntity entity, DbAttribute column, boolean isGenerated) {
+ return new SetGeneratedFlagToDb(entity, column, isGenerated) {
+ @Override
+ protected void appendAutoIncrement(DbAdapter adapter, StringBuffer builder) {
+ throw new UnsupportedOperationException("Can't automatically alter column to identity. You need to manually alter schema.");
+ }
+
+ @Override
+ protected void appendDropAutoIncrement(DbAdapter adapter, StringBuffer builder) {
+ throw new UnsupportedOperationException("Can't automatically drop identity. You need to manually alter schema.");
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return false;
+ }
+ };
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d6d42516/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/H2MergerTokenFactory.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/H2MergerTokenFactory.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/H2MergerTokenFactory.java
index c2d0e5f..f920048 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/H2MergerTokenFactory.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/H2MergerTokenFactory.java
@@ -24,6 +24,7 @@ import org.apache.cayenne.dba.QuotingStrategy;
import org.apache.cayenne.dbsync.merge.token.MergerToken;
import org.apache.cayenne.dbsync.merge.token.db.SetAllowNullToDb;
import org.apache.cayenne.dbsync.merge.token.db.SetColumnTypeToDb;
+import org.apache.cayenne.dbsync.merge.token.db.SetGeneratedFlagToDb;
import org.apache.cayenne.dbsync.merge.token.db.SetPrimaryKeyToDb;
import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.map.DbEntity;
@@ -79,4 +80,28 @@ public class H2MergerTokenFactory extends DefaultMergerTokenFactory {
};
}
+
+ @Override
+ public MergerToken createSetGeneratedFlagToDb(DbEntity entity, DbAttribute column, boolean isGenerated) {
+ return new SetGeneratedFlagToDb(entity, column, isGenerated) {
+ protected void appendAlterColumnClause(DbAdapter adapter, StringBuffer builder) {
+ builder.append(" ALTER COLUMN ");
+ }
+
+ @Override
+ protected void appendAutoIncrement(DbAdapter adapter, StringBuffer builder) {
+ adapter.createTableAppendColumn(builder, this.getColumn());
+ }
+
+ @Override
+ protected void appendDropAutoIncrement(DbAdapter adapter, StringBuffer builder) {
+ throw new UnsupportedOperationException("Can't automatically drop AUTO_INCREMENT in H2 database. You should do this manually.");
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return false;
+ }
+ };
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d6d42516/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/HSQLMergerTokenFactory.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/HSQLMergerTokenFactory.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/HSQLMergerTokenFactory.java
index 5816871..b6aa565 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/HSQLMergerTokenFactory.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/HSQLMergerTokenFactory.java
@@ -23,6 +23,7 @@ import org.apache.cayenne.dba.QuotingStrategy;
import org.apache.cayenne.dbsync.merge.token.MergerToken;
import org.apache.cayenne.dbsync.merge.token.db.SetAllowNullToDb;
import org.apache.cayenne.dbsync.merge.token.db.SetColumnTypeToDb;
+import org.apache.cayenne.dbsync.merge.token.db.SetGeneratedFlagToDb;
import org.apache.cayenne.dbsync.merge.token.db.SetPrimaryKeyToDb;
import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.map.DbEntity;
@@ -79,4 +80,23 @@ public class HSQLMergerTokenFactory extends DefaultMergerTokenFactory {
};
}
+ @Override
+ public MergerToken createSetGeneratedFlagToDb(DbEntity entity, DbAttribute column, boolean isGenerated) {
+ return new SetGeneratedFlagToDb(entity, column, isGenerated) {
+ @Override
+ protected void appendAutoIncrement(DbAdapter adapter, StringBuffer builder) {
+ builder.append("GENERATED BY DEFAULT AS IDENTITY (START WITH 1)");
+ }
+
+ @Override
+ protected void appendDropAutoIncrement(DbAdapter adapter, StringBuffer builder) {
+ builder.append("DROP IDENTITY");
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return false;
+ }
+ };
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d6d42516/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/IngresMergerTokenFactory.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/IngresMergerTokenFactory.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/IngresMergerTokenFactory.java
index 89e329b..512d53b 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/IngresMergerTokenFactory.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/IngresMergerTokenFactory.java
@@ -26,6 +26,7 @@ import org.apache.cayenne.dbsync.merge.token.db.DropColumnToDb;
import org.apache.cayenne.dbsync.merge.token.db.DropRelationshipToDb;
import org.apache.cayenne.dbsync.merge.token.db.SetAllowNullToDb;
import org.apache.cayenne.dbsync.merge.token.db.SetColumnTypeToDb;
+import org.apache.cayenne.dbsync.merge.token.db.SetGeneratedFlagToDb;
import org.apache.cayenne.dbsync.merge.token.db.SetNotNullToDb;
import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.map.DbEntity;
@@ -221,4 +222,24 @@ public class IngresMergerTokenFactory extends DefaultMergerTokenFactory {
}
};
}
+
+ @Override
+ public MergerToken createSetGeneratedFlagToDb(DbEntity entity, DbAttribute column, boolean isGenerated) {
+ return new SetGeneratedFlagToDb(entity, column, isGenerated) {
+ @Override
+ protected void appendAutoIncrement(DbAdapter adapter, StringBuffer builder) {
+ throw new UnsupportedOperationException("Can't automatically alter column to IDENTITY in Ingres database. You should do this manually.");
+ }
+
+ @Override
+ protected void appendDropAutoIncrement(DbAdapter adapter, StringBuffer builder) {
+ builder.append("DROP IDENTITY");
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return false;
+ }
+ };
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d6d42516/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/MergerTokenFactory.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/MergerTokenFactory.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/MergerTokenFactory.java
index c61f1ed..86ebf71 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/MergerTokenFactory.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/MergerTokenFactory.java
@@ -85,4 +85,8 @@ public interface MergerTokenFactory {
Collection<DbAttribute> primaryKeyOriginal,
Collection<DbAttribute> primaryKeyNew,
String detectedPrimaryKeyName);
+
+ MergerToken createSetGeneratedFlagToDb(DbEntity entity, DbAttribute column, boolean isGenerated);
+
+ MergerToken createSetGeneratedFlagToModel(DbEntity entity, DbAttribute column, boolean isGenerated);
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d6d42516/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/MySQLMergerTokenFactory.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/MySQLMergerTokenFactory.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/MySQLMergerTokenFactory.java
index ad49bc0..0321710 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/MySQLMergerTokenFactory.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/MySQLMergerTokenFactory.java
@@ -24,6 +24,7 @@ import org.apache.cayenne.dbsync.merge.token.MergerToken;
import org.apache.cayenne.dbsync.merge.token.db.DropRelationshipToDb;
import org.apache.cayenne.dbsync.merge.token.db.SetAllowNullToDb;
import org.apache.cayenne.dbsync.merge.token.db.SetColumnTypeToDb;
+import org.apache.cayenne.dbsync.merge.token.db.SetGeneratedFlagToDb;
import org.apache.cayenne.dbsync.merge.token.db.SetNotNullToDb;
import org.apache.cayenne.dbsync.merge.token.db.SetPrimaryKeyToDb;
import org.apache.cayenne.map.DbAttribute;
@@ -153,4 +154,31 @@ public class MySQLMergerTokenFactory extends DefaultMergerTokenFactory {
};
}
+
+ @Override
+ public MergerToken createSetGeneratedFlagToDb(DbEntity entity, DbAttribute column, boolean isGenerated) {
+ return new SetGeneratedFlagToDb(entity, column, isGenerated) {
+ protected void appendAlterColumnClause(DbAdapter adapter, StringBuffer builder) {
+ builder.append(" MODIFY ");
+ }
+
+ @Override
+ protected void appendAutoIncrement(DbAdapter adapter, StringBuffer builder) {
+ adapter.createTableAppendColumn(builder, this.getColumn());
+ }
+
+ /**
+ * To drop AUTO_INCREMENT flag update column with all information but w/o AUTO_INCREMENT
+ */
+ @Override
+ protected void appendDropAutoIncrement(DbAdapter adapter, StringBuffer builder) {
+ adapter.createTableAppendColumn(builder, this.getColumn());
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return false;
+ }
+ };
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d6d42516/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/PostgresMergerTokenFactory.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/PostgresMergerTokenFactory.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/PostgresMergerTokenFactory.java
index c85cfdf..9bf6f97 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/PostgresMergerTokenFactory.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/PostgresMergerTokenFactory.java
@@ -18,9 +18,11 @@
****************************************************************/
package org.apache.cayenne.dbsync.merge.factory;
+import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dba.QuotingStrategy;
import org.apache.cayenne.dbsync.merge.token.MergerToken;
import org.apache.cayenne.dbsync.merge.token.db.SetColumnTypeToDb;
+import org.apache.cayenne.dbsync.merge.token.db.SetGeneratedFlagToDb;
import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.map.DbEntity;
@@ -46,4 +48,23 @@ public class PostgresMergerTokenFactory extends DefaultMergerTokenFactory {
};
}
+ @Override
+ public MergerToken createSetGeneratedFlagToDb(DbEntity entity, DbAttribute column, boolean isGenerated) {
+ return new SetGeneratedFlagToDb(entity, column, isGenerated) {
+ @Override
+ protected void appendAutoIncrement(DbAdapter adapter, StringBuffer builder) {
+ throw new UnsupportedOperationException("Can't automatically create new SERIAL in Postgres database. You should do this manually.");
+ }
+
+ @Override
+ protected void appendDropAutoIncrement(DbAdapter adapter, StringBuffer builder) {
+ builder.append("SET DEFAULT NULL");
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return false;
+ }
+ };
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d6d42516/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/SQLServerMergerTokenFactory.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/SQLServerMergerTokenFactory.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/SQLServerMergerTokenFactory.java
index a15558d..a70bcb0 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/SQLServerMergerTokenFactory.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/SQLServerMergerTokenFactory.java
@@ -24,6 +24,7 @@ import org.apache.cayenne.dbsync.merge.token.MergerToken;
import org.apache.cayenne.dbsync.merge.token.db.AddColumnToDb;
import org.apache.cayenne.dbsync.merge.token.db.SetAllowNullToDb;
import org.apache.cayenne.dbsync.merge.token.db.SetColumnTypeToDb;
+import org.apache.cayenne.dbsync.merge.token.db.SetGeneratedFlagToDb;
import org.apache.cayenne.dbsync.merge.token.db.SetNotNullToDb;
import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.map.DbEntity;
@@ -109,4 +110,24 @@ public class SQLServerMergerTokenFactory extends DefaultMergerTokenFactory {
};
}
+
+ @Override
+ public MergerToken createSetGeneratedFlagToDb(DbEntity entity, DbAttribute column, boolean isGenerated) {
+ return new SetGeneratedFlagToDb(entity, column, isGenerated) {
+ @Override
+ protected void appendAutoIncrement(DbAdapter adapter, StringBuffer builder) {
+ throw new UnsupportedOperationException("Can't automatically alter column to IDENTITY in SQLServer database. You should do this manually.");
+ }
+
+ @Override
+ protected void appendDropAutoIncrement(DbAdapter adapter, StringBuffer builder) {
+ throw new UnsupportedOperationException("Can't automatically alter column to drop IDENTITY in SQLServer database. You should do this manually.");
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return false;
+ }
+ };
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d6d42516/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/AddRelationshipToDb.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/AddRelationshipToDb.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/AddRelationshipToDb.java
index 3959bd5..df40e4b 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/AddRelationshipToDb.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/AddRelationshipToDb.java
@@ -34,7 +34,7 @@ public class AddRelationshipToDb extends AbstractToDbToken.Entity {
private DbRelationship relationship;
public AddRelationshipToDb(DbEntity entity, DbRelationship relationship) {
- super("Add foreign key", 110, entity);
+ super("Add foreign key", 120, entity);
this.relationship = relationship;
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d6d42516/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/SetGeneratedFlagToDb.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/SetGeneratedFlagToDb.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/SetGeneratedFlagToDb.java
new file mode 100644
index 0000000..4ea3313
--- /dev/null
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/SetGeneratedFlagToDb.java
@@ -0,0 +1,88 @@
+/*****************************************************************
+ * 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.dbsync.merge.token.db;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.dba.QuotingStrategy;
+import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactory;
+import org.apache.cayenne.dbsync.merge.token.MergerToken;
+import org.apache.cayenne.map.DbAttribute;
+import org.apache.cayenne.map.DbEntity;
+
+/**
+ * @since 4.0
+ */
+public class SetGeneratedFlagToDb extends AbstractToDbToken.EntityAndColumn {
+
+ private final boolean isGenerated;
+
+ public SetGeneratedFlagToDb(DbEntity entity, DbAttribute column, boolean isGenerated) {
+ // drop generated attribute must go first
+ super("Set Is Generated", isGenerated ? 111 : 109, entity, column);
+ this.isGenerated = isGenerated;
+ }
+
+ @Override
+ public MergerToken createReverse(MergerTokenFactory factory) {
+ return factory.createSetGeneratedFlagToModel(getEntity(), getColumn(), !isGenerated);
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return true;
+ }
+
+ protected void appendAutoIncrement(DbAdapter adapter, StringBuffer builder) {
+ throw new UnsupportedOperationException("Not supported on generic DB");
+ }
+
+ protected void appendDropAutoIncrement(DbAdapter adapter, StringBuffer builder) {
+ throw new UnsupportedOperationException("Not supported on generic DB");
+ }
+
+ protected void appendAlterColumnClause(DbAdapter adapter, StringBuffer builder) {
+ QuotingStrategy context = adapter.getQuotingStrategy();
+ builder.append(" ALTER COLUMN ").append(context.quotedName(getColumn())).append(" ");
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public List<String> createSql(DbAdapter adapter) {
+ if(!adapter.supportsGeneratedKeys()) {
+ return (List<String>)Collections.EMPTY_LIST;
+ }
+
+ QuotingStrategy context = adapter.getQuotingStrategy();
+
+ StringBuffer builder = new StringBuffer();
+ builder.append("ALTER TABLE ").append(context.quotedFullyQualifiedName(getEntity()));
+ appendAlterColumnClause(adapter, builder);
+ if(isGenerated) {
+ appendAutoIncrement(adapter, builder);
+ } else {
+ appendDropAutoIncrement(adapter, builder);
+ }
+
+ return Collections.singletonList(builder.toString());
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d6d42516/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/AddRelationshipToModel.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/AddRelationshipToModel.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/AddRelationshipToModel.java
index 9202bd5..659e286 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/AddRelationshipToModel.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/AddRelationshipToModel.java
@@ -35,7 +35,7 @@ public class AddRelationshipToModel extends AbstractToModelToken.Entity {
private DbRelationship relationship;
public AddRelationshipToModel(DbEntity entity, DbRelationship relationship) {
- super("Add Relationship", 115, entity);
+ super("Add Relationship", 125, entity);
this.relationship = relationship;
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d6d42516/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/SetGeneratedFlagToModel.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/SetGeneratedFlagToModel.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/SetGeneratedFlagToModel.java
new file mode 100644
index 0000000..4a67917
--- /dev/null
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/SetGeneratedFlagToModel.java
@@ -0,0 +1,51 @@
+/*****************************************************************
+ * 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.dbsync.merge.token.model;
+
+import org.apache.cayenne.dbsync.merge.context.MergerContext;
+import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactory;
+import org.apache.cayenne.dbsync.merge.token.MergerToken;
+import org.apache.cayenne.map.DbAttribute;
+import org.apache.cayenne.map.DbEntity;
+
+/**
+ * @since 4.0
+ */
+public class SetGeneratedFlagToModel extends AbstractToModelToken.EntityAndColumn {
+
+ private final boolean isGenerated;
+
+ public SetGeneratedFlagToModel(DbEntity entity, DbAttribute column, boolean isGenerated) {
+ // drop generated attribute must go first
+ super("Set Is Generated", isGenerated ? 111 : 109, entity, column);
+ this.isGenerated = isGenerated;
+ }
+
+ @Override
+ public MergerToken createReverse(MergerTokenFactory factory) {
+ return factory.createSetGeneratedFlagToDb(getEntity(), getColumn(), !isGenerated);
+ }
+
+ @Override
+ public void execute(MergerContext context) {
+ getColumn().setGenerated(isGenerated);
+ context.getDelegate().dbAttributeModified(getColumn());
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d6d42516/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/token/db/SetGeneratedFlagToDbIT.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/token/db/SetGeneratedFlagToDbIT.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/token/db/SetGeneratedFlagToDbIT.java
new file mode 100644
index 0000000..7a937a0
--- /dev/null
+++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/token/db/SetGeneratedFlagToDbIT.java
@@ -0,0 +1,161 @@
+/*****************************************************************
+ * 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.dbsync.merge.token.db;
+
+import java.sql.Types;
+import java.util.List;
+
+import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.dbsync.merge.MergeCase;
+import org.apache.cayenne.dbsync.merge.token.MergerToken;
+import org.apache.cayenne.di.Inject;
+import org.apache.cayenne.map.DbAttribute;
+import org.apache.cayenne.map.DbEntity;
+import org.apache.cayenne.unit.UnitDbAdapter;
+import org.junit.After;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+/**
+ * Test synchronization of generated keys to DB (SetGeneratedFlagToDB merge token)
+ *
+ * As there are not many DBMS that fully support create/alter/drop for generated columns
+ * this test has several actual paths of execution.
+ *
+ * 1. If DB has no support for generated values at all
+ * this test will check that no meaningful tokens are created in sync process
+ *
+ * 2. If DB can create generated columns but can't alter them
+ * this test will check that proper exception it thrown when applying token
+ *
+ * 3. If DB can alter generated columns then full check will be performed
+ * (here is actually two variants as some DB can only drop whereas some can only add generated attribute)
+ *
+ * @see DbAdapter#supportsGeneratedKeys()
+ * @see UnitDbAdapter#supportsGeneratedKeys()
+ * @see UnitDbAdapter#supportsGeneratedKeysAdd()
+ * @see UnitDbAdapter#supportsGeneratedKeysDrop()
+ *
+ * @since 4.0
+ */
+public class SetGeneratedFlagToDbIT extends MergeCase {
+
+ @Inject
+ UnitDbAdapter dbAdapter;
+
+ @Test
+ public void setGeneratedFlag() throws Exception {
+ DbEntity dbEntity = createTestTable(false);
+ assertNotNull(dbEntity);
+
+ DbAttribute attribute = dbEntity.getAttribute("ID");
+ assertNotNull(attribute);
+ assertFalse(attribute.isGenerated());
+
+ attribute.setGenerated(true);
+
+ List<MergerToken> tokens = createMergeTokens();
+ if(!dbAdapter.supportsGeneratedKeys()) {
+ assertEquals(0, tokens.size());
+ return;
+ }
+
+ assertEquals(1, tokens.size());
+ MergerToken token = tokens.get(0);
+ assertTrue(token instanceof SetGeneratedFlagToDb);
+
+ try {
+ execute(token);
+ if(!dbAdapter.supportsGeneratedKeysAdd()) {
+ fail("SetGeneratedFlagToDb should fail on current DB");
+ }
+ } catch (UnsupportedOperationException ignored) {
+ return;
+ }
+
+ assertTokensAndExecute(0, 0);
+ }
+
+ @Test
+ public void dropGeneratedFlag() throws Exception {
+
+ DbEntity dbEntity = createTestTable(true);
+ assertNotNull(dbEntity);
+
+ DbAttribute attribute = dbEntity.getAttribute("ID");
+ assertNotNull(attribute);
+ assertTrue(attribute.isGenerated());
+
+ attribute.setGenerated(false);
+
+ List<MergerToken> tokens = createMergeTokens();
+ if(!dbAdapter.supportsGeneratedKeys()) {
+ assertEquals(0, tokens.size());
+ return;
+ }
+
+ assertEquals(1, tokens.size());
+
+ MergerToken token = tokens.get(0);
+ assertTrue(token instanceof SetGeneratedFlagToDb);
+
+ try {
+ execute(token);
+ if(!dbAdapter.supportsGeneratedKeysDrop()) {
+ fail("SetGeneratedFlagToDb should fail on current DB");
+ }
+ } catch (UnsupportedOperationException ignored) {
+ return;
+ }
+
+ assertTokensAndExecute(0, 0);
+ }
+
+ private DbEntity createTestTable(boolean generated) throws Exception {
+ dropTestTables();
+
+ DbEntity withGenKey = new DbEntity("NEW_TABLE");
+ DbAttribute attribute = new DbAttribute("ID", Types.INTEGER, withGenKey);
+ attribute.setMandatory(true);
+ attribute.setPrimaryKey(true);
+ attribute.setGenerated(generated);
+ withGenKey.addAttribute(attribute);
+ map.addDbEntity(withGenKey);
+
+ assertTokensAndExecute(1, 0);
+ assertTokensAndExecute(0, 0);
+
+ return withGenKey;
+ }
+
+ @After
+ public void dropTestTables() throws Exception {
+ if(map.getDbEntity("NEW_TABLE") != null) {
+ map.removeDbEntity("NEW_TABLE");
+ }
+ dropTableIfPresent("NEW_TABLE");
+ assertTokensAndExecute(0, 0);
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d6d42516/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/token/model/SetGeneratedFlagToModelIT.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/token/model/SetGeneratedFlagToModelIT.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/token/model/SetGeneratedFlagToModelIT.java
new file mode 100644
index 0000000..2a29745
--- /dev/null
+++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/token/model/SetGeneratedFlagToModelIT.java
@@ -0,0 +1,67 @@
+/*****************************************************************
+ * 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.dbsync.merge.token.model;
+
+import java.util.List;
+
+import org.apache.cayenne.dbsync.merge.MergeCase;
+import org.apache.cayenne.dbsync.merge.token.MergerToken;
+import org.apache.cayenne.map.DbAttribute;
+import org.apache.cayenne.map.DbEntity;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * @since 4.0
+ */
+public class SetGeneratedFlagToModelIT extends MergeCase {
+
+ @Test
+ public void test() throws Exception {
+ DbEntity dbEntity = map.getDbEntity("PAINTING");
+ assertNotNull(dbEntity);
+
+ DbAttribute attribute = dbEntity.getAttribute("PAINTING_ID");
+ assertNotNull(attribute);
+ assertFalse(attribute.isGenerated());
+
+ attribute.setGenerated(true);
+
+ List<MergerToken> tokens = createMergeTokens();
+ assertEquals(1, tokens.size());
+
+ MergerToken token = tokens.get(0);
+ if (token.getDirection().isToDb()) {
+ token = token.createReverse(mergerFactory());
+ }
+ assertTrue(token instanceof SetGeneratedFlagToModel);
+
+ execute(token);
+
+ assertFalse(attribute.isGenerated());
+
+ assertTokensAndExecute(0, 0);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d6d42516/cayenne-server/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLDBAdapter.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLDBAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLDBAdapter.java
index d38a56a..314de60 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLDBAdapter.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLDBAdapter.java
@@ -74,6 +74,7 @@ public class HSQLDBAdapter extends JdbcAdapter {
@Inject(Constants.SERVER_TYPE_FACTORIES_LIST) List<ExtendedTypeFactory> extendedTypeFactories,
@Inject(Constants.SERVER_RESOURCE_LOCATOR) ResourceLocator resourceLocator) {
super(runtimeProperties, defaultExtendedTypes, userExtendedTypes, extendedTypeFactories, resourceLocator);
+ setSupportsGeneratedKeys(true);
}
/**
@@ -266,5 +267,9 @@ public class HSQLDBAdapter extends JdbcAdapter {
} else {
super.createTableAppendColumn(sqlBuffer, column);
}
+
+ if(column.isGenerated()) {
+ sqlBuffer.append(" GENERATED BY DEFAULT AS IDENTITY (START WITH 1)");
+ }
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d6d42516/cayenne-server/src/test/java/org/apache/cayenne/unit/DB2UnitDbAdapter.java
----------------------------------------------------------------------
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 28f86c8..f4fc4f1 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
@@ -53,4 +53,14 @@ public class DB2UnitDbAdapter extends UnitDbAdapter {
public boolean supportsStoredProcedures() {
return false;
}
+
+ @Override
+ public boolean supportsGeneratedKeysDrop() {
+ return true;
+ }
+
+ @Override
+ public boolean supportsGeneratedKeysAdd() {
+ return true;
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d6d42516/cayenne-server/src/test/java/org/apache/cayenne/unit/H2UnitDbAdapter.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/unit/H2UnitDbAdapter.java b/cayenne-server/src/test/java/org/apache/cayenne/unit/H2UnitDbAdapter.java
index 445cce6..2c4a195 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/unit/H2UnitDbAdapter.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/unit/H2UnitDbAdapter.java
@@ -38,4 +38,8 @@ public class H2UnitDbAdapter extends UnitDbAdapter {
return false;
}
+ @Override
+ public boolean supportsGeneratedKeysAdd() {
+ return true;
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d6d42516/cayenne-server/src/test/java/org/apache/cayenne/unit/HSQLDBUnitDbAdapter.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/unit/HSQLDBUnitDbAdapter.java b/cayenne-server/src/test/java/org/apache/cayenne/unit/HSQLDBUnitDbAdapter.java
index 29b99fe..3691d03 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/unit/HSQLDBUnitDbAdapter.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/unit/HSQLDBUnitDbAdapter.java
@@ -71,4 +71,14 @@ public class HSQLDBUnitDbAdapter extends UnitDbAdapter {
// HSQL is not locking AUTO_PK_TABLE, so running PkGenerator in parallel may result in conflicting ranges
return false;
}
+
+ @Override
+ public boolean supportsGeneratedKeysAdd() {
+ return true;
+ }
+
+ @Override
+ public boolean supportsGeneratedKeysDrop() {
+ return true;
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d6d42516/cayenne-server/src/test/java/org/apache/cayenne/unit/MySQLUnitDbAdapter.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/unit/MySQLUnitDbAdapter.java b/cayenne-server/src/test/java/org/apache/cayenne/unit/MySQLUnitDbAdapter.java
index 2ada884..a3680a0 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/unit/MySQLUnitDbAdapter.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/unit/MySQLUnitDbAdapter.java
@@ -120,4 +120,14 @@ public class MySQLUnitDbAdapter extends UnitDbAdapter {
// tables...
return !NO_CONSTRAINTS_TABLES.contains(entity.getName());
}
+
+ @Override
+ public boolean supportsGeneratedKeysAdd() {
+ return true;
+ }
+
+ @Override
+ public boolean supportsGeneratedKeysDrop() {
+ return true;
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d6d42516/cayenne-server/src/test/java/org/apache/cayenne/unit/PostgresUnitDbAdapter.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/unit/PostgresUnitDbAdapter.java b/cayenne-server/src/test/java/org/apache/cayenne/unit/PostgresUnitDbAdapter.java
index 4042979..4182054 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/unit/PostgresUnitDbAdapter.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/unit/PostgresUnitDbAdapter.java
@@ -61,4 +61,9 @@ public class PostgresUnitDbAdapter extends UnitDbAdapter {
executeDDL(con, "postgresql", "create-out-sp.sql");
}
}
+
+ @Override
+ public boolean supportsGeneratedKeysDrop() {
+ return true;
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d6d42516/cayenne-server/src/test/java/org/apache/cayenne/unit/UnitDbAdapter.java
----------------------------------------------------------------------
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 6230943..2bf63e0 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
@@ -70,7 +70,7 @@ public class UnitDbAdapter {
public boolean supportsPKGeneratorConcurrency() {
return true;
}
-
+
public String getIdentifiersStartQuote() {
return "\"";
}
@@ -354,4 +354,16 @@ public class UnitDbAdapter {
public boolean supportsBoolean() {
return true;
}
+
+ public boolean supportsGeneratedKeys() {
+ return adapter.supportsGeneratedKeys();
+ }
+
+ public boolean supportsGeneratedKeysAdd() {
+ return false;
+ }
+
+ public boolean supportsGeneratedKeysDrop() {
+ return false;
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d6d42516/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 711ca97..70fab88 100644
--- a/pom.xml
+++ b/pom.xml
@@ -476,7 +476,7 @@
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>
- <version>10.7.1.1</version>
+ <version>10.13.1.1</version>
<scope>test</scope>
</dependency>
<dependency>
[4/4] cayenne git commit: Merge branch '167'
Posted by sk...@apache.org.
Merge branch '167'
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/c32288d5
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/c32288d5
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/c32288d5
Branch: refs/heads/master
Commit: c32288d510935fa4ae54b5c325125dd3b9b40b0c
Parents: d01cc37 89d37a5
Author: Savva Kolbachev <s....@gmail.com>
Authored: Thu Dec 22 14:04:32 2016 +0300
Committer: Savva Kolbachev <s....@gmail.com>
Committed: Thu Dec 22 14:04:32 2016 +0300
----------------------------------------------------------------------
.../cayenne/dbsync/merge/DbAttributeMerger.java | 2 +-
.../merge/factory/DB2MergerTokenFactory.java | 22 +++
.../factory/DefaultMergerTokenFactory.java | 12 ++
.../merge/factory/DerbyMergerTokenFactory.java | 20 +++
.../merge/factory/H2MergerTokenFactory.java | 25 +++
.../merge/factory/HSQLMergerTokenFactory.java | 20 +++
.../merge/factory/IngresMergerTokenFactory.java | 21 +++
.../merge/factory/MergerTokenFactory.java | 4 +
.../merge/factory/MySQLMergerTokenFactory.java | 28 ++++
.../factory/PostgresMergerTokenFactory.java | 21 +++
.../factory/SQLServerMergerTokenFactory.java | 21 +++
.../merge/token/db/AddRelationshipToDb.java | 2 +-
.../merge/token/db/SetGeneratedFlagToDb.java | 88 ++++++++++
.../token/model/AddRelationshipToModel.java | 2 +-
.../token/model/SetGeneratedFlagToModel.java | 51 ++++++
.../merge/token/db/SetGeneratedFlagToDbIT.java | 161 +++++++++++++++++++
.../token/model/SetGeneratedFlagToModelIT.java | 67 ++++++++
.../cayenne/dba/hsqldb/HSQLDBAdapter.java | 5 +
.../apache/cayenne/unit/DB2UnitDbAdapter.java | 10 ++
.../apache/cayenne/unit/H2UnitDbAdapter.java | 4 +
.../cayenne/unit/HSQLDBUnitDbAdapter.java | 10 ++
.../apache/cayenne/unit/MySQLUnitDbAdapter.java | 10 ++
.../cayenne/unit/PostgresUnitDbAdapter.java | 5 +
.../org/apache/cayenne/unit/UnitDbAdapter.java | 14 +-
docs/doc/src/main/resources/RELEASE-NOTES.txt | 1 +
pom.xml | 2 +-
26 files changed, 623 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
[2/4] cayenne git commit: Apache Derby 10.13.x.x dropped support of
Java 6 & 7 so use 10.12.x.x version.
Posted by sk...@apache.org.
Apache Derby 10.13.x.x dropped support of Java 6 & 7 so use 10.12.x.x version.
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/2c8ac51d
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/2c8ac51d
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/2c8ac51d
Branch: refs/heads/master
Commit: 2c8ac51df36846b3806dc5cd7fe7bb4046fcdf32
Parents: d6d4251
Author: stariy <st...@gmail.com>
Authored: Wed Dec 21 20:54:36 2016 +0300
Committer: stariy <st...@gmail.com>
Committed: Wed Dec 21 20:54:36 2016 +0300
----------------------------------------------------------------------
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2c8ac51d/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 70fab88..152800c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -476,7 +476,7 @@
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>
- <version>10.13.1.1</version>
+ <version>10.12.1.1</version>
<scope>test</scope>
</dependency>
<dependency>
[3/4] cayenne git commit: RELEASE-NOTES
Posted by sk...@apache.org.
RELEASE-NOTES
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/89d37a51
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/89d37a51
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/89d37a51
Branch: refs/heads/master
Commit: 89d37a51c2684070967d1fb22a68776e65cebf34
Parents: 2c8ac51
Author: Nikita Timofeev <st...@gmail.com>
Authored: Thu Dec 22 10:53:27 2016 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Thu Dec 22 10:53:27 2016 +0300
----------------------------------------------------------------------
docs/doc/src/main/resources/RELEASE-NOTES.txt | 1 +
1 file changed, 1 insertion(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/89d37a51/docs/doc/src/main/resources/RELEASE-NOTES.txt
----------------------------------------------------------------------
diff --git a/docs/doc/src/main/resources/RELEASE-NOTES.txt b/docs/doc/src/main/resources/RELEASE-NOTES.txt
index ac84187..753dae7 100644
--- a/docs/doc/src/main/resources/RELEASE-NOTES.txt
+++ b/docs/doc/src/main/resources/RELEASE-NOTES.txt
@@ -23,6 +23,7 @@ CAY-2169 Split DbMerger to parts and clean it up
CAY-2170 MergeToken sorting is highly unstable
CAY-2172 Cleanup Modeler import and migrate db actions
CAY-2176 Java 7 diamond class generation templates
+CAY-2177 Sync auto generated state of PK between model and DB
Bug Fixes: