Skip to content

Commit

Permalink
0001433: Expose api so a single sym table and single trigger can be i…
Browse files Browse the repository at this point in the history
…nstalled without other SymmetricDS configuration
  • Loading branch information
chenson42 committed Oct 4, 2013
1 parent 83bb1e7 commit cc5339d
Show file tree
Hide file tree
Showing 23 changed files with 97 additions and 42 deletions.
Expand Up @@ -59,12 +59,12 @@ public AseSymmetricDialect(IParameterService parameterService, IDatabasePlatform
}

@Override
protected void createRequiredDatabaseObjects() {
public void createRequiredDatabaseObjects() {

}

@Override
protected void dropRequiredDatabaseObjects() {
public void dropRequiredDatabaseObjects() {

}

Expand Down
Expand Up @@ -38,8 +38,8 @@ public Db2SymmetricDialect(IParameterService parameterService, IDatabasePlatform
this.triggerTemplate = new Db2TriggerTemplate(this);
}

public boolean createOrAlterTablesIfNecessary() {
boolean tablesCreated = super.createOrAlterTablesIfNecessary();
public boolean createOrAlterTablesIfNecessary(String... tables) {
boolean tablesCreated = super.createOrAlterTablesIfNecessary(tables);
if (tablesCreated) {
long triggerHistId = platform.getSqlTemplate().queryForLong("select max(trigger_hist_id) from "
+ parameterService.getTablePrefix() + "_trigger_hist") + 1;
Expand All @@ -66,11 +66,11 @@ protected boolean doesTriggerExistOnPlatform(String catalog, String schema, Stri
}

@Override
protected void createRequiredDatabaseObjects() {
public void createRequiredDatabaseObjects() {
}

@Override
protected void dropRequiredDatabaseObjects() {
public void dropRequiredDatabaseObjects() {
}

@Override
Expand Down
Expand Up @@ -40,7 +40,7 @@ public Db2v9SymmetricDialect(IParameterService parameterService, IDatabasePlatfo
}

@Override
protected void createRequiredDatabaseObjects() {
public void createRequiredDatabaseObjects() {
ISqlTransaction transaction = null;
try {
transaction = platform.getSqlTemplate().startSqlTransaction();
Expand Down
Expand Up @@ -51,7 +51,7 @@ protected boolean doesTriggerExistOnPlatform(String catalog, String schema, Stri
}

@Override
protected void createRequiredDatabaseObjects() {
public void createRequiredDatabaseObjects() {
String escape = this.parameterService.getTablePrefix() + "_" + "escape";
if (!installed(SQL_FUNCTION_INSTALLED, escape)) {
String sql = "CREATE FUNCTION $(functionName)(STR VARCHAR(10000)) RETURNS " +
Expand Down Expand Up @@ -123,7 +123,7 @@ protected void createRequiredDatabaseObjects() {
}

@Override
protected void dropRequiredDatabaseObjects() {
public void dropRequiredDatabaseObjects() {
String escape = this.parameterService.getTablePrefix() + "_" + "escape";
if (installed(SQL_FUNCTION_INSTALLED, escape)) {
uninstall(SQL_DROP_FUNCTION, escape);
Expand Down
Expand Up @@ -51,7 +51,7 @@ public FirebirdSymmetricDialect(IParameterService parameterService, IDatabasePla
}

@Override
protected void createRequiredDatabaseObjects() {
public void createRequiredDatabaseObjects() {
String escape = this.parameterService.getTablePrefix() + "_" + "escape";
if (!installed(SQL_FUNCTION_INSTALLED, escape)) {
String sql = "declare external function $(functionName) cstring(32660) " +
Expand All @@ -77,7 +77,7 @@ protected void createRequiredDatabaseObjects() {
}

@Override
protected void dropRequiredDatabaseObjects() {
public void dropRequiredDatabaseObjects() {
String escape = this.parameterService.getTablePrefix() + "_" + "escape";
if (installed(SQL_FUNCTION_INSTALLED, escape)) {
uninstall(SQL_DROP_FUNCTION, escape);
Expand Down
Expand Up @@ -91,7 +91,7 @@ public void removeTrigger(StringBuilder sqlBuffer, String catalogName, String sc
}

@Override
protected void createRequiredDatabaseObjects() {
public void createRequiredDatabaseObjects() {
String encode = this.parameterService.getTablePrefix().toUpperCase() + "_" + "BASE64_ENCODE";
if (!installed(SQL_FUNCTION_INSTALLED, encode)) {
String sql = "CREATE ALIAS IF NOT EXISTS $(functionName) for \"org.jumpmind.symmetric.db.EmbeddedDbFunctions.encodeBase64\"; ";
Expand All @@ -101,7 +101,7 @@ protected void createRequiredDatabaseObjects() {
}

@Override
protected void dropRequiredDatabaseObjects() {
public void dropRequiredDatabaseObjects() {
String encode = this.parameterService.getTablePrefix().toUpperCase() + "_" + "BASE64_ENCODE";
if (installed(SQL_FUNCTION_INSTALLED, encode)) {
uninstall(SQL_DROP_FUNCTION, encode);
Expand Down
Expand Up @@ -68,7 +68,7 @@ protected boolean doesTriggerExistOnPlatform(String catalogName, String schemaNa
}

@Override
protected void createRequiredDatabaseObjects() {
public void createRequiredDatabaseObjects() {
String encode = this.parameterService.getTablePrefix() + "_" + "base_64_encode";
if (!installed(SQL_FUNCTION_INSTALLED, encode)) {
String sql = "CREATE ALIAS $(functionName) for \"org.jumpmind.symmetric.db.hsqldb.HsqlDbFunctions.encodeBase64\"; ";
Expand All @@ -90,7 +90,7 @@ protected void createRequiredDatabaseObjects() {
}

@Override
protected void dropRequiredDatabaseObjects() {
public void dropRequiredDatabaseObjects() {
String encode = this.parameterService.getTablePrefix() + "_" + "base_64_encode";
if (installed(SQL_FUNCTION_INSTALLED, encode)) {
uninstall(SQL_DROP_FUNCTION, encode);
Expand Down
Expand Up @@ -69,7 +69,7 @@ public void removeTrigger(StringBuilder sqlBuffer, String catalogName, String sc
}

@Override
protected void createRequiredDatabaseObjects() {
public void createRequiredDatabaseObjects() {
String encode = this.parameterService.getTablePrefix() + "_base_64_encode";
if (!installed(SQL_FUNCTION_INSTALLED, encode)) {
String sql = "CREATE FUNCTION $(functionName)(binaryData BINARY) " +
Expand Down Expand Up @@ -105,7 +105,7 @@ protected void createRequiredDatabaseObjects() {
}

@Override
protected void dropRequiredDatabaseObjects() {
public void dropRequiredDatabaseObjects() {
String encode = this.parameterService.getTablePrefix() + "_base_64_encode";
if (installed(SQL_FUNCTION_INSTALLED, encode)) {
uninstall(SQL_DROP_FUNCTION, encode);
Expand Down
Expand Up @@ -61,8 +61,8 @@ public String getSyncTriggersExpression() {
return "not $(defaultSchema)" + parameterService.getTablePrefix() + "_triggers_disabled()";
}

@Override
protected void createRequiredDatabaseObjects() {
@Override
public void createRequiredDatabaseObjects() {
String triggersDisabled = this.parameterService.getTablePrefix() + "_" + "triggers_disabled";
if (!installed(SQL_FUNCTION_INSTALLED, triggersDisabled)) {
String sql = "create function $(defaultSchema).$(functionName)() returning boolean; " +
Expand Down Expand Up @@ -103,8 +103,8 @@ protected void createRequiredDatabaseObjects() {

}

@Override
protected void dropRequiredDatabaseObjects() {
@Override
public void dropRequiredDatabaseObjects() {
String triggersDisabled = this.parameterService.getTablePrefix() + "_" + "triggers_disabled";
if (installed(SQL_FUNCTION_INSTALLED, triggersDisabled)) {
uninstall(SQL_DROP_FUNCTION, triggersDisabled);
Expand Down
Expand Up @@ -58,7 +58,7 @@ public InterbaseSymmetricDialect(IParameterService parameterService, IDatabasePl
}

@Override
protected void createRequiredDatabaseObjects() {
public void createRequiredDatabaseObjects() {
String contextTableName = parameterService.getTablePrefix() + "_" + CONTEXT_TABLE_NAME;
try {
platform.getSqlTemplate().queryForInt("select count(*) from " + contextTableName);
Expand Down Expand Up @@ -103,7 +103,7 @@ protected void createRequiredDatabaseObjects() {
}

@Override
protected void dropRequiredDatabaseObjects() {
public void dropRequiredDatabaseObjects() {
String escape = this.parameterService.getTablePrefix() + "_" + "escape";
if (installed(SQL_FUNCTION_INSTALLED, escape)) {
uninstall(SQL_DROP_FUNCTION, escape);
Expand Down
Expand Up @@ -75,7 +75,7 @@ public void verifyDatabaseIsCompatible() {
}

@Override
protected void createRequiredDatabaseObjects() {
public void createRequiredDatabaseObjects() {
String encode = this.parameterService.getTablePrefix() + "_" + "base64_encode";
if (!installed(SQL_FUNCTION_INSTALLED, encode)) {
String sql = "create function dbo.$(functionName)(@data varbinary(max)) returns varchar(max) " +
Expand Down Expand Up @@ -113,7 +113,7 @@ protected void createRequiredDatabaseObjects() {
}

@Override
protected void dropRequiredDatabaseObjects() {
public void dropRequiredDatabaseObjects() {
String encode = this.parameterService.getTablePrefix() + "_" + "base64_encode";
if (installed(SQL_FUNCTION_INSTALLED, encode)) {
uninstall(SQL_DROP_FUNCTION, encode);
Expand Down
Expand Up @@ -34,7 +34,7 @@ public MsSql2000SymmetricDialect(IParameterService parameterService, IDatabasePl
}

@Override
protected void createRequiredDatabaseObjects() {
public void createRequiredDatabaseObjects() {
String encode = this.parameterService.getTablePrefix() + "_" + "base64_encode";
if (!installed(SQL_FUNCTION_INSTALLED, encode)) {
String sql = " create function dbo.$(functionName) (\n" +
Expand Down
Expand Up @@ -75,7 +75,7 @@ public boolean supportsTransactionId() {
}

@Override
protected void createRequiredDatabaseObjects() {
public void createRequiredDatabaseObjects() {
if (this.functionTemplateKeySuffix.equals(PRE_5_1_23)) {
String function = this.parameterService.getTablePrefix() + "_" + TRANSACTION_ID + this.functionTemplateKeySuffix;
if (!installed(SQL_FUNCTION_INSTALLED, function)) {
Expand Down Expand Up @@ -120,7 +120,7 @@ protected void createRequiredDatabaseObjects() {
}

@Override
protected void dropRequiredDatabaseObjects() {
public void dropRequiredDatabaseObjects() {
String function = this.parameterService.getTablePrefix() + "_" + TRANSACTION_ID + this.functionTemplateKeySuffix;
if (installed(SQL_FUNCTION_INSTALLED, function)) {
uninstall(SQL_DROP_FUNCTION, function);
Expand Down
Expand Up @@ -113,7 +113,7 @@ public void createTrigger(StringBuilder sqlBuffer, DataEventType dml, Trigger tr
}

@Override
protected void createRequiredDatabaseObjects() {
public void createRequiredDatabaseObjects() {
String blobToClob = this.parameterService.getTablePrefix() + "_" + "blob2clob";
if (!installed(SQL_OBJECT_INSTALLED, blobToClob)) {
String sql = "CREATE OR REPLACE FUNCTION $(functionName) (blob_in IN BLOB) "
Expand Down Expand Up @@ -204,7 +204,7 @@ protected void createRequiredDatabaseObjects() {
}

@Override
protected void dropRequiredDatabaseObjects() {
public void dropRequiredDatabaseObjects() {
String blobToClob = this.parameterService.getTablePrefix() + "_" + "blob2clob";
if (installed(SQL_OBJECT_INSTALLED, blobToClob)) {
uninstall(SQL_DROP_FUNCTION, blobToClob);
Expand Down
Expand Up @@ -60,7 +60,7 @@ public PostgreSqlSymmetricDialect(IParameterService parameterService, IDatabaseP
}

@Override
protected void createRequiredDatabaseObjects() {
public void createRequiredDatabaseObjects() {

if (transactionIdSupported()) {
supportsTransactionId = true;
Expand Down Expand Up @@ -136,7 +136,7 @@ protected void createRequiredDatabaseObjects() {
}

@Override
protected void dropRequiredDatabaseObjects() {
public void dropRequiredDatabaseObjects() {
String triggersDisabled = this.parameterService.getTablePrefix() + "_" + "triggers_disabled";
if (installed(SQL_FUNCTION_INSTALLED, triggersDisabled)) {
uninstall(SQL_DROP_FUNCTION+ "() cascade", triggersDisabled);
Expand Down
Expand Up @@ -59,7 +59,7 @@ public SqlAnywhereSymmetricDialect(IParameterService parameterService, IDatabase
}

@Override
protected void createRequiredDatabaseObjects() {
public void createRequiredDatabaseObjects() {

String triggersDisabled = this.parameterService.getTablePrefix() + "_" + "triggers_disabled";
if (!installed(SQL_FUNCTION_INSTALLED, triggersDisabled)) {
Expand Down Expand Up @@ -108,7 +108,7 @@ protected void createRequiredDatabaseObjects() {
}

@Override
protected void dropRequiredDatabaseObjects() {
public void dropRequiredDatabaseObjects() {
String encode = this.parameterService.getTablePrefix() + "_" + "base64_encode";
if (installed(SQL_FUNCTION_INSTALLED, encode)) {
uninstall(SQL_DROP_FUNCTION, encode);
Expand Down
Expand Up @@ -199,9 +199,9 @@ final public boolean doesTriggerExist(String catalogName, String schema, String
}
}

abstract protected void dropRequiredDatabaseObjects();
public abstract void dropRequiredDatabaseObjects();

abstract protected void createRequiredDatabaseObjects();
public abstract void createRequiredDatabaseObjects();

abstract public BinaryEncoding getBinaryEncoding();

Expand Down Expand Up @@ -430,13 +430,19 @@ public Table getTable(TriggerHistory triggerHistory, boolean useCache) {
/*
* @return true if SQL was executed.
*/
public boolean createOrAlterTablesIfNecessary() {
public boolean createOrAlterTablesIfNecessary(String... tableNames) {
try {
log.info("Checking if SymmetricDS tables need created or altered");

Database modelFromXml = readSymmetricSchemaFromXml();
Database modelFromDatabase = readSymmetricSchemaFromDatabase();

if (tableNames != null && tableNames.length > 0) {
tableNames = platform.alterCaseToMatchDatabaseDefaultCase(tableNames);
modelFromXml.removeAllTablesExcept(tableNames);
modelFromDatabase.removeAllTablesExcept(tableNames);
}

IDdlBuilder builder = platform.getDdlBuilder();

IAlterDatabaseInterceptor[] interceptors = alterDatabaseInterceptors.toArray(new IAlterDatabaseInterceptor[alterDatabaseInterceptors.size()]);
Expand Down
Expand Up @@ -22,7 +22,7 @@

import java.util.Map;
import java.util.Set;


import org.jumpmind.db.model.Column;
import org.jumpmind.db.model.Database;
import org.jumpmind.db.model.Table;
Expand Down Expand Up @@ -64,7 +64,11 @@ public void removeTrigger(StringBuilder sqlBuffer, String catalogName, String sc

public void dropTablesAndDatabaseObjects();

public boolean createOrAlterTablesIfNecessary();
public boolean createOrAlterTablesIfNecessary(String... tables);

public void dropRequiredDatabaseObjects();

public void createRequiredDatabaseObjects();

public IDatabasePlatform getPlatform();

Expand Down
Expand Up @@ -47,7 +47,7 @@ public SqliteSymmetricDialect(IParameterService parameterService, IDatabasePlatf
}

@Override
protected void createRequiredDatabaseObjects() {
public void createRequiredDatabaseObjects() {
String contextTableName = parameterService.getTablePrefix() + "_" + CONTEXT_TABLE_NAME;
try {
platform.getSqlTemplate().queryForInt("select count(*) from " + contextTableName);
Expand All @@ -63,7 +63,7 @@ protected void createRequiredDatabaseObjects() {
}

@Override
protected void dropRequiredDatabaseObjects() {
public void dropRequiredDatabaseObjects() {
}

public void purgeRecycleBin() {
Expand Down
18 changes: 18 additions & 0 deletions symmetric-db/src/main/java/org/jumpmind/db/model/Database.java
Expand Up @@ -545,6 +545,24 @@ public Table findTable(String catalogName, String schemaName, String tableName)
public void resetTableIndexCache() {
tableIndexCache.clear();
}

public void removeAllTablesExcept(String... tableNames) {
Iterator<Table> tableIterator = this.tables.iterator();
while(tableIterator.hasNext()) {
Table table = tableIterator.next();
boolean foundTable = false;
for (String tableName : tableNames) {
if (tableName.equals(table.getName())) {
foundTable = true;
break;
}
}

if (!foundTable) {
tableIterator.remove();
}
}
}

/**
* {@inheritDoc}
Expand Down
Expand Up @@ -606,6 +606,14 @@ public void alterCaseToMatchDatabaseDefaultCase(Database database) {
}
}

public String[] alterCaseToMatchDatabaseDefaultCase(String[] values) {
String[] newValues = new String[values.length];
for (int i = 0; i < values.length; i++) {
newValues[i] = alterCaseToMatchDatabaseDefaultCase(values[i]);
}
return newValues;
}

public String alterCaseToMatchDatabaseDefaultCase(String value) {
if (StringUtils.isNotBlank(value)) {
boolean storesUpperCase = isStoresUpperCaseIdentifiers();
Expand Down

0 comments on commit cc5339d

Please sign in to comment.