Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
0000872: Add an uninstall feature to SymmetricDS. Add option to the c…
…ommand line.
  • Loading branch information
chenson42 committed Nov 4, 2012
1 parent f408d78 commit 7379d08
Show file tree
Hide file tree
Showing 31 changed files with 860 additions and 674 deletions.
Expand Up @@ -65,6 +65,14 @@ protected boolean doesTriggerExistOnPlatform(String catalog, String schema, Stri
"select count(*) from syscat.triggers where trigname = ? and trigschema = ?",
new Object[] { triggerName.toUpperCase(), schema.toUpperCase() }) > 0;
}

@Override
protected void createRequiredFunctions() {
}

@Override
protected void dropRequiredFunctions() {
}

@Override
public boolean isBlobSyncSupported() {
Expand Down
Expand Up @@ -9,8 +9,6 @@ public class Db2TriggerTemplate extends AbstractTriggerTemplate {

public Db2TriggerTemplate(ISymmetricDialect symmetricDialect) {
super(symmetricDialect);
dropFunctionSql = "DROP FUNCTION $(functionName)";
functionInstalledSql = "select count(*) from syscat.functions where funcname = '$(functionName)'" ;
emptyColumnTemplate = "''" ;
stringColumnTemplate = "case when $(tableAlias).\"$(columnName)\" is null then '' else '\"' || replace(replace($(tableAlias).\"$(columnName)\",'\\','\\\\'),'\"','\\\"') || '\"' end" ;
xmlColumnTemplate = null;
Expand Down
Expand Up @@ -37,9 +37,9 @@ public class Db2v9SymmetricDialect extends Db2SymmetricDialect implements ISymme
public Db2v9SymmetricDialect(IParameterService parameterService, IDatabasePlatform platform) {
super(parameterService, platform);
}

@Override
protected void initTablesAndFunctionsForSpecificDialect() {
protected void createRequiredFunctions() {
ISqlTransaction transaction = null;
try {
transaction = platform.getSqlTemplate().startSqlTransaction();
Expand All @@ -56,8 +56,10 @@ protected void initTablesAndFunctionsForSpecificDialect() {
} finally {
close(transaction);
}

super.createRequiredFunctions();
}

private URL getSqlScriptUrl() {
return getClass().getResource("/org/jumpmind/symmetric/db/db2.sql");
}
Expand Down
Expand Up @@ -30,7 +30,12 @@
import org.jumpmind.symmetric.service.IParameterService;

public class DerbySymmetricDialect extends AbstractSymmetricDialect implements ISymmetricDialect {

static final String SQL_DROP_FUNCTION = "DROP FUNCTION $(functionName)";
static final String SQL_DROP_PROCEDURE = "DROP PROCEDURE $(functionName)";
static final String SQL_FUNCTION_INSTALLED = "select count(*) from sys.sysaliases where alias = upper('$(functionName)')" ;


public DerbySymmetricDialect(IParameterService parameterService, IDatabasePlatform platform) {
super(parameterService, platform);
this.triggerTemplate = new DerbyTriggerTemplate(this);
Expand All @@ -45,6 +50,122 @@ protected boolean doesTriggerExistOnPlatform(String catalog, String schema, Stri
"select count(*) from sys.systriggers where triggername = ?",
new Object[] { triggerName.toUpperCase() }) > 0;
}

@Override
protected void createRequiredFunctions() {
String escape = this.parameterService.getTablePrefix() + "_" + "escape";
if (!installed(SQL_FUNCTION_INSTALLED, escape)) {
String sql = "CREATE FUNCTION $(functionName)(STR VARCHAR(10000)) RETURNS " +
" VARCHAR(10000) PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA EXTERNAL NAME " +
" 'org.jumpmind.symmetric.db.derby.DerbyFunctions.escape' ";
install(sql, escape);
}

String clobToString = this.parameterService.getTablePrefix() + "_" + "clob_to_string";
if (!installed(SQL_FUNCTION_INSTALLED, clobToString)) {
String sql = "CREATE FUNCTION $(functionName)(columnName varchar(50), " +
" tableName varchar(50), whereClause varchar(8000)) RETURNS " +
" varchar(32672) PARAMETER STYLE JAVA READS SQL DATA LANGUAGE JAVA EXTERNAL NAME " +
" 'org.jumpmind.symmetric.db.derby.DerbyFunctions.clobToString' ";
install(sql, clobToString);
}

String blobToString = this.parameterService.getTablePrefix() + "_" + "blob_to_string";
if (!installed(SQL_FUNCTION_INSTALLED, blobToString)) {
String sql = "CREATE FUNCTION $(functionName)(columnName varchar(50), " +
" tableName varchar(50), whereClause varchar(8000)) RETURNS " +
" varchar(32672) PARAMETER STYLE JAVA READS SQL DATA LANGUAGE JAVA EXTERNAL NAME " +
" 'org.jumpmind.symmetric.db.derby.DerbyFunctions.blobToString' ";
install(sql, blobToString);
}

String transactionId = this.parameterService.getTablePrefix() + "_" + "transaction_id";
if (!installed(SQL_FUNCTION_INSTALLED, transactionId)) {
String sql = "CREATE FUNCTION $(functionName)() RETURNS " +
" varchar(100) PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA EXTERNAL NAME " +
" 'org.jumpmind.symmetric.db.derby.DerbyFunctions.getTransactionId' ";
install(sql, transactionId);
}

String syncTriggersDisabled = this.parameterService.getTablePrefix() + "_" + "sync_triggers_disabled";
if (!installed(SQL_FUNCTION_INSTALLED, syncTriggersDisabled)) {
String sql = "CREATE FUNCTION $(functionName)() RETURNS " +
" integer PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA EXTERNAL NAME " +
" 'org.jumpmind.symmetric.db.derby.DerbyFunctions.isSyncDisabled' ";
install(sql, syncTriggersDisabled);
}

String syncTriggersSetDisabled = this.parameterService.getTablePrefix() + "_" + "sync_triggers_set_disabled";
if (!installed(SQL_FUNCTION_INSTALLED, syncTriggersSetDisabled)) {
String sql = "CREATE FUNCTION $(functionName)(state integer) RETURNS " +
" integer PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA EXTERNAL NAME " +
" 'org.jumpmind.symmetric.db.derby.DerbyFunctions.setSyncDisabled' ";
install(sql, syncTriggersSetDisabled);
}

String syncNodeSetDisabled = this.parameterService.getTablePrefix() + "_" + "sync_node_set_disabled";
if (!installed(SQL_FUNCTION_INSTALLED, syncNodeSetDisabled)) {
String sql = "CREATE FUNCTION $(functionName)(nodeId varchar(50)) RETURNS " +
" varchar(50) PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA EXTERNAL NAME " +
" 'org.jumpmind.symmetric.db.derby.DerbyFunctions.setSyncNodeDisabled' ";
install(sql, syncNodeSetDisabled);
}

String saveData = this.parameterService.getTablePrefix() + "_" + "save_data";
if (!installed(SQL_FUNCTION_INSTALLED, saveData)) {
String sql = "CREATE PROCEDURE $(functionName)(enabled integer, schemaName varchar(50), prefixName varchar(50), " +
" tableName varchar(50), channelName varchar(50), dmlType varchar(1), triggerHistId int, " +
" transactionId varchar(1000), externalData varchar(50), columnNames varchar(32672), pkColumnNames varchar(32672)) " +
" PARAMETER STYLE JAVA LANGUAGE JAVA MODIFIES SQL DATA EXTERNAL NAME " +
" 'org.jumpmind.symmetric.db.derby.DerbyFunctions.insertData' ";
install(sql, saveData);
}

}

@Override
protected void dropRequiredFunctions() {
String escape = this.parameterService.getTablePrefix() + "_" + "escape";
if (installed(SQL_FUNCTION_INSTALLED, escape)) {
uninstall(SQL_DROP_FUNCTION, escape);
}

String clobToString = this.parameterService.getTablePrefix() + "_" + "clob_to_string";
if (installed(SQL_FUNCTION_INSTALLED, clobToString)) {
uninstall(SQL_DROP_FUNCTION, clobToString);
}

String blobToString = this.parameterService.getTablePrefix() + "_" + "blob_to_string";
if (installed(SQL_FUNCTION_INSTALLED, blobToString)) {
uninstall(SQL_DROP_FUNCTION, blobToString);
}

String transactionId = this.parameterService.getTablePrefix() + "_" + "transaction_id";
if (installed(SQL_FUNCTION_INSTALLED, transactionId)) {
uninstall(SQL_DROP_FUNCTION, transactionId);
}

String syncTriggersDisabled = this.parameterService.getTablePrefix() + "_" + "sync_triggers_disabled";
if (installed(SQL_FUNCTION_INSTALLED, syncTriggersDisabled)) {
uninstall(SQL_DROP_FUNCTION, syncTriggersDisabled);
}

String syncTriggersSetDisabled = this.parameterService.getTablePrefix() + "_" + "sync_triggers_set_disabled";
if (installed(SQL_FUNCTION_INSTALLED, syncTriggersSetDisabled)) {
uninstall(SQL_DROP_FUNCTION, syncTriggersSetDisabled);
}

String syncNodeSetDisabled = this.parameterService.getTablePrefix() + "_" + "sync_node_set_disabled";
if (installed(SQL_FUNCTION_INSTALLED, syncNodeSetDisabled)) {
uninstall(SQL_DROP_FUNCTION, syncNodeSetDisabled);
}

String saveData = this.parameterService.getTablePrefix() + "_" + "save_data";
if (installed(SQL_FUNCTION_INSTALLED, saveData)) {
uninstall(SQL_DROP_PROCEDURE, saveData);
}

}

@Override
public boolean supportsTransactionId() {
Expand Down
Expand Up @@ -14,8 +14,6 @@ public class DerbyTriggerTemplate extends AbstractTriggerTemplate {
public DerbyTriggerTemplate(ISymmetricDialect symmetricDialect) {
super(symmetricDialect);
//@formatter:off
dropFunctionSql = "DROP FUNCTION $(functionName)";
functionInstalledSql = "select count(*) from sys.sysaliases where alias = upper('$(functionName)')" ;
emptyColumnTemplate = "''" ;
stringColumnTemplate = "sym_escape($(tableAlias).\"$(columnName)\")" ;
xmlColumnTemplate = null;
Expand All @@ -35,46 +33,6 @@ public DerbyTriggerTemplate(ISymmetricDialect symmetricDialect) {
newColumnPrefix = "" ;
otherColumnTemplate = null;

functionTemplatesToInstall = new HashMap<String,String>();
functionTemplatesToInstall.put("escape" ,
"CREATE FUNCTION $(functionName)(STR VARCHAR(10000)) RETURNS " +
" VARCHAR(10000) PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA EXTERNAL NAME " +
" 'org.jumpmind.symmetric.db.derby.DerbyFunctions.escape' " );
functionTemplatesToInstall.put("clob_to_string" ,
"CREATE FUNCTION $(functionName)(columnName varchar(50), " +
" tableName varchar(50), whereClause varchar(8000)) RETURNS " +
" varchar(32672) PARAMETER STYLE JAVA READS SQL DATA LANGUAGE JAVA EXTERNAL NAME " +
" 'org.jumpmind.symmetric.db.derby.DerbyFunctions.clobToString' " );
functionTemplatesToInstall.put("blob_to_string" ,
"CREATE FUNCTION $(functionName)(columnName varchar(50), " +
" tableName varchar(50), whereClause varchar(8000)) RETURNS " +
" varchar(32672) PARAMETER STYLE JAVA READS SQL DATA LANGUAGE JAVA EXTERNAL NAME " +
" 'org.jumpmind.symmetric.db.derby.DerbyFunctions.blobToString' " );

functionTemplatesToInstall.put("transaction_id" ,
"CREATE FUNCTION $(functionName)() RETURNS " +
" varchar(100) PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA EXTERNAL NAME " +
" 'org.jumpmind.symmetric.db.derby.DerbyFunctions.getTransactionId' " );
functionTemplatesToInstall.put("sync_triggers_disabled" ,
"CREATE FUNCTION $(functionName)() RETURNS " +
" integer PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA EXTERNAL NAME " +
" 'org.jumpmind.symmetric.db.derby.DerbyFunctions.isSyncDisabled' " );
functionTemplatesToInstall.put("sync_triggers_set_disabled" ,
"CREATE FUNCTION $(functionName)(state integer) RETURNS " +
" integer PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA EXTERNAL NAME " +
" 'org.jumpmind.symmetric.db.derby.DerbyFunctions.setSyncDisabled' " );
functionTemplatesToInstall.put("sync_node_set_disabled" ,
"CREATE FUNCTION $(functionName)(nodeId varchar(50)) RETURNS " +
" varchar(50) PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA EXTERNAL NAME " +
" 'org.jumpmind.symmetric.db.derby.DerbyFunctions.setSyncNodeDisabled' " );
functionTemplatesToInstall.put("save_data" ,
"CREATE PROCEDURE $(functionName)(enabled integer, schemaName varchar(50), prefixName varchar(50), " +
" tableName varchar(50), channelName varchar(50), dmlType varchar(1), triggerHistId int, " +
" transactionId varchar(1000), externalData varchar(50), columnNames varchar(32672), pkColumnNames varchar(32672)) " +
" PARAMETER STYLE JAVA LANGUAGE JAVA MODIFIES SQL DATA EXTERNAL NAME " +
" 'org.jumpmind.symmetric.db.derby.DerbyFunctions.insertData' " );


sqlTemplates = new HashMap<String,String>();
sqlTemplates.put("insertTriggerTemplate" ,
"CREATE TRIGGER $(triggerName) \n" +
Expand Down

0 comments on commit 7379d08

Please sign in to comment.