This is an automated email from the ASF dual-hosted git repository.
asf-gitbox-commits pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git
The following commit(s) were added to refs/heads/master by this push:
new ad3a58b4a CAY-2987 DataNode to own PkGenerator
ad3a58b4a is described below
commit ad3a58b4a49e1643013573ca54e2bb676bee041b
Author: Andrus Adamchik <[email protected]>
AuthorDate: Sun Aug 16 11:58:33 2026 -0400
CAY-2987 DataNode to own PkGenerator
---
RELEASE-NOTES.txt | 1 +
UPGRADE.md | 5 +
.../merge/factory/DerbyMergerTokenFactory.java | 9 +-
.../merge/factory/FirebirdMergerTokenFactory.java | 13 ++-
.../dbsync/merge/factory/H2MergerTokenFactory.java | 3 +-
.../merge/factory/HSQLMergerTokenFactory.java | 5 +-
.../merge/factory/IngresMergerTokenFactory.java | 20 +++-
.../merge/factory/MySQLMergerTokenFactory.java | 13 ++-
.../merge/factory/OracleMergerTokenFactory.java | 9 +-
.../merge/factory/SQLServerMergerTokenFactory.java | 9 +-
.../merge/factory/SybaseMergerTokenFactory.java | 15 ++-
.../dbsync/merge/token/db/AbstractToDbToken.java | 6 +-
.../dbsync/merge/token/db/AddColumnToDb.java | 5 +-
.../dbsync/merge/token/db/AddProcedureToDb.java | 4 +-
.../dbsync/merge/token/db/AddRelationshipToDb.java | 5 +-
.../dbsync/merge/token/db/CreateTableToDb.java | 12 +--
.../dbsync/merge/token/db/DropColumnToDb.java | 5 +-
.../dbsync/merge/token/db/DropProcedureToDb.java | 4 +-
.../merge/token/db/DropRelationshipToDb.java | 5 +-
.../dbsync/merge/token/db/DropTableToDb.java | 8 +-
.../dbsync/merge/token/db/SetAllowNullToDb.java | 5 +-
.../dbsync/merge/token/db/SetColumnTypeToDb.java | 5 +-
.../merge/token/db/SetGeneratedFlagToDb.java | 5 +-
.../dbsync/merge/token/db/SetNotNullToDb.java | 5 +-
.../dbsync/merge/token/db/SetPrimaryKeyToDb.java | 5 +-
.../dbsync/merge/token/db/SetValueForNullToDb.java | 4 +-
.../dbsync/reverse/configuration/ToolsModule.java | 37 +------
.../reverse/dbimport/DefaultDbImportAction.java | 2 +-
.../org/apache/cayenne/dbsync/merge/MergeCase.java | 2 +-
.../org/apache/cayenne/tools/DbGenerateTask.java | 4 -
.../java/org/apache/cayenne/access/DataNode.java | 38 +++++++
.../org/apache/cayenne/access/DbGenerator.java | 22 ++--
.../access/flush/PermanentObjectIdVisitor.java | 2 +-
.../cayenne/configuration/runtime/CoreModule.java | 50 ---------
.../configuration/runtime/CoreModuleExtender.java | 27 -----
.../runtime/DefaultDbAdapterFactory.java | 19 +---
.../runtime/PkGeneratorFactoryProvider.java | 50 ---------
.../java/org/apache/cayenne/dba/AutoAdapter.java | 15 +--
.../java/org/apache/cayenne/dba/DbAdapter.java | 15 +--
.../java/org/apache/cayenne/dba/JdbcAdapter.java | 17 +--
.../org/apache/cayenne/dba/JdbcPkGenerator.java | 13 +--
.../java/org/apache/cayenne/dba/PkGenerator.java | 7 --
.../apache/cayenne/dba/SequencePkGenerator.java | 6 +-
.../org/apache/cayenne/dba/db2/DB2Adapter.java | 9 ++
.../org/apache/cayenne/dba/db2/DB2PkGenerator.java | 12 +--
.../org/apache/cayenne/dba/derby/DerbyAdapter.java | 9 ++
.../apache/cayenne/dba/derby/DerbyPkGenerator.java | 10 +-
.../cayenne/dba/frontbase/FrontBaseAdapter.java | 9 ++
.../dba/frontbase/FrontBasePkGenerator.java | 8 --
.../java/org/apache/cayenne/dba/h2/H2Adapter.java | 9 ++
.../org/apache/cayenne/dba/h2/H2PkGenerator.java | 10 +-
.../apache/cayenne/dba/ingres/IngresAdapter.java | 9 ++
.../cayenne/dba/ingres/IngresPkGenerator.java | 10 +-
.../org/apache/cayenne/dba/mysql/MySQLAdapter.java | 9 ++
.../apache/cayenne/dba/mysql/MySQLPkGenerator.java | 10 +-
.../apache/cayenne/dba/oracle/OracleAdapter.java | 9 ++
.../cayenne/dba/oracle/OraclePkGenerator.java | 11 +-
.../cayenne/dba/postgres/PostgresAdapter.java | 9 ++
.../cayenne/dba/postgres/PostgresPkGenerator.java | 10 +-
.../cayenne/dba/sqlserver/SQLServerAdapter.java | 9 ++
.../dba/sqlserver/SQLServerPkGenerator.java | 10 +-
.../apache/cayenne/dba/sybase/SybaseAdapter.java | 9 ++
.../cayenne/dba/sybase/SybasePkGenerator.java | 10 +-
.../java/org/apache/cayenne/PregeneratedPKIT.java | 2 +-
.../apache/cayenne/access/DataContextExtrasIT.java | 20 +---
.../java/org/apache/cayenne/access/DataNodeIT.java | 84 ---------------
.../apache/cayenne/access/DataNodeQueriesIT.java | 4 +-
.../org/apache/cayenne/access/DataNodeTest.java | 114 +++++++++++++++++++++
.../apache/cayenne/access/IdentityColumnsIT.java | 2 +-
.../org/apache/cayenne/access/MockDataNode.java | 6 ++
.../runtime/DefaultDbAdapterFactoryTest.java | 10 --
.../java/org/apache/cayenne/dba/AutoAdapterIT.java | 5 +-
.../org/apache/cayenne/dba/JdbcPkGeneratorIT.java | 36 +++----
.../java/org/apache/cayenne/dba/PkGeneratorIT.java | 2 +-
.../cayenne/dba/SequencePkGeneratorTest.java | 3 +-
.../org/apache/cayenne/unit/DbSchemaManager.java | 4 +-
.../modeler/ui/dbmerge/MergerOptionsDialog.java | 7 +-
77 files changed, 455 insertions(+), 546 deletions(-)
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 117a6340e..a2d8ae33c 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -33,6 +33,7 @@ CAY-2983 CayenneDataSource: Public-facing DataSource builder
CAY-2984 Remove "DataChannel" injectable dependency
CAY-2985 DataDomain init and structure cleanup
CAY-2986 Cgen to run unconditionally
+CAY-2987 DataNode to own PkGenerator
Bug Fixes:
diff --git a/UPGRADE.md b/UPGRADE.md
index 15583e4a4..85cc8350c 100644
--- a/UPGRADE.md
+++ b/UPGRADE.md
@@ -117,6 +117,11 @@ DataMaps, filters and listeners can still be added (and
removed) after creation.
after project upgrades or when switching between machines and branches.
Consequences:
- The `force` flag is now a deprecated no-op — its former behavior is the
only behavior.
+* Per [CAY-2987](https://issues.apache.org/jira/browse/CAY-2987),
`PkGenerator` is now owned by `DataNode` rather than
+ by `DbAdapter`. A `DbAdapter` is only the source of the default generator
for its database. This change is
+ entirely transparent unless you need to install a custom PkGenerator. You
can do that via a custom injected
+ `DefaultDataNodeFactory`, an explicit call to `dataNode.setPkGenerator(..)`
or use a custom adapter.
+
## Upgrading to 5.0-M2
* Per [CAY-2947](https://issues.apache.org/jira/browse/CAY-2947) the
`cayenne-commitlog` artifact has been removed. Commit log support is now part
of the
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 7ef273631..c0f42a856 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
@@ -18,6 +18,7 @@
****************************************************************/
package org.apache.cayenne.dbsync.merge.factory;
+import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dba.QuotingStrategy;
import org.apache.cayenne.dbsync.merge.token.MergerToken;
@@ -60,7 +61,9 @@ public class DerbyMergerTokenFactory extends
DefaultMergerTokenFactory {
return new SetNotNullToDb(entity, column) {
@Override
- public List<String> createSql(DbAdapter adapter) {
+ public List<String> createSql(DataNode node) {
+ DbAdapter adapter = node.getAdapter();
+
QuotingStrategy quotes =
adapter.getQuotingStrategy(getEntity());
StringBuilder sql = new StringBuilder("ALTER TABLE ");
quotes.appendFQN(sql, getEntity().getCatalog(),
getEntity().getSchema(), getEntity().getName());
@@ -81,7 +84,9 @@ public class DerbyMergerTokenFactory extends
DefaultMergerTokenFactory {
return new SetAllowNullToDb(entity, column) {
@Override
- public List<String> createSql(DbAdapter adapter) {
+ public List<String> createSql(DataNode node) {
+ DbAdapter adapter = node.getAdapter();
+
QuotingStrategy quotes =
adapter.getQuotingStrategy(getEntity());
StringBuilder sql = new StringBuilder("ALTER TABLE ");
quotes.appendFQN(sql, getEntity().getCatalog(),
getEntity().getSchema(), getEntity().getName());
diff --git
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/FirebirdMergerTokenFactory.java
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/FirebirdMergerTokenFactory.java
index 34a4adf58..477171863 100644
---
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/FirebirdMergerTokenFactory.java
+++
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/FirebirdMergerTokenFactory.java
@@ -19,6 +19,7 @@
package org.apache.cayenne.dbsync.merge.factory;
+import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dba.QuotingStrategy;
import org.apache.cayenne.dbsync.merge.token.MergerToken;
@@ -37,7 +38,9 @@ public class FirebirdMergerTokenFactory extends
DefaultMergerTokenFactory {
@Override
public MergerToken createDropColumnToDb(DbEntity entity, DbAttribute
column) {
return new DropColumnToDb(entity, column) {
- public List<String> createSql(DbAdapter adapter) {
+ public List<String> createSql(DataNode node) {
+ DbAdapter adapter = node.getAdapter();
+
QuotingStrategy quotes =
adapter.getQuotingStrategy(getEntity());
StringBuilder sql = new StringBuilder("ALTER TABLE ");
quotes.appendFQN(sql, getEntity().getCatalog(),
getEntity().getSchema(), getEntity().getName());
@@ -53,7 +56,9 @@ public class FirebirdMergerTokenFactory extends
DefaultMergerTokenFactory {
@Override
public MergerToken createSetNotNullToDb(DbEntity entity, DbAttribute
column) {
return new SetNotNullToDb(entity, column) {
- public List<String> createSql(DbAdapter adapter) {
+ public List<String> createSql(DataNode node) {
+ DbAdapter adapter = node.getAdapter();
+
QuotingStrategy quotes =
adapter.getQuotingStrategy(getEntity());
String entityName = quotes.quotedFQN(getEntity().getCatalog(),
getEntity().getSchema(),
getEntity().getName());
@@ -69,7 +74,9 @@ public class FirebirdMergerTokenFactory extends
DefaultMergerTokenFactory {
@Override
public MergerToken createSetAllowNullToDb(DbEntity entity, DbAttribute
column) {
return new SetAllowNullToDb(entity, column) {
- public List<String> createSql(DbAdapter adapter) {
+ public List<String> createSql(DataNode node) {
+ DbAdapter adapter = node.getAdapter();
+
QuotingStrategy quotes =
adapter.getQuotingStrategy(getEntity());
String entityName = quotes.quotedFQN(getEntity().getCatalog(),
getEntity().getSchema(),
getEntity().getName());
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 45dfc2b26..fcaed1d50 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
@@ -19,6 +19,7 @@
package org.apache.cayenne.dbsync.merge.factory;
+import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dba.QuotingStrategy;
import org.apache.cayenne.dbsync.merge.token.MergerToken;
@@ -61,7 +62,7 @@ public class H2MergerTokenFactory extends
DefaultMergerTokenFactory {
return new SetAllowNullToDb(entity, column) {
@Override
- public List<String> createSql(DbAdapter adapter) {
+ public List<String> createSql(DataNode node) {
return Collections.singletonList("ALTER TABLE " +
getEntity().getFullyQualifiedName()
+ " ALTER COLUMN " + getColumn().getName() + " SET
NULL");
}
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 7dc64181d..6128ddc1d 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
@@ -18,6 +18,7 @@
****************************************************************/
package org.apache.cayenne.dbsync.merge.factory;
+import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dba.QuotingStrategy;
import org.apache.cayenne.dbsync.merge.token.MergerToken;
@@ -58,7 +59,9 @@ public class HSQLMergerTokenFactory extends
DefaultMergerTokenFactory {
return new SetAllowNullToDb(entity, column) {
@Override
- public List<String> createSql(DbAdapter adapter) {
+ public List<String> createSql(DataNode node) {
+ DbAdapter adapter = node.getAdapter();
+
QuotingStrategy quotes =
adapter.getQuotingStrategy(getEntity());
StringBuilder sql = new StringBuilder("ALTER TABLE ");
quotes.appendFQN(sql, getEntity().getCatalog(),
getEntity().getSchema(), getEntity().getName());
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 0f2e1800c..c7d2e013e 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
@@ -18,6 +18,7 @@
****************************************************************/
package org.apache.cayenne.dbsync.merge.factory;
+import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dba.QuotingStrategy;
import org.apache.cayenne.dbsync.merge.token.MergerToken;
@@ -62,7 +63,9 @@ public class IngresMergerTokenFactory extends
DefaultMergerTokenFactory {
return new DropColumnToDb(entity, column) {
@Override
- public List<String> createSql(DbAdapter adapter) {
+ public List<String> createSql(DataNode node) {
+ DbAdapter adapter = node.getAdapter();
+
StringBuilder buf = new StringBuilder();
QuotingStrategy quotes =
adapter.getQuotingStrategy(getEntity());
buf.append("ALTER TABLE ");
@@ -83,7 +86,9 @@ public class IngresMergerTokenFactory extends
DefaultMergerTokenFactory {
public MergerToken createAddRelationshipToDb(DbEntity entity, final
DbRelationship rel) {
return new AddRelationshipToDb(entity, rel) {
@Override
- public List<String> createSql(DbAdapter adapter) {
+ public List<String> createSql(DataNode node) {
+ DbAdapter adapter = node.getAdapter();
+
if (!rel.isToMany() && rel.isToPK() && !rel.isToDependentPK())
{
DbEntity source = (DbEntity) rel.getSourceEntity();
@@ -145,7 +150,8 @@ public class IngresMergerTokenFactory extends
DefaultMergerTokenFactory {
return new SetNotNullToDb(entity, column) {
@Override
- public List<String> createSql(DbAdapter adapter) {
+ public List<String> createSql(DataNode node) {
+ DbAdapter adapter = node.getAdapter();
/*
* TODO: we generate this query as in ingres db documentation,
@@ -184,7 +190,9 @@ public class IngresMergerTokenFactory extends
DefaultMergerTokenFactory {
return new SetAllowNullToDb(entity, column) {
@Override
- public List<String> createSql(DbAdapter adapter) {
+ public List<String> createSql(DataNode node) {
+ DbAdapter adapter = node.getAdapter();
+
StringBuilder sqlBuffer = new StringBuilder();
QuotingStrategy quotes =
adapter.getQuotingStrategy(getEntity());
sqlBuffer.append("ALTER TABLE ");
@@ -216,7 +224,9 @@ public class IngresMergerTokenFactory extends
DefaultMergerTokenFactory {
return new DropRelationshipToDb(entity, rel) {
@Override
- public List<String> createSql(DbAdapter adapter) {
+ public List<String> createSql(DataNode node) {
+ DbAdapter adapter = node.getAdapter();
+
String fkName = getFkName();
if (fkName == null) {
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 daa6cb188..1a632a948 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
@@ -18,6 +18,7 @@
****************************************************************/
package org.apache.cayenne.dbsync.merge.factory;
+import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dba.QuotingStrategy;
import org.apache.cayenne.dbsync.merge.token.MergerToken;
@@ -45,7 +46,9 @@ public class MySQLMergerTokenFactory extends
DefaultMergerTokenFactory {
return new SetNotNullToDb(entity, column) {
@Override
- public List<String> createSql(DbAdapter adapter) {
+ public List<String> createSql(DataNode node) {
+ DbAdapter adapter = node.getAdapter();
+
StringBuffer sqlBuffer = new StringBuffer();
QuotingStrategy quotes =
adapter.getQuotingStrategy(getEntity());
@@ -72,7 +75,9 @@ public class MySQLMergerTokenFactory extends
DefaultMergerTokenFactory {
return new SetAllowNullToDb(entity, column) {
@Override
- public List<String> createSql(DbAdapter adapter) {
+ public List<String> createSql(DataNode node) {
+ DbAdapter adapter = node.getAdapter();
+
StringBuffer sqlBuffer = new StringBuffer();
QuotingStrategy quotes =
adapter.getQuotingStrategy(getEntity());
@@ -123,7 +128,9 @@ public class MySQLMergerTokenFactory extends
DefaultMergerTokenFactory {
return new DropRelationshipToDb(entity, rel) {
@Override
- public List<String> createSql(DbAdapter adapter) {
+ public List<String> createSql(DataNode node) {
+ DbAdapter adapter = node.getAdapter();
+
String fkName = getFkName();
if (fkName == null) {
diff --git
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/OracleMergerTokenFactory.java
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/OracleMergerTokenFactory.java
index 9ea97ceaf..ea5464ce3 100644
---
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/OracleMergerTokenFactory.java
+++
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/OracleMergerTokenFactory.java
@@ -18,6 +18,7 @@
****************************************************************/
package org.apache.cayenne.dbsync.merge.factory;
+import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dba.QuotingStrategy;
import org.apache.cayenne.dbsync.merge.token.MergerToken;
@@ -77,7 +78,9 @@ public class OracleMergerTokenFactory extends
DefaultMergerTokenFactory {
return new SetAllowNullToDb(entity, column) {
@Override
- public List<String> createSql(DbAdapter adapter) {
+ public List<String> createSql(DataNode node) {
+ DbAdapter adapter = node.getAdapter();
+
StringBuffer sqlBuffer = new StringBuffer();
QuotingStrategy quotes =
adapter.getQuotingStrategy(getEntity());
@@ -99,7 +102,9 @@ public class OracleMergerTokenFactory extends
DefaultMergerTokenFactory {
return new SetNotNullToDb(entity, column) {
@Override
- public List<String> createSql(DbAdapter adapter) {
+ public List<String> createSql(DataNode node) {
+ DbAdapter adapter = node.getAdapter();
+
StringBuffer sqlBuffer = new StringBuffer();
QuotingStrategy quotes =
adapter.getQuotingStrategy(getEntity());
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 9b24320a4..e9edac0c9 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
@@ -18,6 +18,7 @@
****************************************************************/
package org.apache.cayenne.dbsync.merge.factory;
+import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dba.QuotingStrategy;
import org.apache.cayenne.dbsync.merge.token.MergerToken;
@@ -79,7 +80,9 @@ public class SQLServerMergerTokenFactory extends
DefaultMergerTokenFactory {
return new SetAllowNullToDb(entity, column) {
@Override
- public List<String> createSql(DbAdapter adapter) {
+ public List<String> createSql(DataNode node) {
+ DbAdapter adapter = node.getAdapter();
+
StringBuffer sqlBuffer = new StringBuffer();
QuotingStrategy quotes =
adapter.getQuotingStrategy(getEntity());
@@ -101,7 +104,9 @@ public class SQLServerMergerTokenFactory extends
DefaultMergerTokenFactory {
return new SetNotNullToDb(entity, column) {
@Override
- public List<String> createSql(DbAdapter adapter) {
+ public List<String> createSql(DataNode node) {
+ DbAdapter adapter = node.getAdapter();
+
StringBuffer sqlBuffer = new StringBuffer();
QuotingStrategy quotes =
adapter.getQuotingStrategy(getEntity());
diff --git
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/SybaseMergerTokenFactory.java
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/SybaseMergerTokenFactory.java
index a4941357c..1abf78048 100644
---
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/SybaseMergerTokenFactory.java
+++
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/SybaseMergerTokenFactory.java
@@ -18,6 +18,7 @@
****************************************************************/
package org.apache.cayenne.dbsync.merge.factory;
+import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dba.QuotingStrategy;
import org.apache.cayenne.dbsync.merge.token.MergerToken;
@@ -45,7 +46,8 @@ public class SybaseMergerTokenFactory extends
DefaultMergerTokenFactory {
return new AddColumnToDb(entity, column) {
@Override
- public List<String> createSql(DbAdapter adapter) {
+ public List<String> createSql(DataNode node) {
+ DbAdapter adapter = node.getAdapter();
StringBuffer sqlBuffer = new StringBuffer();
QuotingStrategy quotes =
adapter.getQuotingStrategy(getEntity());
@@ -72,7 +74,9 @@ public class SybaseMergerTokenFactory extends
DefaultMergerTokenFactory {
return new DropColumnToDb(entity, column) {
@Override
- public List<String> createSql(DbAdapter adapter) {
+ public List<String> createSql(DataNode node) {
+ DbAdapter adapter = node.getAdapter();
+
StringBuilder sqlBuffer = new StringBuilder();
QuotingStrategy quotes =
adapter.getQuotingStrategy(getEntity());
sqlBuffer.append("ALTER TABLE ");
@@ -96,7 +100,8 @@ public class SybaseMergerTokenFactory extends
DefaultMergerTokenFactory {
return new SetNotNullToDb(entity, column) {
@Override
- public List<String> createSql(DbAdapter adapter) {
+ public List<String> createSql(DataNode node) {
+ DbAdapter adapter = node.getAdapter();
StringBuffer sqlBuffer = createStringQuery(
adapter,
@@ -117,7 +122,9 @@ public class SybaseMergerTokenFactory extends
DefaultMergerTokenFactory {
return new SetAllowNullToDb(entity, column) {
@Override
- public List<String> createSql(DbAdapter adapter) {
+ public List<String> createSql(DataNode node) {
+ DbAdapter adapter = node.getAdapter();
+
StringBuffer sqlBuffer = createStringQuery(
adapter,
getEntity(),
diff --git
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/AbstractToDbToken.java
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/AbstractToDbToken.java
index 2279d0ade..5a9e87904 100644
---
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/AbstractToDbToken.java
+++
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/AbstractToDbToken.java
@@ -19,7 +19,7 @@
package org.apache.cayenne.dbsync.merge.token.db;
-import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.dbsync.merge.context.MergeDirection;
import org.apache.cayenne.dbsync.merge.context.MergerContext;
import org.apache.cayenne.dbsync.merge.token.AbstractMergerToken;
@@ -46,7 +46,7 @@ public abstract class AbstractToDbToken extends
AbstractMergerToken {
@Override
public void execute(MergerContext mergerContext) {
- for (String sql :
createSql(mergerContext.getDataNode().getAdapter())) {
+ for (String sql : createSql(mergerContext.getDataNode())) {
executeSql(mergerContext, sql);
}
}
@@ -64,7 +64,7 @@ public abstract class AbstractToDbToken extends
AbstractMergerToken {
}
}
- public abstract List<String> createSql(DbAdapter adapter);
+ public abstract List<String> createSql(DataNode node);
@Override
public final MergeDirection getDirection() {
diff --git
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/AddColumnToDb.java
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/AddColumnToDb.java
index 516d0f381..d487e1724 100644
---
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/AddColumnToDb.java
+++
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/AddColumnToDb.java
@@ -19,6 +19,7 @@
package org.apache.cayenne.dbsync.merge.token.db;
+import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dba.QuotingStrategy;
import org.apache.cayenne.dba.JdbcAdapter;
@@ -51,7 +52,9 @@ public class AddColumnToDb extends
AbstractToDbToken.EntityAndColumn {
}
@Override
- public List<String> createSql(DbAdapter adapter) {
+ public List<String> createSql(DataNode node) {
+ DbAdapter adapter = node.getAdapter();
+
StringBuffer sqlBuffer = new StringBuffer();
QuotingStrategy quotes = adapter.getQuotingStrategy(getEntity());
appendPrefix(sqlBuffer, quotes);
diff --git
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/AddProcedureToDb.java
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/AddProcedureToDb.java
index 1481888e4..f84731bc1 100644
---
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/AddProcedureToDb.java
+++
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/AddProcedureToDb.java
@@ -21,7 +21,7 @@ package org.apache.cayenne.dbsync.merge.token.db;
import java.util.List;
-import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactory;
import org.apache.cayenne.dbsync.merge.token.MergerToken;
import org.apache.cayenne.map.Procedure;
@@ -39,7 +39,7 @@ public class AddProcedureToDb extends AbstractToDbToken {
}
@Override
- public List<String> createSql(DbAdapter adapter) {
+ public List<String> createSql(DataNode node) {
throw new UnsupportedOperationException("Can't generate SQL for
procedure");
}
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 ae49c5255..b2535a60b 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
@@ -19,6 +19,7 @@
package org.apache.cayenne.dbsync.merge.token.db;
+import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.access.DbGenerator;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactory;
@@ -42,7 +43,9 @@ public class AddRelationshipToDb extends
AbstractToDbToken.Entity {
* @see
DbGenerator#createConstraintsQueries(org.apache.cayenne.map.DbEntity)
*/
@Override
- public List<String> createSql(DbAdapter adapter) {
+ public List<String> createSql(DataNode node) {
+ DbAdapter adapter = node.getAdapter();
+
// TODO: skip FK to a different DB
if (!this.isEmpty()) {
String fksql = adapter.createFkConstraint(relationship);
diff --git
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/CreateTableToDb.java
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/CreateTableToDb.java
index f399fa3cb..dc764c9ab 100644
---
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/CreateTableToDb.java
+++
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/CreateTableToDb.java
@@ -20,7 +20,6 @@
package org.apache.cayenne.dbsync.merge.token.db;
import org.apache.cayenne.access.DataNode;
-import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dbsync.merge.context.MergerContext;
import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactory;
import org.apache.cayenne.dbsync.merge.token.MergerToken;
@@ -39,13 +38,13 @@ public class CreateTableToDb extends
AbstractToDbToken.Entity {
}
@Override
- public List<String> createSql(DbAdapter adapter) {
+ public List<String> createSql(DataNode node) {
List<String> sqls = new ArrayList<>();
if(needAutoPkSupport()) {
- sqls.addAll(adapter.getPkGenerator().createAutoPkStatements(
+ sqls.addAll(node.getPkGenerator().createAutoPkStatements(
Collections.singletonList(getEntity())));
}
- sqls.add(adapter.createTable(getEntity()));
+ sqls.add(node.getAdapter().createTable(getEntity()));
return sqls;
}
@@ -53,13 +52,12 @@ public class CreateTableToDb extends
AbstractToDbToken.Entity {
public void execute(MergerContext mergerContext) {
try {
DataNode node = mergerContext.getDataNode();
- DbAdapter adapter = node.getAdapter();
if(needAutoPkSupport()) {
- adapter.getPkGenerator().createAutoPk(
+ node.getPkGenerator().createAutoPk(
node,
Collections.singletonList(getEntity()));
}
- executeSql(mergerContext, adapter.createTable(getEntity()));
+ executeSql(mergerContext,
node.getAdapter().createTable(getEntity()));
}
catch (Exception e) {
mergerContext.getValidationResult().addFailure(
diff --git
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/DropColumnToDb.java
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/DropColumnToDb.java
index d10b007c1..2537e6b13 100644
---
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/DropColumnToDb.java
+++
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/DropColumnToDb.java
@@ -22,6 +22,7 @@ package org.apache.cayenne.dbsync.merge.token.db;
import java.util.Collections;
import java.util.List;
+import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dba.QuotingStrategy;
import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactory;
@@ -36,7 +37,9 @@ public class DropColumnToDb extends
AbstractToDbToken.EntityAndColumn {
}
@Override
- public List<String> createSql(DbAdapter adapter) {
+ public List<String> createSql(DataNode node) {
+ DbAdapter adapter = node.getAdapter();
+
StringBuilder sqlBuffer = new StringBuilder();
QuotingStrategy quotes = adapter.getQuotingStrategy(getEntity());
sqlBuffer.append("ALTER TABLE ");
diff --git
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/DropProcedureToDb.java
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/DropProcedureToDb.java
index 05f51630a..37b7f8804 100644
---
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/DropProcedureToDb.java
+++
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/DropProcedureToDb.java
@@ -21,7 +21,7 @@ package org.apache.cayenne.dbsync.merge.token.db;
import java.util.List;
-import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactory;
import org.apache.cayenne.dbsync.merge.token.MergerToken;
import org.apache.cayenne.map.Procedure;
@@ -39,7 +39,7 @@ public class DropProcedureToDb extends AbstractToDbToken {
}
@Override
- public List<String> createSql(DbAdapter adapter) {
+ public List<String> createSql(DataNode node) {
throw new UnsupportedOperationException("Can't drop procedure to db.");
}
diff --git
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/DropRelationshipToDb.java
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/DropRelationshipToDb.java
index 2aea684ae..98755267c 100644
---
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/DropRelationshipToDb.java
+++
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/DropRelationshipToDb.java
@@ -19,6 +19,7 @@
package org.apache.cayenne.dbsync.merge.token.db;
+import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dba.QuotingStrategy;
import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactory;
@@ -47,7 +48,9 @@ public class DropRelationshipToDb extends
AbstractToDbToken.Entity {
}
@Override
- public List<String> createSql(DbAdapter adapter) {
+ public List<String> createSql(DataNode node) {
+ DbAdapter adapter = node.getAdapter();
+
if (isEmpty()) {
return Collections.emptyList();
}
diff --git
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/DropTableToDb.java
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/DropTableToDb.java
index fe5da7011..263bb268f 100644
---
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/DropTableToDb.java
+++
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/DropTableToDb.java
@@ -19,7 +19,7 @@
package org.apache.cayenne.dbsync.merge.token.db;
-import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactory;
import org.apache.cayenne.dbsync.merge.token.MergerToken;
import org.apache.cayenne.map.DbEntity;
@@ -34,14 +34,14 @@ public class DropTableToDb extends AbstractToDbToken.Entity
{
}
@Override
- public List<String> createSql(DbAdapter adapter) {
+ public List<String> createSql(DataNode node) {
List<String> sqls = new ArrayList<>();
// TODO: fix. some adapters drop the complete AUTO_PK_SUPPORT here
/*
- sqls.addAll(adapter.getPkGenerator().dropAutoPkStatements(
+ sqls.addAll(node.getPkGenerator().dropAutoPkStatements(
Collections.singletonList(entity)));
*/
- sqls.addAll(adapter.dropTableStatements(getEntity()));
+ sqls.addAll(node.getAdapter().dropTableStatements(getEntity()));
return sqls;
}
diff --git
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/SetAllowNullToDb.java
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/SetAllowNullToDb.java
index 04006b1b6..9a30be45f 100644
---
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/SetAllowNullToDb.java
+++
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/SetAllowNullToDb.java
@@ -19,6 +19,7 @@
package org.apache.cayenne.dbsync.merge.token.db;
+import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dba.QuotingStrategy;
import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactory;
@@ -40,7 +41,9 @@ public class SetAllowNullToDb extends
AbstractToDbToken.EntityAndColumn {
}
@Override
- public List<String> createSql(DbAdapter adapter) {
+ public List<String> createSql(DataNode node) {
+ DbAdapter adapter = node.getAdapter();
+
StringBuilder sqlBuffer = new StringBuilder();
QuotingStrategy quotes = adapter.getQuotingStrategy(getEntity());
sqlBuffer.append("ALTER TABLE ");
diff --git
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/SetColumnTypeToDb.java
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/SetColumnTypeToDb.java
index 95deadc20..ab85e2a60 100644
---
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/SetColumnTypeToDb.java
+++
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/SetColumnTypeToDb.java
@@ -19,6 +19,7 @@
package org.apache.cayenne.dbsync.merge.token.db;
+import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dba.QuotingStrategy;
import org.apache.cayenne.dba.JdbcAdapter;
@@ -60,7 +61,9 @@ public class SetColumnTypeToDb extends
AbstractToDbToken.Entity {
}
@Override
- public List<String> createSql(DbAdapter adapter) {
+ public List<String> createSql(DataNode node) {
+ DbAdapter adapter = node.getAdapter();
+
StringBuffer sqlBuffer = new StringBuffer();
QuotingStrategy quotes = adapter.getQuotingStrategy(getEntity());
appendPrefix(sqlBuffer, quotes);
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
index 66d289e43..415108674 100644
---
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
@@ -22,6 +22,7 @@ package org.apache.cayenne.dbsync.merge.token.db;
import java.util.Collections;
import java.util.List;
+import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dba.QuotingStrategy;
import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactory;
@@ -75,7 +76,9 @@ public class SetGeneratedFlagToDb extends
AbstractToDbToken.EntityAndColumn {
@SuppressWarnings("unchecked")
@Override
- public List<String> createSql(DbAdapter adapter) {
+ public List<String> createSql(DataNode node) {
+ DbAdapter adapter = node.getAdapter();
+
if(!adapter.supportsGeneratedKeys()) {
return (List<String>)Collections.EMPTY_LIST;
}
diff --git
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/SetNotNullToDb.java
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/SetNotNullToDb.java
index 78afa5fb3..4507cacba 100644
---
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/SetNotNullToDb.java
+++
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/SetNotNullToDb.java
@@ -19,6 +19,7 @@
package org.apache.cayenne.dbsync.merge.token.db;
+import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dba.QuotingStrategy;
import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactory;
@@ -39,7 +40,9 @@ public class SetNotNullToDb extends
AbstractToDbToken.EntityAndColumn {
}
@Override
- public List<String> createSql(DbAdapter adapter) {
+ public List<String> createSql(DataNode node) {
+ DbAdapter adapter = node.getAdapter();
+
QuotingStrategy quotes = adapter.getQuotingStrategy(getEntity());
StringBuilder sql = new StringBuilder("ALTER TABLE ");
quotes.appendFQN(sql, getEntity().getCatalog(),
getEntity().getSchema(), getEntity().getName());
diff --git
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/SetPrimaryKeyToDb.java
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/SetPrimaryKeyToDb.java
index b4dbab3ad..441dcb335 100644
---
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/SetPrimaryKeyToDb.java
+++
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/SetPrimaryKeyToDb.java
@@ -19,6 +19,7 @@
package org.apache.cayenne.dbsync.merge.token.db;
+import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dba.QuotingStrategy;
import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactory;
@@ -47,7 +48,9 @@ public class SetPrimaryKeyToDb extends
AbstractToDbToken.Entity {
}
@Override
- public List<String> createSql(DbAdapter adapter) {
+ public List<String> createSql(DataNode node) {
+ DbAdapter adapter = node.getAdapter();
+
List<String> sqls = new ArrayList<>();
if (!primaryKeyOriginal.isEmpty()) {
appendDropOriginalPrimaryKeySQL(adapter, sqls);
diff --git
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/SetValueForNullToDb.java
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/SetValueForNullToDb.java
index 915f460a5..42bea35b8 100644
---
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/SetValueForNullToDb.java
+++
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/SetValueForNullToDb.java
@@ -19,7 +19,7 @@
package org.apache.cayenne.dbsync.merge.token.db;
-import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactory;
import org.apache.cayenne.dbsync.merge.token.DummyReverseToken;
import org.apache.cayenne.dbsync.merge.token.MergerToken;
@@ -40,7 +40,7 @@ public class SetValueForNullToDb extends
AbstractToDbToken.EntityAndColumn {
}
@Override
- public List<String> createSql(DbAdapter adapter) {
+ public List<String> createSql(DataNode node) {
return valueForNullProvider.createSql(getEntity(), getColumn());
}
diff --git
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/configuration/ToolsModule.java
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/configuration/ToolsModule.java
index d7a36044e..e59e07b3a 100644
---
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/configuration/ToolsModule.java
+++
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/configuration/ToolsModule.java
@@ -39,47 +39,25 @@ import org.apache.cayenne.configuration.RuntimeProperties;
import org.apache.cayenne.configuration.runtime.DataSourceFactory;
import org.apache.cayenne.configuration.runtime.DbAdapterFactory;
import org.apache.cayenne.configuration.runtime.DefaultDbAdapterFactory;
-import org.apache.cayenne.configuration.runtime.PkGeneratorFactoryProvider;
import org.apache.cayenne.configuration.xml.DataChannelMetaData;
import org.apache.cayenne.configuration.xml.DefaultDataChannelMetaData;
import org.apache.cayenne.configuration.xml.HandlerFactory;
import org.apache.cayenne.configuration.xml.XMLDataChannelDescriptorLoader;
import org.apache.cayenne.configuration.xml.XMLDataMapLoader;
import org.apache.cayenne.configuration.xml.XMLReaderProvider;
-import org.apache.cayenne.dba.JdbcPkGenerator;
-import org.apache.cayenne.dba.PkGenerator;
-import org.apache.cayenne.dba.db2.DB2Adapter;
-import org.apache.cayenne.dba.db2.DB2PkGenerator;
import org.apache.cayenne.dba.db2.DB2Sniffer;
-import org.apache.cayenne.dba.derby.DerbyAdapter;
-import org.apache.cayenne.dba.derby.DerbyPkGenerator;
import org.apache.cayenne.dba.derby.DerbySniffer;
import org.apache.cayenne.dba.firebird.FirebirdSniffer;
-import org.apache.cayenne.dba.frontbase.FrontBaseAdapter;
-import org.apache.cayenne.dba.frontbase.FrontBasePkGenerator;
import org.apache.cayenne.dba.frontbase.FrontBaseSniffer;
-import org.apache.cayenne.dba.h2.H2Adapter;
-import org.apache.cayenne.dba.h2.H2PkGenerator;
import org.apache.cayenne.dba.h2.H2Sniffer;
import org.apache.cayenne.dba.hsqldb.HSQLDBSniffer;
-import org.apache.cayenne.dba.ingres.IngresAdapter;
-import org.apache.cayenne.dba.ingres.IngresPkGenerator;
import org.apache.cayenne.dba.ingres.IngresSniffer;
import org.apache.cayenne.dba.mariadb.MariaDBSniffer;
-import org.apache.cayenne.dba.mysql.MySQLAdapter;
-import org.apache.cayenne.dba.mysql.MySQLPkGenerator;
import org.apache.cayenne.dba.mysql.MySQLSniffer;
-import org.apache.cayenne.dba.oracle.OracleAdapter;
-import org.apache.cayenne.dba.oracle.OraclePkGenerator;
import org.apache.cayenne.dba.oracle.OracleSniffer;
-import org.apache.cayenne.dba.postgres.PostgresAdapter;
-import org.apache.cayenne.dba.postgres.PostgresPkGenerator;
import org.apache.cayenne.dba.postgres.PostgresSniffer;
import org.apache.cayenne.dba.sqlite.SQLiteSniffer;
-import org.apache.cayenne.dba.sqlserver.SQLServerAdapter;
import org.apache.cayenne.dba.sqlserver.SQLServerSniffer;
-import org.apache.cayenne.dba.sybase.SybaseAdapter;
-import org.apache.cayenne.dba.sybase.SybasePkGenerator;
import org.apache.cayenne.dba.sybase.SybaseSniffer;
import org.apache.cayenne.di.AdhocObjectFactory;
import org.apache.cayenne.di.Binder;
@@ -133,18 +111,7 @@ public class ToolsModule implements Module {
.addAdapterDetector(OracleSniffer.class)
.addAdapterDetector(PostgresSniffer.class)
.addAdapterDetector(MySQLSniffer.class)
- .addAdapterDetector(MariaDBSniffer.class)
-
- .addPkGenerator(DB2Adapter.class, DB2PkGenerator.class)
- .addPkGenerator(DerbyAdapter.class, DerbyPkGenerator.class)
- .addPkGenerator(FrontBaseAdapter.class,
FrontBasePkGenerator.class)
- .addPkGenerator(H2Adapter.class, H2PkGenerator.class)
- .addPkGenerator(IngresAdapter.class, IngresPkGenerator.class)
- .addPkGenerator(MySQLAdapter.class, MySQLPkGenerator.class)
- .addPkGenerator(OracleAdapter.class, OraclePkGenerator.class)
- .addPkGenerator(PostgresAdapter.class,
PostgresPkGenerator.class)
- .addPkGenerator(SQLServerAdapter.class,
SybasePkGenerator.class)
- .addPkGenerator(SybaseAdapter.class, SybasePkGenerator.class);
+ .addAdapterDetector(MariaDBSniffer.class);
binder.bind(Logger.class).toInstance(logger);
@@ -161,8 +128,6 @@ public class ToolsModule implements Module {
binder.bind(Key.get(BatchTranslator.class,
BatchTranslator.UPDATE)).to(UpdateBatchTranslator.class);
binder.bind(Key.get(BatchTranslator.class,
BatchTranslator.DELETE)).to(DeleteBatchTranslator.class);
binder.bind(SQLLogger.class).to(Slf4jSQLLogger.class);
-
binder.bind(PkGeneratorFactoryProvider.class).to(PkGeneratorFactoryProvider.class);
- binder.bind(PkGenerator.class).to(JdbcPkGenerator.class);
binder.bind(DbAdapterFactory.class).to(DefaultDbAdapterFactory.class);
binder.bind(DataSourceFactory.class).to(DriverDataSourceFactory.class);
diff --git
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbimport/DefaultDbImportAction.java
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbimport/DefaultDbImportAction.java
index a1444c95d..cec9b17d1 100644
---
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbimport/DefaultDbImportAction.java
+++
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbimport/DefaultDbImportAction.java
@@ -151,7 +151,7 @@ public class DefaultDbImportAction implements
DbImportAction {
// Warm up the AutoAdapter by calling any method. This to avoid
AutoAdapter opening a connection later in
// the middle of import to detect the DB type. Opening two connections
in the same thread causes issues with
// some DBs (namely com.sap.cloud.db.jdbc:ngdbc:2.4.56)
- adapter.getPkGenerator();
+ adapter.unwrap();
return adapter;
}
diff --git
a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/MergeCase.java
b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/MergeCase.java
index cc06fa25b..030565c84 100644
---
a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/MergeCase.java
+++
b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/MergeCase.java
@@ -270,7 +270,7 @@ public abstract class MergeCase {
AbstractToDbToken t = (AbstractToDbToken)
mergerFactory().createDropTableToDb(entity);
- for (String sql : t.createSql(node.getAdapter())) {
+ for (String sql : t.createSql(node)) {
try {
executeSql(sql);
diff --git
a/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/DbGenerateTask.java
b/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/DbGenerateTask.java
index 8100fff88..9a0e70d3b 100644
---
a/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/DbGenerateTask.java
+++
b/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/DbGenerateTask.java
@@ -23,16 +23,12 @@ import groovy.lang.Closure;
import org.apache.cayenne.access.DbGenerator;
import org.apache.cayenne.configuration.DataMapLoader;
import org.apache.cayenne.configuration.DataNodeDescriptor;
-import org.apache.cayenne.configuration.runtime.DataSourceFactory;
import org.apache.cayenne.configuration.runtime.DbAdapterFactory;
-import org.apache.cayenne.configuration.runtime.PkGeneratorFactoryProvider;
import org.apache.cayenne.datasource.CayenneDataSource;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dba.JdbcAdapter;
-import org.apache.cayenne.dba.PkGenerator;
import org.apache.cayenne.dbsync.DbSyncModule;
import org.apache.cayenne.dbsync.reverse.configuration.ToolsModule;
-import org.apache.cayenne.di.AdhocObjectFactory;
import org.apache.cayenne.di.DIBootstrap;
import org.apache.cayenne.di.Injector;
import org.apache.cayenne.log.NoopSQLLogger;
diff --git a/cayenne/src/main/java/org/apache/cayenne/access/DataNode.java
b/cayenne/src/main/java/org/apache/cayenne/access/DataNode.java
index 4072ecd5d..b9e85d777 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/DataNode.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/DataNode.java
@@ -28,6 +28,7 @@ import
org.apache.cayenne.access.translator.ProcedureTranslator;
import org.apache.cayenne.access.translator.SQLTemplateTranslator;
import org.apache.cayenne.access.translator.SelectTranslator;
import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.dba.PkGenerator;
import org.apache.cayenne.log.NoopSQLLogger;
import org.apache.cayenne.log.SQLLogger;
import org.apache.cayenne.map.DataMap;
@@ -66,6 +67,11 @@ public class DataNode {
protected SchemaUpdateStrategy schemaUpdateStrategy;
protected Map<String, DataMap> dataMaps;
+ private PkGenerator pkGenerator;
+
+ // tells whether "pkGenerator" was installed by the user, and hence must
not be replaced when the adapter changes
+ private boolean customPkGenerator;
+
private DataSource dataSource;
private SQLLogger sqlLogger;
private RowReaderFactory rowReaderFactory;
@@ -204,6 +210,38 @@ public class DataNode {
public void setAdapter(DbAdapter adapter) {
this.adapter = adapter;
+
+ // a generator built for the old adapter is meaningless for the new
one. A generator explicitly installed
+ // by the user is left alone.
+ if (!customPkGenerator) {
+ this.pkGenerator = adapter != null ? adapter.createPkGenerator() :
null;
+ }
+ }
+
+ /**
+ * Returns the PkGenerator used by this node to generate primary keys.
Unless an explicit generator was installed
+ * with {@link #setPkGenerator(PkGenerator)}, this is the default
generator of the node's {@link DbAdapter}.
+ *
+ * @since 5.0
+ */
+ public PkGenerator getPkGenerator() {
+ return pkGenerator;
+ }
+
+ /**
+ * Installs a custom PkGenerator, overriding the default generator of the
node's {@link DbAdapter}. A custom
+ * generator is retained across {@link #setAdapter(DbAdapter)} calls.
Passing null restores the adapter default.
+ *
+ * @since 5.0
+ */
+ public void setPkGenerator(PkGenerator pkGenerator) {
+ if (pkGenerator != null) {
+ this.pkGenerator = pkGenerator;
+ this.customPkGenerator = true;
+ } else {
+ this.customPkGenerator = false;
+ this.pkGenerator = adapter != null ? adapter.createPkGenerator() :
null;
+ }
}
/**
diff --git a/cayenne/src/main/java/org/apache/cayenne/access/DbGenerator.java
b/cayenne/src/main/java/org/apache/cayenne/access/DbGenerator.java
index 631bb2e47..90080cf44 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/DbGenerator.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/DbGenerator.java
@@ -156,7 +156,7 @@ public class DbGenerator {
createConstraints = new HashMap<>();
DbAdapter adapter = getAdapter();
- for (final DbEntity dbe : this.dbEntitiesInInsertOrder) {
+ for (DbEntity dbe : this.dbEntitiesInInsertOrder) {
String name = dbe.getName();
@@ -170,7 +170,7 @@ public class DbGenerator {
createConstraints.put(name,
createConstraintsQueries(dbe));
}
- PkGenerator pkGenerator = adapter.getPkGenerator();
+ PkGenerator pkGenerator = adapter.createPkGenerator();
dropPK =
pkGenerator.dropAutoPkStatements(dbEntitiesRequiringAutoPK);
createPK =
pkGenerator.createAutoPkStatements(dbEntitiesRequiringAutoPK);
}
@@ -214,13 +214,13 @@ public class DbGenerator {
}
if (shouldCreateTables) {
- for (final DbEntity ent : dbEntitiesInInsertOrder) {
+ for (DbEntity ent : dbEntitiesInInsertOrder) {
list.add(createTables.get(ent.getName()));
}
}
if (shouldCreateFKConstraints) {
- for (final DbEntity ent : dbEntitiesInInsertOrder) {
+ for (DbEntity ent : dbEntitiesInInsertOrder) {
List<String> fks =
createConstraints.get(ent.getName());
list.addAll(fks);
}
@@ -264,7 +264,7 @@ public class DbGenerator {
// create tables
List<String> createdTables = new ArrayList<>();
if (shouldCreateTables) {
- for (final DbEntity ent :
dbEntitiesInInsertOrder) {
+ for (DbEntity ent :
dbEntitiesInInsertOrder) {
// only create missing tables
@@ -288,18 +288,14 @@ public class DbGenerator {
// drop PK
if (shouldDropPKSupport) {
- List<String> dropAutoPKSQL =
getAdapter().getPkGenerator().dropAutoPkStatements(
-
dbEntitiesRequiringAutoPK);
- for (final String sql : dropAutoPKSQL) {
+ for (String sql : dropPK) {
safeExecute(connection, sql);
}
}
// create pk
if (shouldCreatePKSupport) {
- List<String> createAutoPKSQL =
getAdapter().getPkGenerator().createAutoPkStatements(
-
dbEntitiesRequiringAutoPK);
- for (final String sql :
createAutoPKSQL) {
+ for (String sql : createPK) {
safeExecute(connection, sql);
}
}
@@ -342,7 +338,7 @@ public class DbGenerator {
*/
public List<String> createConstraintsQueries(DbEntity table) {
List<String> list = new ArrayList<>();
- for (final DbRelationship rel : table.getRelationships()) {
+ for (DbRelationship rel : table.getRelationships()) {
if (rel.isToMany()) {
continue;
@@ -489,7 +485,7 @@ public class DbGenerator {
// tables with invalid DbAttributes are not included
boolean invalidAttributes = false;
- for (final DbAttribute attr :
nextEntity.getAttributes()) {
+ for (DbAttribute attr : nextEntity.getAttributes()) {
if (attr.getType() == TypesMapping.NOT_DEFINED)
{
LOGGER.info("Skipping entity, attribute
type is undefined: {}.{}", nextEntity.getName(),
attr.getName());
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/flush/PermanentObjectIdVisitor.java
b/cayenne/src/main/java/org/apache/cayenne/access/flush/PermanentObjectIdVisitor.java
index a412db1c2..d4d1598f5 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/flush/PermanentObjectIdVisitor.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/flush/PermanentObjectIdVisitor.java
@@ -96,7 +96,7 @@ class PermanentObjectIdVisitor implements
DbRowOpVisitor<Void> {
private void createPermanentId(InsertDbRowOp dbRow) {
ObjectId id = dbRow.getChangeId();
boolean supportsGeneratedKeys =
lastNode.getAdapter().supportsGeneratedKeys();
- PkGenerator pkGenerator = lastNode.getAdapter().getPkGenerator();
+ PkGenerator pkGenerator = lastNode.getPkGenerator();
// modify replacement id directly...
Map<String, Object> idMap = id.getReplacementIdMap();
diff --git
a/cayenne/src/main/java/org/apache/cayenne/configuration/runtime/CoreModule.java
b/cayenne/src/main/java/org/apache/cayenne/configuration/runtime/CoreModule.java
index 185348de9..d92aa9f9c 100644
---
a/cayenne/src/main/java/org/apache/cayenne/configuration/runtime/CoreModule.java
+++
b/cayenne/src/main/java/org/apache/cayenne/configuration/runtime/CoreModule.java
@@ -75,41 +75,19 @@ import
org.apache.cayenne.configuration.xml.NoopDataChannelMetaData;
import org.apache.cayenne.configuration.xml.XMLDataChannelDescriptorLoader;
import org.apache.cayenne.configuration.xml.XMLDataMapLoader;
import org.apache.cayenne.configuration.xml.XMLReaderProvider;
-import org.apache.cayenne.dba.JdbcPkGenerator;
-import org.apache.cayenne.dba.PkGenerator;
-import org.apache.cayenne.dba.db2.DB2Adapter;
-import org.apache.cayenne.dba.db2.DB2PkGenerator;
import org.apache.cayenne.dba.db2.DB2Sniffer;
-import org.apache.cayenne.dba.derby.DerbyAdapter;
-import org.apache.cayenne.dba.derby.DerbyPkGenerator;
import org.apache.cayenne.dba.derby.DerbySniffer;
import org.apache.cayenne.dba.firebird.FirebirdSniffer;
-import org.apache.cayenne.dba.frontbase.FrontBaseAdapter;
-import org.apache.cayenne.dba.frontbase.FrontBasePkGenerator;
import org.apache.cayenne.dba.frontbase.FrontBaseSniffer;
-import org.apache.cayenne.dba.h2.H2Adapter;
-import org.apache.cayenne.dba.h2.H2PkGenerator;
import org.apache.cayenne.dba.h2.H2Sniffer;
import org.apache.cayenne.dba.hsqldb.HSQLDBSniffer;
-import org.apache.cayenne.dba.ingres.IngresAdapter;
-import org.apache.cayenne.dba.ingres.IngresPkGenerator;
import org.apache.cayenne.dba.ingres.IngresSniffer;
import org.apache.cayenne.dba.mariadb.MariaDBSniffer;
-import org.apache.cayenne.dba.mysql.MySQLAdapter;
-import org.apache.cayenne.dba.mysql.MySQLPkGenerator;
import org.apache.cayenne.dba.mysql.MySQLSniffer;
-import org.apache.cayenne.dba.oracle.OracleAdapter;
-import org.apache.cayenne.dba.oracle.OraclePkGenerator;
import org.apache.cayenne.dba.oracle.OracleSniffer;
-import org.apache.cayenne.dba.postgres.PostgresAdapter;
-import org.apache.cayenne.dba.postgres.PostgresPkGenerator;
import org.apache.cayenne.dba.postgres.PostgresSniffer;
import org.apache.cayenne.dba.sqlite.SQLiteSniffer;
-import org.apache.cayenne.dba.sqlserver.SQLServerAdapter;
-import org.apache.cayenne.dba.sqlserver.SQLServerPkGenerator;
import org.apache.cayenne.dba.sqlserver.SQLServerSniffer;
-import org.apache.cayenne.dba.sybase.SybaseAdapter;
-import org.apache.cayenne.dba.sybase.SybasePkGenerator;
import org.apache.cayenne.dba.sybase.SybaseSniffer;
import org.apache.cayenne.di.AdhocObjectFactory;
import org.apache.cayenne.di.Binder;
@@ -254,20 +232,6 @@ public class CoreModule implements Module {
return binder.bindList(DbAdapterDetector.class,
Constants.ADAPTER_DETECTORS_LIST);
}
- /**
- * Provides access to a DI map builder for {@link PkGenerator}'s that
allows downstream modules to
- * "contribute" their own pk generators.
- *
- * @param binder DI binder passed to the module during injector startup.
- * @return MapBuilder for properties.
- * @since 4.1
- * @deprecated in favor of {@link #extend(Binder)} API
- */
- @Deprecated(since = "5.0", forRemoval = true)
- public static MapBuilder<PkGenerator> contributePkGenerators(Binder
binder) {
- return binder.bindMap(PkGenerator.class);
- }
-
/**
* Provides access to a DI map builder for runtime properties that allows
downstream modules to
* "contribute" their own properties.
@@ -369,18 +333,6 @@ public class CoreModule implements Module {
.addAdapterDetector(MySQLSniffer.class)
.addAdapterDetector(MariaDBSniffer.class)
- // PkGenerators for the known DbAdapters
- .addPkGenerator(DB2Adapter.class, DB2PkGenerator.class)
- .addPkGenerator(DerbyAdapter.class, DerbyPkGenerator.class)
- .addPkGenerator(FrontBaseAdapter.class,
FrontBasePkGenerator.class)
- .addPkGenerator(H2Adapter.class, H2PkGenerator.class)
- .addPkGenerator(IngresAdapter.class, IngresPkGenerator.class)
- .addPkGenerator(MySQLAdapter.class, MySQLPkGenerator.class)
- .addPkGenerator(OracleAdapter.class, OraclePkGenerator.class)
- .addPkGenerator(PostgresAdapter.class,
PostgresPkGenerator.class)
- .addPkGenerator(SQLServerAdapter.class,
SQLServerPkGenerator.class)
- .addPkGenerator(SybaseAdapter.class, SybasePkGenerator.class)
-
.addSyncFilter(TransactionFilter.class)
// ExtendedTypes
@@ -424,8 +376,6 @@ public class CoreModule implements Module {
binder.bind(SQLLogger.class).to(Slf4jSQLLogger.class);
binder.bind(ClassLoaderManager.class).to(DefaultClassLoaderManager.class);
binder.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class);
-
binder.bind(PkGeneratorFactoryProvider.class).to(PkGeneratorFactoryProvider.class);
- binder.bind(PkGenerator.class).to(JdbcPkGenerator.class);
binder.bind(ConfigurationNameMapper.class).to(DefaultConfigurationNameMapper.class);
binder.bind(EventManager.class).toProvider(EventManagerProvider.class);
binder.bind(QueryCache.class).toProvider(MapQueryCacheProvider.class);
diff --git
a/cayenne/src/main/java/org/apache/cayenne/configuration/runtime/CoreModuleExtender.java
b/cayenne/src/main/java/org/apache/cayenne/configuration/runtime/CoreModuleExtender.java
index 20d9bc9ef..605891741 100644
---
a/cayenne/src/main/java/org/apache/cayenne/configuration/runtime/CoreModuleExtender.java
+++
b/cayenne/src/main/java/org/apache/cayenne/configuration/runtime/CoreModuleExtender.java
@@ -31,8 +31,6 @@ import org.apache.cayenne.commitlog.CommitLogListener;
import org.apache.cayenne.commitlog.meta.AnnotationCommitLogEntityFactory;
import org.apache.cayenne.commitlog.meta.CommitLogEntityFactory;
import org.apache.cayenne.configuration.Constants;
-import org.apache.cayenne.dba.DbAdapter;
-import org.apache.cayenne.dba.PkGenerator;
import org.apache.cayenne.di.Binder;
import org.apache.cayenne.di.ListBuilder;
import org.apache.cayenne.di.MapBuilder;
@@ -52,7 +50,6 @@ public class CoreModuleExtender {
private MapBuilder<String> properties;
private ListBuilder<String> projectLocations;
private ListBuilder<DbAdapterDetector> adapterDetectors;
- private MapBuilder<PkGenerator> pkGenerators;
private ListBuilder<DataChannelQueryFilter> queryFilters;
private ListBuilder<DataChannelSyncFilter> syncFilters;
private ListBuilder<Object> listeners;
@@ -71,7 +68,6 @@ public class CoreModuleExtender {
contributeProperties();
contributeProjectLocations();
contributeAdapterDetectors();
- contributePkGenerators();
contributeQueryFilters();
contributeSyncFilters();
contributeListeners();
@@ -155,22 +151,6 @@ public class CoreModuleExtender {
return this;
}
- /**
- * Adds a custom PK generator per DbAdapter
- */
- public CoreModuleExtender addPkGenerator(Class<? extends DbAdapter>
adapter, PkGenerator pkGenerator) {
- contributePkGenerators().put(adapter.getName(), pkGenerator);
- return this;
- }
-
- /**
- * Adds a custom PK generator per DbAdapter
- */
- public CoreModuleExtender addPkGenerator(Class<? extends DbAdapter>
adapter, Class<? extends PkGenerator> pkGeneratorType) {
- contributePkGenerators().put(adapter.getName(), pkGeneratorType);
- return this;
- }
-
/**
* Adds a custom query filter to the end of the existing filter list
*/
@@ -483,11 +463,4 @@ public class CoreModuleExtender {
}
return valueObjectTypes;
}
-
- private MapBuilder<PkGenerator> contributePkGenerators() {
- if (pkGenerators == null) {
- pkGenerators = binder.bindMap(PkGenerator.class);
- }
- return pkGenerators;
- }
}
diff --git
a/cayenne/src/main/java/org/apache/cayenne/configuration/runtime/DefaultDbAdapterFactory.java
b/cayenne/src/main/java/org/apache/cayenne/configuration/runtime/DefaultDbAdapterFactory.java
index b8099ff5f..0ed4dec2a 100644
---
a/cayenne/src/main/java/org/apache/cayenne/configuration/runtime/DefaultDbAdapterFactory.java
+++
b/cayenne/src/main/java/org/apache/cayenne/configuration/runtime/DefaultDbAdapterFactory.java
@@ -24,7 +24,6 @@ import org.apache.cayenne.configuration.DataNodeDescriptor;
import org.apache.cayenne.dba.AutoAdapter;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dba.JdbcAdapter;
-import org.apache.cayenne.dba.PkGenerator;
import org.apache.cayenne.di.AdhocObjectFactory;
import org.apache.cayenne.di.Inject;
import org.apache.cayenne.di.Injector;
@@ -36,7 +35,6 @@ import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import java.util.List;
-import java.util.Objects;
/**
* A factory of DbAdapters that either loads user-provided adapter or guesses
@@ -54,9 +52,6 @@ public class DefaultDbAdapterFactory implements
DbAdapterFactory {
@Inject
protected AdhocObjectFactory objectFactory;
- @Inject
- protected PkGeneratorFactoryProvider pkGeneratorProvider;
-
protected List<DbAdapterDetector> detectors;
public DefaultDbAdapterFactory(@Inject(Constants.ADAPTER_DETECTORS_LIST)
List<DbAdapterDetector> detectors) {
@@ -83,8 +78,7 @@ public class DefaultDbAdapterFactory implements
DbAdapterFactory {
}
if (adapterType != null) {
- DbAdapter dbAdapter = objectFactory.newInstance(DbAdapter.class,
adapterType);
- return setupPkGenerator(dbAdapter);
+ return objectFactory.newInstance(DbAdapter.class, adapterType);
} else {
return new AutoAdapter(() -> detectAdapter(dataSource));
}
@@ -117,7 +111,7 @@ public class DefaultDbAdapterFactory implements
DbAdapterFactory {
// TODO: should detector do this??
injector.injectMembers(adapter);
- return setupPkGenerator(adapter);
+ return adapter;
}
}
@@ -128,13 +122,4 @@ public class DefaultDbAdapterFactory implements
DbAdapterFactory {
LOGGER.warn("Failed to detect database type, using generic adapter");
return objectFactory.newInstance(DbAdapter.class,
JdbcAdapter.class.getName());
}
-
- protected DbAdapter setupPkGenerator(DbAdapter dbAdapter) {
- PkGenerator pkGenerator =
pkGeneratorProvider.get(Objects.requireNonNull(dbAdapter));
- if (pkGenerator != null) {
- pkGenerator.setAdapter(dbAdapter);
- dbAdapter.setPkGenerator(pkGenerator);
- }
- return dbAdapter;
- }
}
diff --git
a/cayenne/src/main/java/org/apache/cayenne/configuration/runtime/PkGeneratorFactoryProvider.java
b/cayenne/src/main/java/org/apache/cayenne/configuration/runtime/PkGeneratorFactoryProvider.java
deleted file mode 100644
index 9c3682e57..000000000
---
a/cayenne/src/main/java/org/apache/cayenne/configuration/runtime/PkGeneratorFactoryProvider.java
+++ /dev/null
@@ -1,50 +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
- *
- * https://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.configuration.runtime;
-
-import org.apache.cayenne.dba.DbAdapter;
-import org.apache.cayenne.dba.PkGenerator;
-import org.apache.cayenne.di.DIRuntimeException;
-import org.apache.cayenne.di.Inject;
-
-import java.util.Map;
-import java.util.Objects;
-
-/**
- * Per-adapter provider of PkGenerators
- *
- * @since 4.1
- */
-public class PkGeneratorFactoryProvider {
-
- private final Map<String, PkGenerator> perAdapterValues;
- private final PkGenerator defaultValue;
-
- public PkGeneratorFactoryProvider(
- @Inject Map<String, PkGenerator> perAdapterValues,
- @Inject PkGenerator defaultValue) {
- this.perAdapterValues = Objects.requireNonNull(perAdapterValues);
- this.defaultValue = Objects.requireNonNull(defaultValue);
- }
-
- public PkGenerator get(DbAdapter adapter) throws DIRuntimeException {
- return
perAdapterValues.getOrDefault(adapter.unwrap().getClass().getName(),
defaultValue);
- }
-}
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/AutoAdapter.java
b/cayenne/src/main/java/org/apache/cayenne/dba/AutoAdapter.java
index 8f3680578..87aafc70b 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/AutoAdapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/AutoAdapter.java
@@ -53,7 +53,6 @@ import java.util.List;
public class AutoAdapter implements DbAdapter {
protected Provider<DbAdapter> adapterProvider;
- protected PkGenerator pkGenerator;
/**
* The actual adapter that is delegated methods execution.
@@ -215,19 +214,11 @@ public class AutoAdapter implements DbAdapter {
}
/**
- * Returns a primary key generator.
+ * Returns the default primary key generator of the wrapped adapter.
*/
@Override
- public PkGenerator getPkGenerator() {
- return (pkGenerator != null) ? pkGenerator :
getAdapter().getPkGenerator();
- }
-
- /**
- * Sets a PK generator override. If set to non-null value, such PK
generator
- * will be used instead of the one provided by wrapped adapter.
- */
- public void setPkGenerator(PkGenerator pkGenerator) {
- this.pkGenerator = pkGenerator;
+ public PkGenerator createPkGenerator() {
+ return getAdapter().createPkGenerator();
}
@Override
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/DbAdapter.java
b/cayenne/src/main/java/org/apache/cayenne/dba/DbAdapter.java
index fbf139d93..6999c9a1a 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/DbAdapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/DbAdapter.java
@@ -221,21 +221,16 @@ public interface DbAdapter {
ExtendedTypeMap getExtendedTypes();
/**
- * Returns primary key generator associated with this DbAdapter.
- */
- PkGenerator getPkGenerator();
-
- /**
- * Set custom PK generator associated with this DbAdapter.
+ * Returns a new primary key generator of the default type associated with
this adapter. DataNode would use this
+ * generator, unless explicitly overridden. DbAdapter does not cache the
generator as it is often stateful.
*
- * @param pkGenerator to set
- * @since 4.1
+ * @since 5.0
*/
- void setPkGenerator(PkGenerator pkGenerator);
+ PkGenerator createPkGenerator();
/**
* Creates and returns a DbAttribute based on supplied parameters (usually
- * obtained from database meta data).
+ * obtained from database metadata).
*
* @param name database column name
* @param typeName database specific type name, may be used as a hint to
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java
b/cayenne/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java
index d410524e3..ce5f1b58e 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java
@@ -68,7 +68,6 @@ import java.util.Map;
*/
public class JdbcAdapter implements DbAdapter {
- private PkGenerator pkGenerator;
protected QuotingStrategy quotingStrategy;
protected int defaultCharColumnLength;
@@ -229,21 +228,11 @@ public class JdbcAdapter implements DbAdapter {
}
/**
- * Returns primary key generator associated with this DbAdapter.
+ * Returns a generic PK generator based on the "AUTO_PK_SUPPORT" lookup
table.
*/
@Override
- public PkGenerator getPkGenerator() {
- return pkGenerator;
- }
-
- /**
- * Sets new primary key generator.
- *
- * @since 1.1
- */
- @Override
- public void setPkGenerator(PkGenerator pkGenerator) {
- this.pkGenerator = pkGenerator;
+ public PkGenerator createPkGenerator() {
+ return new JdbcPkGenerator(this);
}
/**
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/JdbcPkGenerator.java
b/cayenne/src/main/java/org/apache/cayenne/dba/JdbcPkGenerator.java
index e49ea2899..e295a91b3 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/JdbcPkGenerator.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/JdbcPkGenerator.java
@@ -54,17 +54,11 @@ public class JdbcPkGenerator implements PkGenerator {
public static final int DEFAULT_PK_CACHE_SIZE = 20;
static final long DEFAULT_PK_START_VALUE = 200;
- protected JdbcAdapter adapter;
+ protected final JdbcAdapter adapter;
protected ConcurrentMap<String, Queue<Long>> pkCache = new
ConcurrentHashMap<>();
protected int pkCacheSize = DEFAULT_PK_CACHE_SIZE;
protected long pkStartValue = DEFAULT_PK_START_VALUE;
- /**
- * @since 4.1
- */
- public JdbcPkGenerator() {
- }
-
public JdbcPkGenerator(JdbcAdapter adapter) {
this.adapter = adapter;
}
@@ -251,11 +245,6 @@ public class JdbcPkGenerator implements PkGenerator {
}
}
- @Override
- public void setAdapter(DbAdapter adapter) {
- this.adapter = (JdbcAdapter) adapter;
- }
-
/**
* Performs primary key generation ignoring cache. Generates a range of
* primary keys as specified by "pkCacheSize" bean property.
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/PkGenerator.java
b/cayenne/src/main/java/org/apache/cayenne/dba/PkGenerator.java
index 761435f05..31c98921e 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/PkGenerator.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/PkGenerator.java
@@ -80,13 +80,6 @@ public interface PkGenerator {
*/
Object generatePk(DataNode dataNode, DbAttribute pk, Class<?> javaType);
- /**
- * Install the adapter associated with current PkGenerator
- *
- * @since 4.1
- */
- void setAdapter(DbAdapter q);
-
/**
* Get an adapter associated with current PkGenerator
*
diff --git
a/cayenne/src/main/java/org/apache/cayenne/dba/SequencePkGenerator.java
b/cayenne/src/main/java/org/apache/cayenne/dba/SequencePkGenerator.java
index 2b7809417..9a1fb1c51 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/SequencePkGenerator.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/SequencePkGenerator.java
@@ -46,7 +46,7 @@ import java.util.List;
* </p>
*
* <pre>
- * dataNode.getAdapter().getPkGenerator().setPkCacheSize(1);
+ * dataNode.getPkGenerator().setPkCacheSize(1);
* </pre>
*
* @since 5.0
@@ -55,10 +55,6 @@ public abstract class SequencePkGenerator extends
JdbcPkGenerator {
private static final String _SEQUENCE_PREFIX = "pk_";
- public SequencePkGenerator() {
- super();
- }
-
protected SequencePkGenerator(JdbcAdapter adapter) {
super(adapter);
}
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/db2/DB2Adapter.java
b/cayenne/src/main/java/org/apache/cayenne/dba/db2/DB2Adapter.java
index be43f14e0..20a5820ac 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/db2/DB2Adapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/db2/DB2Adapter.java
@@ -36,6 +36,7 @@ import org.apache.cayenne.configuration.Constants;
import org.apache.cayenne.configuration.RuntimeProperties;
import org.apache.cayenne.dba.QuotingStrategy;
import org.apache.cayenne.dba.JdbcAdapter;
+import org.apache.cayenne.dba.PkGenerator;
import org.apache.cayenne.di.Inject;
import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.query.Query;
@@ -170,6 +171,14 @@ public class DB2Adapter extends JdbcAdapter {
return type != Types.TIME && super.typeSupportsScale(type);
}
+ /**
+ * Returns a {@link DB2PkGenerator}.
+ */
+ @Override
+ public PkGenerator createPkGenerator() {
+ return new DB2PkGenerator(this);
+ }
+
/**
* @since 4.2
*/
diff --git
a/cayenne/src/main/java/org/apache/cayenne/dba/db2/DB2PkGenerator.java
b/cayenne/src/main/java/org/apache/cayenne/dba/db2/DB2PkGenerator.java
index d9b513d9d..7a233b484 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/db2/DB2PkGenerator.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/db2/DB2PkGenerator.java
@@ -27,20 +27,12 @@ import org.apache.cayenne.map.DbEntity;
*/
public class DB2PkGenerator extends SequencePkGenerator {
- /**
- * Used by DI
- * @since 4.1
- */
- public DB2PkGenerator() {
- super();
- }
+ private static final String _SEQUENCE_PREFIX = "S_";
- DB2PkGenerator(JdbcAdapter adapter) {
+ public DB2PkGenerator(JdbcAdapter adapter) {
super(adapter);
}
- private static final String _SEQUENCE_PREFIX = "S_";
-
@Override
protected String sequenceName(DbEntity entity) {
return super.sequenceName(entity).toUpperCase();
diff --git
a/cayenne/src/main/java/org/apache/cayenne/dba/derby/DerbyAdapter.java
b/cayenne/src/main/java/org/apache/cayenne/dba/derby/DerbyAdapter.java
index 4de7657c5..531858ec5 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/derby/DerbyAdapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/derby/DerbyAdapter.java
@@ -34,6 +34,7 @@ import
org.apache.cayenne.access.types.ValueObjectTypeRegistry;
import org.apache.cayenne.configuration.Constants;
import org.apache.cayenne.configuration.RuntimeProperties;
import org.apache.cayenne.dba.JdbcAdapter;
+import org.apache.cayenne.dba.PkGenerator;
import org.apache.cayenne.dba.NativeColumnType;
import org.apache.cayenne.dba.QuotingStrategy;
import org.apache.cayenne.di.Inject;
@@ -194,6 +195,14 @@ public class DerbyAdapter extends JdbcAdapter {
return type != Types.TIME && super.typeSupportsScale(type);
}
+ /**
+ * Returns a {@link DerbyPkGenerator}.
+ */
+ @Override
+ public PkGenerator createPkGenerator() {
+ return new DerbyPkGenerator(this);
+ }
+
/**
* @since 4.2
*/
diff --git
a/cayenne/src/main/java/org/apache/cayenne/dba/derby/DerbyPkGenerator.java
b/cayenne/src/main/java/org/apache/cayenne/dba/derby/DerbyPkGenerator.java
index 876f62cd8..c04b82553 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/derby/DerbyPkGenerator.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/derby/DerbyPkGenerator.java
@@ -30,15 +30,7 @@ import org.apache.cayenne.map.DbEntity;
*/
public class DerbyPkGenerator extends SequencePkGenerator {
- /**
- * Used by DI
- * @since 4.1
- */
- public DerbyPkGenerator() {
- super();
- }
-
- DerbyPkGenerator(JdbcAdapter adapter) {
+ public DerbyPkGenerator(JdbcAdapter adapter) {
super(adapter);
}
diff --git
a/cayenne/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseAdapter.java
b/cayenne/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseAdapter.java
index 0ea493786..1f926fa25 100644
---
a/cayenne/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseAdapter.java
+++
b/cayenne/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseAdapter.java
@@ -30,6 +30,7 @@ import
org.apache.cayenne.access.types.ValueObjectTypeRegistry;
import org.apache.cayenne.configuration.Constants;
import org.apache.cayenne.configuration.RuntimeProperties;
import org.apache.cayenne.dba.JdbcAdapter;
+import org.apache.cayenne.dba.PkGenerator;
import org.apache.cayenne.dba.QuotingStrategy;
import org.apache.cayenne.dba.TypesMapping;
import org.apache.cayenne.di.Inject;
@@ -100,6 +101,14 @@ public class FrontBaseAdapter extends JdbcAdapter {
};
}
+ /**
+ * Returns a {@link FrontBasePkGenerator}.
+ */
+ @Override
+ public PkGenerator createPkGenerator() {
+ return new FrontBasePkGenerator(this);
+ }
+
/**
* @since 4.2
*/
diff --git
a/cayenne/src/main/java/org/apache/cayenne/dba/frontbase/FrontBasePkGenerator.java
b/cayenne/src/main/java/org/apache/cayenne/dba/frontbase/FrontBasePkGenerator.java
index 919afa00c..2f4bcc126 100644
---
a/cayenne/src/main/java/org/apache/cayenne/dba/frontbase/FrontBasePkGenerator.java
+++
b/cayenne/src/main/java/org/apache/cayenne/dba/frontbase/FrontBasePkGenerator.java
@@ -38,14 +38,6 @@ import java.util.List;
*/
public class FrontBasePkGenerator extends JdbcPkGenerator {
- /**
- * Used by DI
- * @since 4.1
- */
- public FrontBasePkGenerator() {
- super();
- }
-
public FrontBasePkGenerator(JdbcAdapter adapter) {
super(adapter);
pkStartValue = 1000000;
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/h2/H2Adapter.java
b/cayenne/src/main/java/org/apache/cayenne/dba/h2/H2Adapter.java
index d98e5d3de..fd4d0271a 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/h2/H2Adapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/h2/H2Adapter.java
@@ -32,6 +32,7 @@ import
org.apache.cayenne.access.types.ValueObjectTypeRegistry;
import org.apache.cayenne.configuration.Constants;
import org.apache.cayenne.configuration.RuntimeProperties;
import org.apache.cayenne.dba.JdbcAdapter;
+import org.apache.cayenne.dba.PkGenerator;
import org.apache.cayenne.di.Inject;
import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.query.Query;
@@ -103,6 +104,14 @@ public class H2Adapter extends JdbcAdapter {
}
}
+ /**
+ * Returns a {@link H2PkGenerator}.
+ */
+ @Override
+ public PkGenerator createPkGenerator() {
+ return new H2PkGenerator(this);
+ }
+
/**
* @since 4.2
*/
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/h2/H2PkGenerator.java
b/cayenne/src/main/java/org/apache/cayenne/dba/h2/H2PkGenerator.java
index ae45d710c..eb1d30ebf 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/h2/H2PkGenerator.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/h2/H2PkGenerator.java
@@ -30,15 +30,7 @@ import org.apache.cayenne.map.DbEntity;
*/
public class H2PkGenerator extends SequencePkGenerator {
- /**
- * Used by DI
- * @since 4.1
- */
- public H2PkGenerator() {
- super();
- }
-
- protected H2PkGenerator(JdbcAdapter adapter) {
+ public H2PkGenerator(JdbcAdapter adapter) {
super(adapter);
}
diff --git
a/cayenne/src/main/java/org/apache/cayenne/dba/ingres/IngresAdapter.java
b/cayenne/src/main/java/org/apache/cayenne/dba/ingres/IngresAdapter.java
index 6bf8fcd14..32526ed8d 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/ingres/IngresAdapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/ingres/IngresAdapter.java
@@ -30,6 +30,7 @@ import org.apache.cayenne.configuration.Constants;
import org.apache.cayenne.configuration.RuntimeProperties;
import org.apache.cayenne.dba.QuotingStrategy;
import org.apache.cayenne.dba.JdbcAdapter;
+import org.apache.cayenne.dba.PkGenerator;
import org.apache.cayenne.dba.TypesMapping;
import org.apache.cayenne.di.Inject;
import org.apache.cayenne.map.DbAttribute;
@@ -92,6 +93,14 @@ public class IngresAdapter extends JdbcAdapter {
};
}
+ /**
+ * Returns a {@link IngresPkGenerator}.
+ */
+ @Override
+ public PkGenerator createPkGenerator() {
+ return new IngresPkGenerator(this);
+ }
+
/**
* @since 4.2
*/
diff --git
a/cayenne/src/main/java/org/apache/cayenne/dba/ingres/IngresPkGenerator.java
b/cayenne/src/main/java/org/apache/cayenne/dba/ingres/IngresPkGenerator.java
index 9fd76cefd..3c7c6cdbe 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/ingres/IngresPkGenerator.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/ingres/IngresPkGenerator.java
@@ -29,15 +29,7 @@ import org.apache.cayenne.dba.SequencePkGenerator;
*/
public class IngresPkGenerator extends SequencePkGenerator {
- /**
- * Used by DI
- * @since 4.1
- */
- public IngresPkGenerator() {
- super();
- }
-
- protected IngresPkGenerator(JdbcAdapter adapter) {
+ public IngresPkGenerator(JdbcAdapter adapter) {
super(adapter);
}
diff --git
a/cayenne/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java
b/cayenne/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java
index 0b602abd4..c3b928674 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java
@@ -41,6 +41,7 @@ import org.apache.cayenne.configuration.RuntimeProperties;
import org.apache.cayenne.dba.DefaultQuotingStrategy;
import org.apache.cayenne.dba.QuotingStrategy;
import org.apache.cayenne.dba.JdbcAdapter;
+import org.apache.cayenne.dba.PkGenerator;
import org.apache.cayenne.dba.TypesMapping;
import org.apache.cayenne.di.Inject;
import org.apache.cayenne.map.DbAttribute;
@@ -124,6 +125,14 @@ public class MySQLAdapter extends JdbcAdapter {
return new DefaultQuotingStrategy('`', '`');
}
+ /**
+ * Returns a {@link MySQLPkGenerator}.
+ */
+ @Override
+ public PkGenerator createPkGenerator() {
+ return new MySQLPkGenerator(this);
+ }
+
/**
* @since 4.2
*/
diff --git
a/cayenne/src/main/java/org/apache/cayenne/dba/mysql/MySQLPkGenerator.java
b/cayenne/src/main/java/org/apache/cayenne/dba/mysql/MySQLPkGenerator.java
index 96c0efd1b..6e321a307 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/mysql/MySQLPkGenerator.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/mysql/MySQLPkGenerator.java
@@ -39,15 +39,7 @@ public class MySQLPkGenerator extends JdbcPkGenerator {
private static final Logger LOGGER =
LoggerFactory.getLogger(MySQLPkGenerator.class);
- /**
- * Used by DI
- * @since 4.1
- */
- public MySQLPkGenerator() {
- super();
- }
-
- MySQLPkGenerator(JdbcAdapter adapter) {
+ public MySQLPkGenerator(JdbcAdapter adapter) {
super(adapter);
}
diff --git
a/cayenne/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java
b/cayenne/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java
index c55d39d6e..e5468cc9c 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java
@@ -35,6 +35,7 @@ import org.apache.cayenne.configuration.Constants;
import org.apache.cayenne.configuration.RuntimeProperties;
import org.apache.cayenne.dba.QuotingStrategy;
import org.apache.cayenne.dba.JdbcAdapter;
+import org.apache.cayenne.dba.PkGenerator;
import org.apache.cayenne.di.Inject;
import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.map.DbEntity;
@@ -201,6 +202,14 @@ public class OracleAdapter extends JdbcAdapter {
};
}
+ /**
+ * Returns a {@link OraclePkGenerator}.
+ */
+ @Override
+ public PkGenerator createPkGenerator() {
+ return new OraclePkGenerator(this);
+ }
+
/**
* @since 4.2
*/
diff --git
a/cayenne/src/main/java/org/apache/cayenne/dba/oracle/OraclePkGenerator.java
b/cayenne/src/main/java/org/apache/cayenne/dba/oracle/OraclePkGenerator.java
index 2c050b1d1..08eef19f2 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/oracle/OraclePkGenerator.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/oracle/OraclePkGenerator.java
@@ -27,16 +27,7 @@ import org.apache.cayenne.dba.SequencePkGenerator;
*/
public class OraclePkGenerator extends SequencePkGenerator {
- /**
- * Used by DI
- *
- * @since 4.1
- */
- public OraclePkGenerator() {
- super();
- }
-
- protected OraclePkGenerator(JdbcAdapter adapter) {
+ public OraclePkGenerator(JdbcAdapter adapter) {
super(adapter);
}
diff --git
a/cayenne/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java
b/cayenne/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java
index 81bc6e561..e1852390b 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java
@@ -34,6 +34,7 @@ import org.apache.cayenne.configuration.Constants;
import org.apache.cayenne.configuration.RuntimeProperties;
import org.apache.cayenne.dba.QuotingStrategy;
import org.apache.cayenne.dba.JdbcAdapter;
+import org.apache.cayenne.dba.PkGenerator;
import org.apache.cayenne.dba.TypesMapping;
import org.apache.cayenne.di.Inject;
import org.apache.cayenne.map.DbAttribute;
@@ -109,6 +110,14 @@ public class PostgresAdapter extends JdbcAdapter {
};
}
+ /**
+ * Returns a {@link PostgresPkGenerator}.
+ */
+ @Override
+ public PkGenerator createPkGenerator() {
+ return new PostgresPkGenerator(this);
+ }
+
/**
* @since 4.2
*/
diff --git
a/cayenne/src/main/java/org/apache/cayenne/dba/postgres/PostgresPkGenerator.java
b/cayenne/src/main/java/org/apache/cayenne/dba/postgres/PostgresPkGenerator.java
index 1a863b473..0aa163d1f 100644
---
a/cayenne/src/main/java/org/apache/cayenne/dba/postgres/PostgresPkGenerator.java
+++
b/cayenne/src/main/java/org/apache/cayenne/dba/postgres/PostgresPkGenerator.java
@@ -28,15 +28,7 @@ import org.apache.cayenne.map.DbEntity;
*/
public class PostgresPkGenerator extends SequencePkGenerator {
- /**
- * Used by DI
- * @since 4.1
- */
- public PostgresPkGenerator() {
- super();
- }
-
- protected PostgresPkGenerator(JdbcAdapter adapter) {
+ public PostgresPkGenerator(JdbcAdapter adapter) {
super(adapter);
}
diff --git
a/cayenne/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerAdapter.java
b/cayenne/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerAdapter.java
index 26541db6f..4d12eb681 100644
---
a/cayenne/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerAdapter.java
+++
b/cayenne/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerAdapter.java
@@ -38,6 +38,7 @@ import org.apache.cayenne.configuration.RuntimeProperties;
import org.apache.cayenne.dba.DefaultQuotingStrategy;
import org.apache.cayenne.dba.QuotingStrategy;
import org.apache.cayenne.dba.JdbcAdapter;
+import org.apache.cayenne.dba.PkGenerator;
import org.apache.cayenne.di.Inject;
import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.map.DbEntity;
@@ -176,6 +177,14 @@ public class SQLServerAdapter extends JdbcAdapter {
return false;
}
+ /**
+ * Returns a {@link SQLServerPkGenerator}.
+ */
+ @Override
+ public PkGenerator createPkGenerator() {
+ return new SQLServerPkGenerator(this);
+ }
+
/**
* @since 4.2
*/
diff --git
a/cayenne/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerPkGenerator.java
b/cayenne/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerPkGenerator.java
index 78ff55111..02c115c71 100644
---
a/cayenne/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerPkGenerator.java
+++
b/cayenne/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerPkGenerator.java
@@ -42,15 +42,7 @@ import java.util.List;
*/
public class SQLServerPkGenerator extends JdbcPkGenerator {
- /**
- * Used by DI
- * @since 4.1
- */
- public SQLServerPkGenerator(){
- super();
- }
-
- protected SQLServerPkGenerator(JdbcAdapter adapter) {
+ public SQLServerPkGenerator(JdbcAdapter adapter) {
super(adapter);
}
diff --git
a/cayenne/src/main/java/org/apache/cayenne/dba/sybase/SybaseAdapter.java
b/cayenne/src/main/java/org/apache/cayenne/dba/sybase/SybaseAdapter.java
index 16f366748..ac68dde85 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/sybase/SybaseAdapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/sybase/SybaseAdapter.java
@@ -35,6 +35,7 @@ import org.apache.cayenne.configuration.RuntimeProperties;
import org.apache.cayenne.dba.DefaultQuotingStrategy;
import org.apache.cayenne.dba.QuotingStrategy;
import org.apache.cayenne.dba.JdbcAdapter;
+import org.apache.cayenne.dba.PkGenerator;
import org.apache.cayenne.di.Inject;
import org.apache.cayenne.map.DbAttribute;
@@ -103,6 +104,14 @@ public class SybaseAdapter extends JdbcAdapter {
return new SybaseEJBQLTranslator();
}
+ /**
+ * Returns a {@link SybasePkGenerator}.
+ */
+ @Override
+ public PkGenerator createPkGenerator() {
+ return new SybasePkGenerator(this);
+ }
+
/**
* @since 4.2
*/
diff --git
a/cayenne/src/main/java/org/apache/cayenne/dba/sybase/SybasePkGenerator.java
b/cayenne/src/main/java/org/apache/cayenne/dba/sybase/SybasePkGenerator.java
index a099d53f5..e5fe6bd9f 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/sybase/SybasePkGenerator.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/sybase/SybasePkGenerator.java
@@ -41,15 +41,7 @@ import java.util.List;
*/
public class SybasePkGenerator extends JdbcPkGenerator {
- /**
- * Used by DI
- * @since 4.1
- */
- public SybasePkGenerator(){
- super();
- }
-
- protected SybasePkGenerator(JdbcAdapter adapter) {
+ public SybasePkGenerator(JdbcAdapter adapter) {
super(adapter);
}
diff --git a/cayenne/src/test/java/org/apache/cayenne/PregeneratedPKIT.java
b/cayenne/src/test/java/org/apache/cayenne/PregeneratedPKIT.java
index dc910bc07..19c395e20 100644
--- a/cayenne/src/test/java/org/apache/cayenne/PregeneratedPKIT.java
+++ b/cayenne/src/test/java/org/apache/cayenne/PregeneratedPKIT.java
@@ -74,7 +74,7 @@ public class PregeneratedPKIT {
DbEntity entity = context.getEntityResolver().getDbEntity("ARTIST");
DataNode node =
context.getParentDataDomain().lookupDataNode(entity.getDataMap());
- Object pk = node.getAdapter().getPkGenerator().generatePk(
+ Object pk = node.getPkGenerator().generatePk(
node,
entity.getPrimaryKeys().iterator().next());
id.getReplacementIdMap().put(Artist.ARTIST_ID_PK_COLUMN, pk);
diff --git
a/cayenne/src/test/java/org/apache/cayenne/access/DataContextExtrasIT.java
b/cayenne/src/test/java/org/apache/cayenne/access/DataContextExtrasIT.java
index eee773d11..e7d35a042 100644
--- a/cayenne/src/test/java/org/apache/cayenne/access/DataContextExtrasIT.java
+++ b/cayenne/src/test/java/org/apache/cayenne/access/DataContextExtrasIT.java
@@ -25,7 +25,6 @@ import org.apache.cayenne.DataRow;
import org.apache.cayenne.ObjectId;
import org.apache.cayenne.PersistenceState;
import org.apache.cayenne.Persistent;
-import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dba.JdbcAdapter;
import org.apache.cayenne.dba.JdbcPkGenerator;
import org.apache.cayenne.dba.PkGenerator;
@@ -258,19 +257,10 @@ public class DataContextExtrasIT {
}
};
- PkGenerator oldGenerator = domain
- .getDataNodes()
- .iterator()
- .next()
- .getAdapter()
- .getPkGenerator();
- DbAdapter adapter = domain
- .getDataNodes()
- .iterator()
- .next()
- .getAdapter();
-
- adapter.setPkGenerator(newGenerator);
+ DataNode node = domain.getDataNodes().iterator().next();
+ PkGenerator oldGenerator = node.getPkGenerator();
+
+ node.setPkGenerator(newGenerator);
try {
assertThrows(CayenneRuntimeException.class, () -> {
Artist newArtist = context.newObject(Artist.class);
@@ -278,7 +268,7 @@ public class DataContextExtrasIT {
context.commitChanges();
});
} finally {
- adapter.setPkGenerator(oldGenerator);
+ node.setPkGenerator(oldGenerator);
}
}
diff --git a/cayenne/src/test/java/org/apache/cayenne/access/DataNodeIT.java
b/cayenne/src/test/java/org/apache/cayenne/access/DataNodeIT.java
deleted file mode 100644
index d6c6464c2..000000000
--- a/cayenne/src/test/java/org/apache/cayenne/access/DataNodeIT.java
+++ /dev/null
@@ -1,84 +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
- *
- * https://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;
-
-import org.apache.cayenne.dba.JdbcAdapter;
-import org.apache.cayenne.unit.CayenneProjects;
-import org.apache.cayenne.unit.CayenneTestsEnv;
-import org.junit.jupiter.api.extension.RegisterExtension;
-import org.junit.jupiter.api.Test;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNull;
-import static org.junit.jupiter.api.Assertions.assertSame;
-
-public class DataNodeIT {
-
- @RegisterExtension
- static final CayenneTestsEnv env =
CayenneTestsEnv.forProject(CayenneProjects.TESTMAP_PROJECT);
-
- @Test
- public void name() throws Exception {
- String tstName = "tst_name";
- DataNode node = new DataNode();
- assertNull(node.getName());
- node.setName(tstName);
- assertEquals(tstName, node.getName());
- }
-
- @Test
- public void dataSourceFactory() throws Exception {
- String tstName = "tst_name";
- DataNode node = new DataNode();
- assertNull(node.getDataSourceFactory());
- node.setDataSourceFactory(tstName);
- assertEquals(tstName, node.getDataSourceFactory());
- }
-
- @Test
- public void nodeEntityResolver() {
- DataNode node = new DataNode();
- assertNull(node.getEntityResolver());
-
- org.apache.cayenne.map.EntityResolver resolver = new
org.apache.cayenne.map.EntityResolver();
- node.setEntityResolver(resolver);
- assertSame(resolver, node.getEntityResolver());
- }
-
- @Test
- public void adapter() throws Exception {
- DataNode node = new DataNode();
-
- assertNull(node.getAdapter());
-
- JdbcAdapter a1 = env.adhocObjectFactory().newInstance(
- JdbcAdapter.class,
- JdbcAdapter.class.getName());
- node.setAdapter(a1);
-
- assertSame(a1, node.getAdapter());
-
- JdbcAdapter a2 = env.adhocObjectFactory().newInstance(
- JdbcAdapter.class,
- JdbcAdapter.class.getName());
- node.setAdapter(a2);
-
- assertSame(a2, node.getAdapter());
- }
-}
diff --git
a/cayenne/src/test/java/org/apache/cayenne/access/DataNodeQueriesIT.java
b/cayenne/src/test/java/org/apache/cayenne/access/DataNodeQueriesIT.java
index 516e20f43..e81ba5548 100644
--- a/cayenne/src/test/java/org/apache/cayenne/access/DataNodeQueriesIT.java
+++ b/cayenne/src/test/java/org/apache/cayenne/access/DataNodeQueriesIT.java
@@ -69,12 +69,12 @@ public class DataNodeQueriesIT {
public void createPkSupportForMapEntities() throws Exception {
DbEntity artistEnt = node.getEntityResolver().getDbEntity("ARTIST");
- assertNotNull(node.getAdapter().getPkGenerator().generatePk(
+ assertNotNull(node.getPkGenerator().generatePk(
node,
artistEnt.getPrimaryKeys().iterator().next()));
DbEntity exhibitEnt = node.getEntityResolver().getDbEntity("EXHIBIT");
- assertNotNull(node.getAdapter().getPkGenerator().generatePk(
+ assertNotNull(node.getPkGenerator().generatePk(
node,
exhibitEnt.getPrimaryKeys().iterator().next()));
}
diff --git a/cayenne/src/test/java/org/apache/cayenne/access/DataNodeTest.java
b/cayenne/src/test/java/org/apache/cayenne/access/DataNodeTest.java
new file mode 100644
index 000000000..02fd57b93
--- /dev/null
+++ b/cayenne/src/test/java/org/apache/cayenne/access/DataNodeTest.java
@@ -0,0 +1,114 @@
+/*****************************************************************
+ * 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
+ *
+ * https://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;
+
+import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.dba.PkGenerator;
+import org.apache.cayenne.map.EntityResolver;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+public class DataNodeTest {
+
+ @Test
+ public void name() {
+ DataNode node = new DataNode();
+ assertNull(node.getName());
+
+ node.setName("tst_name");
+ assertEquals("tst_name", node.getName());
+ }
+
+ @Test
+ public void dataSourceFactory() {
+ DataNode node = new DataNode();
+ assertNull(node.getDataSourceFactory());
+
+ node.setDataSourceFactory("tst_name");
+ assertEquals("tst_name", node.getDataSourceFactory());
+ }
+
+ @Test
+ public void entityResolver() {
+ DataNode node = new DataNode();
+ assertNull(node.getEntityResolver());
+
+ EntityResolver resolver = new EntityResolver();
+ node.setEntityResolver(resolver);
+ assertSame(resolver, node.getEntityResolver());
+ }
+
+ @Test
+ public void adapter() {
+ DataNode node = new DataNode();
+ assertNull(node.getAdapter());
+
+ DbAdapter a1 = mock(DbAdapter.class);
+ node.setAdapter(a1);
+ assertSame(a1, node.getAdapter());
+
+ DbAdapter a2 = mock(DbAdapter.class);
+ node.setAdapter(a2);
+ assertSame(a2, node.getAdapter());
+ }
+
+ @Test
+ public void pkGeneratorFollowsAdapter() {
+ DataNode node = new DataNode();
+ assertNull(node.getPkGenerator());
+
+ PkGenerator g1 = mock(PkGenerator.class);
+ node.setAdapter(adapterWithPkGenerator(g1));
+ assertSame(g1, node.getPkGenerator());
+
+ PkGenerator g2 = mock(PkGenerator.class);
+ node.setAdapter(adapterWithPkGenerator(g2));
+ assertSame(g2, node.getPkGenerator());
+ }
+
+ @Test
+ public void pkGeneratorCustomRetainedAcrossAdapterChange() {
+ DataNode node = new DataNode();
+ node.setAdapter(adapterWithPkGenerator(mock(PkGenerator.class)));
+
+ PkGenerator custom = mock(PkGenerator.class);
+ node.setPkGenerator(custom);
+ assertSame(custom, node.getPkGenerator());
+
+ PkGenerator adapterDefault = mock(PkGenerator.class);
+ node.setAdapter(adapterWithPkGenerator(adapterDefault));
+ assertSame(custom, node.getPkGenerator());
+
+ // null restores the adapter default
+ node.setPkGenerator(null);
+ assertSame(adapterDefault, node.getPkGenerator());
+ }
+
+ private DbAdapter adapterWithPkGenerator(PkGenerator pkGenerator) {
+ DbAdapter adapter = mock(DbAdapter.class);
+ when(adapter.createPkGenerator()).thenReturn(pkGenerator);
+ return adapter;
+ }
+}
diff --git
a/cayenne/src/test/java/org/apache/cayenne/access/IdentityColumnsIT.java
b/cayenne/src/test/java/org/apache/cayenne/access/IdentityColumnsIT.java
index 844005e79..bcbbc9959 100644
--- a/cayenne/src/test/java/org/apache/cayenne/access/IdentityColumnsIT.java
+++ b/cayenne/src/test/java/org/apache/cayenne/access/IdentityColumnsIT.java
@@ -114,7 +114,7 @@ public class IdentityColumnsIT {
// for comparison
DbEntity joinTableEntity =
env.context().getEntityResolver().getDbEntity(joinTable.getTableName());
DbAttribute pkAttribute = joinTableEntity.getAttribute("ID");
- Number pk = (Number)
node.getAdapter().getPkGenerator().generatePk(node, pkAttribute);
+ Number pk = (Number) node.getPkGenerator().generatePk(node,
pkAttribute);
GeneratedF1 f1 = env.context().newObject(GeneratedF1.class);
GeneratedF2 f2 = env.context().newObject(GeneratedF2.class);
diff --git a/cayenne/src/test/java/org/apache/cayenne/access/MockDataNode.java
b/cayenne/src/test/java/org/apache/cayenne/access/MockDataNode.java
index 26d3b614d..887a9c696 100644
--- a/cayenne/src/test/java/org/apache/cayenne/access/MockDataNode.java
+++ b/cayenne/src/test/java/org/apache/cayenne/access/MockDataNode.java
@@ -28,6 +28,7 @@ import java.util.Map;
import javax.sql.DataSource;
import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.dba.PkGenerator;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.EntityResolver;
import org.apache.cayenne.map.EntitySorter;
@@ -117,6 +118,11 @@ public class MockDataNode extends DataNode {
return node.getAdapter();
}
+ @Override
+ public PkGenerator getPkGenerator() {
+ return node.getPkGenerator();
+ }
+
@Override
public Collection getDataMaps() {
return node.getDataMaps();
diff --git
a/cayenne/src/test/java/org/apache/cayenne/configuration/runtime/DefaultDbAdapterFactoryTest.java
b/cayenne/src/test/java/org/apache/cayenne/configuration/runtime/DefaultDbAdapterFactoryTest.java
index fcaa476cb..93e3e196e 100644
---
a/cayenne/src/test/java/org/apache/cayenne/configuration/runtime/DefaultDbAdapterFactoryTest.java
+++
b/cayenne/src/test/java/org/apache/cayenne/configuration/runtime/DefaultDbAdapterFactoryTest.java
@@ -28,8 +28,6 @@ import org.apache.cayenne.configuration.RuntimeProperties;
import org.apache.cayenne.dba.AutoAdapter;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dba.JdbcAdapter;
-import org.apache.cayenne.dba.JdbcPkGenerator;
-import org.apache.cayenne.dba.PkGenerator;
import org.apache.cayenne.dba.sybase.SybaseAdapter;
import org.apache.cayenne.di.AdhocObjectFactory;
import org.apache.cayenne.di.ClassLoaderManager;
@@ -78,8 +76,6 @@ public class DefaultDbAdapterFactoryTest {
Module testModule = binder -> {
CoreModule.extend(binder).initAllExtensions();
- binder.bind(PkGenerator.class).to(JdbcPkGenerator.class);
-
binder.bind(PkGeneratorFactoryProvider.class).to(PkGeneratorFactoryProvider.class);
binder.bind(SQLLogger.class).to(Slf4jSQLLogger.class);
binder.bind(ClassLoaderManager.class).to(DefaultClassLoaderManager.class);
binder.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class);
@@ -108,8 +104,6 @@ public class DefaultDbAdapterFactoryTest {
CoreModule.extend(b).initAllExtensions();
- b.bind(PkGenerator.class).to(JdbcPkGenerator.class);
-
b.bind(PkGeneratorFactoryProvider.class).to(PkGeneratorFactoryProvider.class);
b.bind(SQLLogger.class).to(Slf4jSQLLogger.class);
b.bind(ClassLoaderManager.class).to(DefaultClassLoaderManager.class);
b.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class);
@@ -145,8 +139,6 @@ public class DefaultDbAdapterFactoryTest {
Module testModule = b -> {
CoreModule.extend(b).initAllExtensions();
- b.bind(PkGenerator.class).to(JdbcPkGenerator.class);
-
b.bind(PkGeneratorFactoryProvider.class).to(PkGeneratorFactoryProvider.class);
b.bind(SQLLogger.class).to(Slf4jSQLLogger.class);
b.bind(ClassLoaderManager.class).to(DefaultClassLoaderManager.class);
b.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class);
@@ -189,8 +181,6 @@ public class DefaultDbAdapterFactoryTest {
Module testModule = binder -> {
CoreModule.extend(binder).initAllExtensions();
- binder.bind(PkGenerator.class).to(JdbcPkGenerator.class);
-
binder.bind(PkGeneratorFactoryProvider.class).to(PkGeneratorFactoryProvider.class);
binder.bind(ClassLoaderManager.class).to(DefaultClassLoaderManager.class);
binder.bind(SQLLogger.class).to(Slf4jSQLLogger.class);
binder.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class);
diff --git a/cayenne/src/test/java/org/apache/cayenne/dba/AutoAdapterIT.java
b/cayenne/src/test/java/org/apache/cayenne/dba/AutoAdapterIT.java
index 709951f2d..a22ecd4fa 100644
--- a/cayenne/src/test/java/org/apache/cayenne/dba/AutoAdapterIT.java
+++ b/cayenne/src/test/java/org/apache/cayenne/dba/AutoAdapterIT.java
@@ -74,8 +74,9 @@ public class AutoAdapterIT {
autoAdapter.supportsGeneratedKeysForBatchInserts());
assertSame(adapter.getBatchTerminator(),
autoAdapter.getBatchTerminator());
- assertSame(adapter.getPkGenerator(),
- autoAdapter.getPkGenerator());
+ // returns a new instance for each call
+ assertSame(adapter.createPkGenerator().getClass(),
+ autoAdapter.createPkGenerator().getClass());
DbEntity artistDbEntity =
env.dataNode().getEntityResolver().getObjEntity(Artist.class).getDbEntity();
assertSame(adapter.getQuotingStrategy(artistDbEntity),
autoAdapter.getQuotingStrategy(artistDbEntity));
diff --git
a/cayenne/src/test/java/org/apache/cayenne/dba/JdbcPkGeneratorIT.java
b/cayenne/src/test/java/org/apache/cayenne/dba/JdbcPkGeneratorIT.java
index 4f0286d8c..c3532de6e 100644
--- a/cayenne/src/test/java/org/apache/cayenne/dba/JdbcPkGeneratorIT.java
+++ b/cayenne/src/test/java/org/apache/cayenne/dba/JdbcPkGeneratorIT.java
@@ -40,12 +40,8 @@ public class JdbcPkGeneratorIT {
@RegisterExtension
static final CayenneTestsEnv env =
CayenneTestsEnv.forProject(CayenneProjects.TESTMAP_PROJECT);
- private DataNode node;
-
@BeforeEach
public void setUp() throws Exception {
- node = env.dataNode();
-
// TODO: we should have a dedicated DbSchemaManager for such
destructive operations working off of its own DB
CayenneTestsEnv.COMMON_SCHEMA.dropPKSupport();
}
@@ -53,40 +49,34 @@ public class JdbcPkGeneratorIT {
@AfterEach
public void tearDown() throws Exception {
- if
(JdbcPkGenerator.class.isAssignableFrom(node.getAdapter().getPkGenerator().getClass()))
{
- // reset PK gen properly before updating PKs in DB
- JdbcPkGenerator pkGenerator = (JdbcPkGenerator)
node.getAdapter().getPkGenerator();
-
-
pkGenerator.setPkStartValue(JdbcPkGenerator.DEFAULT_PK_START_VALUE);
+ // the test leaves PK support in the DB starting way past
Integer.MAX_VALUE, so rebuild it for whoever runs
+ // next.
- // TODO: we should have a dedicated DbSchemaManager for such
destructive operations working off of its own DB
- CayenneTestsEnv.COMMON_SCHEMA.dropPKSupport();
- CayenneTestsEnv.COMMON_SCHEMA.createPKSupport();
- }
+ // TODO: we should have a dedicated DbSchemaManager for such
destructive operations working off of its own DB
+ CayenneTestsEnv.COMMON_SCHEMA.dropPKSupport();
+ CayenneTestsEnv.COMMON_SCHEMA.createPKSupport();
}
@Test
- public void longPk() throws Exception {
+ public void longPk() {
- if
(!JdbcPkGenerator.class.isAssignableFrom(node.getAdapter().getPkGenerator().getClass()))
{
- return;
- }
+ DataNode node = env.dataNode();
DbEntity artistEntity =
node.getEntityResolver().getObjEntity(Artist.class).getDbEntity();
-
DbAttribute pkAttribute =
artistEntity.getAttribute(Artist.ARTIST_ID_PK_COLUMN);
- JdbcPkGenerator pkGenerator = (JdbcPkGenerator)
node.getAdapter().getPkGenerator();
+ JdbcPkGenerator pkGenerator = (JdbcPkGenerator) node.getPkGenerator();
pkGenerator.setPkStartValue(Integer.MAX_VALUE * 2L);
- if
(!JdbcPkGenerator.class.equals(node.getAdapter().getPkGenerator().getClass()) &&
-
!DerbyPkGenerator.class.equals(node.getAdapter().getPkGenerator().getClass()))
{ // AUTO_PK_SUPPORT doesn't allow dropping PK support for a single entity
+ if (!JdbcPkGenerator.class.equals(node.getPkGenerator().getClass()) &&
+ // AUTO_PK_SUPPORT doesn't allow dropping PK support for a
single entity
+
!DerbyPkGenerator.class.equals(node.getPkGenerator().getClass())) {
pkGenerator.dropAutoPk(node,
Collections.singletonList(artistEntity));
}
pkGenerator.createAutoPk(node,
Collections.singletonList(artistEntity));
pkGenerator.reset();
-
- Object pk = pkGenerator.generatePk(node, pkAttribute);
+
+ Object pk = pkGenerator.generatePk(node, pkAttribute, null);
assertInstanceOf(Long.class, pk);
assertTrue((Long) pk > Integer.MAX_VALUE, "PK is too small: " + pk);
}
diff --git a/cayenne/src/test/java/org/apache/cayenne/dba/PkGeneratorIT.java
b/cayenne/src/test/java/org/apache/cayenne/dba/PkGeneratorIT.java
index d82c28af4..91d5731c6 100644
--- a/cayenne/src/test/java/org/apache/cayenne/dba/PkGeneratorIT.java
+++ b/cayenne/src/test/java/org/apache/cayenne/dba/PkGeneratorIT.java
@@ -50,7 +50,7 @@ public class PkGeneratorIT {
public void setUp() throws Exception {
accessStackAdapter = env.testDbAdapter();
node = env.dataNode();
- pkGenerator = node.getAdapter().getPkGenerator();
+ pkGenerator = node.getPkGenerator();
paintingEntity = node.getEntityResolver().getDbEntity("PAINTING");
List<DbEntity> list = new ArrayList<DbEntity>();
diff --git
a/cayenne/src/test/java/org/apache/cayenne/dba/SequencePkGeneratorTest.java
b/cayenne/src/test/java/org/apache/cayenne/dba/SequencePkGeneratorTest.java
index f760fdedb..aaaa76f82 100644
--- a/cayenne/src/test/java/org/apache/cayenne/dba/SequencePkGeneratorTest.java
+++ b/cayenne/src/test/java/org/apache/cayenne/dba/SequencePkGeneratorTest.java
@@ -34,7 +34,8 @@ public class SequencePkGeneratorTest {
@BeforeEach
public void setUp() {
// use a concrete subclass to exercise the shared sequence naming logic
- pkGenerator = new OraclePkGenerator();
+ // (naming does not depend on the adapter)
+ pkGenerator = new OraclePkGenerator(null);
}
@Test
diff --git a/cayenne/src/test/java/org/apache/cayenne/unit/DbSchemaManager.java
b/cayenne/src/test/java/org/apache/cayenne/unit/DbSchemaManager.java
index 314e42603..bf3bb4816 100644
--- a/cayenne/src/test/java/org/apache/cayenne/unit/DbSchemaManager.java
+++ b/cayenne/src/test/java/org/apache/cayenne/unit/DbSchemaManager.java
@@ -396,12 +396,12 @@ public class DbSchemaManager {
private void dropPKSupport(DataNode node, DataMap map) throws Exception {
List<DbEntity> filteredEntities =
dbEntitiesInInsertOrder(map.getName());
- node.getAdapter().getPkGenerator().dropAutoPk(node, filteredEntities);
+ node.getPkGenerator().dropAutoPk(node, filteredEntities);
}
private void createPKSupport(DataNode node, DataMap map) throws Exception {
List<DbEntity> filteredEntities =
dbEntitiesInInsertOrder(map.getName());
- node.getAdapter().getPkGenerator().createAutoPk(node,
filteredEntities);
+ node.getPkGenerator().createAutoPk(node, filteredEntities);
}
private void createSchema(DataNode node, DataMap map) throws Exception {
diff --git
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbmerge/MergerOptionsDialog.java
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbmerge/MergerOptionsDialog.java
index 440919837..b94fe1847 100644
---
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbmerge/MergerOptionsDialog.java
+++
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbmerge/MergerOptionsDialog.java
@@ -24,6 +24,7 @@ import com.jgoodies.forms.factories.Borders;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import org.apache.cayenne.CayenneRuntimeException;
+import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dbsync.merge.DataMapMerger;
import org.apache.cayenne.dbsync.merge.context.MergeDirection;
@@ -222,10 +223,14 @@ public class MergerOptionsDialog extends ProjectDialog {
String batchTerminator = adapter.getBatchTerminator();
String lineEnd = batchTerminator != null ? "\n" + batchTerminator +
"\n\n" : "\n\n";
+ // tokens generate SQL in the context of a DataNode. No DataSource is
needed, as nothing is executed here
+ DataNode node = new DataNode();
+ node.setAdapter(adapter);
+
while (it.hasNext()) {
MergerToken token = it.next();
if (token instanceof AbstractToDbToken tdb) {
- for (String sql : tdb.createSql(adapter)) {
+ for (String sql : tdb.createSql(node)) {
buf.append(sql);
buf.append(lineEnd);
}