diff --git a/symmetric/symmetric-assemble/TODO.txt b/symmetric/symmetric-assemble/TODO.txt index 2a91e8777d..46e275a11d 100644 --- a/symmetric/symmetric-assemble/TODO.txt +++ b/symmetric/symmetric-assemble/TODO.txt @@ -34,6 +34,12 @@ DONE = + * unit test + purge job for staging manager + make sure memory buffer is cleared when state goes to done + +* Make SymmetricDS case sensitive + * Get rid of delimited identifier "force" properties + * Add property to platform that identifies the default case used by the database + * Pre-process SQL to make sure symmetric tables are quoted and use the default case of the database + * Pre-process symmetric tables to default them to the case of the database * Hook up JMX @@ -57,7 +63,8 @@ DONE = + * Test timezone columns. Do other databases other than oracle and postgres have timezone columns? Performance Improvement Opportunities -* Pluggable data loaders. +* Pluggable data loaders +* Make push/pull/routing of channels asynchronous * Sync based on updated column values (timestamp or flag) * Transaction Log Parsing (vs. triggers) * Optimize triggers (don't capture old data. option to capture only primary keys) @@ -83,4 +90,7 @@ Documentation * No longer stop purge from running if there wasn't an initial load * Extensions no longer have services injected into them. If they need acccess to services, they should implement ISymmetricEngineAware * Node concurrency manager no longer allows the same node to make a second request while it already has a reservation -* Added stage management job (that purges staged files) \ No newline at end of file +* Added stage management job (that purges staged files) +* Removed support for db.force.delimited.identifier.mode.on & db.force.delimited.identifier.mode.off +* Removed support for db.metadata.ignore.case + diff --git a/symmetric/symmetric-client/src/test/java/org/jumpmind/symmetric/test/TestSetupUtil.java b/symmetric/symmetric-client/src/test/java/org/jumpmind/symmetric/test/TestSetupUtil.java index 01ee554bfa..c3f03d7d3d 100644 --- a/symmetric/symmetric-client/src/test/java/org/jumpmind/symmetric/test/TestSetupUtil.java +++ b/symmetric/symmetric-client/src/test/java/org/jumpmind/symmetric/test/TestSetupUtil.java @@ -2,14 +2,12 @@ import java.io.File; import java.io.IOException; -import java.io.InputStreamReader; import java.net.URL; import java.sql.Connection; import java.sql.DriverManager; import java.util.Properties; import org.apache.commons.io.FileUtils; -import org.jumpmind.db.io.DatabaseIO; import org.jumpmind.db.model.Database; import org.jumpmind.db.platform.IDatabasePlatform; import org.jumpmind.db.platform.IDdlBuilder; @@ -24,7 +22,7 @@ import org.slf4j.LoggerFactory; abstract public class TestSetupUtil { - + private static final Logger logger = LoggerFactory.getLogger(TestSetupUtil.class); static private ISymmetricEngine engine; @@ -32,8 +30,10 @@ abstract public class TestSetupUtil { public static ISymmetricEngine prepareForServiceTests() { if (engine == null) { removeEmbededdedDatabases(); - EnvironmentSpecificProperties properties = new EnvironmentSpecificProperties(new URL[] {getResource("/test-db.properties"), getResource("/symmetric-test.properties")}, - "test.root", new String[] { "root" }); + EnvironmentSpecificProperties properties = new EnvironmentSpecificProperties( + new URL[] { getResource("/test-db.properties"), + getResource("/symmetric-test.properties") }, "test.root", + new String[] { "root" }); properties.setProperty(ParameterConstants.AUTO_CONFIGURE_REG_SVR_SQL_SCRIPT, "/test-services-setup.sql"); engine = new ClientSymmetricEngine(properties); @@ -56,7 +56,7 @@ protected static void dropAndCreateDatabaseTables(String databaseType, ISymmetri new SqlScript(url, dialect.getPlatform().getSqlTemplate(), false).execute(true); } - Database testDb = getTestDatabase(); + Database testDb = getTestDatabase(dialect.getPlatform()); IDdlBuilder builder = platform.getDdlBuilder(); String sql = builder.dropTables(testDb); new SqlScript(sql, dialect.getPlatform().getSqlTemplate(), false).execute(true); @@ -79,9 +79,8 @@ protected static void dropAndCreateDatabaseTables(String databaseType, ISymmetri } } - protected static Database getTestDatabase() throws IOException { - return new DatabaseIO().read(new InputStreamReader(getResource("/test-schema.xml") - .openStream())); + protected static Database getTestDatabase(IDatabasePlatform platform) throws IOException { + return platform.readDatabaseFromXml("/test-schema.xml", true); } protected static boolean isConnectionValid(Properties properties) throws Exception { @@ -116,7 +115,7 @@ protected static void removeEmbededdedDatabases() { logger.info("Removing root database files"); FileUtils.deleteDirectory(rootDbDir); } catch (IOException e) { - logger.error(e.getMessage(),e); + logger.error(e.getMessage(), e); } } } diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/AbstractSymmetricEngine.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/AbstractSymmetricEngine.java index 8f25c38629..1c16b772fd 100644 --- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/AbstractSymmetricEngine.java +++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/AbstractSymmetricEngine.java @@ -188,11 +188,6 @@ protected void init() { MDC.put("engineName", this.parameterService.getEngineName()); - if (parameterService.is(ParameterConstants.DB_FORCE_DELIMITED_IDENTIFIER_ON)) { - this.platform.setDelimitedIdentifierModeOn(true); - } else if (parameterService.is(ParameterConstants.DB_FORCE_DELIMITED_IDENTIFIER_OFF)) { - this.platform.setDelimitedIdentifierModeOn(false); - } this.platform.setClearCacheModelTimeoutInMs(parameterService .getLong(ParameterConstants.CACHE_TIMEOUT_TABLES_IN_MS)); diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/common/ParameterConstants.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/common/ParameterConstants.java index 212a3f9993..8524313891 100644 --- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/common/ParameterConstants.java +++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/common/ParameterConstants.java @@ -158,11 +158,8 @@ private ParameterConstants() { public final static String DBPOOL_CONNECTION_PROPERTIES = "db.connection.properties"; public final static String DB_NATIVE_EXTRACTOR = "db.native.extractor"; - public final static String DB_METADATA_IGNORE_CASE = "db.metadata.ignore.case"; public final static String DB_QUERY_TIMEOUT_SECS = "db.sql.query.timeout.seconds"; public final static String DB_FETCH_SIZE = "db.jdbc.streaming.results.fetch.size"; - public final static String DB_FORCE_DELIMITED_IDENTIFIER_ON = "db.force.delimited.identifier.mode.on"; - public final static String DB_FORCE_DELIMITED_IDENTIFIER_OFF = "db.force.delimited.identifier.mode.off"; public final static String RUNTIME_CONFIG_TABLE_PREFIX = "sync.table.prefix"; diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/common/TableConstants.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/common/TableConstants.java index bf299142be..fec50e2964 100644 --- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/common/TableConstants.java +++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/common/TableConstants.java @@ -16,46 +16,111 @@ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations - * under the License. */ + * under the License. + */ package org.jumpmind.symmetric.common; import java.util.HashSet; import java.util.Set; +import org.apache.commons.lang.StringUtils; + /** * Constants that represent SymmetricDS tables */ public class TableConstants { + public static final String SYM_PARAMETER = "parameter"; + public static final String SYM_LOCK = "lock"; + public static final String SYM_OUTGOING_BATCH = "outgoing_batch"; + public static final String SYM_INCOMING_BATCH = "incoming_batch"; public static final String SYM_TRIGGER = "trigger"; - public static final String SYM_TRIGGER_ROUTER = "trigger_router"; public static final String SYM_ROUTER = "router"; - public static final String SYM_TRANSFORM_TABLE = "transform_table"; - public static final String SYM_TRANSFORM_COLUMN = "transform_column"; public static final String SYM_TRIGGER_HIST = "trigger_hist"; - public static final String SYM_CHANNEL = "channel"; public static final String SYM_NODE_GROUP = "node_group"; - public static final String SYM_NODE_GROUP_LINK = "node_group_link"; - public static final String SYM_NODE = "node"; public static final String SYM_NODE_HOST = "node_host"; + public static final String SYM_DATA = "data"; + public static final String SYM_DATA_GAP = "data_gap"; + public static final String SYM_DATA_EVENT = "data_event"; + public static final String SYM_TRANSFORM_TABLE = "transform_table"; + public static final String SYM_TRANSFORM_COLUMN = "transform_column"; + public static final String SYM_TRIGGER_ROUTER = "trigger_router"; + public static final String SYM_CHANNEL = "channel"; public static final String SYM_NODE_SECURITY = "node_security"; public static final String SYM_NODE_IDENTITY = "node_identity"; + public static final String SYM_NODE_GROUP_LINK = "node_group_link"; + public static final String SYM_NODE_HOST_STATS = "node_host_stats"; + public static final String SYM_NODE_HOST_JOB_STATS = "node_host_job_stats"; + public static final String SYM_REGISTRATION_REQUEST = "registration_request"; + public static final String SYM_REGISTRATION_REDIRECT = "registration_redirect"; public static final String SYM_NODE_CHANNEL_CTL = "node_channel_ctl"; public static final String SYM_NODE_GROUP_CHANNEL_WINDOW = "node_group_channel_window"; - public static final String SYM_PARAMETER = "parameter"; + public static final String SYM_NODE_HOST_CHANNEL_STATS = "node_host_channel_stats"; + + private static Set tablesWithPrefix; + + private static Set tablesWithoutPrefix; public static String[] NODE_TABLES = { SYM_NODE, SYM_NODE_SECURITY, SYM_NODE_IDENTITY }; + public static final Set getTables(String tablePrefix) { + if (tablesWithPrefix == null) { + tablesWithPrefix = populateAllTables(tablePrefix); + } + return tablesWithPrefix; + } + + public static final Set getTablesWithoutPrefix() { + if (tablesWithoutPrefix == null) { + tablesWithoutPrefix = populateAllTables(""); + } + return tablesWithoutPrefix; + } + + protected static Set populateAllTables(String tablePrefix) { + HashSet tables = new HashSet(); + tables.add(getTableName(tablePrefix, SYM_TRIGGER)); + tables.add(getTableName(tablePrefix, SYM_TRIGGER_ROUTER)); + tables.add(getTableName(tablePrefix, SYM_ROUTER)); + tables.add(getTableName(tablePrefix, SYM_TRANSFORM_TABLE)); + tables.add(getTableName(tablePrefix, SYM_TRANSFORM_COLUMN)); + tables.add(getTableName(tablePrefix, SYM_TRIGGER_HIST)); + tables.add(getTableName(tablePrefix, SYM_CHANNEL)); + tables.add(getTableName(tablePrefix, SYM_NODE_GROUP)); + tables.add(getTableName(tablePrefix, SYM_NODE_GROUP_LINK)); + tables.add(getTableName(tablePrefix, SYM_NODE)); + tables.add(getTableName(tablePrefix, SYM_NODE_HOST)); + tables.add(getTableName(tablePrefix, SYM_NODE_SECURITY)); + tables.add(getTableName(tablePrefix, SYM_NODE_IDENTITY)); + tables.add(getTableName(tablePrefix, SYM_NODE_SECURITY)); + tables.add(getTableName(tablePrefix, SYM_NODE_CHANNEL_CTL)); + tables.add(getTableName(tablePrefix, SYM_NODE_GROUP_CHANNEL_WINDOW)); + tables.add(getTableName(tablePrefix, SYM_PARAMETER)); + tables.add(getTableName(tablePrefix, SYM_NODE_HOST_CHANNEL_STATS)); + tables.add(getTableName(tablePrefix, SYM_NODE_HOST_STATS)); + tables.add(getTableName(tablePrefix, SYM_NODE_HOST_JOB_STATS)); + tables.add(getTableName(tablePrefix, SYM_REGISTRATION_REDIRECT)); + tables.add(getTableName(tablePrefix, SYM_REGISTRATION_REQUEST)); + tables.add(getTableName(tablePrefix, SYM_DATA)); + tables.add(getTableName(tablePrefix, SYM_DATA_GAP)); + tables.add(getTableName(tablePrefix, SYM_DATA_EVENT)); + tables.add(getTableName(tablePrefix, SYM_OUTGOING_BATCH)); + tables.add(getTableName(tablePrefix, SYM_INCOMING_BATCH)); + tables.add(getTableName(tablePrefix, SYM_LOCK)); + return tables; + } + public static final Set getTablesThatDoNotSync(String tablePrefix) { - Set tables = new HashSet(); + Set tables = new HashSet(2); tables.add(getTableName(tablePrefix, SYM_NODE_IDENTITY)); tables.add(getTableName(tablePrefix, SYM_NODE_CHANNEL_CTL)); return tables; } public static String getTableName(String tablePrefix, String tableSuffix) { - return String.format("%s_%s", tablePrefix, tableSuffix); + return String.format("%s%s%s", tablePrefix, StringUtils.isNotBlank(tablePrefix) ? "_" : "", + tableSuffix); } } \ No newline at end of file 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 48c1481227..404554b977 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 @@ -61,7 +61,6 @@ import org.jumpmind.util.FormatUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.dao.DataAccessException; import org.springframework.jdbc.support.lob.LobHandler; /* @@ -101,13 +100,12 @@ abstract public class AbstractSymmetricDialect implements ISymmetricDialect { protected List databaseUpgradeListeners = new ArrayList(); - public AbstractSymmetricDialect(IParameterService parameterService, - IDatabasePlatform platform) { + public AbstractSymmetricDialect(IParameterService parameterService, IDatabasePlatform platform) { this.parameterService = parameterService; this.platform = platform; - + log.info("The DbDialect being used is {}", this.getClass().getName()); - + ISqlTemplate sqlTemplate = this.platform.getSqlTemplate(); this.databaseMajorVersion = sqlTemplate.getDatabaseMajorVersion(); this.databaseMinorVersion = sqlTemplate.getDatabaseMinorVersion(); @@ -280,7 +278,7 @@ public void createTrigger(final StringBuilder sqlBuffer, final DataEventType dml String triggerSql = triggerText.createTriggerDDL(AbstractSymmetricDialect.this, dml, trigger, hist, channel, tablePrefix, table, defaultCatalog, defaultSchema); - + String postTriggerDml = createPostTriggerDDL(dml, trigger, hist, channel, tablePrefix, table); @@ -389,28 +387,23 @@ public void createTables(String xml) { platform.createDatabase(db, true, true); } - public boolean doesDatabaseNeedConfigured() { - return prefixConfigDatabase(readSymmetricSchemaFromXml()); - } - - protected boolean prefixConfigDatabase(Database targetTables) { + protected void prefixConfigDatabase(Database targetTables) { try { - String tblPrefix = parameterService.getTablePrefix() + "_"; + String prefix = parameterService.getTablePrefix() + + (StringUtils.isNotBlank(parameterService.getTablePrefix()) ? "_" : ""); Table[] tables = targetTables.getTables(); - boolean createTables = false; + boolean storesUpperCaseIdentifiers = platform.getSqlTemplate() + .isStoresUpperCaseIdentifiers(); for (Table table : tables) { - table.setName(tblPrefix + table.getName()); - fixForeignKeys(table, tblPrefix); - fixIndexes(table, tblPrefix); - if (platform.getTableFromCache(platform.getDefaultCatalog(), - platform.getDefaultSchema(), table.getName(), true) == null) { - createTables = true; - } + String name = String.format("%s%s", prefix, table.getName()); + table.setName(storesUpperCaseIdentifiers ? name.toUpperCase() : name.toLowerCase()); + fixForeignKeys(table, prefix, storesUpperCaseIdentifiers); + fixIndexes(table, prefix, storesUpperCaseIdentifiers); + fixColumnNames(table, storesUpperCaseIdentifiers); } - return createTables; } catch (CloneNotSupportedException e) { throw new RuntimeException(e); } @@ -434,7 +427,7 @@ protected boolean createTablesIfNecessary() { try { modelFromXml = merge(modelFromXml, readDatabaseFromXml(extraTablesXml)); } catch (Exception ex) { - log.error(ex.getMessage(),ex); + log.error(ex.getMessage(), ex); } } @@ -467,14 +460,14 @@ protected boolean createTablesIfNecessary() { String alterSql = builder.alterDatabase(modelFromDatabase, modelFromXml); - if (log.isDebugEnabled()) { - log.debug("Alter SQL Generated: {}", alterSql); - } + log.info("Alter SQL Generated: {}", alterSql); + new SqlScript(alterSql, getPlatform().getSqlTemplate(), true, delimiter, null) .execute(); for (IDatabaseUpgradeListener listener : databaseUpgradeListeners) { - String sql = listener.afterUpgrade(this, this.parameterService.getTablePrefix(), modelFromXml); + String sql = listener.afterUpgrade(this, + this.parameterService.getTablePrefix(), modelFromXml); new SqlScript(sql, getPlatform().getSqlTemplate(), true, delimiter, null) .execute(); } @@ -495,10 +488,7 @@ protected Database readSymmetricSchemaFromXml() { try { Database database = merge(readDatabaseFromXml("/symmetric-schema.xml"), readDatabaseFromXml("/console-schema.xml")); - - if (prefixConfigDatabase(database)) { - log.info("There are SymmetricDS tables missing. They will be auto created."); - } + prefixConfigDatabase(database); return database; } catch (RuntimeException ex) { throw ex; @@ -531,21 +521,37 @@ protected Database merge(Database... databases) { return database; } - protected void fixForeignKeys(Table table, String tablePrefix) - throws CloneNotSupportedException { + protected void fixColumnNames(Table table, boolean storesUpperCaseIdentifiers) { + Column[] columns = table.getColumns(); + for (Column column : columns) { + column.setName(storesUpperCaseIdentifiers ? column.getName().toUpperCase() : column + .getName().toLowerCase()); + } + } + + protected void fixForeignKeys(Table table, String tablePrefix, + boolean storesUpperCaseIdentifiers) throws CloneNotSupportedException { ForeignKey[] keys = table.getForeignKeys(); for (ForeignKey key : keys) { String prefixedName = tablePrefix + key.getForeignTableName(); + prefixedName = storesUpperCaseIdentifiers ? prefixedName.toUpperCase() : prefixedName + .toLowerCase(); key.setForeignTableName(prefixedName); - key.setName(tablePrefix + key.getName()); + + String keyName = tablePrefix + key.getName(); + keyName = storesUpperCaseIdentifiers ? keyName.toUpperCase() : keyName.toLowerCase(); + key.setName(keyName); } } - protected void fixIndexes(Table table, String tablePrefix) throws CloneNotSupportedException { + protected void fixIndexes(Table table, String tablePrefix, boolean storesUpperCaseIdentifiers) + throws CloneNotSupportedException { IIndex[] indexes = table.getIndices(); if (indexes != null) { for (IIndex index : indexes) { String prefixedName = tablePrefix + index.getName(); + prefixedName = storesUpperCaseIdentifiers ? prefixedName.toUpperCase() + : prefixedName.toLowerCase(); index.setName(prefixedName); } } @@ -578,35 +584,37 @@ public String getProductVersion() { public boolean supportsTransactionViews() { return supportsTransactionViews; } - + public long insertWithGeneratedKey(String sql, SequenceIdentifier sequenceId) { return insertWithGeneratedKey(sql, sequenceId, null, null); } - public long insertWithGeneratedKey(final String sql, final SequenceIdentifier identifier, Object... args) { - return platform.getSqlTemplate().insertWithGeneratedKey(sql, getSequenceKeyName(identifier), getSequenceKeyName(identifier), args, null); + public long insertWithGeneratedKey(final String sql, final SequenceIdentifier identifier, + Object... args) { + return platform.getSqlTemplate().insertWithGeneratedKey(sql, + getSequenceKeyName(identifier), getSequenceKeyName(identifier), args, null); } public String getSequenceName(SequenceIdentifier identifier) { switch (identifier) { - case OUTGOING_BATCH: - return "sym_outgoing_batch_batch_id"; - case DATA: - return "sym_data_data_id"; - case TRIGGER_HIST: - return "sym_trigger_his_ger_hist_id"; + case OUTGOING_BATCH: + return "sym_outgoing_batch_batch_id"; + case DATA: + return "sym_data_data_id"; + case TRIGGER_HIST: + return "sym_trigger_his_ger_hist_id"; } return null; } public String getSequenceKeyName(SequenceIdentifier identifier) { switch (identifier) { - case OUTGOING_BATCH: - return "batch_id"; - case DATA: - return "data_id"; - case TRIGGER_HIST: - return "trigger_hist_id"; + case OUTGOING_BATCH: + return "batch_id"; + case DATA: + return "data_id"; + case TRIGGER_HIST: + return "trigger_hist_id"; } return null; } @@ -674,10 +682,16 @@ public void truncateTable(String tableName) { int tryCount = 5; while (!success && tryCount > 0) { try { - platform.getSqlTemplate().update("truncate table " + quote + tableName + quote); - success = true; - } catch (DataAccessException ex) { - log.warn(ex.getMessage(),ex); + Table table = platform.getTableFromCache(tableName, false); + if (table != null) { + platform.getSqlTemplate().update( + String.format("truncate table %s%s%s", quote, table.getName(), quote)); + success = true; + } else { + throw new RuntimeException(String.format("Could not find %s to trunate", tableName)); + } + } catch (SqlException ex) { + log.warn(ex.getMessage(), ex); AppUtils.sleep(5000); tryCount--; } @@ -710,7 +724,7 @@ public long getDatabaseTime() { return this.platform.getSqlTemplate().queryForObject(sql, java.util.Date.class) .getTime(); } catch (Exception ex) { - log.error(ex.getMessage(),ex); + log.error(ex.getMessage(), ex); return System.currentTimeMillis(); } } @@ -784,13 +798,13 @@ protected void initLobHandler() { public TriggerTemplate getTriggerText() { return triggerText; } - + protected void close(ISqlTransaction transaction) { if (transaction != null) { transaction.close(); } } - + public String getTablePrefix() { return parameterService.getTablePrefix(); } diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/db/ISymmetricDialect.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/db/ISymmetricDialect.java index 297b5882a3..5d291df3a0 100644 --- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/db/ISymmetricDialect.java +++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/db/ISymmetricDialect.java @@ -56,14 +56,6 @@ public void removeTrigger(StringBuilder sqlBuffer, String catalogName, String sc public boolean doesTriggerExist(String catalogName, String schema, String tableName, String triggerName); - /* - * Check to see if the database is configured for symmetric already, or if - * it needs configured. - * - * @return true if configuration tables need to be created. - */ - public boolean doesDatabaseNeedConfigured(); - public void initTablesAndFunctions(); public IDatabasePlatform getPlatform(); diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/db/TriggerTemplate.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/db/TriggerTemplate.java index 1c6922bd5d..34481ab0f0 100644 --- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/db/TriggerTemplate.java +++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/db/TriggerTemplate.java @@ -324,10 +324,8 @@ public String replaceTemplateVariables(ISymmetricDialect dialect, DataEventType ddl = eval(columnString.isBlobClob, "containsBlobClobColumns", ddl); // some column templates need tableName and schemaName - ddl = FormatUtils.replace("tableName", history == null ? quote(trigger.getSourceTableName(), dialect) - : quote(history.getSourceTableName(), dialect), ddl); - ddl = FormatUtils.replace("schemaName", - history == null ? getSourceTablePrefix(trigger, dialect) : getSourceTablePrefix(history, dialect), ddl); + ddl = FormatUtils.replace("tableName", quote(table.getName(), dialect), ddl); + ddl = FormatUtils.replace("schemaName", table.getQualifiedTablePrefix(null), ddl); columns = table.getPrimaryKeyColumns(); ddl = FormatUtils.replace( diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/model/TriggerHistory.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/model/TriggerHistory.java index ebb507dda7..c0f1a65715 100644 --- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/model/TriggerHistory.java +++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/model/TriggerHistory.java @@ -108,7 +108,7 @@ public TriggerHistory(Table table, Trigger trigger) { public TriggerHistory(Table table, Trigger trigger, TriggerReBuildReason reason) { this(); this.lastTriggerBuildReason = reason; - this.sourceTableName = table != null ? table.getName() : trigger.getSourceTableName(); + this.sourceTableName = trigger.getSourceTableName(); this.columnNames = getCommaDeliminatedColumns(trigger.orderColumnsForTable(table)); this.sourceSchemaName = trigger.getSourceSchemaName(); this.sourceCatalogName = trigger.getSourceCatalogName(); diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/AbstractService.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/AbstractService.java index 4308948ed5..1a9cfb0b01 100644 --- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/AbstractService.java +++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/AbstractService.java @@ -25,11 +25,13 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; +import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.exception.ExceptionUtils; -import org.jumpmind.db.sql.ISqlMap; import org.jumpmind.db.sql.ISqlTemplate; import org.jumpmind.db.sql.ISqlTransaction; +import org.jumpmind.symmetric.common.TableConstants; import org.jumpmind.symmetric.db.ISymmetricDialect; import org.jumpmind.symmetric.service.IParameterService; import org.jumpmind.symmetric.service.IService; @@ -56,7 +58,7 @@ public AbstractService(IParameterService parameterService, ISymmetricDialect sym this.tablePrefix = parameterService.getTablePrefix(); this.sqlTemplate = symmetricDialect.getPlatform().getSqlTemplate(); } - + protected void setSqlMap(ISqlMap sqlMap) { this.sqlMap = sqlMap; } @@ -89,12 +91,18 @@ protected SQLException unwrapSqlException(Throwable e) { } protected Map createSqlReplacementTokens() { - return createSqlReplacementTokens(this.tablePrefix); + return createSqlReplacementTokens(this.tablePrefix, symmetricDialect.getPlatform() + .getPlatformInfo().getIdentifierQuoteString()); } - protected static Map createSqlReplacementTokens(String tablePrefix) { + protected static Map createSqlReplacementTokens(String tablePrefix, + String quotedIdentifier) { Map map = new HashMap(); - map.put("prefixName", tablePrefix); + Set tables = TableConstants.getTablesWithoutPrefix(); + for (String table : tables) { + map.put(table, String.format("%s%s%s", tablePrefix, + StringUtils.isNotBlank(tablePrefix) ? "_" : "", table)); + } return map; } diff --git a/symmetric/symmetric-db/src/main/java/org/jumpmind/db/sql/AbstractSqlMap.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/AbstractSqlMap.java similarity index 87% rename from symmetric/symmetric-db/src/main/java/org/jumpmind/db/sql/AbstractSqlMap.java rename to symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/AbstractSqlMap.java index a4b7ae9133..28b2a6de58 100644 --- a/symmetric/symmetric-db/src/main/java/org/jumpmind/db/sql/AbstractSqlMap.java +++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/AbstractSqlMap.java @@ -1,4 +1,4 @@ -package org.jumpmind.db.sql; +package org.jumpmind.symmetric.service.impl; import java.util.HashMap; import java.util.Map; @@ -32,21 +32,20 @@ protected void putSql(String key, String sql) { } public String getSql(String... keys) { + StringBuilder sqlBuffer = new StringBuilder(); if (keys != null) { if (keys.length > 1) { - StringBuilder sqlBuffer = new StringBuilder(); for (String key : keys) { if (key != null) { String value = sql.get(key); sqlBuffer.append(value == null ? key : value); } } - return sqlBuffer.toString(); } else if (keys.length == 1) { - return sql.get(keys[0]); + sqlBuffer.append(sql.get(keys[0])); } } - return null; + return sqlBuffer.toString(); } } diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/AcknowledgeServiceSqlMap.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/AcknowledgeServiceSqlMap.java index b3db02210b..c0f03bd230 100644 --- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/AcknowledgeServiceSqlMap.java +++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/AcknowledgeServiceSqlMap.java @@ -3,7 +3,6 @@ import java.util.Map; import org.jumpmind.db.platform.IDatabasePlatform; -import org.jumpmind.db.sql.AbstractSqlMap; public class AcknowledgeServiceSqlMap extends AbstractSqlMap { @@ -11,7 +10,7 @@ public AcknowledgeServiceSqlMap(IDatabasePlatform platform, Map replacementTokens) { super(platform, replacementTokens); putSql("selectDataIdSql", - "select data_id from $(prefixName)_data_event b where batch_id = ? order by data_id "); + "select data_id from $(data_event) b where batch_id = ? order by data_id "); } } \ No newline at end of file diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/ClusterServiceSqlMap.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/ClusterServiceSqlMap.java index 95da3175e3..7f154daf3b 100644 --- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/ClusterServiceSqlMap.java +++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/ClusterServiceSqlMap.java @@ -3,7 +3,6 @@ import java.util.Map; import org.jumpmind.db.platform.IDatabasePlatform; -import org.jumpmind.db.sql.AbstractSqlMap; public class ClusterServiceSqlMap extends AbstractSqlMap { @@ -11,19 +10,19 @@ public ClusterServiceSqlMap(IDatabasePlatform platform, Map repl super(platform, replacementTokens); putSql("aquireLockSql" ,"" + -"update $(prefixName)_lock set locking_server_id=?, lock_time=? where " + +"update $(lock) set locking_server_id=?, lock_time=? where " + " lock_action=? and (lock_time is null or lock_time < ? or locking_server_id=?) " ); putSql("releaseLockSql" ,"" + -"update $(prefixName)_lock set locking_server_id=null, lock_time=null, last_lock_time=current_timestamp, last_locking_server_id=? " + +"update $(lock) set locking_server_id=null, lock_time=null, last_lock_time=current_timestamp, last_locking_server_id=? " + " where lock_action=? and locking_server_id=? " ); putSql("insertLockSql" ,"" + -"insert into $(prefixName)_lock (lock_action) values(?) " ); +"insert into $(lock) (lock_action) values(?) " ); putSql("findLocksSql" ,"" + "select lock_action, locking_server_id, lock_time, last_locking_server_id, last_lock_time " + -" from $(prefixName)_lock " ); +" from $(lock) " ); } diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/ConfigurationServiceSqlMap.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/ConfigurationServiceSqlMap.java index 09f48ae22a..7ded2aeca0 100644 --- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/ConfigurationServiceSqlMap.java +++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/ConfigurationServiceSqlMap.java @@ -3,95 +3,98 @@ import java.util.Map; import org.jumpmind.db.platform.IDatabasePlatform; -import org.jumpmind.db.sql.AbstractSqlMap; public class ConfigurationServiceSqlMap extends AbstractSqlMap { - public ConfigurationServiceSqlMap(IDatabasePlatform platform, Map replacementTokens) { + public ConfigurationServiceSqlMap(IDatabasePlatform platform, + Map replacementTokens) { super(platform, replacementTokens); - putSql("selectDataEventActionsByIdSql" ,"" + -"select data_event_action from $(prefixName)_node_group_link where " + -" source_node_group_id = ? and target_node_group_id = ? " ); + // @formatter:off + putSql("selectDataEventActionsByIdSql", + " select data_event_action from $(node_group_link) where " + + " source_node_group_id = ? and target_node_group_id = ? "); - putSql("groupsLinksSql" ,"" + -"select source_node_group_id, target_node_group_id, data_event_action from " + -" $(prefixName)_node_group_link " ); + putSql("groupsLinksSql", "" + + "select source_node_group_id, target_node_group_id, data_event_action from " + + " $(node_group_link) "); - putSql("updateNodeGroupSql" ,"" + -"update $(prefixName)_node_group set description=? where " + -" node_group_id=? " ); + putSql("updateNodeGroupSql", "" + "update $(node_group) set description=? where " + + " node_group_id=? "); - putSql("insertNodeGroupSql" ,"" + -"insert into $(prefixName)_node_group " + -" (description, node_group_id) values(?,?) " ); + putSql("insertNodeGroupSql", "" + "insert into $(node_group) " + + " (description, node_group_id) values(?,?) "); - putSql("updateNodeGroupLinkSql" ,"" + -"update $(prefixName)_node_group_link set data_event_action=? where " + -" source_node_group_id=? and target_node_group_id=? " ); + putSql("updateNodeGroupLinkSql", "" + + "update $(node_group_link) set data_event_action=? where " + + " source_node_group_id=? and target_node_group_id=? "); - putSql("insertNodeGroupLinkSql" ,"" + -"insert into $(prefixName)_node_group_link " + -" (data_event_action, source_node_group_id, target_node_group_id) values(?,?,?) " ); + putSql("insertNodeGroupLinkSql", + "" + + "insert into $(node_group_link) " + + " (data_event_action, source_node_group_id, target_node_group_id) values(?,?,?) "); - putSql("selectNodeGroupsSql" ,"" + -"select node_group_id, description from $(prefixName)_node_group " ); + putSql("selectNodeGroupsSql", "" + + "select node_group_id, description from $(node_group) "); - putSql("groupsLinksForSql" ,"" + -"select source_node_group_id, target_node_group_id, data_event_action from " + -" $(prefixName)_node_group_link where source_node_group_id = ? " ); + putSql("groupsLinksForSql", + "select source_node_group_id, target_node_group_id, data_event_action from " + + " $(node_group_link) where source_node_group_id = ? "); - putSql("isChannelInUseSql" ,"" + -"select count(*) from $(prefixName)_trigger where channel_id = ? " ); + putSql("isChannelInUseSql", "select count(*) from $(trigger) where channel_id = ? "); - putSql("selectChannelsSql" ,"" + -"select c.channel_id, nc.node_id, nc.ignore_enabled, nc.suspend_enabled, c.processing_order, " + -" c.max_batch_size, c.enabled, c.max_batch_to_send, c.max_data_to_route, c.use_old_data_to_route, c.use_row_data_to_route, c.use_pk_data_to_route, c.contains_big_lob, c.batch_algorithm, nc.last_extract_time, c.extract_period_millis " + -" from $(prefixName)_channel c left outer join " + -" $(prefixName)_node_channel_ctl nc on c.channel_id = nc.channel_id and nc.node_id = ? " + -" order by c.processing_order asc, c.channel_id " ); + putSql("selectChannelsSql", + "" + + "select c.channel_id, nc.node_id, nc.ignore_enabled, nc.suspend_enabled, c.processing_order, " + + " c.max_batch_size, c.enabled, c.max_batch_to_send, c.max_data_to_route, c.use_old_data_to_route, c.use_row_data_to_route, c.use_pk_data_to_route, c.contains_big_lob, c.batch_algorithm, nc.last_extract_time, c.extract_period_millis " + + " from $(channel) c left outer join " + + " $(node_channel_ctl) nc on c.channel_id = nc.channel_id and nc.node_id = ? " + + " order by c.processing_order asc, c.channel_id "); - putSql("selectNodeChannelControlLastExtractTimeSql" ,"" + -"select channel_id, last_extract_time " + -" from $(prefixName)_node_channel_ctl where node_id = ? " + -" order by channel_id " ); + putSql("selectNodeChannelControlLastExtractTimeSql", "" + + "select channel_id, last_extract_time " + + " from $(node_channel_ctl) where node_id = ? " + + " order by channel_id "); - putSql("insertChannelSql" ,"" + -"insert into $(prefixName)_channel (channel_id, processing_order, max_batch_size, " + -" max_batch_to_send, max_data_to_route, use_old_data_to_route, use_row_data_to_route, use_pk_data_to_route, contains_big_lob, enabled, batch_algorithm, description, extract_period_millis) " + -" values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, null,? ) " ); + putSql("insertChannelSql", + "" + + "insert into $(channel) (channel_id, processing_order, max_batch_size, " + + " max_batch_to_send, max_data_to_route, use_old_data_to_route, use_row_data_to_route, use_pk_data_to_route, contains_big_lob, enabled, batch_algorithm, description, extract_period_millis) " + + " values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, null,? ) "); - putSql("updateChannelSql" ,"" + -"update $(prefixName)_channel set processing_order=?, max_batch_size=?, " + -" max_batch_to_send=?, max_data_to_route=?, use_old_data_to_route=?, use_row_data_to_route=?, " + -" use_pk_data_to_route=?, contains_big_lob=?, enabled=?, batch_algorithm=?, extract_period_millis=? where channel_id=? " ); + putSql("updateChannelSql", + "" + + "update $(channel) set processing_order=?, max_batch_size=?, " + + " max_batch_to_send=?, max_data_to_route=?, use_old_data_to_route=?, use_row_data_to_route=?, " + + " use_pk_data_to_route=?, contains_big_lob=?, enabled=?, batch_algorithm=?, extract_period_millis=? where channel_id=? "); - putSql("deleteNodeGroupLinkSql" ,"" + -"delete from $(prefixName)_node_group_link where source_node_group_id=? and target_node_group_id=? " ); + putSql("deleteNodeGroupLinkSql", + "" + + "delete from $(node_group_link) where source_node_group_id=? and target_node_group_id=? "); - putSql("deleteNodeGroupSql" ,"" + -"delete from $(prefixName)_node_group where node_group_id=? " ); + putSql("deleteNodeGroupSql", "" + "delete from $(node_group) where node_group_id=? "); - putSql("deleteChannelSql" ,"" + -"delete from $(prefixName)_channel where channel_id=? " ); + putSql("deleteChannelSql", "" + "delete from $(channel) where channel_id=? "); - putSql("deleteNodeChannelSql" ,"" + -"delete from $(prefixName)_node_channel_ctl where channel_id=? " ); + putSql("deleteNodeChannelSql", "" + "delete from $(node_channel_ctl) where channel_id=? "); - putSql("selectNodeGroupChannelWindowSql" ,"" + -"select node_group_id, channel_id, start_time, end_time, enabled " + -" from $(prefixName)_node_group_channel_window where node_group_id=? and channel_id=? " ); + putSql("selectNodeGroupChannelWindowSql", + "" + + "select node_group_id, channel_id, start_time, end_time, enabled " + + " from $(node_group_channel_window) where node_group_id=? and channel_id=? "); - putSql("insertNodeChannelControlSql" ,"" + -"insert into $(prefixName)_node_channel_ctl (node_id, channel_id, " + -" suspend_enabled, ignore_enabled,last_extract_time) values (?, ?, ?, ?, ?) " ); + putSql("insertNodeChannelControlSql", "" + + "insert into $(node_channel_ctl) (node_id, channel_id, " + + " suspend_enabled, ignore_enabled,last_extract_time) values (?, ?, ?, ?, ?) "); - putSql("updateNodeChannelControlSql" ,"" + -"update $(prefixName)_node_channel_ctl set " + -" suspend_enabled=?, ignore_enabled=?, last_extract_time=? where node_id=? and channel_id=? " ); + putSql("updateNodeChannelControlSql", + "" + + "update $(node_channel_ctl) set " + + " suspend_enabled=?, ignore_enabled=?, last_extract_time=? where node_id=? and channel_id=? "); - putSql("getRegistrationRedirectSql" ,"" + - "select registrant_external_id, registration_node_id from $(prefixName)_registration_redirect " ); + putSql("getRegistrationRedirectSql", + "" + + "select registrant_external_id, registration_node_id from $(registration_redirect) "); } diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/DataExtractorService.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/DataExtractorService.java index 0558359b47..ed8d3b46ef 100644 --- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/DataExtractorService.java +++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/DataExtractorService.java @@ -45,7 +45,7 @@ import org.jumpmind.symmetric.io.data.IDataReader; import org.jumpmind.symmetric.io.data.IDataWriter; import org.jumpmind.symmetric.io.data.reader.ExtractDataReader; -import org.jumpmind.symmetric.io.data.reader.IExtractBatchSource; +import org.jumpmind.symmetric.io.data.reader.IExtractWriterSource; import org.jumpmind.symmetric.io.data.reader.ProtocolDataReader; import org.jumpmind.symmetric.io.data.transform.TransformPoint; import org.jumpmind.symmetric.io.data.transform.TransformTable; @@ -344,7 +344,7 @@ public void extract(Node targetNode, IOutgoingTransport targetTransport, long ts = System.currentTimeMillis(); IDataReader dataReader = new ExtractDataReader( - symmetricDialect.getPlatform(), new SelectFromSymData(currentBatch, + symmetricDialect.getPlatform(), new SelectFromSymDataSource(currentBatch, targetNode)); new DataProcessor(dataReader, transformExtractWriter).process(); extractTimeInMs = System.currentTimeMillis()-ts; @@ -487,7 +487,7 @@ protected Table lookupAndOrderColumnsAccordingToTriggerHistory(String routerId, return currentTable; } - class SelectFromSymData implements IExtractBatchSource { + class SelectFromSymDataSource implements IExtractWriterSource { private Batch batch; @@ -501,7 +501,7 @@ class SelectFromSymData implements IExtractBatchSource { private Node targetNode; - public SelectFromSymData(OutgoingBatch outgoingBatch, Node targetNode) { + public SelectFromSymDataSource(OutgoingBatch outgoingBatch, Node targetNode) { this.batch = new Batch(outgoingBatch.getBatchId(), outgoingBatch.getChannelId(), symmetricDialect.getBinaryEncoding(), outgoingBatch.getNodeId()); this.targetNode = targetNode; @@ -585,7 +585,7 @@ public void close() { } - class SelectFromTableSource implements IExtractBatchSource { + class SelectFromTableSource implements IExtractWriterSource { private Batch batch; diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/DataServiceSqlMap.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/DataServiceSqlMap.java index 02a243771a..d714b4de69 100644 --- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/DataServiceSqlMap.java +++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/DataServiceSqlMap.java @@ -3,7 +3,6 @@ import java.util.Map; import org.jumpmind.db.platform.IDatabasePlatform; -import org.jumpmind.db.sql.AbstractSqlMap; public class DataServiceSqlMap extends AbstractSqlMap { @@ -13,56 +12,56 @@ public DataServiceSqlMap(IDatabasePlatform platform, Map replace putSql("selectEventDataToExtractSql", "" + "select d.data_id, d.table_name, d.event_type, d.row_data, d.pk_data, d.old_data, " - + " d.create_time, d.trigger_hist_id, d.channel_id, d.transaction_id, d.source_node_id, d.external_data, e.router_id from $(prefixName)_data d inner join " - + " $(prefixName)_data_event e on d.data_id = e.data_id inner join $(prefixName)_outgoing_batch o on o.batch_id=e.batch_id " + + " d.create_time, d.trigger_hist_id, d.channel_id, d.transaction_id, d.source_node_id, d.external_data, e.router_id from $(data) d inner join " + + " $(data_event) e on d.data_id = e.data_id inner join $(outgoing_batch) o on o.batch_id=e.batch_id " + " where o.batch_id = ? "); putSql("selectEventDataIdsSql", "" - + "select d.data_id from $(prefixName)_data d inner join " - + " $(prefixName)_data_event e on d.data_id = e.data_id inner join $(prefixName)_outgoing_batch o on o.batch_id=e.batch_id " + + "select d.data_id from $(data) d inner join " + + " $(data_event) e on d.data_id = e.data_id inner join $(outgoing_batch) o on o.batch_id=e.batch_id " + " where o.batch_id = ? "); putSql("selectMaxDataEventDataIdSql", "" - + "select max(data_id) from $(prefixName)_data_event "); + + "select max(data_id) from $(data_event) "); putSql("checkForAndUpdateMissingChannelIdSql", "" - + "update $(prefixName)_data set channel_id=? " + + "update $(data) set channel_id=? " + " where " + " data_id >= ? and data_id <= ? and " - + " channel_id not in (select channel_id from $(prefixName)_channel) "); + + " channel_id not in (select channel_id from $(channel)) "); putSql("countDataInRangeSql", "" - + "select count(*) from $(prefixName)_data where data_id > ? and data_id < ? "); + + "select count(*) from $(data) where data_id > ? and data_id < ? "); putSql("insertIntoDataSql", "" - + "insert into $(prefixName)_data (data_id, table_name, event_type, row_data, pk_data, " + + "insert into $(data) (data_id, table_name, event_type, row_data, pk_data, " + " old_data, trigger_hist_id, channel_id, create_time) values(null, ?, ?, ?, ?, ?, ?, ?, current_timestamp) "); putSql("insertIntoDataEventSql", "" - + "insert into $(prefixName)_data_event (data_id, batch_id, router_id, create_time) values(?, ?, ?, current_timestamp) "); + + "insert into $(data_event) (data_id, batch_id, router_id, create_time) values(?, ?, ?, current_timestamp) "); putSql("findDataEventCreateTimeSql", "" - + "select max(create_time) from $(prefixName)_data_event where data_id=? "); + + "select max(create_time) from $(data_event) where data_id=? "); putSql("findDataCreateTimeSql", "" - + "select create_time from $(prefixName)_data where data_id=? "); + + "select create_time from $(data) where data_id=? "); putSql("findDataGapsByStatusSql", "" - + "select start_id, end_id, create_time from $(prefixName)_data_gap where status=? order by start_id asc "); + + "select start_id, end_id, create_time from $(data_gap) where status=? order by start_id asc "); putSql("insertDataGapSql", "" - + "insert into $(prefixName)_data_gap (status, last_update_hostname, start_id, end_id, last_update_time, create_time) values(?, ?, ?, ?, current_timestamp, current_timestamp) "); + + "insert into $(data_gap) (status, last_update_hostname, start_id, end_id, last_update_time, create_time) values(?, ?, ?, ?, current_timestamp, current_timestamp) "); putSql("updateDataGapSql", "" - + "update $(prefixName)_data_gap set status=?, last_update_hostname=?, last_update_time=current_timestamp where start_id=? and end_id=? "); + + "update $(data_gap) set status=?, last_update_hostname=?, last_update_time=current_timestamp where start_id=? and end_id=? "); - putSql("selectMaxDataIdSql", "" + "select max(data_id) from $(prefixName)_data "); + putSql("selectMaxDataIdSql", "" + "select max(data_id) from $(data) "); } diff --git a/symmetric/symmetric-db/src/main/java/org/jumpmind/db/sql/ISqlMap.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/ISqlMap.java similarity index 63% rename from symmetric/symmetric-db/src/main/java/org/jumpmind/db/sql/ISqlMap.java rename to symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/ISqlMap.java index 11dcfc110d..e954e52323 100644 --- a/symmetric/symmetric-db/src/main/java/org/jumpmind/db/sql/ISqlMap.java +++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/ISqlMap.java @@ -1,4 +1,4 @@ -package org.jumpmind.db.sql; +package org.jumpmind.symmetric.service.impl; public interface ISqlMap { diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/IncomingBatchServiceSqlMap.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/IncomingBatchServiceSqlMap.java index 5eaabe564a..3ab3558ded 100644 --- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/IncomingBatchServiceSqlMap.java +++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/IncomingBatchServiceSqlMap.java @@ -3,7 +3,6 @@ import java.util.Map; import org.jumpmind.db.platform.IDatabasePlatform; -import org.jumpmind.db.sql.AbstractSqlMap; public class IncomingBatchServiceSqlMap extends AbstractSqlMap { @@ -13,10 +12,10 @@ public IncomingBatchServiceSqlMap(IDatabasePlatform platform, Map replacementTokens) { + public NodeServiceSqlMap(IDatabasePlatform platform, Map replacementTokens) { super(platform, replacementTokens); - putSql("findSymmetricVersionSql" ,"" + -"select symmetric_version from $(prefixName)_node where node_id in (select node_id from $(prefixName)_node_identity) " ); + putSql("findSymmetricVersionSql", + "select symmetric_version from $(node) " + + " where node_id in (select node_id from $(node_identity)) "); - putSql("insertNodeIdentitySql" ,"" + -"insert into $(prefixName)_node_identity values(?) " ); + putSql("insertNodeIdentitySql", "" + "insert into $(node_identity) values(?) "); - putSql("doesNodeGroupExistSql" ,"" + -"select count(*) from $(prefixName)_node_group where node_group_id=? " ); + putSql("doesNodeGroupExistSql", "" + + "select count(*) from $(node_group) where node_group_id=? "); - putSql("insertNodeGroupSql" ,"" + -"insert into $(prefixName)_node_group (description, node_group_id) values(?, ?) " ); + putSql("insertNodeGroupSql", + "" + + "insert into $(node_group) (description, node_group_id) values(?, ?) "); - putSql("nodeChannelControlIgnoreSql" ,"" + -"update $(prefixName)_node_channel_ctl set ignore_enabled=? where node_id=? and " + -" channel_id=? " ); + putSql("nodeChannelControlIgnoreSql", + "" + + "update $(node_channel_ctl) set ignore_enabled=? where node_id=? and " + + " channel_id=? "); - putSql("insertNodeChannelControlSql" ,"" + -"insert into $(prefixName)_node_channel_ctl " + -" (node_id,channel_id,ignore_enabled,suspend_enabled) values(?,?,?,?) " ); + putSql("insertNodeChannelControlSql", "" + + "insert into $(node_channel_ctl) " + + " (node_id,channel_id,ignore_enabled,suspend_enabled) values(?,?,?,?) "); - putSql("insertNodeSql" ,"" + -"insert into $(prefixName)_node (node_id, node_group_id, external_id, created_at_node_id, timezone_offset, heartbeat_time) values (?, ?, ?, ?, ?, current_timestamp) " ); + putSql("insertNodeSql", + "" + + "insert into $(node) (node_id, node_group_id, external_id, created_at_node_id, timezone_offset, heartbeat_time) values (?, ?, ?, ?, ?, current_timestamp) "); - putSql("updateNodeSql" ,"" + -"update $(prefixName)_node set node_group_id=?, external_id=?, database_type=?, " + -" database_version=?, schema_version=?, symmetric_version=?, sync_url=?, heartbeat_time=?, " + -" sync_enabled=?, timezone_offset=?, batch_to_send_count=?, batch_in_error_count=?, created_at_node_id=?, deployment_type=? where node_id = ? " ); - - putSql("findNodeSql" ,"" + -"where node_id = ? " ); - - putSql("findNodeByExternalIdSql" ,"" + -"where node_group_id = ? and external_id = ? order by node_id " ); - - putSql("findEnabledNodesFromNodeGroupSql" ,"" + -"where node_group_id = ? and sync_enabled=1 order by node_id " ); - - putSql("findNodesWithOpenRegistrationSql" ,"" + -"where node_id in (select node_id from $(prefixName)_node_security where registration_enabled=1) " ); - - putSql("findNodesCreatedByMeSql" ,"" + -"where created_at_node_id=? and created_at_node_id != node_id " ); - - putSql("findNodeSecuritySql" ,"" + -"select node_id, node_password, registration_enabled, registration_time, " + -" initial_load_enabled, initial_load_time, created_at_node_id from $(prefixName)_node_security where " + -" node_id = ? " ); - - putSql("selectExternalIdsSql" ,"" + -"select distinct(external_id) from $(prefixName)_node where sync_enabled=1 order by external_id asc " ); - - putSql("findAllNodeSecuritySql" ,"" + -"select node_id, node_password, registration_enabled, registration_time, " + -" initial_load_enabled, initial_load_time, created_at_node_id from $(prefixName)_node_security " ); - - putSql("deleteNodeSecuritySql" ,"" + -"delete from $(prefixName)_node_security where node_id = ? " ); - - putSql("deleteNodeSql" ,"" + -"delete from $(prefixName)_node where node_id = ? " ); - - putSql("findNodeIdentitySql" ,"" + -"inner join $(prefixName)_node_identity i on c.node_id = " + -" i.node_id " ); - - putSql("deleteNodeIdentitySql" ,"" + -"delete from $(prefixName)_node_identity " ); - - putSql("isNodeRegisteredSql" ,"" + -"select count(*) from $(prefixName)_node_security s inner join " + -" $(prefixName)_node n on n.node_id=s.node_id where n.node_group_id=? and " + -" n.external_id=? and s.registration_time is not null and s.registration_enabled=0 " ); - - putSql("findNodesWhoTargetMeSql" ,"" + -"inner join $(prefixName)_node_group_link d on " + -" c.node_group_id = d.source_node_group_id where d.target_node_group_id = ? and " + -" d.data_event_action = ? " ); - - putSql("findNodesWhoITargetSql" ,"" + -"inner join $(prefixName)_node_group_link d on " + -" c.node_group_id = d.target_node_group_id where d.source_node_group_id = ? and " + -" d.data_event_action = ? " ); - - putSql("selectNodeHostPrefixSql" ,"" + -"select node_id, host_name, ip_address, os_user, os_name, os_arch, os_version, available_processors, " + -" free_memory_bytes, total_memory_bytes, max_memory_bytes, java_version, java_vendor, symmetric_version, " + -" timezone_offset, heartbeat_time, last_restart_time, create_time from $(prefixName)_node_host " ); - - putSql("selectNodeHostByNodeIdSql" ,"" + -"where node_id=? " ); - - putSql("selectNodePrefixSql" ,"" + -"select c.node_id, c.node_group_id, c.external_id, c.sync_enabled, c.sync_url, " + -" c.schema_version, c.database_type, c.database_version, c.symmetric_version, c.created_at_node_id, c.heartbeat_time, c.timezone_offset, c.batch_to_send_count, c.batch_in_error_count, c.deployment_type from " + -" $(prefixName)_node c " ); - - putSql("updateNodeSecuritySql" ,"" + -"update $(prefixName)_node_security set node_password = ?, registration_enabled = ?, " + -" registration_time = ?, initial_load_enabled = ?, initial_load_time = ?, created_at_node_id = ? where node_id = ? " ); - - putSql("insertNodeSecuritySql" ,"" + -"insert into $(prefixName)_node_security (node_id, node_password, created_at_node_id) values (?, ?, ?) " ); - - putSql("getDataLoadStatusSql" ,"" + -"select initial_load_enabled, initial_load_time from $(prefixName)_node_security ns, " + -" $(prefixName)_node_identity ni where ns.node_id=ni.node_id " ); - - putSql("insertNodeHostSql" ,"" + -"insert into $(prefixName)_node_host " + -" (ip_address, os_user, os_name, os_arch, os_version, available_processors, free_memory_bytes, total_memory_bytes, max_memory_bytes, java_version, java_vendor, symmetric_version, timezone_offset, heartbeat_time, last_restart_time, create_time, node_id, host_name) " + -" values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, current_timestamp,?,?) " ); - - putSql("updateNodeHostSql" ,"" + -"update $(prefixName)_node_host set " + -" ip_address=?, os_user=?, os_name=?, os_arch=?, os_version=?, available_processors=?, free_memory_bytes=?, " + -" total_memory_bytes=?, max_memory_bytes=?, java_version=?, java_vendor=?, symmetric_version=?, timezone_offset=?, heartbeat_time=?, " + -" last_restart_time=? where node_id=? and host_name=? " ); - - putSql("findOfflineNodesSql" ,"" + -"where sync_enabled = 1 and node_id != ? and created_at_node_id = ? " ); + putSql("updateNodeSql", + "" + + "update $(node) set node_group_id=?, external_id=?, database_type=?, " + + " database_version=?, schema_version=?, symmetric_version=?, sync_url=?, heartbeat_time=?, " + + " sync_enabled=?, timezone_offset=?, batch_to_send_count=?, batch_in_error_count=?, created_at_node_id=?, deployment_type=? where node_id = ? "); + + putSql("findNodeSql", "" + "where node_id = ? "); + + putSql("findNodeByExternalIdSql", "" + + "where node_group_id = ? and external_id = ? order by node_id "); + + putSql("findEnabledNodesFromNodeGroupSql", "" + + "where node_group_id = ? and sync_enabled=1 order by node_id "); + + putSql("findNodesWithOpenRegistrationSql", + "" + + "where node_id in (select node_id from $(node_security) where registration_enabled=1) "); + + putSql("findNodesCreatedByMeSql", "" + + "where created_at_node_id=? and created_at_node_id != node_id "); + + putSql("findNodeSecuritySql", + "" + + "select node_id, node_password, registration_enabled, registration_time, " + + " initial_load_enabled, initial_load_time, created_at_node_id from $(node_security) where " + + " node_id = ? "); + + putSql("selectExternalIdsSql", + "" + + "select distinct(external_id) from $(node) where sync_enabled=1 order by external_id asc "); + + putSql("findAllNodeSecuritySql", + "" + + "select node_id, node_password, registration_enabled, registration_time, " + + " initial_load_enabled, initial_load_time, created_at_node_id from $(node_security) "); + + putSql("deleteNodeSecuritySql", "" + + "delete from $(node_security) where node_id = ? "); + + putSql("deleteNodeSql", "" + "delete from $(node) where node_id = ? "); + + putSql("findNodeIdentitySql", "" + + "inner join $(node_identity) i on c.node_id = " + + " i.node_id "); + + putSql("deleteNodeIdentitySql", "" + "delete from $(node_identity) "); + + putSql("isNodeRegisteredSql", + "" + + "select count(*) from $(node_security) s inner join " + + " $(node) n on n.node_id=s.node_id where n.node_group_id=? and " + + " n.external_id=? and s.registration_time is not null and s.registration_enabled=0 "); + + putSql("findNodesWhoTargetMeSql", + "" + + "inner join $(node_group_link) d on " + + " c.node_group_id = d.source_node_group_id where d.target_node_group_id = ? and " + + " d.data_event_action = ? "); + + putSql("findNodesWhoITargetSql", + "" + + "inner join $(node_group_link) d on " + + " c.node_group_id = d.target_node_group_id where d.source_node_group_id = ? and " + + " d.data_event_action = ? "); + + putSql("selectNodeHostPrefixSql", + "" + + "select node_id, host_name, ip_address, os_user, os_name, os_arch, os_version, available_processors, " + + " free_memory_bytes, total_memory_bytes, max_memory_bytes, java_version, java_vendor, symmetric_version, " + + " timezone_offset, heartbeat_time, last_restart_time, create_time from $(node_host) "); + + putSql("selectNodeHostByNodeIdSql", "" + "where node_id=? "); + + putSql("selectNodePrefixSql", + "" + + "select c.node_id, c.node_group_id, c.external_id, c.sync_enabled, c.sync_url, " + + " c.schema_version, c.database_type, c.database_version, c.symmetric_version, c.created_at_node_id, c.heartbeat_time, c.timezone_offset, c.batch_to_send_count, c.batch_in_error_count, c.deployment_type from " + + " $(node) c "); + + putSql("updateNodeSecuritySql", + "" + + "update $(node_security) set node_password = ?, registration_enabled = ?, " + + " registration_time = ?, initial_load_enabled = ?, initial_load_time = ?, created_at_node_id = ? where node_id = ? "); + + putSql("insertNodeSecuritySql", + "" + + "insert into $(node_security) (node_id, node_password, created_at_node_id) values (?, ?, ?) "); + + putSql("getDataLoadStatusSql", + "" + + "select initial_load_enabled, initial_load_time from $(node_security) ns, " + + " $(node_identity) ni where ns.node_id=ni.node_id "); + + putSql("insertNodeHostSql", + "" + + "insert into $(node_host) " + + " (ip_address, os_user, os_name, os_arch, os_version, available_processors, free_memory_bytes, total_memory_bytes, max_memory_bytes, java_version, java_vendor, symmetric_version, timezone_offset, heartbeat_time, last_restart_time, create_time, node_id, host_name) " + + " values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, current_timestamp,?,?) "); + + putSql("updateNodeHostSql", + "" + + "update $(node_host) set " + + " ip_address=?, os_user=?, os_name=?, os_arch=?, os_version=?, available_processors=?, free_memory_bytes=?, " + + " total_memory_bytes=?, max_memory_bytes=?, java_version=?, java_vendor=?, symmetric_version=?, timezone_offset=?, heartbeat_time=?, " + + " last_restart_time=? where node_id=? and host_name=? "); + + putSql("findOfflineNodesSql", "" + + "where sync_enabled = 1 and node_id != ? and created_at_node_id = ? "); } diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/OutgoingBatchServiceSqlMap.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/OutgoingBatchServiceSqlMap.java index c5be9af483..9e3ae88a13 100644 --- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/OutgoingBatchServiceSqlMap.java +++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/OutgoingBatchServiceSqlMap.java @@ -3,7 +3,6 @@ import java.util.Map; import org.jumpmind.db.platform.IDatabasePlatform; -import org.jumpmind.db.sql.AbstractSqlMap; public class OutgoingBatchServiceSqlMap extends AbstractSqlMap { @@ -11,21 +10,21 @@ public OutgoingBatchServiceSqlMap(IDatabasePlatform platform, Map re super(platform, replacementTokens); putSql("updateParameterSql" ,"" + -"update $(prefixName)_parameter set param_value=? where external_id=? and node_group_id=? " + +"update $(parameter) set param_value=? where external_id=? and node_group_id=? " + " and param_key=? " ); putSql("insertParameterSql" ,"" + -"insert into $(prefixName)_parameter (external_id, node_group_id, param_key, param_value) " + +"insert into $(parameter) (external_id, node_group_id, param_key, param_value) " + " values(?, ?, ?, ?) " ); putSql("selectParametersSql" ,"" + -"select param_key, param_value from $(prefixName)_parameter where external_id=? and " + +"select param_key, param_value from $(parameter) where external_id=? and " + " node_group_id=? " ); putSql("selectParametersByKeySql" ,"" + -"select param_key, param_value, external_id, node_group_id from $(prefixName)_parameter where param_key=? " + +"select param_key, param_value, external_id, node_group_id from $(parameter) where param_key=? " + " order by node_group_id, external_id " ); putSql("deleteParameterSql" ,"" + -"delete from $(prefixName)_parameter where external_id=? and " + +"delete from $(parameter) where external_id=? and " + " node_group_id=? and param_key=? " ); } diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/PurgeServiceSqlMap.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/PurgeServiceSqlMap.java index eae5ccaafa..701926616d 100644 --- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/PurgeServiceSqlMap.java +++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/PurgeServiceSqlMap.java @@ -3,7 +3,6 @@ import java.util.Map; import org.jumpmind.db.platform.IDatabasePlatform; -import org.jumpmind.db.sql.AbstractSqlMap; public class PurgeServiceSqlMap extends AbstractSqlMap { @@ -11,66 +10,66 @@ public PurgeServiceSqlMap(IDatabasePlatform platform, Map replac super(platform, replacementTokens); putSql("selectOutgoingBatchRangeSql" ,"" + -"select min(batch_id) as min_id, max(batch_id) as max_id from $(prefixName)_outgoing_batch where " + -" create_time < ? and status in ('OK','IG') and batch_id < (select max(batch_id) from $(prefixName)_outgoing_batch) " ); +"select min(batch_id) as min_id, max(batch_id) as max_id from $(outgoing_batch) where " + +" create_time < ? and status in ('OK','IG') and batch_id < (select max(batch_id) from $(outgoing_batch)) " ); putSql("deleteOutgoingBatchSql" ,"" + -"delete from $(prefixName)_outgoing_batch where status in ('OK','IG') and batch_id between :MIN " + -" and :MAX and batch_id not in (select batch_id from $(prefixName)_data_event where batch_id between :MIN " + +"delete from $(outgoing_batch) where status in ('OK','IG') and batch_id between :MIN " + +" and :MAX and batch_id not in (select batch_id from $(data_event) where batch_id between :MIN " + " and :MAX) " ); putSql("deleteDataEventSql" ,"" + -"delete from $(prefixName)_data_event where batch_id not in (select batch_id from " + -" $(prefixName)_outgoing_batch where batch_id between :MIN and :MAX and status not in ('OK','IG')) " + +"delete from $(data_event) where batch_id not in (select batch_id from " + +" $(outgoing_batch) where batch_id between :MIN and :MAX and status not in ('OK','IG')) " + " and batch_id between :MIN and :MAX " ); putSql("deleteUnroutedDataEventSql" ,"" + -"delete from $(prefixName)_data_event where " + +"delete from $(data_event) where " + " batch_id=-1 and create_time < ? " ); putSql("selectDataRangeSql" ,"" + -"select min(data_id) as min_id, max(data_id) as max_id from $(prefixName)_data where data_id < (select max(data_id) from $(prefixName)_data) " ); +"select min(data_id) as min_id, max(data_id) as max_id from $(data) where data_id < (select max(data_id) from $(data)) " ); putSql("updateStrandedBatches" ,"" + -"update $(prefixName)_outgoing_batch set status='OK' where node_id not " + -" in (select node_id from $(prefixName)_node where sync_enabled=1) and status != 'OK' " ); +"update $(outgoing_batch) set status='OK' where node_id not " + +" in (select node_id from $(node) where sync_enabled=1) and status != 'OK' " ); putSql("deleteStrandedData" ,"" + -"delete from $(prefixName)_data where " + +"delete from $(data) where " + " data_id between :MIN and :MAX and " + -" data_id < (select max(ref_data_id) from $(prefixName)_data_ref) and " + +" data_id < (select max(ref_data_id) from $(data)_ref) and " + " create_time < :CUTOFF_TIME and " + -" data_id not in (select e.data_id from $(prefixName)_data_event e where " + +" data_id not in (select e.data_id from $(data_event) e where " + " e.data_id between :MIN and :MAX) " ); putSql("deleteDataSql" ,"" + -"delete from $(prefixName)_data where " + +"delete from $(data) where " + " data_id between :MIN and :MAX and " + " create_time < :CUTOFF_TIME and " + -" data_id in (select e.data_id from $(prefixName)_data_event e where " + +" data_id in (select e.data_id from $(data_event) e where " + " e.data_id between :MIN and :MAX) " + " and " + " data_id not in " + -" (select e.data_id from $(prefixName)_data_event e where " + +" (select e.data_id from $(data_event) e where " + " e.data_id between :MIN and :MAX and " + " (e.data_id is null or " + " e.batch_id in " + -" (select batch_id from $(prefixName)_outgoing_batch where " + +" (select batch_id from $(outgoing_batch) where " + " status not in ('OK','IG')))) " ); putSql("selectIncomingBatchRangeSql" ,"" + -"select node_id, min(batch_id) as min_id, max(batch_id) as max_id from $(prefixName)_incoming_batch where " + +"select node_id, min(batch_id) as min_id, max(batch_id) as max_id from $(incoming_batch) where " + " create_time < ? and status = 'OK' group by node_id " ); putSql("deleteIncomingBatchSql" ,"" + -"delete from $(prefixName)_incoming_batch where batch_id between ? and ? and node_id = " + +"delete from $(incoming_batch) where batch_id between ? and ? and node_id = " + " ? and status = 'OK' " ); putSql("deleteFromDataGapsSql" ,"" + -"delete from $(prefixName)_data_gap where last_update_time < ? and status != 'GP' " ); +"delete from $(data_gap) where last_update_time < ? and status != 'GP' " ); putSql("deleteIncomingBatchByNodeSql" ,"" + -"delete from $(prefixName)_incoming_batch where node_id = ? " ); +"delete from $(incoming_batch) where node_id = ? " ); } diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/RegistrationServiceSqlMap.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/RegistrationServiceSqlMap.java index f617674900..30bba234bf 100644 --- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/RegistrationServiceSqlMap.java +++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/RegistrationServiceSqlMap.java @@ -3,7 +3,6 @@ import java.util.Map; import org.jumpmind.db.platform.IDatabasePlatform; -import org.jumpmind.db.sql.AbstractSqlMap; public class RegistrationServiceSqlMap extends AbstractSqlMap { @@ -11,43 +10,43 @@ public RegistrationServiceSqlMap(IDatabasePlatform platform, Map super(platform, replacementTokens); putSql("findNodeToRegisterSql" ,"" + -"select min(c.node_id) from $(prefixName)_node c inner join " + -" $(prefixName)_node_security s on c.node_id = s.node_id where s.registration_enabled = " + +"select min(c.node_id) from $(node) c inner join " + +" $(node_security) s on c.node_id = s.node_id where s.registration_enabled = " + " 1 and c.node_group_id = ? and c.external_id = ? " ); putSql("registerNodeSql" ,"" + -"update $(prefixName)_node set sync_enabled = 1, heartbeat_time = current_timestamp, sync_url = ?, schema_version = ?, " + +"update $(node) set sync_enabled = 1, heartbeat_time = current_timestamp, sync_url = ?, schema_version = ?, " + " database_type = ?, database_version = ?, symmetric_version = ? where node_id = ? " ); putSql("registerNodeSecuritySql" ,"" + -"update $(prefixName)_node_security set registration_enabled = 0, registration_time = " + +"update $(node_security) set registration_enabled = 0, registration_time = " + " current_timestamp where node_id = ? " ); putSql("reopenRegistrationSql" ,"" + -"update $(prefixName)_node_security set node_password = ?, registration_enabled = 1, " + +"update $(node_security) set node_password = ?, registration_enabled = 1, " + " registration_time = null where node_id = ? " ); putSql("openRegistrationNodeSecuritySql" ,"" + -"insert into $(prefixName)_node_security (node_id, node_password, " + +"insert into $(node_security) (node_id, node_password, " + " registration_enabled, created_at_node_id) values (?, ?, 1, ?) " ); putSql("getRegistrationRedirectUrlSql" ,"" + -"select sync_url from $(prefixName)_node n inner join $(prefixName)_registration_redirect r on n.node_id=r.registration_node_id where r.registrant_external_id=? " ); +"select sync_url from $(node) n inner join $(registration_redirect) r on n.node_id=r.registration_node_id where r.registrant_external_id=? " ); putSql("insertRegistrationRedirectUrlSql" ,"" + -"insert into $(prefixName)_registration_redirect (registration_node_id, registrant_external_id) values (?, ?) " ); +"insert into $(registration_redirect) (registration_node_id, registrant_external_id) values (?, ?) " ); putSql("updateRegistrationRedirectUrlSql" ,"" + -"update $(prefixName)_registration_redirect set registration_node_id=? where registrant_external_id=? " ); +"update $(registration_redirect) set registration_node_id=? where registrant_external_id=? " ); putSql("insertRegistrationRequestSql" ,"" + -"insert into $(prefixName)_registration_request " + +"insert into $(registration_request) " + " (last_update_by, last_update_time, attempt_count, registered_node_id, status, " + " node_group_id, external_id, ip_address, host_name, create_time) " + " values (?,?,1,?,?,?,?,?,?,current_timestamp) " ); putSql("updateRegistrationRequestSql" ,"" + -"update $(prefixName)_registration_request " + +"update $(registration_request) " + " set " + " last_update_by=?, last_update_time=?, attempt_count=attempt_count+1, registered_node_id=?, status=? " + " where " + @@ -56,7 +55,7 @@ public RegistrationServiceSqlMap(IDatabasePlatform platform, Map putSql("selectRegistrationRequestSql" ,"" + "select node_group_id, external_id, status, host_name, ip_address, " + " attempt_count, registered_node_id, create_time, last_update_by, last_update_time " + -" from $(prefixName)_registration_request " + +" from $(registration_request) " + " where status=? " ); } diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/RouterServiceSqlMap.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/RouterServiceSqlMap.java index e4169c78e5..6641178537 100644 --- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/RouterServiceSqlMap.java +++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/RouterServiceSqlMap.java @@ -3,7 +3,6 @@ import java.util.Map; import org.jumpmind.db.platform.IDatabasePlatform; -import org.jumpmind.db.sql.AbstractSqlMap; public class RouterServiceSqlMap extends AbstractSqlMap { @@ -13,32 +12,32 @@ public RouterServiceSqlMap(IDatabasePlatform platform, Map repla putSql("selectDataToBatchSql", "" + "select d.data_id, d.table_name, d.event_type, d.row_data, d.pk_data, d.old_data, " - + " d.create_time, d.trigger_hist_id, d.channel_id, d.transaction_id, d.source_node_id, d.external_data, e.data_id from $(prefixName)_data d left outer join " - + " $(prefixName)_data_event e on d.data_id=e.data_id where d.channel_id=? and d.data_id > ? order by d.data_id asc "); + + " d.create_time, d.trigger_hist_id, d.channel_id, d.transaction_id, d.source_node_id, d.external_data, e.data_id from $(data) d left outer join " + + " $(data_event) e on d.data_id=e.data_id where d.channel_id=? and d.data_id > ? order by d.data_id asc "); putSql("selectDataUsingGapsSql", "" + "select d.data_id, d.table_name, d.event_type, d.row_data, d.pk_data, d.old_data, " + " d.create_time, d.trigger_hist_id, d.channel_id, d.transaction_id, d.source_node_id, d.external_data " - + " from $(prefixName)_data d where d.channel_id=? $(dataRange) " + + " from $(data) d where d.channel_id=? $(dataRange) " + " order by d.data_id asc "); putSql("selectDistinctDataIdFromDataEventSql", "" - + "select distinct(data_id) from $(prefixName)_data_event where data_id > ? order by data_id asc "); + + "select distinct(data_id) from $(data_event) where data_id > ? order by data_id asc "); putSql("selectDistinctDataIdFromDataEventUsingGapsSql", "" - + "select distinct(data_id) from $(prefixName)_data_event where data_id >=? and data_id <= ? order by data_id asc "); + + "select distinct(data_id) from $(data_event) where data_id >=? and data_id <= ? order by data_id asc "); putSql("selectUnroutedCountForChannelSql", "" - + "select count(*) from $(prefixName)_data where channel_id=? and data_id >=? "); + + "select count(*) from $(data) where channel_id=? and data_id >=? "); putSql("selectLastDataIdRoutedUsingDataRefSql", "" - + "select max(ref_data_id) from $(prefixName)_data_ref "); + + "select max(ref_data_id) from $(data)_ref "); putSql("selectLastDataIdRoutedUsingDataGapSql", "" - + "select max(end_id) from $(prefixName)_data_gap "); + + "select max(end_id) from $(data_gap) "); } diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/StatisticServiceSqlMap.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/StatisticServiceSqlMap.java index 5606282a9b..ff0b0e8135 100644 --- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/StatisticServiceSqlMap.java +++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/StatisticServiceSqlMap.java @@ -3,7 +3,6 @@ import java.util.Map; import org.jumpmind.db.platform.IDatabasePlatform; -import org.jumpmind.db.sql.AbstractSqlMap; public class StatisticServiceSqlMap extends AbstractSqlMap { @@ -11,7 +10,7 @@ public StatisticServiceSqlMap(IDatabasePlatform platform, Map re super(platform, replacementTokens); putSql("insertChannelStatsSql" ,"" + -"insert into $(prefixName)_node_host_channel_stats " + +"insert into $(node_host_channel_stats) " + " (node_id, host_name, channel_id, start_time, end_time, " + " data_routed, data_unrouted, data_event_inserted, " + " data_extracted, data_bytes_extracted, data_extracted_errors, " + @@ -25,11 +24,11 @@ public StatisticServiceSqlMap(IDatabasePlatform platform, Map re " data_extracted, data_bytes_extracted, data_extracted_errors, " + " data_sent, data_bytes_sent, data_sent_errors, " + " data_loaded, data_bytes_loaded, data_loaded_errors " + -" from $(prefixName)_node_host_channel_stats " + +" from $(node_host_channel_stats) " + " where start_time >= ? and end_time <= ? and node_id=? order by start_time asc " ); putSql("insertHostStatsSql" ,"" + -"insert into $(prefixName)_node_host_stats " + +"insert into $(node_host_stats) " + " (node_id, host_name, start_time, end_time, " + " restarted,nodes_pulled,nodes_pushed,nodes_rejected, " + " nodes_registered,nodes_loaded,nodes_disabled,purged_data_rows, " + @@ -46,11 +45,11 @@ public StatisticServiceSqlMap(IDatabasePlatform platform, Map re " purged_data_event_rows,purged_batch_outgoing_rows,purged_batch_incoming_rows, " + " triggers_created_count,triggers_rebuilt_count,triggers_removed_count, " + " total_nodes_pull_time, total_nodes_push_time " + -" from $(prefixName)_node_host_stats " + +" from $(node_host_stats) " + " where start_time >= ? and end_time <= ? and node_id=? order by start_time asc " ); putSql("insertJobStatsSql" ,"" + -"insert into $(prefixName)_node_host_job_stats " + +"insert into $(node_host_job_stats) " + " (node_id, host_name, job_name, start_time, end_time, " + " processed_count) " + " values(?,?,?,?,?,?) " ); @@ -58,7 +57,7 @@ public StatisticServiceSqlMap(IDatabasePlatform platform, Map re putSql("selectJobStatsSql" ,"" + "select node_id, host_name, job_name, start_time, end_time, " + " processed_count " + -" from $(prefixName)_node_host_job_stats " + +" from $(node_host_job_stats) " + " where start_time >= ? and end_time <= ? and node_id=? order by start_time asc " ); } diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/TransformServiceSqlMap.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/TransformServiceSqlMap.java index 154dd8c11d..7acd9eea2d 100644 --- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/TransformServiceSqlMap.java +++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/TransformServiceSqlMap.java @@ -3,7 +3,6 @@ import java.util.Map; import org.jumpmind.db.platform.IDatabasePlatform; -import org.jumpmind.db.sql.AbstractSqlMap; public class TransformServiceSqlMap extends AbstractSqlMap { @@ -21,7 +20,7 @@ public TransformServiceSqlMap(IDatabasePlatform platform, Map re " transform_order, " + " update_first, delete_action " + " from " + -" $(prefixName)_transform_table order by transform_order " + +" $(transform_table) order by transform_order " + " asc " ); putSql("selectTransformColumn" ,"" + @@ -30,7 +29,7 @@ public TransformServiceSqlMap(IDatabasePlatform platform, Map re " source_column_name, pk, " + " transform_type, transform_expression, " + " transform_order " + -" from $(prefixName)_transform_column order " + +" from $(transform_column) order " + " by transform_order " + " asc " ); @@ -40,14 +39,14 @@ public TransformServiceSqlMap(IDatabasePlatform platform, Map re " source_column_name, pk, " + " transform_type, transform_expression, " + " transform_order " + -" from $(prefixName)_transform_column " + +" from $(transform_column) " + " where " + " transform_id = ? " + " order by transform_order asc " ); putSql("updateTransformTableSql" ,"" + "update " + -" $(prefixName)_transform_table " + +" $(transform_table) " + " set " + " source_node_group_id=?, " + " target_node_group_id=?, " + @@ -66,7 +65,7 @@ public TransformServiceSqlMap(IDatabasePlatform platform, Map re putSql("updateTransformColumnSql" ,"" + "update " + -" $(prefixName)_transform_column " + +" $(transform_column) " + " set " + " source_column_name=?, " + " pk=?, " + @@ -80,7 +79,7 @@ public TransformServiceSqlMap(IDatabasePlatform platform, Map re " target_column_name=? " ); putSql("insertTransformTableSql" ,"" + -"insert into $(prefixName)_transform_table " + +"insert into $(transform_table) " + " (source_node_group_id, target_node_group_id, source_catalog_name, " + " source_schema_name, source_table_name, " + " target_catalog_name, target_schema_name, target_table_name, " + @@ -89,7 +88,7 @@ public TransformServiceSqlMap(IDatabasePlatform platform, Map re " values(?,?,?,?,?,?,?,?,?,?,?,?,?) " ); putSql("insertTransformColumnSql" ,"" + -"insert into $(prefixName)_transform_column " + +"insert into $(transform_column) " + " (transform_id, include_on, target_column_name, " + " source_column_name, " + " pk, transform_type, " + @@ -97,15 +96,15 @@ public TransformServiceSqlMap(IDatabasePlatform platform, Map re " values(?,?,?,?,?,?,?,?) " ); putSql("deleteTransformTableSql" ,"" + -"delete from $(prefixName)_transform_table where " + +"delete from $(transform_table) where " + " transform_id=? " ); putSql("deleteTransformColumnsSql" ,"" + -"delete from $(prefixName)_transform_column where " + +"delete from $(transform_column) where " + " transform_id=? " ); putSql("deleteTransformColumnSql" ,"" + -"delete from $(prefixName)_transform_column " + +"delete from $(transform_column) " + " where " + " transform_id=? " + " and include_on=? " + diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/TriggerRouterServiceSqlMap.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/TriggerRouterServiceSqlMap.java index 16cd459a23..82152ac960 100644 --- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/TriggerRouterServiceSqlMap.java +++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/TriggerRouterServiceSqlMap.java @@ -3,7 +3,6 @@ import java.util.Map; import org.jumpmind.db.platform.IDatabasePlatform; -import org.jumpmind.db.sql.AbstractSqlMap; public class TriggerRouterServiceSqlMap extends AbstractSqlMap { @@ -12,30 +11,30 @@ public TriggerRouterServiceSqlMap(IDatabasePlatform platform, super(platform, replacementTokens); putSql("countTriggerRoutersByRouterIdSql", "" - + "select count(*) from $(prefixName)_trigger_router where router_id=? "); + + "select count(*) from $(trigger_router) where router_id=? "); putSql("countTriggerRoutersByTriggerIdSql", "" - + "select count(*) from $(prefixName)_trigger_router where trigger_id=? "); + + "select count(*) from $(trigger_router) where trigger_id=? "); putSql("countTriggerByTriggerIdSql", "" - + "select count(*) from $(prefixName)_trigger where trigger_id=? "); + + "select count(*) from $(trigger) where trigger_id=? "); putSql("countTriggerByTableNameSql", "" - + "select count(*) from $(prefixName)_trigger where source_table_name=? "); + + "select count(*) from $(trigger) where source_table_name=? "); - putSql("deleteRouterSql", "" + "delete from $(prefixName)_router where router_id=? "); + putSql("deleteRouterSql", "" + "delete from $(router) where router_id=? "); putSql("inactivateTriggerHistorySql", "" - + "update $(prefixName)_trigger_hist set inactive_time = current_timestamp, error_message=? where " + + "update $(trigger_hist) set inactive_time = current_timestamp, error_message=? where " + " trigger_hist_id=? "); - putSql("selectTriggersSql", "" + "from $(prefixName)_trigger t order by trigger_id asc "); + putSql("selectTriggersSql", "" + "from $(trigger) t order by trigger_id asc "); putSql("selectTriggerRoutersSql", "" - + "from $(prefixName)_trigger_router tr " - + " inner join $(prefixName)_trigger t on tr.trigger_id=t.trigger_id " - + " inner join $(prefixName)_router r on tr.router_id=r.router_id "); + + "from $(trigger_router) tr " + + " inner join $(trigger) t on tr.trigger_id=t.trigger_id " + + " inner join $(router) r on tr.router_id=r.router_id "); putSql("selectTriggerRoutersColumnList", "" @@ -60,7 +59,7 @@ public TriggerRouterServiceSqlMap(IDatabasePlatform platform, putSql("selectTriggerNameInUseSql", "" - + "select count(*) from $(prefixName)_trigger_hist where (name_for_update_trigger=? or name_for_insert_trigger=? or name_for_delete_trigger=?) and trigger_id != ? and inactive_time is null "); + + "select count(*) from $(trigger_hist) where (name_for_update_trigger=? or name_for_insert_trigger=? or name_for_delete_trigger=?) and trigger_id != ? and inactive_time is null "); putSql("selectGroupTriggersSql", "" + "where r.source_node_group_id = ? order by t.channel_id "); @@ -77,7 +76,7 @@ public TriggerRouterServiceSqlMap(IDatabasePlatform platform, putSql("allTriggerHistSql", "" + "select trigger_hist_id,trigger_id,source_table_name,table_hash,create_time,pk_column_names,column_names,last_trigger_build_reason,name_for_delete_trigger,name_for_insert_trigger,name_for_update_trigger,source_schema_name,source_catalog_name,trigger_row_hash,error_message " - + " from $(prefixName)_trigger_hist "); + + " from $(trigger_hist) "); putSql("triggerHistBySourceTableWhereSql", "" + "where source_table_name=? and inactive_time is null "); @@ -86,29 +85,29 @@ public TriggerRouterServiceSqlMap(IDatabasePlatform platform, "" + "select " + " trigger_hist_id,trigger_id,source_table_name,table_hash,create_time,pk_column_names,column_names,last_trigger_build_reason,name_for_delete_trigger,name_for_insert_trigger,name_for_update_trigger,source_schema_name,source_catalog_name,trigger_row_hash,error_message " - + " from $(prefixName)_trigger_hist where trigger_hist_id = (select max(trigger_hist_id) " - + " from $(prefixName)_trigger_hist where trigger_id=?) "); + + " from $(trigger_hist) where trigger_hist_id = (select max(trigger_hist_id) " + + " from $(trigger_hist) where trigger_id=?) "); putSql("triggerHistSql", "" + "select " + " trigger_hist_id,trigger_id,source_table_name,table_hash,create_time,pk_column_names,column_names,last_trigger_build_reason,name_for_delete_trigger,name_for_insert_trigger,name_for_update_trigger,source_schema_name,source_catalog_name,trigger_row_hash,error_message " - + " from $(prefixName)_trigger_hist where trigger_hist_id = ? "); + + " from $(trigger_hist) where trigger_hist_id = ? "); putSql("insertTriggerHistorySql", "" - + "insert into $(prefixName)_trigger_hist " + + "insert into $(trigger_hist) " + " (trigger_id,source_table_name,table_hash,create_time,column_names,pk_column_names,last_trigger_build_reason,name_for_delete_trigger,name_for_insert_trigger,name_for_update_trigger,source_schema_name,source_catalog_name,trigger_row_hash,error_message) " + " values(?,?,?,?,?,?,?,?,?,?,?,?,?,?) "); - putSql("deleteTriggerSql", "" + "delete from $(prefixName)_trigger where trigger_id=? "); + putSql("deleteTriggerSql", "" + "delete from $(trigger) where trigger_id=? "); putSql("deleteTriggerHistorySql", "" - + "delete from $(prefixName)_trigger_hist where trigger_hist_id=? "); + + "delete from $(trigger_hist) where trigger_hist_id=? "); putSql("insertTriggerSql", "" - + "insert into $(prefixName)_trigger " + + "insert into $(trigger) " + " (source_catalog_name,source_schema_name,source_table_name,channel_id,sync_on_update,sync_on_insert,sync_on_delete, " + " sync_on_incoming_batch,use_stream_lobs,use_capture_lobs,name_for_update_trigger,name_for_insert_trigger,name_for_delete_trigger, " + " sync_on_update_condition,sync_on_insert_condition,sync_on_delete_condition,tx_id_expression,excluded_column_names, " @@ -117,7 +116,7 @@ public TriggerRouterServiceSqlMap(IDatabasePlatform platform, putSql("updateTriggerSql", "" - + "update $(prefixName)_trigger " + + "update $(trigger) " + " set source_catalog_name=?,source_schema_name=?,source_table_name=?, " + " channel_id=?,sync_on_update=?,sync_on_insert=?,sync_on_delete=?, " + " sync_on_incoming_batch=?,use_stream_lobs=?,use_capture_lobs=?,name_for_update_trigger=?,name_for_insert_trigger=?, " @@ -127,31 +126,31 @@ public TriggerRouterServiceSqlMap(IDatabasePlatform platform, putSql("insertRouterSql", "" - + "insert into $(prefixName)_router " + + "insert into $(router) " + " (target_catalog_name,target_schema_name,target_table_name,source_node_group_id,target_node_group_id, " + " router_type,router_expression,sync_on_update,sync_on_insert,sync_on_delete,create_time,last_update_by,last_update_time,router_id) " + " values(?,?,?,?,?,?,?,?,?,?,?,?,?,?) "); putSql("updateRouterSql", "" - + "update $(prefixName)_router " + + "update $(router) " + " set target_catalog_name=?,target_schema_name=?,target_table_name=?,source_node_group_id=?, " + " target_node_group_id=?,router_type=?,router_expression=?,sync_on_update=?,sync_on_insert=?,sync_on_delete=?, " + " last_update_by=?,last_update_time=? " + " where router_id=? "); putSql("deleteTriggerRouterSql", "" - + "delete from $(prefixName)_trigger_router where trigger_id=? and router_id=? "); + + "delete from $(trigger_router) where trigger_id=? and router_id=? "); putSql("insertTriggerRouterSql", "" - + "insert into $(prefixName)_trigger_router " + + "insert into $(trigger_router) " + " (initial_load_order,initial_load_select,ping_back_enabled,create_time,last_update_by,last_update_time,trigger_id,router_id) " + " values(?,?,?,?,?,?,?,?) "); putSql("updateTriggerRouterSql", "" - + "update $(prefixName)_trigger_router " + + "update $(trigger_router) " + " set initial_load_order=?,initial_load_select=?,ping_back_enabled=?,last_update_by=?,last_update_time=? " + " where trigger_id=? and router_id=? "); @@ -161,12 +160,12 @@ public TriggerRouterServiceSqlMap(IDatabasePlatform platform, putSql("selectTriggerRouterSql", "" + "where t.trigger_id=? and r.router_id=? "); - putSql("selectRouterSql", "" + "from $(prefixName)_router r where r.router_id=? "); + putSql("selectRouterSql", "" + "from $(router) r where r.router_id=? "); - putSql("selectRoutersSql", "" + "from $(prefixName)_router r order by r.router_id "); + putSql("selectRoutersSql", "" + "from $(router) r order by r.router_id "); putSql("selectRouterByNodeGroupLinkWhereSql", - "from $(prefixName)_router r where r.ource_node_group_id=? and r.target_node_group_id=? order by r.router_id "); + "from $(router) r where r.ource_node_group_id=? and r.target_node_group_id=? order by r.router_id "); putSql("selectTriggerByIdSql", "" + "where t.trigger_id = ? "); diff --git a/symmetric/symmetric-core/src/main/resources/symmetric-default.properties b/symmetric/symmetric-core/src/main/resources/symmetric-default.properties index f1f44b06a4..9853d4cd61 100644 --- a/symmetric/symmetric-core/src/main/resources/symmetric-default.properties +++ b/symmetric/symmetric-core/src/main/resources/symmetric-default.properties @@ -146,21 +146,6 @@ db.jdbc.execute.batch.size=100 # Tags: database db.default.schema= -# Indicates that case should be ignored when looking up references to tables using the database's metadata api. -# Tags: database -# Type: boolean -db.metadata.ignore.case=true - -# Indicates that when doing DDL operations that database identifiers should be delimited. -# Tags: database -# Type: boolean -db.force.delimited.identifier.mode.on=false - -# Indicates that when doing DDL operations that database identifiers should be delimited. -# Tags: database -# Type: boolean -db.force.delimited.identifier.mode.off=false - # This is the number of HTTP concurrent push/pull requests SymmetricDS will accept. This is controlled # by the NodeConcurrencyFilter. The number is per servlet the filter is applied to. The # db.pool.max.active value should be twice this value. diff --git a/symmetric/symmetric-core/src/main/resources/symmetric-schema.xml b/symmetric/symmetric-core/src/main/resources/symmetric-schema.xml index 43968abbdb..671a37d01c 100644 --- a/symmetric/symmetric-core/src/main/resources/symmetric-schema.xml +++ b/symmetric/symmetric-core/src/main/resources/symmetric-schema.xml @@ -296,11 +296,6 @@ - - - -
- diff --git a/symmetric/symmetric-core/src/test/java/org/jumpmind/symmetric/service/impl/AbstractDataExtractorServiceTest.java b/symmetric/symmetric-core/src/test/java/org/jumpmind/symmetric/service/impl/AbstractDataExtractorServiceTest.java index d92d06c9b0..a48417a19c 100644 --- a/symmetric/symmetric-core/src/test/java/org/jumpmind/symmetric/service/impl/AbstractDataExtractorServiceTest.java +++ b/symmetric/symmetric-core/src/test/java/org/jumpmind/symmetric/service/impl/AbstractDataExtractorServiceTest.java @@ -24,7 +24,7 @@ public abstract class AbstractDataExtractorServiceTest extends AbstractServiceTest { protected static final String TEST_TABLE = "test_extract_table"; - + private static int id = 0; @Before @@ -38,7 +38,7 @@ public void setupForTest() { TestConstants.ROUTER_ID_ROOT_2_TEST, TestConstants.ROOT_2_TEST)); triggerRouterService.saveTriggerRouter(triggerRouter); triggerRouterService.syncTriggers(); - + getDbDialect().truncateTable(TEST_TABLE); } @@ -47,22 +47,22 @@ public void setupForTest() { @Test public void testExtractConfigurationStandalone() throws Exception { - IDataExtractorService service = getDataExtractorService(); + IDataExtractorService dataExtractorService = getDataExtractorService(); StringWriter writer = new StringWriter(); - service.extractConfigurationStandalone(TestConstants.TEST_CLIENT_NODE, writer); + dataExtractorService.extractConfigurationStandalone(TestConstants.TEST_CLIENT_NODE, writer); String content = writer.getBuffer().toString(); - assertNumberOfLinesThatStartWith(24, "table,", content); + assertNumberOfLinesThatStartWith(24, "table,", content, false, true); assertNumberOfLinesThatStartWith(14, "columns,", content); assertNumberOfLinesThatStartWith(14, "keys,", content); assertNumberOfLinesThatStartWith(14, "sql,", content); assertNumberOfLinesThatStartWith(0, "update,", content); - assertNumberOfLinesThatStartWith(66, "insert,", content); + assertNumberOfLinesThatStartWith(66, "insert,", content, false, true); assertNumberOfLinesThatStartWith(1, "commit,-9999", content); assertNumberOfLinesThatStartWith(1, "batch,-9999", content); assertNumberOfLinesThatStartWith(1, "nodeid,", content); assertNumberOfLinesThatStartWith(1, "binary,", content); } - + @Test public void testNothingToExtract() { ExtractResults results = extract(); @@ -73,21 +73,22 @@ public void testNothingToExtract() { @Test public void testExtractOneBatchOneRow() { - save(new TestExtract(id++, "abc 123", "abcdefghijklmnopqrstuvwxyz", new Timestamp(System.currentTimeMillis()), new Date(System.currentTimeMillis()), true, Integer.MAX_VALUE, new BigDecimal(Math.PI))); + save(new TestExtract(id++, "abc 123", "abcdefghijklmnopqrstuvwxyz", new Timestamp( + System.currentTimeMillis()), new Date(System.currentTimeMillis()), true, + Integer.MAX_VALUE, new BigDecimal(Math.PI))); routeAndCreateGaps(); ExtractResults results = extract(); Assert.assertNotNull(results.getBatches()); Assert.assertEquals(1, results.getBatches().size()); assertNumberOfLinesThatStartWith(1, "insert,", results.getCsv()); long batchId = results.getBatches().get(0).getBatchId(); - assertNumberOfLinesThatStartWith(1, "batch," + batchId, results.getCsv()); + assertNumberOfLinesThatStartWith(1, "batch," + batchId, results.getCsv()); assertNumberOfLinesThatStartWith(1, "commit," + batchId, results.getCsv()); - // TODO should case be the same as the metadata or the same as the configuration? - //assertNumberOfLinesThatStartWith(1, "table," + TEST_TABLE, results.getCsv()); - + assertNumberOfLinesThatStartWith(1, "table," + TEST_TABLE, results.getCsv(), true, false); + // same batch should be extracted results = extract(); - assertNumberOfLinesThatStartWith(1, "batch," + batchId, results.getCsv()); + assertNumberOfLinesThatStartWith(1, "batch," + batchId, results.getCsv()); assertNumberOfLinesThatStartWith(1, "commit," + batchId, results.getCsv()); } diff --git a/symmetric/symmetric-core/src/test/java/org/jumpmind/symmetric/service/impl/AbstractServiceTest.java b/symmetric/symmetric-core/src/test/java/org/jumpmind/symmetric/service/impl/AbstractServiceTest.java index 6a169622f7..7d411544be 100644 --- a/symmetric/symmetric-core/src/test/java/org/jumpmind/symmetric/service/impl/AbstractServiceTest.java +++ b/symmetric/symmetric-core/src/test/java/org/jumpmind/symmetric/service/impl/AbstractServiceTest.java @@ -28,7 +28,7 @@ public abstract class AbstractServiceTest { static private ISymmetricEngine engine; - + protected final static Logger logger = LoggerFactory.getLogger(AbstractServiceTest.class); @BeforeClass @@ -53,7 +53,7 @@ public static void setup() { } } - protected Level setLoggingLevelForTest(Level level) { + protected Level setLoggingLevelForTest(Level level) { org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger("org.jumpmind"); Level old = logger.getLevel(); logger.setLevel(level); @@ -61,15 +61,13 @@ protected Level setLoggingLevelForTest(Level level) { } protected void logTestRunning() { - logger.info( - "Running " + new Exception().getStackTrace()[1].getMethodName() + ". " - + getSymmetricEngine().getSymmetricDialect().getPlatform().getName()); + logger.info("Running " + new Exception().getStackTrace()[1].getMethodName() + ". " + + getSymmetricEngine().getSymmetricDialect().getPlatform().getName()); } protected void logTestComplete() { - logger.info( - "Completed running " + new Exception().getStackTrace()[1].getMethodName() + ". " - + getSymmetricEngine().getSymmetricDialect().getPlatform().getName()); + logger.info("Completed running " + new Exception().getStackTrace()[1].getMethodName() + + ". " + getSymmetricEngine().getSymmetricDialect().getPlatform().getName()); } protected ISymmetricEngine getSymmetricEngine() { @@ -91,7 +89,7 @@ protected IConfigurationService getConfigurationService() { protected IRegistrationService getRegistrationService() { return getSymmetricEngine().getRegistrationService(); } - + protected IDataExtractorService getDataExtractorService() { return getSymmetricEngine().getDataExtractorService(); } @@ -103,7 +101,7 @@ protected IDataService getDataService() { protected INodeService getNodeService() { return getSymmetricEngine().getNodeService(); } - + protected IDatabasePlatform getPlatform() { return getSymmetricEngine().getSymmetricDialect().getPlatform(); } @@ -111,7 +109,7 @@ protected IDatabasePlatform getPlatform() { protected IRouterService getRouterService() { return getSymmetricEngine().getRouterService(); } - + protected ISqlTemplate getJdbcTemplate() { return getSymmetricEngine().getSymmetricDialect().getPlatform().getSqlTemplate(); } @@ -131,7 +129,7 @@ protected IIncomingBatchService getIncomingBatchService() { protected ISqlTemplate getSqlTemplate() { return getSymmetricEngine().getSymmetricDialect().getPlatform().getSqlTemplate(); } - + protected IStagingManager getStagingManager() { return getSymmetricEngine().getStagingManager(); } @@ -197,25 +195,39 @@ protected int countData() { protected String printDatabase() { return getSymmetricEngine().getSymmetricDialect().getPlatform().getName(); } - + protected void assertNumberOfLinesThatStartWith(int expected, String startsWith, String text) { + assertNumberOfLinesThatStartWith(expected, startsWith, text, false, false); + } + + protected void assertNumberOfLinesThatStartWith(int expected, String startsWith, String text, + boolean ignoreCase, boolean atLeast) { int actual = 0; String[] lines = text.split("\n"); for (String line : lines) { if (line.startsWith(startsWith)) { actual++; + } else if (ignoreCase && line.toLowerCase().startsWith(startsWith.toLowerCase())) { + actual++; } } - Assert.assertEquals("There were not the expected number of occurrences of: " + startsWith, expected, actual); + + if (atLeast) { + Assert.assertTrue(String.format( + "There was less than the expected (%d) number of occurrences of: %s", expected, + startsWith), actual >= expected); + } else { + Assert.assertEquals("There were not the expected number of occurrences of: " + + startsWith, expected, actual); + } } - + protected void routeAndCreateGaps() { // one to route unrouted data getRouterService().routeData(); // one to create gaps getRouterService().routeData(); } - protected void resetGaps() { getJdbcTemplate().update("delete from sym_data_gap"); @@ -229,5 +241,4 @@ protected void resetBatches() { .update("update sym_data_gap set status='OK' where start_id != ?", startId); } - } diff --git a/symmetric/symmetric-core/src/test/java/org/jumpmind/symmetric/service/impl/AbstractTriggerRouterServiceTest.java b/symmetric/symmetric-core/src/test/java/org/jumpmind/symmetric/service/impl/AbstractTriggerRouterServiceTest.java index 93a0019eda..9eb8bd45a8 100644 --- a/symmetric/symmetric-core/src/test/java/org/jumpmind/symmetric/service/impl/AbstractTriggerRouterServiceTest.java +++ b/symmetric/symmetric-core/src/test/java/org/jumpmind/symmetric/service/impl/AbstractTriggerRouterServiceTest.java @@ -23,7 +23,7 @@ import org.jumpmind.symmetric.service.ITriggerRouterService; import org.junit.Test; -public class AbstractTriggerRouterServiceTest extends AbstractServiceTest { +abstract public class AbstractTriggerRouterServiceTest extends AbstractServiceTest { public static final String TEST_TRIGGERS_TABLE = "test_triggers_table"; 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 019af10fd8..b53bf40c09 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 @@ -19,6 +19,11 @@ * under the License. */ +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.InputStream; +import java.io.InputStreamReader; import java.math.BigDecimal; import java.sql.Array; import java.sql.Time; @@ -31,8 +36,10 @@ import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.binary.Hex; +import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.time.DateUtils; +import org.jumpmind.db.io.DatabaseIO; import org.jumpmind.db.model.Column; import org.jumpmind.db.model.Database; import org.jumpmind.db.model.Table; @@ -41,6 +48,7 @@ import org.jumpmind.db.sql.ISqlTemplate; import org.jumpmind.db.sql.SqlScript; import org.jumpmind.db.util.BinaryEncoding; +import org.jumpmind.exception.IoException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.jumpmind.util.FormatUtils; @@ -94,7 +102,10 @@ public abstract class AbstractDatabasePlatform implements IDatabasePlatform { protected String defaultCatalog; + protected Boolean storesUpperCaseIdentifiers; + public AbstractDatabasePlatform() { + setDelimitedIdentifierModeOn(true); } abstract public ISqlTemplate getSqlTemplate(); @@ -356,8 +367,8 @@ public Object[] getObjectValues(BinaryEncoding encoding, String[] values, list.add(objectValue); } } catch (Exception ex) { - log.error("Could not convert a value of {} for column {} of type {}", new Object[] {value, - column.getName(), column.getType()}); + log.error("Could not convert a value of {} for column {} of type {}", new Object[] { + value, column.getName(), column.getType() }); log.error(ex.getMessage(), ex); throw new RuntimeException(ex); } @@ -365,7 +376,7 @@ public Object[] getObjectValues(BinaryEncoding encoding, String[] values, return list.toArray(); } - + public Map getSqlScriptReplacementTokens() { return null; } @@ -379,15 +390,6 @@ public String scrubSql(String sql) { } } - public StringBuilder scrubSql(StringBuilder sql) { - Map replacementTokens = getSqlScriptReplacementTokens(); - if (replacementTokens != null) { - return new StringBuilder(scrubSql(sql.toString())); - } else { - return sql; - } - } - protected Array createArray(Column column, final String value) { return null; } @@ -412,7 +414,7 @@ public boolean isBlob(int type) { return type == Types.BLOB || type == Types.BINARY || type == Types.VARBINARY || type == Types.LONGVARBINARY || type == -10; } - + public List getLobColumns(Table table) { List lobColumns = new ArrayList(1); Column[] allColumns = table.getColumns(); @@ -424,6 +426,13 @@ public List getLobColumns(Table table) { return lobColumns; } + public boolean isStoresUpperCaseIdentifiers() { + if (storesUpperCaseIdentifiers == null) { + storesUpperCaseIdentifiers = getSqlTemplate().isStoresUpperCaseIdentifiers(); + } + return storesUpperCaseIdentifiers; + } + public boolean isLob(int type) { return type == Types.CLOB || type == Types.BLOB || type == Types.BINARY || type == Types.VARBINARY || type == Types.LONGVARBINARY @@ -432,4 +441,45 @@ public boolean isLob(int type) { type == -10; } + public Database readDatabaseFromXml(String filePath, boolean alterCaseToMatchDatabaseDefaultCase) { + InputStream is = null; + File file = new File(filePath); + if (file.exists()) { + try { + is = new FileInputStream(file); + } catch (FileNotFoundException e) { + throw new IoException(e); + } + } else { + is = AbstractDatabasePlatform.class.getResourceAsStream(filePath); + } + + if (is != null) { + InputStreamReader reader = new InputStreamReader(is); + Database database = new DatabaseIO().read(reader); + IOUtils.closeQuietly(reader); + if (alterCaseToMatchDatabaseDefaultCase) { + boolean storesUpperCase = getSqlTemplate().isStoresUpperCaseIdentifiers(); + Table[] tables = database.getTables(); + for (Table table : tables) { + if (!FormatUtils.isMixedCase(table.getName())) { + table.setName(storesUpperCase ? table.getName().toUpperCase() : table + .getName().toLowerCase()); + } + Column[] columns = table.getColumns(); + for (Column column : columns) { + if (!FormatUtils.isMixedCase(column.getName())) { + column.setName(storesUpperCase ? column.getName().toUpperCase() + : column.getName().toLowerCase()); + } + } + } + } + return database; + } else { + throw new IoException("Could not find the file: %s", filePath); + } + + } + } 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 86d7b2e5e4..56f9e4fbdf 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 @@ -195,6 +195,8 @@ public Object[] getObjectValues(BinaryEncoding encoding, String[] values, public Object[] getObjectValues(BinaryEncoding encoding, Table table, String[] columnNames, String[] values); + + public Database readDatabaseFromXml(String filePath, boolean alterCaseToMatchDatabaseDefaultCase); public boolean isLob(int type); @@ -208,7 +210,6 @@ public Object[] getObjectValues(BinaryEncoding encoding, Table table, String[] c public String scrubSql(String sql); - public StringBuilder scrubSql(StringBuilder sql); - + public boolean isStoresUpperCaseIdentifiers(); } diff --git a/symmetric/symmetric-db/src/main/java/org/jumpmind/db/sql/AbstractSqlTemplate.java b/symmetric/symmetric-db/src/main/java/org/jumpmind/db/sql/AbstractSqlTemplate.java index c10047f799..47dd887964 100644 --- a/symmetric/symmetric-db/src/main/java/org/jumpmind/db/sql/AbstractSqlTemplate.java +++ b/symmetric/symmetric-db/src/main/java/org/jumpmind/db/sql/AbstractSqlTemplate.java @@ -65,10 +65,6 @@ public List query(String sql, ISqlRowMapper mapper, Object... args) { return query(sql, mapper, args, null); } - public List query(Query query, ISqlRowMapper mapper) { - return query(query.getSql(), mapper, query.getArgs(), query.getArgTypes()); - } - @SuppressWarnings("unchecked") public Map query(String sql, String keyCol, String valueCol, Object[] args, int[] types) { diff --git a/symmetric/symmetric-db/src/main/java/org/jumpmind/db/sql/ISqlTemplate.java b/symmetric/symmetric-db/src/main/java/org/jumpmind/db/sql/ISqlTemplate.java index a703db9ccb..8690bc0017 100644 --- a/symmetric/symmetric-db/src/main/java/org/jumpmind/db/sql/ISqlTemplate.java +++ b/symmetric/symmetric-db/src/main/java/org/jumpmind/db/sql/ISqlTemplate.java @@ -92,6 +92,8 @@ public Map query(String sql, String keyCol, String valueCol, Object public Set getSqlKeywords(); public boolean supportsGetGeneratedKeys(); + + public boolean isStoresUpperCaseIdentifiers(); public long insertWithGeneratedKey(final String sql, String column, final String sequenceName, final Object[] args, final int[] types); diff --git a/symmetric/symmetric-db/src/main/java/org/jumpmind/db/sql/Query.java b/symmetric/symmetric-db/src/main/java/org/jumpmind/db/sql/Query.java deleted file mode 100644 index 3fcad31024..0000000000 --- a/symmetric/symmetric-db/src/main/java/org/jumpmind/db/sql/Query.java +++ /dev/null @@ -1,261 +0,0 @@ -package org.jumpmind.db.sql; - -import java.util.ArrayList; -import java.util.List; - -import org.jumpmind.db.model.Column; -import org.jumpmind.db.model.Table; - -public class Query { - - protected Table[] tables; - - protected List args; - - protected List argTypes; - - protected StringBuilder sql; - - protected String quoteString; - - static public Query create(String quoteString, int expectedNumberOfArgs, Table... tables) { - return new Query(quoteString, expectedNumberOfArgs, tables); - } - - static public Query create(String quoteString, Table... tables) { - return new Query(quoteString, 0, tables); - } - - public Query(String quoteString, int expectedNumberOfArgs, String... tables) { - this(quoteString, expectedNumberOfArgs, buildTables(tables)); - } - - public Query(String quoteString, int expectedNumberOfArgs, Table... tables) { - this.quoteString = quoteString; - this.tables = tables; - this.args = new ArrayList(expectedNumberOfArgs); - this.argTypes = new ArrayList(expectedNumberOfArgs); - this.sql = select(quoteString, tables); - } - - public String getSql() { - return sql.toString().trim(); - } - - public Object[] getArgs() { - return args.toArray(new Object[args.size()]); - } - - public int[] getArgTypes() { - int[] array = null; - if (argTypes.size() > 0 && argTypes.size() == args.size()) { - array = new int[argTypes.size()]; - for (int i = 0; i < argTypes.size(); i++) { - Integer type = argTypes.get(i); - if (type != null) { - array[i] = type; - } - } - - } - return array; - } - - public Query where() { - sql.append("where "); - return this; - } - - public Query where(String column, String condition, Object value) { - return where(new Column(column), condition, value); - } - - public Query where(Column column, String condition, Object value) { - return where().append(column, condition, value); - } - - protected Query append(Column column, String condition, Object value) { - String tableAlias = getTableAlias(findTableIndexWith(column, tables), tables); - sql.append(tableAlias); - sql.append("."); - sql.append(column.getName()); - sql.append(condition); - if (value == null) { - sql.append(" is null "); - } else { - sql.append("? "); - args.add(value); - if (column.getTypeCode() != Integer.MAX_VALUE) { - argTypes.add(column.getTypeCode()); - } - } - return this; - } - - public Query append(String value) { - sql.append(value); - sql.append(" "); - return this; - } - - public Query and(String column, String condition, Object value) { - return and(new Column(column), condition, value); - } - - public Query and(Column column, String condition, Object value) { - return append("and").append(column, condition, value); - } - - public Query or(String column, String condition, Object value) { - return or(new Column(column), condition, value); - } - - public Query or(Column column, String condition, Object value) { - return append("or").append(column, condition, value); - } - - public Query startGroup() { - sql.append("("); - return this; - } - - public Query endGroup() { - sql.append(")"); - return this; - } - - @Override - public String toString() { - return getSql(); - } - - protected static StringBuilder select(String quoteString, Table[] tables) { - if (tables != null && tables.length > 0) { - StringBuilder sql = new StringBuilder("select "); - if (hasColumns(tables)) { - addColumnList(sql, tables); - addTables(sql, quoteString, tables); - } else { - if (tables.length == 1) { - sql.append("* from "); - sql.append(tables[0].getFullyQualifiedTableName(quoteString)); - } else { - throw new IllegalStateException( - "Cannot join tables if columns are not specified"); - } - } - return sql; - } else { - throw new IllegalStateException("Need a list of tables to build a select statement"); - } - } - - protected static void addColumnList(StringBuilder sql, Table... tables) { - for (int i = 0; i < tables.length; i++) { - Table table = tables[i]; - String tableAlias = getTableAlias(i, tables); - Column[] columns = table.getColumns(); - int columnIndex = 0; - for (Column column : columns) { - sql.append(tableAlias); - sql.append("."); - sql.append(column.getName()); - sql.append((columns.length > 1 && ++columnIndex < columns.length) || i+1 < tables.length ? ", " : " "); - } - } - } - - protected static String getTableAlias(int index, Table... tables) { - String tableAlias = "t"; - if (tables.length > 1 && index >= 0) { - tableAlias += (index + 1); - } - return tableAlias; - } - - protected static void addTables(StringBuilder sql, String quoteString, Table... tables) { - sql.append("from "); - for (int i = 0; i < tables.length; i++) { - Table lastTable = i > 0 ? tables[i - 1] : null; - Table table = tables[i]; - String tableAlias = getTableAlias(i, tables); - if (lastTable != null) { - sql.append("inner join "); - sql.append(table.getFullyQualifiedTableName(quoteString)); - sql.append(" "); - sql.append(tableAlias); - sql.append(" on "); - String lastTableAlias = getTableAlias(i - 1, tables); - List columns = autoBuildJoins(lastTable, table); - int columnIndex = 0; - for (Column column : columns) { - sql.append(lastTableAlias); - sql.append("."); - sql.append(column.getName()); - sql.append("="); - sql.append(tableAlias); - sql.append("."); - sql.append(column.getName()); - sql.append(columns.size() > 1 && ++columnIndex < columns.size() ? " AND " : " "); - } - } else { - sql.append(table.getFullyQualifiedTableName(quoteString)); - sql.append(" "); - sql.append(tableAlias); - sql.append(" "); - } - } - } - - protected static List autoBuildJoins(Table t1, Table t2) { - List columns = new ArrayList(); - Column[] t1Columns = t1.getColumns(); - for (Column column1 : t1Columns) { - Column[] t2Columns = t2.getColumns(); - for (Column column2 : t2Columns) { - if (column1.getName().equals(column2.getName())) { - columns.add(column1); - } - } - } - return columns; - } - - protected static boolean hasColumns(Table... tables) { - boolean hasColumns = true; - for (Table table : tables) { - hasColumns &= table.getColumnCount() > 0; - } - return hasColumns; - } - - protected static Table[] buildTables(String... tables) { - if (tables != null) { - Table[] array = new Table[tables.length]; - for (int i = 0; i < tables.length; i++) { - array[i] = new Table(tables[i]); - } - return array; - } else { - return null; - } - } - - protected static int findTableIndexWith(Column column, Table[] tables) { - int matchOnNameIndex = -1; - for (int i = 0; i < tables.length; i++) { - Table table = tables[i]; - Column[] columns = table.getColumns(); - for (Column column2 : columns) { - if (column2.equals(column)) { - return i; - } else if (matchOnNameIndex < 0 && column2.getName().equals(column.getName())) { - matchOnNameIndex = i; - } - } - } - return matchOnNameIndex; - - } - -} diff --git a/symmetric/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/reader/ExtractDataReader.java b/symmetric/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/reader/ExtractDataReader.java index 0e89de8264..7a77fbc992 100644 --- a/symmetric/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/reader/ExtractDataReader.java +++ b/symmetric/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/reader/ExtractDataReader.java @@ -27,9 +27,9 @@ public class ExtractDataReader implements IDataReader { protected IDatabasePlatform platform; - protected List sourcesToUse; + protected List sourcesToUse; - protected IExtractBatchSource currentSource; + protected IExtractWriterSource currentSource; protected Batch batch; @@ -37,14 +37,14 @@ public class ExtractDataReader implements IDataReader { protected CsvData data; - public ExtractDataReader(IDatabasePlatform platform, IExtractBatchSource source) { - this.sourcesToUse = new ArrayList(); + public ExtractDataReader(IDatabasePlatform platform, IExtractWriterSource source) { + this.sourcesToUse = new ArrayList(); this.sourcesToUse.add(source); this.platform = platform; } - public ExtractDataReader(IDatabasePlatform platform, List sources) { - this.sourcesToUse = new ArrayList(sources); + public ExtractDataReader(IDatabasePlatform platform, List sources) { + this.sourcesToUse = new ArrayList(sources); this.platform = platform; } diff --git a/symmetric/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/reader/IExtractBatchSource.java b/symmetric/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/reader/IExtractWriterSource.java similarity index 92% rename from symmetric/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/reader/IExtractBatchSource.java rename to symmetric/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/reader/IExtractWriterSource.java index 4b384833fa..a998bf4911 100644 --- a/symmetric/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/reader/IExtractBatchSource.java +++ b/symmetric/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/reader/IExtractWriterSource.java @@ -4,7 +4,7 @@ import org.jumpmind.symmetric.io.data.Batch; import org.jumpmind.symmetric.io.data.CsvData; -public interface IExtractBatchSource { +public interface IExtractWriterSource { public Batch getBatch(); diff --git a/symmetric/symmetric-io/src/test/java/org/jumpmind/symmetric/io/data/writer/DatabaseWriterTest.java b/symmetric/symmetric-io/src/test/java/org/jumpmind/symmetric/io/data/writer/DatabaseWriterTest.java index f96d8559de..f68820460c 100644 --- a/symmetric/symmetric-io/src/test/java/org/jumpmind/symmetric/io/data/writer/DatabaseWriterTest.java +++ b/symmetric/symmetric-io/src/test/java/org/jumpmind/symmetric/io/data/writer/DatabaseWriterTest.java @@ -1,6 +1,5 @@ package org.jumpmind.symmetric.io.data.writer; -import java.io.InputStreamReader; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.DecimalFormat; @@ -9,9 +8,7 @@ import java.util.UUID; import org.apache.commons.lang.ArrayUtils; -import org.jumpmind.db.DatabasePlatformTest; import org.jumpmind.db.DbTestUtils; -import org.jumpmind.db.io.DatabaseIO; import org.jumpmind.db.model.Table; import org.jumpmind.db.platform.informix.InformixPlatform; import org.jumpmind.db.platform.mssql.MsSqlPlatform; @@ -29,8 +26,7 @@ public class DatabaseWriterTest extends AbstractWriterTest { @BeforeClass public static void setup() throws Exception { platform = DbTestUtils.createDatabasePlatform(DbTestUtils.ROOT); - platform.createDatabase(new DatabaseIO().read(new InputStreamReader( - DatabasePlatformTest.class.getResourceAsStream("/testDatabaseWriter.xml"))), true, + platform.createDatabase(platform.readDatabaseFromXml("/testDatabaseWriter.xml", true), true, false); } diff --git a/symmetric/symmetric-io/src/test/java/org/jumpmind/symmetric/io/data/writer/TransformWriterTest.java b/symmetric/symmetric-io/src/test/java/org/jumpmind/symmetric/io/data/writer/TransformWriterTest.java index 91dd460b53..8477f83849 100644 --- a/symmetric/symmetric-io/src/test/java/org/jumpmind/symmetric/io/data/writer/TransformWriterTest.java +++ b/symmetric/symmetric-io/src/test/java/org/jumpmind/symmetric/io/data/writer/TransformWriterTest.java @@ -1,11 +1,8 @@ package org.jumpmind.symmetric.io.data.writer; -import java.io.InputStreamReader; import java.util.List; -import org.jumpmind.db.DatabasePlatformTest; import org.jumpmind.db.DbTestUtils; -import org.jumpmind.db.io.DatabaseIO; import org.jumpmind.db.model.Column; import org.jumpmind.db.model.Table; import org.jumpmind.symmetric.io.data.CsvData; @@ -24,9 +21,8 @@ public class TransformWriterTest extends AbstractWriterTest { @BeforeClass public static void setup() throws Exception { platform = DbTestUtils.createDatabasePlatform(DbTestUtils.ROOT); - platform.createDatabase(new DatabaseIO().read(new InputStreamReader( - DatabasePlatformTest.class.getResourceAsStream("/testDatabaseWriter.xml"))), true, - false); + platform.createDatabase(platform.readDatabaseFromXml("/testDatabaseWriter.xml", true), + true, false); } @Test diff --git a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mssql/MsSqlPlatform.java b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mssql/MsSqlPlatform.java index 27c186dd2a..88dff51fa9 100644 --- a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mssql/MsSqlPlatform.java +++ b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mssql/MsSqlPlatform.java @@ -88,7 +88,6 @@ public MsSqlPlatform(DataSource dataSource, DatabasePlatformSettings settings) { ddlReader = new MsSqlDdlReader(this); ddlBuilder = new MsSqlBuilder(this); - setDelimitedIdentifierModeOn(true); } @Override diff --git a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mysql/MySqlPlatform.java b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mysql/MySqlPlatform.java index e44448f157..d9ad04eeac 100644 --- a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mysql/MySqlPlatform.java +++ b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mysql/MySqlPlatform.java @@ -99,9 +99,6 @@ public MySqlPlatform(DataSource dataSource, DatabasePlatformSettings settings) { info.setCharColumnSpaceTrimmed(true); info.setEmptyStringNulled(false); - setDelimitedIdentifierModeOn(true); - - // MySql 5.0 returns an empty string for default values for pk columns // which is different from the MySql 4 behaviour info.setSyntheticDefaultValueForRequiredReturned(false); diff --git a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/postgresql/PostgreSqlPlatform.java b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/postgresql/PostgreSqlPlatform.java index ff91ec1f54..372f95e486 100644 --- a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/postgresql/PostgreSqlPlatform.java +++ b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/postgresql/PostgreSqlPlatform.java @@ -88,7 +88,6 @@ public PostgreSqlPlatform(DataSource dataSource, DatabasePlatformSettings settin info.setHasSize(Types.BINARY, false); info.setHasSize(Types.VARBINARY, false); - setDelimitedIdentifierModeOn(true); info.setNonBlankCharColumnSpacePadded(true); info.setBlankCharColumnSpacePadded(true); info.setCharColumnSpaceTrimmed(false); diff --git a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/sybase/SybasePlatform.java b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/sybase/SybasePlatform.java index 94712bca4b..b461da42ce 100644 --- a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/sybase/SybasePlatform.java +++ b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/sybase/SybasePlatform.java @@ -59,7 +59,6 @@ public SybasePlatform(DataSource dataSource, DatabasePlatformSettings settings) info.setCommentPrefix("/*"); info.setCommentSuffix("*/"); info.setDelimiterToken("\""); - setDelimitedIdentifierModeOn(true); info.addNativeTypeMapping(Types.ARRAY, "IMAGE"); // BIGINT is mapped back in the model reader diff --git a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/sql/jdbc/JdbcSqlTemplate.java b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/sql/jdbc/JdbcSqlTemplate.java index 344c577735..25532c3f48 100644 --- a/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/sql/jdbc/JdbcSqlTemplate.java +++ b/symmetric/symmetric-jdbc/src/main/java/org/jumpmind/db/sql/jdbc/JdbcSqlTemplate.java @@ -479,6 +479,14 @@ public String execute(Connection con) throws SQLException { } }); } + + public boolean isStoresUpperCaseIdentifiers() { + return execute(new IConnectionCallback() { + public Boolean execute(Connection con) throws SQLException { + return con.getMetaData().storesUpperCaseIdentifiers(); + } + }); + } public String getDatabaseProductVersion() { return execute(new IConnectionCallback() { diff --git a/symmetric/symmetric-util/src/main/java/org/jumpmind/exception/IoException.java b/symmetric/symmetric-util/src/main/java/org/jumpmind/exception/IoException.java index 7e62d05f93..1f041d8134 100644 --- a/symmetric/symmetric-util/src/main/java/org/jumpmind/exception/IoException.java +++ b/symmetric/symmetric-util/src/main/java/org/jumpmind/exception/IoException.java @@ -9,8 +9,12 @@ public class IoException extends RuntimeException { private static final long serialVersionUID = 1L; - public IoException(IOException ex) { - super(ex); + public IoException(IOException e) { + super(e); + } + + public IoException(String msg, Object... args) { + super(String.format(msg, args)); } } diff --git a/symmetric/symmetric-util/src/main/java/org/jumpmind/util/FormatUtils.java b/symmetric/symmetric-util/src/main/java/org/jumpmind/util/FormatUtils.java index 762e3ead45..65a65d24c4 100644 --- a/symmetric/symmetric-util/src/main/java/org/jumpmind/util/FormatUtils.java +++ b/symmetric/symmetric-util/src/main/java/org/jumpmind/util/FormatUtils.java @@ -75,5 +75,16 @@ public static String formatString(String format, String arg) { return String.format(format, arg); } } + + public static boolean isMixedCase(String text) { + char[] chars = text.toCharArray(); + boolean upper = false; + boolean lower = false; + for (char ch : chars) { + upper |= Character.isUpperCase(ch); + lower |= Character.isLowerCase(ch); + } + return upper && lower; + } }