diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/db/AbstractSymmetricDialect.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/db/AbstractSymmetricDialect.java index 12b1ef84c2..c5dbe19289 100644 --- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/db/AbstractSymmetricDialect.java +++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/db/AbstractSymmetricDialect.java @@ -639,7 +639,7 @@ public int getRouterDataPeekAheadCount() { } public void truncateTable(String tableName) { - String quote = platform.isDelimitedIdentifierModeOn() ? platform.getPlatformInfo() + String quote = platform.getDdlBuilder().isDelimitedIdentifierModeOn() ? platform.getPlatformInfo() .getDelimiterToken() : ""; boolean success = false; int tryCount = 5; diff --git a/symmetric/symmetric-db/src/main/java/org/jumpmind/db/platform/AbstractDatabasePlatform.java b/symmetric/symmetric-db/src/main/java/org/jumpmind/db/platform/AbstractDatabasePlatform.java index bb23d3ce20..912bbc5122 100644 --- a/symmetric/symmetric-db/src/main/java/org/jumpmind/db/platform/AbstractDatabasePlatform.java +++ b/symmetric/symmetric-db/src/main/java/org/jumpmind/db/platform/AbstractDatabasePlatform.java @@ -89,15 +89,6 @@ public abstract class AbstractDatabasePlatform implements IDatabasePlatform { protected long clearCacheModelTimeoutInMs = DateUtils.MILLIS_PER_HOUR; - /* Whether script mode is on. */ - protected boolean scriptModeOn; - - /* Whether SQL comments are generated or not. */ - protected boolean sqlCommentsOn = false; - - /* Whether delimited identifiers are used or not. */ - protected boolean delimitedIdentifierModeOn; - /* Whether identity override is enabled. */ protected boolean identityOverrideOn; @@ -117,7 +108,6 @@ public abstract class AbstractDatabasePlatform implements IDatabasePlatform { protected boolean metadataIgnoreCase = true; public AbstractDatabasePlatform() { - setDelimitedIdentifierModeOn(true); } abstract public ISqlTemplate getSqlTemplate(); @@ -154,36 +144,6 @@ public long getClearCacheModelTimeoutInMs() { return clearCacheModelTimeoutInMs; } - public boolean isScriptModeOn() { - return scriptModeOn; - } - - public void setScriptModeOn(boolean scriptModeOn) { - this.scriptModeOn = scriptModeOn; - } - - public boolean isSqlCommentsOn() { - return sqlCommentsOn; - } - - public void setSqlCommentsOn(boolean sqlCommentsOn) { - if (!getPlatformInfo().isSqlCommentsSupported() && sqlCommentsOn) { - throw new DdlException("Platform does not support SQL comments"); - } - this.sqlCommentsOn = sqlCommentsOn; - } - - public boolean isDelimitedIdentifierModeOn() { - return delimitedIdentifierModeOn; - } - - public void setDelimitedIdentifierModeOn(boolean delimitedIdentifierModeOn) { - if (!getPlatformInfo().isDelimitedIdentifiersSupported() && delimitedIdentifierModeOn) { - throw new DdlException("Platform does not support delimited identifier"); - } - this.delimitedIdentifierModeOn = delimitedIdentifierModeOn; - } - public boolean isIdentityOverrideOn() { return identityOverrideOn; } diff --git a/symmetric/symmetric-db/src/main/java/org/jumpmind/db/platform/AbstractDdlBuilder.java b/symmetric/symmetric-db/src/main/java/org/jumpmind/db/platform/AbstractDdlBuilder.java index 0f47d7af79..cc38d524a8 100644 --- a/symmetric/symmetric-db/src/main/java/org/jumpmind/db/platform/AbstractDdlBuilder.java +++ b/symmetric/symmetric-db/src/main/java/org/jumpmind/db/platform/AbstractDdlBuilder.java @@ -92,9 +92,6 @@ public abstract class AbstractDdlBuilder implements IDdlBuilder { /** The Log to which logging calls will be made. */ protected final Logger log = LoggerFactory.getLogger(getClass()); - /** The platform that this builder belongs to. */ - protected IDatabasePlatform platform; - /** The indentation used to indent commands. */ private String indent = " "; @@ -116,14 +113,19 @@ public abstract class AbstractDdlBuilder implements IDdlBuilder { /** The character sequences that need escaping. */ private Map charSequencesToEscape = new LinkedHashMap(); + protected DatabasePlatformInfo platformInfo; + + protected boolean delimitedIdentifierModeOn = true; + + protected boolean sqlCommentsOn = false; + + protected boolean scriptModeOn = false; + /** * Creates a new sql builder. - * - * @param platform - * The platform this builder belongs to */ - public AbstractDdlBuilder(IDatabasePlatform platform) { - this.platform = platform; + public AbstractDdlBuilder(DatabasePlatformInfo platformInfo) { + this.platformInfo = platformInfo; } /** @@ -326,15 +328,13 @@ public String alterDatabase(Database currentModel, Database desiredModel) { * algorithm by redefining the individual methods that compromise it. */ public void alterDatabase(Database currentModel, Database desiredModel, StringBuilder ddl) { - ModelComparator comparator = new ModelComparator(platform.getPlatformInfo(), - platform.isDelimitedIdentifierModeOn()); + ModelComparator comparator = new ModelComparator(platformInfo, delimitedIdentifierModeOn); List changes = comparator.compare(currentModel, desiredModel); processChanges(currentModel, desiredModel, changes, ddl); } public boolean isAlterDatabase(Database currentModel, Database desiredModel) { - ModelComparator comparator = new ModelComparator(platform.getPlatformInfo(), - platform.isDelimitedIdentifierModeOn()); + ModelComparator comparator = new ModelComparator(platformInfo, delimitedIdentifierModeOn); List changes = comparator.compare(currentModel, desiredModel); return changes.size() > 0; } @@ -445,7 +445,7 @@ protected void processChange(Database currentModel, Database desiredModel, IMode protected void processChange(Database currentModel, Database desiredModel, RemoveForeignKeyChange change, StringBuilder ddl) { writeExternalForeignKeyDropStmt(change.getChangedTable(), change.getForeignKey(), ddl); - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } /** @@ -461,7 +461,7 @@ protected void processChange(Database currentModel, Database desiredModel, protected void processChange(Database currentModel, Database desiredModel, RemoveIndexChange change, StringBuilder ddl) { writeExternalIndexDropStmt(change.getChangedTable(), change.getIndex(), ddl); - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } /** @@ -477,7 +477,7 @@ protected void processChange(Database currentModel, Database desiredModel, protected void processChange(Database currentModel, Database desiredModel, RemoveTableChange change, StringBuilder ddl) { dropTable(change.getChangedTable(), ddl); - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } /** @@ -493,7 +493,7 @@ protected void processChange(Database currentModel, Database desiredModel, protected void processChange(Database currentModel, Database desiredModel, AddTableChange change, StringBuilder ddl) { createTable(change.getNewTable(), ddl); - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } /** @@ -510,7 +510,7 @@ protected void processChange(Database currentModel, Database desiredModel, AddForeignKeyChange change, StringBuilder ddl) { writeExternalForeignKeyCreateStmt(desiredModel, change.getChangedTable(), change.getNewForeignKey(), ddl); - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } /** @@ -526,7 +526,7 @@ protected void processChange(Database currentModel, Database desiredModel, protected void processChange(Database currentModel, Database desiredModel, AddIndexChange change, StringBuilder ddl) { writeExternalIndexCreateStmt(change.getChangedTable(), change.getNewIndex(), ddl); - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } /** @@ -543,7 +543,7 @@ protected void processTableStructureChanges(Database currentModel, Database desi Collection changes, StringBuilder ddl) { LinkedHashMap> changesPerTable = new LinkedHashMap>(); LinkedHashMap> unchangedFKs = new LinkedHashMap>(); - boolean caseSensitive = platform.isDelimitedIdentifierModeOn(); + boolean caseSensitive = delimitedIdentifierModeOn; // we first sort the changes for the tables // however since the changes might contain source or target tables @@ -623,7 +623,7 @@ protected void processTableStructureChanges(Database currentModel, Database desi private List getUnchangedForeignKeys(Database currentModel, Database desiredModel, String tableName) { ArrayList unchangedFKs = new ArrayList(); - boolean caseSensitive = platform.isDelimitedIdentifierModeOn(); + boolean caseSensitive = delimitedIdentifierModeOn; Table sourceTable = currentModel.findTable(tableName, caseSensitive); Table targetTable = desiredModel.findTable(tableName, caseSensitive); @@ -654,7 +654,7 @@ private List getUnchangedForeignKeys(Database currentModel, Database */ private void addRelevantFKsFromUnchangedTables(Database currentModel, Database desiredModel, Set namesOfKnownChangedTables, Map> fksPerTable) { - boolean caseSensitive = platform.isDelimitedIdentifierModeOn(); + boolean caseSensitive = delimitedIdentifierModeOn; for (int tableIdx = 0; tableIdx < desiredModel.getTableCount(); tableIdx++) { Table targetTable = desiredModel.getTable(tableIdx); @@ -695,10 +695,8 @@ private void addRelevantFKsFromUnchangedTables(Database currentModel, Database d */ protected void processTableStructureChanges(Database currentModel, Database desiredModel, String tableName, List changes, StringBuilder ddl) { - Table sourceTable = currentModel.findTable(tableName, - platform.isDelimitedIdentifierModeOn()); - Table targetTable = desiredModel.findTable(tableName, - platform.isDelimitedIdentifierModeOn()); + Table sourceTable = currentModel.findTable(tableName, delimitedIdentifierModeOn); + Table targetTable = desiredModel.findTable(tableName, delimitedIdentifierModeOn); // we're enforcing a full rebuild in case of the addition of a required // column without a default value that is not autoincrement @@ -830,7 +828,7 @@ public Table createBackupTableFor(Database model, Table sourceTable, StringBuild } public void restoreTableFromBackup(Table backupTable, Table targetTable, - LinkedHashMap columnMap, StringBuilder ddl) { + LinkedHashMap columnMap, StringBuilder ddl) { ddl.append("DELETE FROM "); printIdentifier(getTableName(targetTable.getName()), ddl); printEndOfStatement(ddl); @@ -909,7 +907,7 @@ protected Table getRealTargetTableFor(Database targetModel, Table sourceTable, T } } - boolean caseSensitive = platform.isDelimitedIdentifierModeOn(); + boolean caseSensitive = delimitedIdentifierModeOn; for (int idx = 0; idx < targetTable.getIndexCount(); idx++) { IIndex targetIndex = targetTable.getIndex(idx); @@ -939,24 +937,25 @@ protected Table getRealTargetTableFor(Database targetModel, Table sourceTable, T * The target table */ public void writeCopyDataStatement(Table sourceTable, Table targetTable, StringBuilder ddl) { - LinkedHashMap columnMap = getCopyDataColumnMapping(sourceTable, targetTable); + LinkedHashMap columnMap = getCopyDataColumnMapping(sourceTable, targetTable); writeCopyDataStatement(sourceTable, targetTable, columnMap, ddl); } public void writeCopyDataStatement(Table sourceTable, Table targetTable, - LinkedHashMap columnMap, StringBuilder ddl) { + LinkedHashMap columnMap, StringBuilder ddl) { ddl.append("INSERT INTO "); printIdentifier(getTableName(targetTable.getName()), ddl); ddl.append(" ("); - for (Iterator columnIt = columnMap.values().iterator(); columnIt.hasNext();) { + for (Iterator columnIt = columnMap.values().iterator(); columnIt.hasNext();) { printIdentifier(getColumnName((Column) columnIt.next()), ddl); if (columnIt.hasNext()) { ddl.append(","); } } ddl.append(") SELECT "); - for (Iterator columnsIt = columnMap.entrySet().iterator(); columnsIt.hasNext();) { - Map.Entry entry = (Map.Entry) columnsIt.next(); + for (Iterator> columnsIt = columnMap.entrySet().iterator(); columnsIt + .hasNext();) { + Map.Entry entry = columnsIt.next(); writeCastExpression((Column) entry.getKey(), (Column) entry.getValue(), ddl); if (columnsIt.hasNext()) { @@ -968,13 +967,14 @@ public void writeCopyDataStatement(Table sourceTable, Table targetTable, printEndOfStatement(ddl); } - public LinkedHashMap getCopyDataColumnMapping(Table sourceTable, Table targetTable) { - LinkedHashMap columns = new LinkedHashMap(); + public LinkedHashMap getCopyDataColumnMapping(Table sourceTable, + Table targetTable) { + LinkedHashMap columns = new LinkedHashMap(); for (int idx = 0; idx < sourceTable.getColumnCount(); idx++) { Column sourceColumn = sourceTable.getColumn(idx); Column targetColumn = targetTable.findColumn(sourceColumn.getName(), - platform.isDelimitedIdentifierModeOn()); + delimitedIdentifierModeOn); if (targetColumn != null) { columns.put(sourceColumn, targetColumn); @@ -983,8 +983,9 @@ public LinkedHashMap getCopyDataColumnMapping(Table sourceTable, Table targetTab return columns; } - public LinkedHashMap getCopyDataColumnOrderedMapping(Table sourceTable, Table targetTable) { - LinkedHashMap columns = new LinkedHashMap(); + public LinkedHashMap getCopyDataColumnOrderedMapping(Table sourceTable, + Table targetTable) { + LinkedHashMap columns = new LinkedHashMap(); for (int idx = 0; idx < sourceTable.getColumnCount(); idx++) { columns.put(sourceTable.getColumn(idx), targetTable.getColumn(idx)); } @@ -1008,7 +1009,7 @@ protected void processChange(Database currentModel, Database desiredModel, AddPrimaryKeyChange change, StringBuilder ddl) { writeExternalPrimaryKeysCreateStmt(change.getChangedTable(), change.getPrimaryKeyColumns(), ddl); - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } /** @@ -1025,7 +1026,7 @@ protected void processChange(Database currentModel, Database desiredModel, * @return The corresponding foreign key if found */ protected ForeignKey findCorrespondingForeignKey(Table table, ForeignKey fk) { - boolean caseMatters = platform.isDelimitedIdentifierModeOn(); + boolean caseMatters = delimitedIdentifierModeOn; boolean checkFkName = (fk.getName() != null) && (fk.getName().length() > 0); Reference[] refs = fk.getReferences(); ArrayList curRefs = new ArrayList(); @@ -1100,10 +1101,10 @@ public void createTable(Table table, StringBuilder ddl) { writeTableCreationStmt(table, ddl); writeTableCreationStmtEnding(table, ddl); - if (!platform.getPlatformInfo().isPrimaryKeyEmbedded()) { + if (!platformInfo.isPrimaryKeyEmbedded()) { writeExternalPrimaryKeysCreateStmt(table, table.getPrimaryKeyColumns(), ddl); } - if (!platform.getPlatformInfo().isIndicesEmbedded()) { + if (!platformInfo.isIndicesEmbedded()) { writeExternalIndicesCreateStmt(table, ddl); } } @@ -1125,7 +1126,7 @@ public void createExternalForeignKeys(Database database, StringBuilder ddl) { * Creates external foreign key creation statements if necessary. */ public void createExternalForeignKeys(Database database, Table table, StringBuilder ddl) { - if (!platform.getPlatformInfo().isForeignKeysEmbedded()) { + if (!platformInfo.isForeignKeysEmbedded()) { for (int idx = 0; idx < table.getForeignKeyCount(); idx++) { writeExternalForeignKeyCreateStmt(database, table, table.getForeignKey(idx), ddl); } @@ -1208,7 +1209,7 @@ public void dropTable(Table table, StringBuilder ddl) { * The table */ public void dropExternalForeignKeys(Table table, StringBuilder ddl) { - if (!platform.getPlatformInfo().isForeignKeysEmbedded()) { + if (!platformInfo.isForeignKeysEmbedded()) { for (int idx = 0; idx < table.getForeignKeyCount(); idx++) { writeExternalForeignKeyDropStmt(table, table.getForeignKey(idx), ddl); } @@ -1403,7 +1404,7 @@ protected String getValueAsString(Column column, Object value) { // TODO: Handle binary types (BINARY, VARBINARY, LONGVARBINARY, BLOB) switch (column.getTypeCode()) { case Types.DATE: - result.append(platform.getPlatformInfo().getValueQuoteToken()); + result.append(platformInfo.getValueQuoteToken()); if (!(value instanceof String) && (getValueDateFormat() != null)) { // TODO: Can the format method handle java.sql.Date properly // ? @@ -1411,10 +1412,10 @@ protected String getValueAsString(Column column, Object value) { } else { result.append(value.toString()); } - result.append(platform.getPlatformInfo().getValueQuoteToken()); + result.append(platformInfo.getValueQuoteToken()); break; case Types.TIME: - result.append(platform.getPlatformInfo().getValueQuoteToken()); + result.append(platformInfo.getValueQuoteToken()); if (!(value instanceof String) && (getValueTimeFormat() != null)) { // TODO: Can the format method handle java.sql.Date properly // ? @@ -1422,33 +1423,33 @@ protected String getValueAsString(Column column, Object value) { } else { result.append(value.toString()); } - result.append(platform.getPlatformInfo().getValueQuoteToken()); + result.append(platformInfo.getValueQuoteToken()); break; case Types.TIMESTAMP: - result.append(platform.getPlatformInfo().getValueQuoteToken()); + result.append(platformInfo.getValueQuoteToken()); // TODO: SimpleDateFormat does not support nano seconds so we // would // need a custom date formatter for timestamps result.append(value.toString()); - result.append(platform.getPlatformInfo().getValueQuoteToken()); + result.append(platformInfo.getValueQuoteToken()); break; case Types.REAL: case Types.NUMERIC: case Types.FLOAT: case Types.DOUBLE: case Types.DECIMAL: - result.append(platform.getPlatformInfo().getValueQuoteToken()); + result.append(platformInfo.getValueQuoteToken()); if (!(value instanceof String) && (getValueNumberFormat() != null)) { result.append(getValueNumberFormat().format(value)); } else { result.append(value.toString()); } - result.append(platform.getPlatformInfo().getValueQuoteToken()); + result.append(platformInfo.getValueQuoteToken()); break; default: - result.append(platform.getPlatformInfo().getValueQuoteToken()); + result.append(platformInfo.getValueQuoteToken()); result.append(escapeStringValue(value.toString())); - result.append(platform.getPlatformInfo().getValueQuoteToken()); + result.append(platformInfo.getValueQuoteToken()); break; } return result.toString(); @@ -1534,7 +1535,7 @@ public String shortenName(String name, int desiredLength) { * @return The table name */ public String getTableName(String tableName) { - return shortenName(tableName, platform.getPlatformInfo().getMaxTableNameLength()); + return shortenName(tableName, platformInfo.getMaxTableNameLength()); } /** @@ -1573,13 +1574,13 @@ protected void writeTableCreationStmt(Table table, StringBuilder ddl) { writeColumns(table, ddl); - if (platform.getPlatformInfo().isPrimaryKeyEmbedded()) { + if (platformInfo.isPrimaryKeyEmbedded()) { writeEmbeddedPrimaryKeysStmt(table, ddl); } - if (platform.getPlatformInfo().isForeignKeysEmbedded()) { + if (platformInfo.isForeignKeysEmbedded()) { writeEmbeddedForeignKeysStmt(table, ddl); } - if (platform.getPlatformInfo().isIndicesEmbedded()) { + if (platformInfo.isIndicesEmbedded()) { writeEmbeddedIndicesStmt(table, ddl); } println(ddl); @@ -1619,7 +1620,7 @@ protected void writeColumns(Table table, StringBuilder ddl) { * @return The column name */ protected String getColumnName(Column column) { - return shortenName(column.getName(), platform.getPlatformInfo().getMaxColumnNameLength()); + return shortenName(column.getName(), platformInfo.getMaxColumnNameLength()); } /** @@ -1634,20 +1635,18 @@ protected void writeColumn(Table table, Column column, StringBuilder ddl) { if (column.isRequired()) { ddl.append(" "); writeColumnNotNullableStmt(ddl); - } else if (platform.getPlatformInfo().isNullAsDefaultValueRequired() - && platform.getPlatformInfo().hasNullDefault(column.getTypeCode())) { + } else if (platformInfo.isNullAsDefaultValueRequired() + && platformInfo.hasNullDefault(column.getTypeCode())) { ddl.append(" "); writeColumnNullableStmt(ddl); } - if (column.isPrimaryKey() && platform.getPlatformInfo().isPrimaryKeyEmbedded()) { + if (column.isPrimaryKey() && platformInfo.isPrimaryKeyEmbedded()) { writeColumnEmbeddedPrimaryKey(table, column, ddl); } - if (column.isAutoIncrement() - && !platform.getPlatformInfo().isDefaultValueUsedForIdentitySpec()) { - if (!platform.getPlatformInfo().isNonPKIdentityColumnsSupported() - && !column.isPrimaryKey()) { + if (column.isAutoIncrement() && !platformInfo.isDefaultValueUsedForIdentitySpec()) { + if (!platformInfo.isNonPKIdentityColumnsSupported() && !column.isPrimaryKey()) { throw new ModelException( "Column " + column.getName() @@ -1682,14 +1681,14 @@ protected String getSqlType(Column column) { Object sizeSpec = column.getSize(); if (sizeSpec == null) { - sizeSpec = platform.getPlatformInfo().getDefaultSize(column.getTypeCode()); + sizeSpec = platformInfo.getDefaultSize(column.getTypeCode()); } if (sizeSpec != null) { - if (platform.getPlatformInfo().hasSize(column.getTypeCode())) { + if (platformInfo.hasSize(column.getTypeCode())) { sqlType.append("("); sqlType.append(sizeSpec.toString()); sqlType.append(")"); - } else if (platform.getPlatformInfo().hasPrecisionAndScale(column.getTypeCode())) { + } else if (platformInfo.hasPrecisionAndScale(column.getTypeCode())) { sqlType.append("("); sqlType.append(column.getSizeAsInt()); sqlType.append(","); @@ -1711,7 +1710,7 @@ protected String getSqlType(Column column) { * @return The native type */ protected String getNativeType(Column column) { - String nativeType = (String) platform.getPlatformInfo().getNativeType(column.getTypeCode()); + String nativeType = (String) platformInfo.getNativeType(column.getTypeCode()); return nativeType == null ? column.getType() : nativeType; } @@ -1787,7 +1786,7 @@ protected void writeColumnDefaultValueStmt(Table table, Column column, StringBui Object parsedDefault = column.getParsedDefaultValue(); if (parsedDefault != null) { - if (!platform.getPlatformInfo().isDefaultValuesForLongTypesSupported() + if (!platformInfo.isDefaultValuesForLongTypesSupported() && ((column.getTypeCode() == Types.LONGVARBINARY) || (column.getTypeCode() == Types.LONGVARCHAR))) { throw new ModelException( "The platform does not support default values for LONGVARCHAR or LONGVARBINARY columns"); @@ -1798,8 +1797,7 @@ protected void writeColumnDefaultValueStmt(Table table, Column column, StringBui ddl.append(" DEFAULT "); writeColumnDefaultValue(table, column, ddl); } - } else if (platform.getPlatformInfo().isDefaultValueUsedForIdentitySpec() - && column.isAutoIncrement()) { + } else if (platformInfo.isDefaultValueUsedForIdentitySpec() && column.isAutoIncrement()) { ddl.append(" DEFAULT "); writeColumnDefaultValue(table, column, ddl); } @@ -1821,9 +1819,9 @@ protected void printDefaultValue(Object defaultValue, int typeCode, StringBuilde if (shouldUseQuotes) { // characters are only escaped when within a string literal - ddl.append(platform.getPlatformInfo().getValueQuoteToken()); + ddl.append(platformInfo.getValueQuoteToken()); ddl.append(escapeStringValue(defaultValue.toString())); - ddl.append(platform.getPlatformInfo().getValueQuoteToken()); + ddl.append(platformInfo.getValueQuoteToken()); } else { ddl.append(defaultValue.toString()); } @@ -1887,14 +1885,14 @@ protected boolean columnsDiffer(Column currentColumn, Column desiredColumn) { String desiredDefault = desiredColumn.getDefaultValue(); String currentDefault = currentColumn.getDefaultValue(); boolean defaultsEqual = (desiredDefault == null) || desiredDefault.equals(currentDefault); - boolean sizeMatters = platform.getPlatformInfo().hasSize(currentColumn.getTypeCode()) + boolean sizeMatters = platformInfo.hasSize(currentColumn.getTypeCode()) && (desiredColumn.getSize() != null); // We're comparing the jdbc type that corresponds to the native type for // the // desired type, in order to avoid repeated altering of a perfectly // valid column - if ((platform.getPlatformInfo().getTargetJdbcType(desiredColumn.getTypeCode()) != currentColumn + if ((platformInfo.getTargetJdbcType(desiredColumn.getTypeCode()) != currentColumn .getTypeCode()) || (desiredColumn.isRequired() != currentColumn.isRequired()) || (sizeMatters && !StringUtils.equals(desiredColumn.getSize(), @@ -1931,7 +1929,7 @@ public String getForeignKeyName(Table table, ForeignKey fk) { name.append(fk.getForeignTableName()); fkName = getConstraintName(null, table, "FK", name.toString()); } - fkName = shortenName(fkName, platform.getPlatformInfo().getMaxForeignKeyNameLength()); + fkName = shortenName(fkName, platformInfo.getMaxForeignKeyNameLength()); if (needsName) { log.warn("Encountered a foreign key in table " + table.getName() @@ -1972,8 +1970,7 @@ public String getConstraintName(String prefix, Table table, String secondPart, S result.append("_"); result.append(suffix); } - return shortenName(result.toString(), platform.getPlatformInfo() - .getMaxConstraintNameLength()); + return shortenName(result.toString(), platformInfo.getMaxConstraintNameLength()); } /** @@ -2055,7 +2052,7 @@ protected void writePrimaryKeyStmt(Table table, Column[] primaryKeyColumns, Stri * @return The index name */ public String getIndexName(IIndex index) { - return shortenName(index.getName(), platform.getPlatformInfo().getMaxConstraintNameLength()); + return shortenName(index.getName(), platformInfo.getMaxConstraintNameLength()); } /** @@ -2068,7 +2065,7 @@ protected void writeExternalIndicesCreateStmt(Table table, StringBuilder ddl) { for (int idx = 0; idx < table.getIndexCount(); idx++) { IIndex index = table.getIndex(idx); - if (!index.isUnique() && !platform.getPlatformInfo().isIndicesSupported()) { + if (!index.isUnique() && !platformInfo.isIndicesSupported()) { throw new ModelException("Platform does not support non-unique indices"); } writeExternalIndexCreateStmt(table, index, ddl); @@ -2079,7 +2076,7 @@ protected void writeExternalIndicesCreateStmt(Table table, StringBuilder ddl) { * Writes the indexes embedded within the create table statement. */ protected void writeEmbeddedIndicesStmt(Table table, StringBuilder ddl) { - if (platform.getPlatformInfo().isIndicesSupported()) { + if (platformInfo.isIndicesSupported()) { for (int idx = 0; idx < table.getIndexCount(); idx++) { printStartOfEmbeddedStatement(ddl); writeEmbeddedIndexCreateStmt(table, table.getIndex(idx), ddl); @@ -2091,7 +2088,7 @@ protected void writeEmbeddedIndicesStmt(Table table, StringBuilder ddl) { * Writes the given index of the table. */ protected void writeExternalIndexCreateStmt(Table table, IIndex index, StringBuilder ddl) { - if (platform.getPlatformInfo().isIndicesSupported()) { + if (platformInfo.isIndicesSupported()) { if (index.getName() == null) { log.warn("Cannot write unnamed index " + index); } else { @@ -2165,12 +2162,12 @@ protected void writeEmbeddedIndexCreateStmt(Table table, IIndex index, StringBui * Generates the statement to drop a non-embedded index from the database. */ public void writeExternalIndexDropStmt(Table table, IIndex index, StringBuilder ddl) { - if (platform.getPlatformInfo().isAlterTableForDropUsed()) { + if (platformInfo.isAlterTableForDropUsed()) { writeTableAlterStmt(table, ddl); } ddl.append("DROP INDEX "); printIdentifier(getIndexName(index), ddl); - if (!platform.getPlatformInfo().isAlterTableForDropUsed()) { + if (!platformInfo.isAlterTableForDropUsed()) { ddl.append(" ON "); printIdentifier(getTableName(table.getName()), ddl); } @@ -2188,7 +2185,7 @@ protected void writeEmbeddedForeignKeysStmt(Table table, StringBuilder ddl) { log.warn("Foreign key table is null for key " + key); } else { printStartOfEmbeddedStatement(ddl); - if (platform.getPlatformInfo().isEmbeddedForeignKeysNamed()) { + if (platformInfo.isEmbeddedForeignKeysNamed()) { ddl.append("CONSTRAINT "); printIdentifier(getForeignKeyName(table, key), ddl); ddl.append(" "); @@ -2280,10 +2277,6 @@ protected void writeExternalForeignKeyDropStmt(Table table, ForeignKey foreignKe printEndOfStatement(ddl); } - // - // Helper methods - // - /** * Prints an SQL comment to the current stream. * @@ -2291,13 +2284,13 @@ protected void writeExternalForeignKeyDropStmt(Table table, ForeignKey foreignKe * The comment text */ protected void printComment(String text, StringBuilder ddl) { - if (platform.isSqlCommentsOn()) { - ddl.append(platform.getPlatformInfo().getCommentPrefix()); + if (sqlCommentsOn) { + ddl.append(platformInfo.getCommentPrefix()); // Some databases insist on a space after the prefix ddl.append(" "); ddl.append(text); ddl.append(" "); - ddl.append(platform.getPlatformInfo().getCommentSuffix()); + ddl.append(platformInfo.getCommentSuffix()); println(ddl); } } @@ -2315,7 +2308,7 @@ protected void printStartOfEmbeddedStatement(StringBuilder ddl) { * followed by a carriage return. */ protected void printEndOfStatement(StringBuilder ddl) { - println(platform.getPlatformInfo().getSqlCommandDelimiter(), ddl); + println(platformInfo.getSqlCommandDelimiter(), ddl); } /** @@ -2335,9 +2328,8 @@ protected void println(StringBuilder ddl) { * identifier is returned unchanged */ protected String getDelimitedIdentifier(String identifier) { - if (platform.isDelimitedIdentifierModeOn()) { - return platform.getPlatformInfo().getDelimiterToken() + identifier - + platform.getPlatformInfo().getDelimiterToken(); + if (delimitedIdentifierModeOn) { + return platformInfo.getDelimiterToken() + identifier + platformInfo.getDelimiterToken(); } else { return identifier; } @@ -2382,5 +2374,74 @@ protected void println(String text, StringBuilder ddl) { protected void printIndent(StringBuilder ddl) { ddl.append(getIndent()); } + + /* + * Determines whether script mode is on. This means that the generated SQL + * is not intended to be sent directly to the database but rather to be + * saved in a SQL script file. Per default, script mode is off. + * + * @return true if script mode is on + */ + public boolean isScriptModeOn() { + return scriptModeOn; + } + + /* + * Specifies whether script mode is on. This means that the generated SQL is + * not intended to be sent directly to the database but rather to be saved + * in a SQL script file. + * + * @param scriptModeOn true if script mode is on + */ + public void setScriptModeOn(boolean scriptModeOn) { + this.scriptModeOn = scriptModeOn; + } + + /* + * Determines whether SQL comments are generated. + * + * @return true if SQL comments shall be generated + */ + public boolean isSqlCommentsOn() { + return sqlCommentsOn; + } + + /* + * Specifies whether SQL comments shall be generated. + * + * @param sqlCommentsOn true if SQL comments shall be generated + */ + public void setSqlCommentsOn(boolean sqlCommentsOn) { + if (!platformInfo.isSqlCommentsSupported() && sqlCommentsOn) { + throw new DdlException("Platform does not support SQL comments"); + } + this.sqlCommentsOn = sqlCommentsOn; + } + + /* + * Determines whether delimited identifiers are used or normal SQL92 + * identifiers (which may only contain alphanumerical characters and the + * underscore, must start with a letter and cannot be a reserved keyword). + * Per default, delimited identifiers are not used + * + * @return true if delimited identifiers are used + */ + public boolean isDelimitedIdentifierModeOn() { + return delimitedIdentifierModeOn; + } + + /* + * Specifies whether delimited identifiers are used or normal SQL92 + * identifiers. + * + * @param delimitedIdentifierModeOn true if delimited + * identifiers shall be used + */ + public void setDelimitedIdentifierModeOn(boolean delimitedIdentifierModeOn) { + if (!platformInfo.isDelimitedIdentifiersSupported() && delimitedIdentifierModeOn) { + throw new DdlException("Platform does not support delimited identifier"); + } + this.delimitedIdentifierModeOn = delimitedIdentifierModeOn; + } } diff --git a/symmetric/symmetric-db/src/main/java/org/jumpmind/db/platform/IDatabasePlatform.java b/symmetric/symmetric-db/src/main/java/org/jumpmind/db/platform/IDatabasePlatform.java index 652a1b45f2..b3410b7cb3 100644 --- a/symmetric/symmetric-db/src/main/java/org/jumpmind/db/platform/IDatabasePlatform.java +++ b/symmetric/symmetric-db/src/main/java/org/jumpmind/db/platform/IDatabasePlatform.java @@ -73,57 +73,6 @@ public interface IDatabasePlatform { public String getDefaultCatalog(); - /* - * Determines whether script mode is on. This means that the generated SQL - * is not intended to be sent directly to the database but rather to be - * saved in a SQL script file. Per default, script mode is off. - * - * @return true if script mode is on - */ - public boolean isScriptModeOn(); - - /* - * Specifies whether script mode is on. This means that the generated SQL is - * not intended to be sent directly to the database but rather to be saved - * in a SQL script file. - * - * @param scriptModeOn true if script mode is on - */ - public void setScriptModeOn(boolean scriptModeOn); - - /* - * Determines whether delimited identifiers are used or normal SQL92 - * identifiers (which may only contain alphanumerical characters and the - * underscore, must start with a letter and cannot be a reserved keyword). - * Per default, delimited identifiers are not used - * - * @return true if delimited identifiers are used - */ - public boolean isDelimitedIdentifierModeOn(); - - /* - * Specifies whether delimited identifiers are used or normal SQL92 - * identifiers. - * - * @param delimitedIdentifierModeOn true if delimited - * identifiers shall be used - */ - public void setDelimitedIdentifierModeOn(boolean delimitedIdentifierModeOn); - - /* - * Determines whether SQL comments are generated. - * - * @return true if SQL comments shall be generated - */ - public boolean isSqlCommentsOn(); - - /* - * Specifies whether SQL comments shall be generated. - * - * @param sqlCommentsOn true if SQL comments shall be generated - */ - public void setSqlCommentsOn(boolean sqlCommentsOn); - /* * Determines whether SQL insert statements can specify values for identity * columns. This setting is only relevant if the database supports it diff --git a/symmetric/symmetric-db/src/main/java/org/jumpmind/db/platform/IDdlBuilder.java b/symmetric/symmetric-db/src/main/java/org/jumpmind/db/platform/IDdlBuilder.java index bc21ccc334..4e9622a458 100644 --- a/symmetric/symmetric-db/src/main/java/org/jumpmind/db/platform/IDdlBuilder.java +++ b/symmetric/symmetric-db/src/main/java/org/jumpmind/db/platform/IDdlBuilder.java @@ -24,5 +24,16 @@ public interface IDdlBuilder { public String alterDatabase(Database currentModel, Database desiredModel); public String dropTables(Database database); + + /* + * Determines whether delimited identifiers are used or normal SQL92 + * identifiers (which may only contain alphanumerical characters and the + * underscore, must start with a letter and cannot be a reserved keyword). + * Per default, delimited identifiers are not used + * + * @return true if delimited identifiers are used + */ + public boolean isDelimitedIdentifierModeOn(); + } diff --git a/symmetric/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/transform/AdditiveColumnTransform.java b/symmetric/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/transform/AdditiveColumnTransform.java index cdbf21e743..fa05a9dcdf 100644 --- a/symmetric/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/transform/AdditiveColumnTransform.java +++ b/symmetric/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/transform/AdditiveColumnTransform.java @@ -27,7 +27,7 @@ public boolean isLoadColumnTransform() { } public String getFullyQualifiedTableName(IDatabasePlatform platform, String schema, String catalog, String tableName) { - String quote = platform.isDelimitedIdentifierModeOn() ? platform + String quote = platform.getDdlBuilder().isDelimitedIdentifierModeOn() ? platform .getPlatformInfo().getDelimiterToken() : ""; tableName = quote + tableName + quote; if (!StringUtils.isBlank(schema)) { @@ -52,7 +52,7 @@ public String transform(IDatabasePlatform platform, DataContext context, newValue = numericValue.toString(); } - String quote = platform.isDelimitedIdentifierModeOn() ? platform + String quote = platform.getDdlBuilder().isDelimitedIdentifierModeOn() ? platform .getPlatformInfo().getDelimiterToken() : ""; StringBuilder sql = new StringBuilder(String.format("update %s set %s=%s+%s where ", getFullyQualifiedTableName(platform, data.getSchemaName(), data.getCatalogName(), data.getTableName()), diff --git a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/AbstractJdbcDdlReader.java b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/AbstractJdbcDdlReader.java index 6958117c45..8543ef52e9 100644 --- a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/AbstractJdbcDdlReader.java +++ b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/AbstractJdbcDdlReader.java @@ -50,7 +50,6 @@ import org.jumpmind.db.model.UniqueIndex; import org.jumpmind.db.sql.IConnectionCallback; import org.jumpmind.db.sql.JdbcSqlTemplate; -import org.jumpmind.util.FormatUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -705,7 +704,7 @@ protected void removeInternalForeignKeyIndex(Connection connection, for (int columnIdx = 0; columnIdx < fk.getReferenceCount(); columnIdx++) { String name = fk.getReference(columnIdx).getLocalColumnName(); Column localColumn = table - .findColumn(name, getPlatform().isDelimitedIdentifierModeOn()); + .findColumn(name, getPlatform().getDdlBuilder().isDelimitedIdentifierModeOn()); if (mustBeUnique && !localColumn.isPrimaryKey()) { mustBeUnique = false; @@ -1149,11 +1148,11 @@ public void determineAutoIncrementFromResultSetMetaData(Connection conn, Table t } public StringBuilder appendIdentifier(StringBuilder query, String identifier) { - if (getPlatform().isDelimitedIdentifierModeOn()) { + if (getPlatform().getDdlBuilder().isDelimitedIdentifierModeOn()) { query.append(getPlatformInfo().getDelimiterToken()); } query.append(identifier); - if (getPlatform().isDelimitedIdentifierModeOn()) { + if (getPlatform().getDdlBuilder().isDelimitedIdentifierModeOn()) { query.append(getPlatformInfo().getDelimiterToken()); } return query; @@ -1166,7 +1165,7 @@ public StringBuilder appendIdentifier(StringBuilder query, String identifier) { */ protected void sortForeignKeys(Database model) { for (int tableIdx = 0; tableIdx < model.getTableCount(); tableIdx++) { - model.getTable(tableIdx).sortForeignKeys(getPlatform().isDelimitedIdentifierModeOn()); + model.getTable(tableIdx).sortForeignKeys(getPlatform().getDdlBuilder().isDelimitedIdentifierModeOn()); } } @@ -1233,7 +1232,7 @@ public String determineSchemaOf(Connection connection, String schemaPattern, Tab String tablePattern = table.getName(); - if (getPlatform().isDelimitedIdentifierModeOn()) { + if (getPlatform().getDdlBuilder().isDelimitedIdentifierModeOn()) { tablePattern = tablePattern.toUpperCase(); } @@ -1254,7 +1253,7 @@ public String determineSchemaOf(Connection connection, String schemaPattern, Tab while (found && columnData.next()) { values = readColumns(columnData, getColumnsForColumn()); - if (table.findColumn((String) values.get("COLUMN_NAME"), getPlatform() + if (table.findColumn((String) values.get("COLUMN_NAME"), getPlatform().getDdlBuilder() .isDelimitedIdentifierModeOn()) == null) { found = false; } diff --git a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/db2/Db2DatabasePlatform.java b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/db2/Db2DatabasePlatform.java index 123d2967a3..9e6d4916a0 100644 --- a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/db2/Db2DatabasePlatform.java +++ b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/db2/Db2DatabasePlatform.java @@ -78,7 +78,7 @@ public Db2DatabasePlatform(DataSource dataSource, DatabasePlatformSettings setti info.setEmptyStringNulled(false); ddlReader = new Db2DdlReader(this); - ddlBuilder = new Db2DdlBuilder(this); + ddlBuilder = new Db2DdlBuilder(info); } @Override diff --git a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/db2/Db2DdlBuilder.java b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/db2/Db2DdlBuilder.java index d7617a1148..cba7c13097 100644 --- a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/db2/Db2DdlBuilder.java +++ b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/db2/Db2DdlBuilder.java @@ -35,7 +35,7 @@ import org.jumpmind.db.model.Table; import org.jumpmind.db.model.TypeMap; import org.jumpmind.db.platform.AbstractDdlBuilder; -import org.jumpmind.db.platform.IDatabasePlatform; +import org.jumpmind.db.platform.DatabasePlatformInfo; import org.jumpmind.db.platform.PlatformUtils; /* @@ -43,8 +43,8 @@ */ public class Db2DdlBuilder extends AbstractDdlBuilder { - public Db2DdlBuilder(IDatabasePlatform platform) { - super(platform); + public Db2DdlBuilder(DatabasePlatformInfo platformInfo) { + super(platformInfo); addEscapedCharSequence("'", "''"); } @@ -96,7 +96,7 @@ protected void writeCastExpression(Column sourceColumn, Column targetColumn, Str Object sizeSpec = targetColumn.getSize(); if (sizeSpec == null) { - sizeSpec = platform.getPlatformInfo() + sizeSpec = platformInfo .getDefaultSize(targetColumn.getTypeCode()); } type = "CHAR(" + sizeSpec.toString() + ")"; @@ -161,7 +161,7 @@ protected void processChange(Database currentModel, Database desiredModel, ddl.append("ADD COLUMN "); writeColumn(change.getChangedTable(), change.getNewColumn(), ddl); printEndOfStatement(ddl); - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } /* @@ -175,7 +175,7 @@ protected void processChange(Database currentModel, Database desiredModel, ddl.append("DROP COLUMN "); printIdentifier(getColumnName(change.getColumn()), ddl); printEndOfStatement(ddl); - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } /* @@ -188,7 +188,7 @@ protected void processChange(Database currentModel, Database desiredModel, printIndent(ddl); ddl.append("DROP PRIMARY KEY"); printEndOfStatement(ddl); - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } /* @@ -203,7 +203,7 @@ protected void processChange(Database currentModel, Database desiredModel, printEndOfStatement(ddl); writeExternalPrimaryKeysCreateStmt(change.getChangedTable(), change.getNewPrimaryKeyColumns(), ddl); - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } } diff --git a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/derby/DerbyDatabasePlatform.java b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/derby/DerbyDatabasePlatform.java index 34b3fb1c2f..ee9ad7b08a 100644 --- a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/derby/DerbyDatabasePlatform.java +++ b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/derby/DerbyDatabasePlatform.java @@ -80,7 +80,7 @@ public DerbyDatabasePlatform(DataSource dataSource, DatabasePlatformSettings set info.setEmptyStringNulled(false); ddlReader = new DerbyDdlReader(this); - ddlBuilder = new DerbyDdlBuilder(this); + ddlBuilder = new DerbyDdlBuilder(info); } @Override diff --git a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/derby/DerbyDdlBuilder.java b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/derby/DerbyDdlBuilder.java index 3fab583746..c9b48500f5 100644 --- a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/derby/DerbyDdlBuilder.java +++ b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/derby/DerbyDdlBuilder.java @@ -31,7 +31,7 @@ import org.jumpmind.db.model.Table; import org.jumpmind.db.model.TypeMap; import org.jumpmind.db.platform.AbstractDdlBuilder; -import org.jumpmind.db.platform.IDatabasePlatform; +import org.jumpmind.db.platform.DatabasePlatformInfo; import org.jumpmind.db.platform.PlatformUtils; /* @@ -39,8 +39,8 @@ */ public class DerbyDdlBuilder extends AbstractDdlBuilder { - public DerbyDdlBuilder(IDatabasePlatform platform) { - super(platform); + public DerbyDdlBuilder(DatabasePlatformInfo platformInfo) { + super(platformInfo); addEscapedCharSequence("'", "''"); } @@ -132,7 +132,7 @@ protected void processChange(Database currentModel, Database desiredModel, ddl.append("ADD COLUMN "); writeColumn(change.getChangedTable(), change.getNewColumn(), ddl); printEndOfStatement(ddl); - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } } diff --git a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/firebird/FirebirdDatabasePlatform.java b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/firebird/FirebirdDatabasePlatform.java index 8ed2b77703..afeb8a0c85 100644 --- a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/firebird/FirebirdDatabasePlatform.java +++ b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/firebird/FirebirdDatabasePlatform.java @@ -86,7 +86,7 @@ public FirebirdDatabasePlatform(DataSource dataSource, DatabasePlatformSettings info.setEmptyStringNulled(false); ddlReader = new FirebirdDdlReader(this); - ddlBuilder = new FirebirdDdlBuilder(this); + ddlBuilder = new FirebirdDdlBuilder(info); } @Override diff --git a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/firebird/FirebirdDdlBuilder.java b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/firebird/FirebirdDdlBuilder.java index 95ef9d6b1d..03c83af8fb 100644 --- a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/firebird/FirebirdDdlBuilder.java +++ b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/firebird/FirebirdDdlBuilder.java @@ -32,15 +32,15 @@ import org.jumpmind.db.model.IIndex; import org.jumpmind.db.model.Table; import org.jumpmind.db.platform.AbstractDdlBuilder; -import org.jumpmind.db.platform.IDatabasePlatform; +import org.jumpmind.db.platform.DatabasePlatformInfo; import org.jumpmind.db.platform.PlatformUtils; /* * The SQL Builder for the FireBird database. */ public class FirebirdDdlBuilder extends AbstractDdlBuilder { - public FirebirdDdlBuilder(IDatabasePlatform platform) { - super(platform); + public FirebirdDdlBuilder(DatabasePlatformInfo platformInfo) { + super(platformInfo); addEscapedCharSequence("'", "''"); } @@ -264,7 +264,7 @@ protected void processChange(Database currentModel, Database desiredModel, printEndOfStatement(ddl); Table curTable = currentModel.findTable(change.getChangedTable().getName(), - platform.isDelimitedIdentifierModeOn()); + delimitedIdentifierModeOn); if (!change.isAtEnd()) { Column prevColumn = change.getPreviousColumn(); @@ -273,7 +273,7 @@ protected void processChange(Database currentModel, Database desiredModel, // we need the corresponding column object from the current // table prevColumn = curTable.findColumn(prevColumn.getName(), - platform.isDelimitedIdentifierModeOn()); + delimitedIdentifierModeOn); } // Even though Firebird can only add columns, we can move them later // on @@ -291,7 +291,7 @@ protected void processChange(Database currentModel, Database desiredModel, if (change.getNewColumn().isAutoIncrement()) { writeAutoIncrementCreateStmts(curTable, change.getNewColumn(), ddl); } - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } /* @@ -308,6 +308,6 @@ protected void processChange(Database currentModel, Database desiredModel, ddl.append("DROP "); printIdentifier(getColumnName(change.getColumn()), ddl); printEndOfStatement(ddl); - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } } diff --git a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/firebird/FirebirdDdlReader.java b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/firebird/FirebirdDdlReader.java index 31767822ec..5aa1890767 100644 --- a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/firebird/FirebirdDdlReader.java +++ b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/firebird/FirebirdDdlReader.java @@ -74,7 +74,7 @@ protected Collection readColumns(DatabaseMetaDataWrapper metaData, Strin try { List columns = new ArrayList(); - if (getPlatform().isDelimitedIdentifierModeOn()) { + if (getPlatform().getDdlBuilder().isDelimitedIdentifierModeOn()) { // Jaybird has a problem when delimited identifiers are used as // it is not able to find the columns for the table // So we have to filter manually below @@ -139,7 +139,7 @@ protected void determineAutoIncrementColumns(Connection connection, Table table) for (int idx = 0; idx < columns.length; idx++) { name = ((FirebirdDdlBuilder) getPlatform().getDdlBuilder()).getGeneratorName(table, columns[idx]); - if (!getPlatform().isDelimitedIdentifierModeOn()) { + if (!getPlatform().getDdlBuilder().isDelimitedIdentifierModeOn()) { name = name.toUpperCase(); } names.put(name, columns[idx]); @@ -171,7 +171,7 @@ protected Collection readPrimaryKeyNames(DatabaseMetaDataWrapper metaData, Strin ResultSet pkData = null; try { - if (getPlatform().isDelimitedIdentifierModeOn()) { + if (getPlatform().getDdlBuilder().isDelimitedIdentifierModeOn()) { // Jaybird has a problem when delimited identifiers are used as // it is not able to find the primary key info for the table // So we have to filter manually below @@ -208,7 +208,7 @@ protected Collection readForeignKeys(Connection connection, Database ResultSet fkData = null; try { - if (getPlatform().isDelimitedIdentifierModeOn()) { + if (getPlatform().getDdlBuilder().isDelimitedIdentifierModeOn()) { // Jaybird has a problem when delimited identifiers are used as // it is not able to find the foreign key info for the table // So we have to filter manually below @@ -255,7 +255,7 @@ protected Collection readIndices(Connection connection, DatabaseMetaDataWrapper ResultSet indexData = null; stmt.setString(1, - getPlatform().isDelimitedIdentifierModeOn() ? tableName : tableName.toUpperCase()); + getPlatform().getDdlBuilder().isDelimitedIdentifierModeOn() ? tableName : tableName.toUpperCase()); try { indexData = stmt.executeQuery(); @@ -296,7 +296,7 @@ protected boolean isInternalPrimaryKeyIndex(Connection connection, try { stmt.setString( 1, - getPlatform().isDelimitedIdentifierModeOn() ? tableName : tableName + getPlatform().getDdlBuilder().isDelimitedIdentifierModeOn() ? tableName : tableName .toUpperCase()); stmt.setString(2, "PRIMARY KEY"); stmt.setString(3, indexName); @@ -328,7 +328,7 @@ protected boolean isInternalForeignKeyIndex(Connection connection, try { stmt.setString( 1, - getPlatform().isDelimitedIdentifierModeOn() ? tableName : tableName + getPlatform().getDdlBuilder().isDelimitedIdentifierModeOn() ? tableName : tableName .toUpperCase()); stmt.setString(2, "FOREIGN KEY"); stmt.setString(3, fkName); @@ -361,7 +361,7 @@ public String determineSchemaOf(Connection connection, String schemaPattern, Tab String tablePattern = table.getName(); - if (getPlatform().isDelimitedIdentifierModeOn()) { + if (getPlatform().getDdlBuilder().isDelimitedIdentifierModeOn()) { tablePattern = tablePattern.toUpperCase(); } @@ -378,7 +378,7 @@ public String determineSchemaOf(Connection connection, String schemaPattern, Tab schema = (String) values.get("TABLE_SCHEM"); found = true; - if (getPlatform().isDelimitedIdentifierModeOn()) { + if (getPlatform().getDdlBuilder().isDelimitedIdentifierModeOn()) { // Jaybird has a problem when delimited identifiers are // used as // it is not able to find the columns for the table @@ -392,12 +392,12 @@ public String determineSchemaOf(Connection connection, String schemaPattern, Tab while (found && columnData.next()) { values = readColumns(columnData, getColumnsForColumn()); - if (getPlatform().isDelimitedIdentifierModeOn() + if (getPlatform().getDdlBuilder().isDelimitedIdentifierModeOn() && !tableName.equals(values.get("TABLE_NAME"))) { continue; } - if (table.findColumn((String) values.get("COLUMN_NAME"), getPlatform() + if (table.findColumn((String) values.get("COLUMN_NAME"), getPlatform().getDdlBuilder() .isDelimitedIdentifierModeOn()) == null) { found = false; } diff --git a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/greenplum/GreenplumDdlReader.java b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/greenplum/GreenplumDdlReader.java index f6ac2ca613..ea30085eb7 100644 --- a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/greenplum/GreenplumDdlReader.java +++ b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/greenplum/GreenplumDdlReader.java @@ -51,7 +51,7 @@ protected void setDistributionKeys(Connection connection, Table table, String sc // for every row, set the distributionKey for the corresponding // columns while (rs.next()) { - Column column = table.findColumn(rs.getString(2).trim(), getPlatform() + Column column = table.findColumn(rs.getString(2).trim(), getPlatform().getDdlBuilder() .isDelimitedIdentifierModeOn()); if (column != null) { column.setDistributionKey(true); diff --git a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/h2/H2DatabasePlatform.java b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/h2/H2DatabasePlatform.java index e2c7934a9f..7317c7ab2a 100644 --- a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/h2/H2DatabasePlatform.java +++ b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/h2/H2DatabasePlatform.java @@ -77,7 +77,7 @@ public H2DatabasePlatform(DataSource dataSource, DatabasePlatformSettings settin info.setEmptyStringNulled(false); ddlReader = new H2DdlReader(this); - ddlBuilder = new H2DdlBuilder(this); + ddlBuilder = new H2DdlBuilder(info); } @Override diff --git a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/h2/H2DdlBuilder.java b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/h2/H2DdlBuilder.java index 9cc1efabd9..7657af8edd 100644 --- a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/h2/H2DdlBuilder.java +++ b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/h2/H2DdlBuilder.java @@ -36,15 +36,15 @@ import org.jumpmind.db.model.Table; import org.jumpmind.db.model.TypeMap; import org.jumpmind.db.platform.AbstractDdlBuilder; -import org.jumpmind.db.platform.IDatabasePlatform; +import org.jumpmind.db.platform.DatabasePlatformInfo; /* * The SQL Builder for the H2 database. */ public class H2DdlBuilder extends AbstractDdlBuilder { - public H2DdlBuilder(IDatabasePlatform platform) { - super(platform); + public H2DdlBuilder(DatabasePlatformInfo platformInfo) { + super(platformInfo); addEscapedCharSequence("'", "''"); } @@ -60,7 +60,7 @@ protected void processChange(Database currentModel, Database desiredModel, printIdentifier(getColumnName(change.getNextColumn()), ddl); } printEndOfStatement(ddl); - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } /* @@ -74,7 +74,7 @@ protected void processChange(Database currentModel, Database desiredModel, ddl.append("DROP COLUMN "); printIdentifier(getColumnName(change.getColumn()), ddl); printEndOfStatement(ddl); - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } @Override @@ -82,7 +82,7 @@ protected void writeColumnDefaultValueStmt(Table table, Column column, StringBui Object parsedDefault = column.getParsedDefaultValue(); if (parsedDefault != null) { - if (!platform.getPlatformInfo().isDefaultValuesForLongTypesSupported() + if (!platformInfo.isDefaultValuesForLongTypesSupported() && ((column.getTypeCode() == Types.LONGVARBINARY) || (column.getTypeCode() == Types.LONGVARCHAR))) { throw new ModelException( "The platform does not support default values for LONGVARCHAR or LONGVARBINARY columns"); @@ -93,7 +93,7 @@ protected void writeColumnDefaultValueStmt(Table table, Column column, StringBui ddl.append(" DEFAULT "); writeColumnDefaultValue(table, column, ddl); } - } else if (platform.getPlatformInfo().isDefaultValueUsedForIdentitySpec() + } else if (platformInfo.isDefaultValueUsedForIdentitySpec() && column.isAutoIncrement()) { ddl.append(" DEFAULT "); writeColumnDefaultValue(table, column, ddl); @@ -115,9 +115,9 @@ protected void printDefaultValue(Object defaultValue, int typeCode, StringBuilde if (shouldUseQuotes) { // characters are only escaped when within a string literal - ddl.append(platform.getPlatformInfo().getValueQuoteToken()); + ddl.append(platformInfo.getValueQuoteToken()); ddl.append(escapeStringValue(defaultValueStr)); - ddl.append(platform.getPlatformInfo().getValueQuoteToken()); + ddl.append(platformInfo.getValueQuoteToken()); } else { ddl.append(defaultValueStr); } diff --git a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/hsqldb/HsqlDbDatabasePlatform.java b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/hsqldb/HsqlDbDatabasePlatform.java index e4baf0eba3..ce5e5928dd 100644 --- a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/hsqldb/HsqlDbDatabasePlatform.java +++ b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/hsqldb/HsqlDbDatabasePlatform.java @@ -76,7 +76,7 @@ public HsqlDbDatabasePlatform(DataSource dataSource, DatabasePlatformSettings se info.setEmptyStringNulled(false); ddlReader = new HsqlDbDdlReader(this); - ddlBuilder = new HsqlDbDdlBuilder(this); + ddlBuilder = new HsqlDbDdlBuilder(info); } diff --git a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/hsqldb/HsqlDbDdlBuilder.java b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/hsqldb/HsqlDbDdlBuilder.java index 54fcdc58cf..c725dfd6c7 100644 --- a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/hsqldb/HsqlDbDdlBuilder.java +++ b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/hsqldb/HsqlDbDdlBuilder.java @@ -30,15 +30,15 @@ import org.jumpmind.db.model.Database; import org.jumpmind.db.model.Table; import org.jumpmind.db.platform.AbstractDdlBuilder; -import org.jumpmind.db.platform.IDatabasePlatform; +import org.jumpmind.db.platform.DatabasePlatformInfo; /* * The SQL Builder for the HsqlDb database. */ public class HsqlDbDdlBuilder extends AbstractDdlBuilder { - public HsqlDbDdlBuilder(IDatabasePlatform platform) { - super(platform); + public HsqlDbDdlBuilder(DatabasePlatformInfo platformInfo) { + super(platformInfo); addEscapedCharSequence("'", "''"); } @@ -119,7 +119,7 @@ protected void processChange(Database currentModel, Database desiredModel, printIdentifier(getColumnName(change.getNextColumn()), ddl); } printEndOfStatement(ddl); - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } /* @@ -133,7 +133,7 @@ protected void processChange(Database currentModel, Database desiredModel, ddl.append("DROP COLUMN "); printIdentifier(getColumnName(change.getColumn()), ddl); printEndOfStatement(ddl); - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } } diff --git a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/hsqldb2/HsqlDb2DatabasePlatform.java b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/hsqldb2/HsqlDb2DatabasePlatform.java index a96d146dda..de275329a9 100644 --- a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/hsqldb2/HsqlDb2DatabasePlatform.java +++ b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/hsqldb2/HsqlDb2DatabasePlatform.java @@ -76,7 +76,7 @@ public HsqlDb2DatabasePlatform(DataSource dataSource, DatabasePlatformSettings s info.setEmptyStringNulled(false); ddlReader = new HsqlDb2DdlReader(this); - ddlBuilder = new HsqlDb2DdlBuilder(this); + ddlBuilder = new HsqlDb2DdlBuilder(info); } @Override diff --git a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/hsqldb2/HsqlDb2DdlBuilder.java b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/hsqldb2/HsqlDb2DdlBuilder.java index 8cc206a918..949c2db780 100644 --- a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/hsqldb2/HsqlDb2DdlBuilder.java +++ b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/hsqldb2/HsqlDb2DdlBuilder.java @@ -35,15 +35,15 @@ import org.jumpmind.db.model.IIndex; import org.jumpmind.db.model.Table; import org.jumpmind.db.platform.AbstractDdlBuilder; -import org.jumpmind.db.platform.IDatabasePlatform; +import org.jumpmind.db.platform.DatabasePlatformInfo; /* * The SQL Builder for the HsqlDb database. */ public class HsqlDb2DdlBuilder extends AbstractDdlBuilder { - public HsqlDb2DdlBuilder(IDatabasePlatform platform) { - super(platform); + public HsqlDb2DdlBuilder(DatabasePlatformInfo platformInfo) { + super(platformInfo); addEscapedCharSequence("'", "''"); } @@ -150,7 +150,7 @@ protected void processChange(Database currentModel, Database desiredModel, printIdentifier(getColumnName(change.getNextColumn()), ddl); } printEndOfStatement(ddl); - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } /* @@ -164,7 +164,7 @@ protected void processChange(Database currentModel, Database desiredModel, ddl.append("DROP COLUMN "); printIdentifier(getColumnName(change.getColumn()), ddl); printEndOfStatement(ddl); - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } @Override diff --git a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/informix/InformixDatabasePlatform.java b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/informix/InformixDatabasePlatform.java index 68becd0356..dfc2e8e9c6 100644 --- a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/informix/InformixDatabasePlatform.java +++ b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/informix/InformixDatabasePlatform.java @@ -58,7 +58,7 @@ public InformixDatabasePlatform(DataSource dataSource, DatabasePlatformSettings } ddlReader = new InformixDdlReader(this); - ddlBuilder = new InformixDdlBuilder(this); + ddlBuilder = new InformixDdlBuilder(info); sqlScriptReplacementTokens = new HashMap(); sqlScriptReplacementTokens.put("current_timestamp", "current"); diff --git a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/informix/InformixDdlBuilder.java b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/informix/InformixDdlBuilder.java index 557e30458c..b8292f8f5b 100644 --- a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/informix/InformixDdlBuilder.java +++ b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/informix/InformixDdlBuilder.java @@ -7,12 +7,12 @@ import org.jumpmind.db.model.ForeignKey; import org.jumpmind.db.model.Table; import org.jumpmind.db.platform.AbstractDdlBuilder; -import org.jumpmind.db.platform.IDatabasePlatform; +import org.jumpmind.db.platform.DatabasePlatformInfo; public class InformixDdlBuilder extends AbstractDdlBuilder { - public InformixDdlBuilder(IDatabasePlatform platform) { - super(platform); + public InformixDdlBuilder(DatabasePlatformInfo platformInfo) { + super(platformInfo); } @Override @@ -71,7 +71,7 @@ protected void processChange(Database currentModel, Database desiredModel, ddl.append("DROP CONSTRAINT "); printIdentifier(getConstraintName(null, change.getChangedTable(), "PK", null), ddl); printEndOfStatement(ddl); - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } protected void processChange(Database currentModel, Database desiredModel, @@ -84,6 +84,6 @@ protected void processChange(Database currentModel, Database desiredModel, printEndOfStatement(ddl); writeExternalPrimaryKeysCreateStmt(change.getChangedTable(), change.getNewPrimaryKeyColumns(), ddl); - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } } diff --git a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/interbase/InterbaseDatabasePlatform.java b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/interbase/InterbaseDatabasePlatform.java index 89620aa52e..fa089200ea 100644 --- a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/interbase/InterbaseDatabasePlatform.java +++ b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/interbase/InterbaseDatabasePlatform.java @@ -92,7 +92,7 @@ public InterbaseDatabasePlatform(DataSource dataSource, DatabasePlatformSettings info.setEmptyStringNulled(false); ddlReader = new InterbaseDdlReader(this); - ddlBuilder = new InterbaseDdlBuilder(this); + ddlBuilder = new InterbaseDdlBuilder(info); } @Override diff --git a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/interbase/InterbaseDdlBuilder.java b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/interbase/InterbaseDdlBuilder.java index 74f5f17bf0..de0ab94587 100644 --- a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/interbase/InterbaseDdlBuilder.java +++ b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/interbase/InterbaseDdlBuilder.java @@ -32,7 +32,7 @@ import org.jumpmind.db.model.IIndex; import org.jumpmind.db.model.Table; import org.jumpmind.db.platform.AbstractDdlBuilder; -import org.jumpmind.db.platform.IDatabasePlatform; +import org.jumpmind.db.platform.DatabasePlatformInfo; import org.jumpmind.db.platform.PlatformUtils; /* @@ -40,8 +40,8 @@ */ public class InterbaseDdlBuilder extends AbstractDdlBuilder { - public InterbaseDdlBuilder(IDatabasePlatform platform) { - super(platform); + public InterbaseDdlBuilder(DatabasePlatformInfo platformInfo) { + super(platformInfo); addEscapedCharSequence("'", "''"); } @@ -274,7 +274,7 @@ protected void processChange(Database currentModel, Database desiredModel, printEndOfStatement(ddl); Table curTable = currentModel.findTable(change.getChangedTable().getName(), - platform.isDelimitedIdentifierModeOn()); + delimitedIdentifierModeOn); if (!change.isAtEnd()) { Column prevColumn = change.getPreviousColumn(); @@ -283,7 +283,7 @@ protected void processChange(Database currentModel, Database desiredModel, // we need the corresponding column object from the current // table prevColumn = curTable.findColumn(prevColumn.getName(), - platform.isDelimitedIdentifierModeOn()); + delimitedIdentifierModeOn); } // Even though Interbase can only add columns, we can move them // later on @@ -301,7 +301,7 @@ protected void processChange(Database currentModel, Database desiredModel, if (change.getNewColumn().isAutoIncrement()) { writeAutoIncrementCreateStmts(curTable, change.getNewColumn(), ddl); } - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } /* @@ -318,6 +318,6 @@ protected void processChange(Database currentModel, Database desiredModel, ddl.append("DROP "); printIdentifier(getColumnName(change.getColumn()), ddl); printEndOfStatement(ddl); - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } } diff --git a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/interbase/InterbaseDdlReader.java b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/interbase/InterbaseDdlReader.java index d62eae747c..2c3accf848 100644 --- a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/interbase/InterbaseDdlReader.java +++ b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/interbase/InterbaseDdlReader.java @@ -88,7 +88,7 @@ protected Collection readColumns(DatabaseMetaDataWrapper metaData, Strin try { List columns = new ArrayList(); - if (getPlatform().isDelimitedIdentifierModeOn()) { + if (getPlatform().getDdlBuilder().isDelimitedIdentifierModeOn()) { // Jaybird has a problem when delimited identifiers are used as // it is not able to find the columns for the table // So we have to filter manually below @@ -136,14 +136,14 @@ protected void determineExtraColumnInfo(Connection connection, Table table) thro PreparedStatement prepStmt = connection.prepareStatement(query.toString()); try { - prepStmt.setString(1, getPlatform().isDelimitedIdentifierModeOn() ? table.getName() + prepStmt.setString(1, getPlatform().getDdlBuilder().isDelimitedIdentifierModeOn() ? table.getName() : table.getName().toUpperCase()); ResultSet rs = prepStmt.executeQuery(); while (rs.next()) { String columnName = rs.getString(1).trim(); - Column column = table.findColumn(columnName, getPlatform() + Column column = table.findColumn(columnName, getPlatform().getDdlBuilder() .isDelimitedIdentifierModeOn()); if (column != null) { @@ -201,7 +201,7 @@ protected void determineAutoIncrementColumns(Connection connection, Table table) for (int idx = 0; idx < columns.length; idx++) { name = builder.getGeneratorName(table, columns[idx]); - if (!getPlatform().isDelimitedIdentifierModeOn()) { + if (!getPlatform().getDdlBuilder().isDelimitedIdentifierModeOn()) { name = name.toUpperCase(); } names.put(name, columns[idx]); @@ -256,7 +256,7 @@ protected Collection readPrimaryKeyNames(DatabaseMetaDataWrapper metaDat ResultSet pkData = null; try { - if (getPlatform().isDelimitedIdentifierModeOn()) { + if (getPlatform().getDdlBuilder().isDelimitedIdentifierModeOn()) { // Jaybird has a problem when delimited identifiers are used as // it is not able to find the primary key info for the table // So we have to filter manually below @@ -291,7 +291,7 @@ protected Collection readForeignKeys(Connection connection, Database ResultSet fkData = null; try { - if (getPlatform().isDelimitedIdentifierModeOn()) { + if (getPlatform().getDdlBuilder().isDelimitedIdentifierModeOn()) { // Jaybird has a problem when delimited identifiers are used as // it is not able to find the foreign key info for the table // So we have to filter manually below @@ -333,7 +333,7 @@ protected boolean isInternalPrimaryKeyIndex(Connection connection, try { stmt.setString( 1, - getPlatform().isDelimitedIdentifierModeOn() ? tableName : tableName + getPlatform().getDdlBuilder().isDelimitedIdentifierModeOn() ? tableName : tableName .toUpperCase()); stmt.setString(2, "PRIMARY KEY"); stmt.setString(3, indexName); @@ -364,7 +364,7 @@ protected boolean isInternalForeignKeyIndex(Connection connection, try { stmt.setString( 1, - getPlatform().isDelimitedIdentifierModeOn() ? tableName : tableName + getPlatform().getDdlBuilder().isDelimitedIdentifierModeOn() ? tableName : tableName .toUpperCase()); stmt.setString(2, "FOREIGN KEY"); stmt.setString(3, fkName); @@ -397,7 +397,7 @@ public String determineSchemaOf(Connection connection, String schemaPattern, Tab String tablePattern = table.getName(); - if (getPlatform().isDelimitedIdentifierModeOn()) { + if (getPlatform().getDdlBuilder().isDelimitedIdentifierModeOn()) { tablePattern = tablePattern.toUpperCase(); } @@ -414,7 +414,7 @@ public String determineSchemaOf(Connection connection, String schemaPattern, Tab schema = (String) values.get("TABLE_SCHEM"); found = true; - if (getPlatform().isDelimitedIdentifierModeOn()) { + if (getPlatform().getDdlBuilder().isDelimitedIdentifierModeOn()) { // Jaybird has a problem when delimited identifiers are // used as // it is not able to find the columns for the table @@ -428,12 +428,12 @@ public String determineSchemaOf(Connection connection, String schemaPattern, Tab while (found && columnData.next()) { values = readColumns(columnData, getColumnsForColumn()); - if (getPlatform().isDelimitedIdentifierModeOn() + if (getPlatform().getDdlBuilder().isDelimitedIdentifierModeOn() && !tableName.equals(values.get("TABLE_NAME"))) { continue; } - if (table.findColumn((String) values.get("COLUMN_NAME"), getPlatform() + if (table.findColumn((String) values.get("COLUMN_NAME"), getPlatform().getDdlBuilder() .isDelimitedIdentifierModeOn()) == null) { found = false; } diff --git a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mssql/MsSqlDatabasePlatform.java b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mssql/MsSqlDatabasePlatform.java index bbf9357b78..b538d81724 100644 --- a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mssql/MsSqlDatabasePlatform.java +++ b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mssql/MsSqlDatabasePlatform.java @@ -83,7 +83,7 @@ public MsSqlDatabasePlatform(DataSource dataSource, DatabasePlatformSettings set info.setAutoIncrementUpdateAllowed(false); ddlReader = new MsSqlDdlReader(this); - ddlBuilder = new MsSqlDdlBuilder(this); + ddlBuilder = new MsSqlDdlBuilder(info); } diff --git a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mssql/MsSqlDdlBuilder.java b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mssql/MsSqlDdlBuilder.java index 51f71c14a4..c88a9bb755 100644 --- a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mssql/MsSqlDdlBuilder.java +++ b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mssql/MsSqlDdlBuilder.java @@ -50,7 +50,7 @@ import org.jumpmind.db.model.IIndex; import org.jumpmind.db.model.Table; import org.jumpmind.db.platform.AbstractDdlBuilder; -import org.jumpmind.db.platform.IDatabasePlatform; +import org.jumpmind.db.platform.DatabasePlatformInfo; import org.jumpmind.db.platform.PlatformUtils; /* @@ -64,8 +64,8 @@ public class MsSqlDdlBuilder extends AbstractDdlBuilder { /* We use a generic date format. */ private DateFormat _genericTimeFormat = new SimpleDateFormat("HH:mm:ss"); - public MsSqlDdlBuilder(IDatabasePlatform platform) { - super(platform); + public MsSqlDdlBuilder(DatabasePlatformInfo platformInfo) { + super(platformInfo); addEscapedCharSequence("'", "''"); } @@ -150,25 +150,25 @@ protected String getValueAsString(Column column, Object value) { break; case Types.DATE: result.append("CAST("); - result.append(platform.getPlatformInfo().getValueQuoteToken()); + result.append(platformInfo.getValueQuoteToken()); result.append(value instanceof String ? (String) value : getValueDateFormat().format( value)); - result.append(platform.getPlatformInfo().getValueQuoteToken()); + result.append(platformInfo.getValueQuoteToken()); result.append(" AS datetime)"); break; case Types.TIME: result.append("CAST("); - result.append(platform.getPlatformInfo().getValueQuoteToken()); + result.append(platformInfo.getValueQuoteToken()); result.append(value instanceof String ? (String) value : getValueTimeFormat().format( value)); - result.append(platform.getPlatformInfo().getValueQuoteToken()); + result.append(platformInfo.getValueQuoteToken()); result.append(" AS datetime)"); break; case Types.TIMESTAMP: result.append("CAST("); - result.append(platform.getPlatformInfo().getValueQuoteToken()); + result.append(platformInfo.getValueQuoteToken()); result.append(value.toString()); - result.append(platform.getPlatformInfo().getValueQuoteToken()); + result.append(platformInfo.getValueQuoteToken()); result.append(" AS datetime)"); break; } @@ -225,8 +225,8 @@ protected void writeExternalForeignKeyDropStmt(Table table, ForeignKey foreignKe * @return The quotation-on statement */ private String getQuotationOnStatement() { - if (platform.isDelimitedIdentifierModeOn()) { - return "SET quoted_identifier on" + platform.getPlatformInfo().getSqlCommandDelimiter() + if (delimitedIdentifierModeOn) { + return "SET quoted_identifier on" + platformInfo.getSqlCommandDelimiter() + "\n"; } else { return ""; @@ -260,7 +260,7 @@ protected String getEnableIdentityOverrideSql(Table table) { result.append("SET IDENTITY_INSERT "); result.append(getDelimitedIdentifier(getTableName(table.getName()))); result.append(" ON"); - result.append(platform.getPlatformInfo().getSqlCommandDelimiter()); + result.append(platformInfo.getSqlCommandDelimiter()); return result.toString(); } @@ -279,7 +279,7 @@ protected String getDisableIdentityOverrideSql(Table table) { result.append("SET IDENTITY_INSERT "); result.append(getDelimitedIdentifier(getTableName(table.getName()))); result.append(" OFF"); - result.append(platform.getPlatformInfo().getSqlCommandDelimiter()); + result.append(platformInfo.getSqlCommandDelimiter()); return result.toString(); } @@ -469,7 +469,7 @@ protected void processTableStructureChanges(Database currentModel, Database desi ColumnChange change = (ColumnChange) changeIt.next(); Column sourceColumn = change.getChangedColumn(); Column targetColumn = targetTable.findColumn(sourceColumn.getName(), - platform.isDelimitedIdentifierModeOn()); + delimitedIdentifierModeOn); if (!processedColumns.contains(targetColumn)) { processColumnChange(sourceTable, targetTable, sourceColumn, targetColumn, @@ -478,7 +478,7 @@ protected void processTableStructureChanges(Database currentModel, Database desi processedColumns.add(targetColumn); } changes.remove(change); - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } } // Finally we add primary keys @@ -510,7 +510,7 @@ protected void processChange(Database currentModel, Database desiredModel, ddl.append("ADD "); writeColumn(change.getChangedTable(), change.getNewColumn(), ddl); printEndOfStatement(ddl); - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } /* @@ -524,7 +524,7 @@ protected void processChange(Database currentModel, Database desiredModel, ddl.append("DROP COLUMN "); printIdentifier(getColumnName(change.getColumn()), ddl); printEndOfStatement(ddl); - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } /* @@ -560,7 +560,7 @@ protected void processChange(Database currentModel, Database desiredModel, println(" DEALLOCATE refcursor", ddl); ddl.append("END"); printEndOfStatement(ddl); - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } /* diff --git a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mysql/MySqlDatabasePlatform.java b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mysql/MySqlDatabasePlatform.java index c44c73f5a2..79ba19ce40 100644 --- a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mysql/MySqlDatabasePlatform.java +++ b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mysql/MySqlDatabasePlatform.java @@ -102,7 +102,7 @@ public MySqlDatabasePlatform(DataSource dataSource, DatabasePlatformSettings set info.setSyntheticDefaultValueForRequiredReturned(false); ddlReader = new MySqlDdlReader(this); - ddlBuilder = new MySqlDdlBuilder(this); + ddlBuilder = new MySqlDdlBuilder(info); } @Override diff --git a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mysql/MySqlDdlBuilder.java b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mysql/MySqlDdlBuilder.java index bb9e557dad..57772e675b 100644 --- a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mysql/MySqlDdlBuilder.java +++ b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mysql/MySqlDdlBuilder.java @@ -36,15 +36,15 @@ import org.jumpmind.db.model.ForeignKey; import org.jumpmind.db.model.Table; import org.jumpmind.db.platform.AbstractDdlBuilder; -import org.jumpmind.db.platform.IDatabasePlatform; +import org.jumpmind.db.platform.DatabasePlatformInfo; /* * The SQL Builder for MySQL. */ public class MySqlDdlBuilder extends AbstractDdlBuilder { - public MySqlDdlBuilder(IDatabasePlatform platform) { - super(platform); + public MySqlDdlBuilder(DatabasePlatformInfo platformInfo) { + super(platformInfo); // we need to handle the backslash first otherwise the other // already escaped sequences would be affected @@ -165,7 +165,7 @@ protected void processTableStructureChanges(Database currentModel, Database desi for (Iterator columnIt = changedColumns.iterator(); columnIt.hasNext();) { Column sourceColumn = columnIt.next(); Column targetColumn = targetTable.findColumn(sourceColumn.getName(), - platform.isDelimitedIdentifierModeOn()); + delimitedIdentifierModeOn); processColumnChange(sourceTable, targetTable, sourceColumn, targetColumn, ddl); } @@ -188,7 +188,7 @@ protected void processChange(Database currentModel, Database desiredModel, ddl.append(" FIRST"); } printEndOfStatement(ddl); - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } /* @@ -202,7 +202,7 @@ protected void processChange(Database currentModel, Database desiredModel, ddl.append("DROP COLUMN "); printIdentifier(getColumnName(change.getColumn()), ddl); printEndOfStatement(ddl); - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } /* @@ -215,7 +215,7 @@ protected void processChange(Database currentModel, Database desiredModel, printIndent(ddl); ddl.append("DROP PRIMARY KEY"); printEndOfStatement(ddl); - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } /* @@ -230,7 +230,7 @@ protected void processChange(Database currentModel, Database desiredModel, printEndOfStatement(ddl); writeExternalPrimaryKeysCreateStmt(change.getChangedTable(), change.getNewPrimaryKeyColumns(), ddl); - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } /* diff --git a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/oracle/OracleDatabasePlatform.java b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/oracle/OracleDatabasePlatform.java index 2841a59209..9fe123d4be 100644 --- a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/oracle/OracleDatabasePlatform.java +++ b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/oracle/OracleDatabasePlatform.java @@ -105,7 +105,7 @@ public OracleDatabasePlatform(DataSource dataSource, DatabasePlatformSettings se info.setEmptyStringNulled(true); ddlReader = new OracleDdlReader(this); - ddlBuilder = new OracleDdlBuilder(this); + ddlBuilder = new OracleDdlBuilder(info); } @Override diff --git a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/oracle/OracleDdlBuilder.java b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/oracle/OracleDdlBuilder.java index f50cfbb31d..162a57e8d2 100644 --- a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/oracle/OracleDdlBuilder.java +++ b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/oracle/OracleDdlBuilder.java @@ -36,7 +36,7 @@ import org.jumpmind.db.model.Table; import org.jumpmind.db.model.TypeMap; import org.jumpmind.db.platform.AbstractDdlBuilder; -import org.jumpmind.db.platform.IDatabasePlatform; +import org.jumpmind.db.platform.DatabasePlatformInfo; import org.jumpmind.db.platform.PlatformUtils; /* @@ -48,11 +48,9 @@ public class OracleDdlBuilder extends AbstractDdlBuilder { protected static final String PREFIX_SEQUENCE = "SEQ"; - public OracleDdlBuilder(IDatabasePlatform platform) { - super(platform); - + public OracleDdlBuilder(DatabasePlatformInfo platformInfo) { + super(platformInfo); addEscapedCharSequence("'", "''"); - } @Override @@ -106,7 +104,7 @@ protected void createAutoIncrementTrigger(Table table, Column column, StringBuil String columnName = getColumnName(column); String triggerName = getConstraintName(PREFIX_TRIGGER, table, column.getName(), null); - if (platform.isScriptModeOn()) { + if (scriptModeOn) { // For the script, we output a more nicely formatted version ddl.append("CREATE OR REPLACE TRIGGER "); printlnIdentifier(triggerName, ddl); @@ -121,9 +119,9 @@ protected void createAutoIncrementTrigger(Table table, Column column, StringBuil ddl.append(".nextval INTO :new."); printIdentifier(columnName, ddl); ddl.append(" FROM dual"); - println(platform.getPlatformInfo().getSqlCommandDelimiter(), ddl); + println(platformInfo.getSqlCommandDelimiter(), ddl); ddl.append("END"); - println(platform.getPlatformInfo().getSqlCommandDelimiter(), ddl); + println(platformInfo.getSqlCommandDelimiter(), ddl); println("/", ddl); println(ddl); } else { @@ -144,14 +142,14 @@ protected void createAutoIncrementTrigger(Table table, Column column, StringBuil ddl.append(".nextval INTO :new."); printIdentifier(columnName, ddl); ddl.append(" FROM dual"); - ddl.append(platform.getPlatformInfo().getSqlCommandDelimiter()); + ddl.append(platformInfo.getSqlCommandDelimiter()); ddl.append(" END"); // It is important that there is a semicolon at the end of the // statement (or more // precisely, at the end of the PL/SQL block), and thus we put two // semicolons here // because the tokenizer will remove the one at the end - ddl.append(platform.getPlatformInfo().getSqlCommandDelimiter()); + ddl.append(platformInfo.getSqlCommandDelimiter()); printEndOfStatement(ddl); } } @@ -208,9 +206,9 @@ protected void printDefaultValue(Object defaultValue, int typeCode, StringBuilde if (shouldUseQuotes) { // characters are only escaped when within a string literal - ddl.append(platform.getPlatformInfo().getValueQuoteToken()); + ddl.append(platformInfo.getValueQuoteToken()); ddl.append(escapeStringValue(defaultValueStr)); - ddl.append(platform.getPlatformInfo().getValueQuoteToken()); + ddl.append(platformInfo.getValueQuoteToken()); } else { ddl.append(defaultValueStr); } @@ -362,7 +360,7 @@ protected void processChange(Database currentModel, Database desiredModel, createAutoIncrementSequence(change.getChangedTable(), change.getNewColumn(), ddl); createAutoIncrementTrigger(change.getChangedTable(), change.getNewColumn(), ddl); } - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } /* @@ -380,7 +378,7 @@ protected void processChange(Database currentModel, Database desiredModel, ddl.append("DROP COLUMN "); printIdentifier(getColumnName(change.getColumn()), ddl); printEndOfStatement(ddl); - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } /* @@ -393,7 +391,7 @@ protected void processChange(Database currentModel, Database desiredModel, printIndent(ddl); ddl.append("DROP PRIMARY KEY"); printEndOfStatement(ddl); - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } } diff --git a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/oracle/OracleDdlReader.java b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/oracle/OracleDdlReader.java index 6233ca743d..cfa6024c4e 100644 --- a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/oracle/OracleDdlReader.java +++ b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/oracle/OracleDdlReader.java @@ -263,7 +263,7 @@ protected boolean isAutoIncrement(Connection connection, Table table, Column col String seqName = builder.getConstraintName(OracleDdlBuilder.PREFIX_SEQUENCE, table, column.getName(), null); - if (!getPlatform().isDelimitedIdentifierModeOn()) { + if (!getPlatform().getDdlBuilder().isDelimitedIdentifierModeOn()) { triggerName = triggerName.toUpperCase(); seqName = seqName.toUpperCase(); } @@ -327,7 +327,7 @@ protected Collection readIndices(Connection connection, stmt = connection.prepareStatement(query.toString()); stmt.setString( 1, - getPlatform().isDelimitedIdentifierModeOn() ? tableName : tableName + getPlatform().getDdlBuilder().isDelimitedIdentifierModeOn() ? tableName : tableName .toUpperCase()); stmt.setString(2, "N"); stmt.setString(3, "TABLE"); diff --git a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/postgresql/PostgreSqlDatabasePlatform.java b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/postgresql/PostgreSqlDatabasePlatform.java index 99c702c966..8a2d31c57d 100644 --- a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/postgresql/PostgreSqlDatabasePlatform.java +++ b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/postgresql/PostgreSqlDatabasePlatform.java @@ -95,7 +95,7 @@ public PostgreSqlDatabasePlatform(DataSource dataSource, DatabasePlatformSetting info.setEmptyStringNulled(false); ddlReader = new PostgreSqlDdlReader(this); - ddlBuilder = new PostgreSqlDdlBuilder(this); + ddlBuilder = new PostgreSqlDdlBuilder(info); } public static boolean isUsePseudoSequence() { diff --git a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/postgresql/PostgreSqlDdlBuilder.java b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/postgresql/PostgreSqlDdlBuilder.java index 6e888876f8..26914e9ad7 100644 --- a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/postgresql/PostgreSqlDdlBuilder.java +++ b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/postgresql/PostgreSqlDdlBuilder.java @@ -30,15 +30,15 @@ import org.jumpmind.db.model.IIndex; import org.jumpmind.db.model.Table; import org.jumpmind.db.platform.AbstractDdlBuilder; -import org.jumpmind.db.platform.IDatabasePlatform; +import org.jumpmind.db.platform.DatabasePlatformInfo; /* * The SQL Builder for PostgresSql. */ public class PostgreSqlDdlBuilder extends AbstractDdlBuilder { - public PostgreSqlDdlBuilder(IDatabasePlatform platform) { - super(platform); + public PostgreSqlDdlBuilder(DatabasePlatformInfo platformInfo) { + super(platformInfo); // we need to handle the backslash first otherwise the other // already escaped sequences would be affected @@ -241,7 +241,7 @@ protected void processChange(Database currentModel, Database desiredModel, ddl.append("ADD COLUMN "); writeColumn(change.getChangedTable(), change.getNewColumn(), ddl); printEndOfStatement(ddl); - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } /* @@ -264,6 +264,6 @@ protected void processChange(Database currentModel, Database desiredModel, if (change.getColumn().isAutoIncrement()) { dropAutoIncrementSequence(change.getChangedTable(), change.getColumn(), ddl); } - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } } diff --git a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/sybase/SybaseDatabasePlatform.java b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/sybase/SybaseDatabasePlatform.java index ec2a9d534b..67e519454a 100644 --- a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/sybase/SybaseDatabasePlatform.java +++ b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/sybase/SybaseDatabasePlatform.java @@ -97,7 +97,7 @@ public SybaseDatabasePlatform(DataSource dataSource, DatabasePlatformSettings se info.setAutoIncrementUpdateAllowed(false); ddlReader = new SybaseDdlReader(this); - ddlBuilder = new SybaseDdlBuilder(this); + ddlBuilder = new SybaseDdlBuilder(info); sqlScriptReplacementTokens = new HashMap(); sqlScriptReplacementTokens.put("current_timestamp", "getdate()"); diff --git a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/sybase/SybaseDdlBuilder.java b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/sybase/SybaseDdlBuilder.java index 311447f114..f5644cb24a 100644 --- a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/sybase/SybaseDdlBuilder.java +++ b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/sybase/SybaseDdlBuilder.java @@ -43,7 +43,7 @@ import org.jumpmind.db.model.IIndex; import org.jumpmind.db.model.Table; import org.jumpmind.db.platform.AbstractDdlBuilder; -import org.jumpmind.db.platform.IDatabasePlatform; +import org.jumpmind.db.platform.DatabasePlatformInfo; import org.jumpmind.db.platform.PlatformUtils; /* @@ -51,8 +51,8 @@ */ public class SybaseDdlBuilder extends AbstractDdlBuilder { - public SybaseDdlBuilder(IDatabasePlatform platform) { - super(platform); + public SybaseDdlBuilder(DatabasePlatformInfo platformInfo) { + super(platformInfo); addEscapedCharSequence("'", "''"); } @@ -186,7 +186,7 @@ protected String getDisableIdentityOverrideSql(Table table) { * @return The quotation-on statement */ protected String getQuotationOnStatement() { - if (platform.isDelimitedIdentifierModeOn()) { + if (delimitedIdentifierModeOn) { return "SET quoted_identifier on"; } else { return ""; @@ -335,13 +335,13 @@ protected void processTableStructureChanges(Database currentModel, Database desi (ColumnDefaultValueChange) changesPerColumn.get(0), ddl); } else { Column targetColumn = targetTable.findColumn(sourceColumn.getName(), - platform.isDelimitedIdentifierModeOn()); + delimitedIdentifierModeOn); processColumnChange(sourceTable, targetTable, sourceColumn, targetColumn, ddl); } for (Iterator changeIt = changesPerColumn.iterator(); changeIt.hasNext();) { ((ColumnChange) changeIt.next()).apply(currentModel, - platform.isDelimitedIdentifierModeOn()); + delimitedIdentifierModeOn); } } } @@ -374,7 +374,7 @@ protected void processChange(Database currentModel, Database desiredModel, ddl.append("ADD "); writeColumn(change.getChangedTable(), change.getNewColumn(), ddl); printEndOfStatement(ddl); - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } /* @@ -388,7 +388,7 @@ protected void processChange(Database currentModel, Database desiredModel, ddl.append("DROP "); printIdentifier(getColumnName(change.getColumn()), ddl); printEndOfStatement(ddl); - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } /* @@ -428,7 +428,7 @@ protected void processChange(Database currentModel, Database desiredModel, println(" END", ddl); ddl.append("END"); printEndOfStatement(ddl); - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } /* @@ -444,9 +444,9 @@ protected void processChange(Database currentModel, Database desiredModel, printIdentifier(getColumnName(change.getChangedColumn()), ddl); Table curTable = currentModel.findTable(change.getChangedTable().getName(), - platform.isDelimitedIdentifierModeOn()); + delimitedIdentifierModeOn); Column curColumn = curTable.findColumn(change.getChangedColumn().getName(), - platform.isDelimitedIdentifierModeOn()); + delimitedIdentifierModeOn); ddl.append(" DEFAULT "); if (isValidDefaultValue(change.getNewDefaultValue(), curColumn.getTypeCode())) { @@ -455,7 +455,7 @@ protected void processChange(Database currentModel, Database desiredModel, ddl.append("NULL"); } printEndOfStatement(ddl); - change.apply(currentModel, platform.isDelimitedIdentifierModeOn()); + change.apply(currentModel, delimitedIdentifierModeOn); } /* diff --git a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/sybase/SybaseDdlReader.java b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/sybase/SybaseDdlReader.java index 4a9123c609..4dcc772b5c 100644 --- a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/sybase/SybaseDdlReader.java +++ b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/sybase/SybaseDdlReader.java @@ -122,7 +122,7 @@ protected Column readColumn(DatabaseMetaDataWrapper metaData, Map @Override protected void readIndex(DatabaseMetaDataWrapper metaData, Map values, Map knownIndices) throws SQLException { - if (getPlatform().isDelimitedIdentifierModeOn()) { + if (getPlatform().getDdlBuilder().isDelimitedIdentifierModeOn()) { String indexName = (String) values.get("INDEX_NAME"); // Sometimes, Sybase keeps the delimiter quotes around the index diff --git a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/sql/JdbcSqlReadCursor.java b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/sql/JdbcSqlReadCursor.java index ecd65e9bfd..ab111269b3 100644 --- a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/sql/JdbcSqlReadCursor.java +++ b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/sql/JdbcSqlReadCursor.java @@ -6,10 +6,6 @@ import java.sql.ResultSetMetaData; import java.sql.SQLException; -import org.jumpmind.db.sql.ISqlReadCursor; -import org.jumpmind.db.sql.ISqlRowMapper; -import org.jumpmind.db.sql.Row; - public class JdbcSqlReadCursor implements ISqlReadCursor { protected Connection c; diff --git a/symmetric/symmetric-jdbc/src/test/java/org/jumpmind/db/sql/SqlScriptUnitTest.java b/symmetric/symmetric-jdbc/src/test/java/org/jumpmind/db/sql/SqlScriptUnitTest.java index 13edc537ff..10c6b9192d 100644 --- a/symmetric/symmetric-jdbc/src/test/java/org/jumpmind/db/sql/SqlScriptUnitTest.java +++ b/symmetric/symmetric-jdbc/src/test/java/org/jumpmind/db/sql/SqlScriptUnitTest.java @@ -27,7 +27,6 @@ import org.jumpmind.db.platform.DatabasePlatformSettings; import org.jumpmind.db.platform.IDatabasePlatform; import org.jumpmind.db.platform.JdbcDatabasePlatformFactory; -import org.jumpmind.db.sql.SqlScript; import org.junit.Test; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.SingleConnectionDataSource;