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 a52571ef94..c93e4a722e 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 @@ -998,7 +998,31 @@ public void makePlatformSpecific(Database database) { column.addPlatformColumn(platformColumn); } } + if (!getDatabaseInfo().isFunctionalIndicesSupported()) { + List indicesToRemove = new ArrayList(); + for (IIndex index : table.getIndices()) { + if (isFunctionalIndex(index)) { + indicesToRemove.add(index); + } + } + for (IIndex indexToRemove : indicesToRemove) { + log.info("Removing index " + indexToRemove.getName() + + " from table " + table.getName() + " because functional indexes are not supported on this platform."); + table.removeIndex(indexToRemove); + } + } + } + } + + private boolean isFunctionalIndex(IIndex index) { + boolean ret = false; + for (IndexColumn indexColumn : index.getColumns()) { + if (indexColumn.getName().contains("(") || indexColumn.getName().contains(")")) { + ret = true; + break; + } } + return ret; } @Override diff --git a/symmetric-db/src/main/java/org/jumpmind/db/platform/DatabaseInfo.java b/symmetric-db/src/main/java/org/jumpmind/db/platform/DatabaseInfo.java index 9ccb22261f..1204220253 100644 --- a/symmetric-db/src/main/java/org/jumpmind/db/platform/DatabaseInfo.java +++ b/symmetric-db/src/main/java/org/jumpmind/db/platform/DatabaseInfo.java @@ -94,6 +94,8 @@ public class DatabaseInfo { private boolean generatedColumnsSupported = false; /** Whether expressions can be used as default values */ private boolean expressionsAsDefaultValuesSupported = false; + /** Whether functional indices are supported */ + private boolean functionalIndicesSupported = false; /** * Whether the auto-increment definition is done via the DEFAULT part of the column definition. */ @@ -1333,4 +1335,12 @@ public boolean isTriggersContainJava() { public void setTriggersContainJava(boolean triggersContainJava) { this.triggersContainJava = triggersContainJava; } + + public boolean isFunctionalIndicesSupported() { + return functionalIndicesSupported; + } + + public void setFunctionalIndicesSupported(boolean functionalIndicesSupported) { + this.functionalIndicesSupported = functionalIndicesSupported; + } } diff --git a/symmetric-db/src/main/java/org/jumpmind/db/platform/oracle/OracleDdlBuilder.java b/symmetric-db/src/main/java/org/jumpmind/db/platform/oracle/OracleDdlBuilder.java index 7bbdb3f3e9..a8ceac3a2a 100644 --- a/symmetric-db/src/main/java/org/jumpmind/db/platform/oracle/OracleDdlBuilder.java +++ b/symmetric-db/src/main/java/org/jumpmind/db/platform/oracle/OracleDdlBuilder.java @@ -137,6 +137,7 @@ public OracleDdlBuilder() { databaseInfo.setTriggersCreateOrReplaceSupported(true); databaseInfo.setBinaryQuoteStart("0x"); databaseInfo.setBinaryQuoteEnd(""); + databaseInfo.setFunctionalIndicesSupported(true); } @Override