From bbd06346c8c745a2dac9971c6489e973fa5e4025 Mon Sep 17 00:00:00 2001 From: James Date: Tue, 16 Dec 2014 12:28:52 +0000 Subject: [PATCH] 0002103 - Remove auto increment attribute as part of table creation for identity columns that are not part of the PK for databases that do not support it. --- .../db/platform/AbstractDatabasePlatform.java | 14 ++++++++++++++ .../jumpmind/db/platform/IDatabasePlatform.java | 2 ++ .../io/data/writer/DefaultDatabaseWriter.java | 4 +++- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/symmetric-db/src/main/java/org/jumpmind/db/platform/AbstractDatabasePlatform.java b/symmetric-db/src/main/java/org/jumpmind/db/platform/AbstractDatabasePlatform.java index b9a8f64a9f..ff1830d435 100644 --- a/symmetric-db/src/main/java/org/jumpmind/db/platform/AbstractDatabasePlatform.java +++ b/symmetric-db/src/main/java/org/jumpmind/db/platform/AbstractDatabasePlatform.java @@ -830,5 +830,19 @@ public Database readDatabaseFromXml(InputStream is, boolean alterCaseToMatchData public boolean canColumnBeUsedInWhereClause(Column column) { return true; } + + @Override + public void makePlatformSpecific(Database database) { + Table[] tables = database.getTables(); + for (Table table : tables) { + for (Column autoIncrementColumn : table.getAutoIncrementColumns()) { + if (!autoIncrementColumn.isPrimaryKey() && !getDatabaseInfo().isNonPKIdentityColumnsSupported()) { + log.info("Removing auto increment from table " + table.getName() + " for column " + autoIncrementColumn.getName() + + " since it was not part of primary key and not supported on this database based on nonPKIdentityColumnsSupported."); + autoIncrementColumn.setAutoIncrement(false); + } + } + } + } } diff --git a/symmetric-db/src/main/java/org/jumpmind/db/platform/IDatabasePlatform.java b/symmetric-db/src/main/java/org/jumpmind/db/platform/IDatabasePlatform.java index e8f6471248..a5e43f0688 100644 --- a/symmetric-db/src/main/java/org/jumpmind/db/platform/IDatabasePlatform.java +++ b/symmetric-db/src/main/java/org/jumpmind/db/platform/IDatabasePlatform.java @@ -177,4 +177,6 @@ public Object[] getObjectValues(BinaryEncoding encoding, String[] values, public boolean canColumnBeUsedInWhereClause(Column column); + public void makePlatformSpecific(Database database); + } diff --git a/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/writer/DefaultDatabaseWriter.java b/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/writer/DefaultDatabaseWriter.java index bff8501ee0..00d6025a49 100644 --- a/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/writer/DefaultDatabaseWriter.java +++ b/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/writer/DefaultDatabaseWriter.java @@ -501,7 +501,9 @@ protected boolean create(CsvData data) { if (writerSettings.isCreateTableAlterCaseToMatchDatabaseDefault()) { platform.alterCaseToMatchDatabaseDefaultCase(db); } - + + platform.makePlatformSpecific(db); + if (writerSettings.isAlterTable()) { platform.alterDatabase(db, !writerSettings.isCreateTableFailOnError()); } else {