Skip to content

Commit

Permalink
Merge branch '3.8' of https://github.com/JumpMind/symmetric-ds.git in…
Browse files Browse the repository at this point in the history
…to 3.8
  • Loading branch information
gregwilmer committed Sep 18, 2017
2 parents 299676e + 3be9a8e commit cd21af9
Show file tree
Hide file tree
Showing 5 changed files with 72 additions and 204 deletions.
Expand Up @@ -24,89 +24,35 @@
import org.jumpmind.db.platform.PermissionType;
import org.jumpmind.db.sql.ISqlTransaction;
import org.jumpmind.db.util.BinaryEncoding;
import org.jumpmind.symmetric.common.ParameterConstants;
import org.jumpmind.symmetric.db.AbstractSymmetricDialect;
import org.jumpmind.symmetric.db.ISymmetricDialect;
import org.jumpmind.symmetric.model.Trigger;
import org.jumpmind.symmetric.service.IParameterService;

public class RaimaSymmetricDialect extends AbstractSymmetricDialect implements ISymmetricDialect {

static final String SQL_DROP_FUNCTION = "drop function $(functionName)";

static final String SQL_FUNCTION_INSTALLED = "select count(*) from system.functions where functionname='$(functionName)' and schema in (select database() from system.dual)" ;

static final String SYNC_TRIGGERS_DISABLED_USER_VARIABLE = "sync_triggers_disabled";

static final String SYNC_TRIGGERS_DISABLED_NODE_VARIABLE = "sync_node_disabled";

public RaimaSymmetricDialect(IParameterService parameterService, IDatabasePlatform platform) {
super(parameterService, platform);
this.triggerTemplate = new RaimaTriggerTemplate(this);
this.parameterService = parameterService;

this.parameterService = parameterService;
}

@Override
public boolean supportsTransactionId() {
return true;
}

public String getTransactionTriggerExpression(String defaultCatalog, String defaultSchema,
Trigger trigger) {
return "(select transid from system.connections where connid = getconnectionid())";
public void createRequiredDatabaseObjects() {
}

@Override
public void createRequiredDatabaseObjects() {
String function = this.parameterService.getTablePrefix() + "_get_session_variable";
if(!installed(SQL_FUNCTION_INSTALLED, function)){
String sql = "create function $(functionName)(akey string) returns string " +
" as " +
" VAR l_out string = NULL; " +
" try " +
" l_out = (SELECT context_value from session_cache where name = akey); " +
" catch(error) " +
" create temp table if not exists session_cache (name string primary key, context_value string) on commit preserve rows; " +
" end_try; " +
" return l_out; " +
" END_FUNCTION;";
install(sql, function);
}
function = this.parameterService.getTablePrefix() + "_set_session_variable";
if(!installed(SQL_FUNCTION_INSTALLED, function)){
String sql = "create function $(functionName)(akey string, avalue string) returns string " +
" as " +
" VAR l_new string = NULL; " +
" try " +
" INSERT INTO session_cache (name, context_value) values (akey, avalue) ON DUPLICATE KEY UPDATE context_value = avalue; " +
" catch(error) " +
" create temp table if not exists session_cache (name string primary key, context_value string) on commit preserve rows; " +
" INSERT INTO session_cache VALUES (akey, avalue); "+
" l_new = error; "+
" end_try; " +
" return l_new; " +
" END_FUNCTION;";
install(sql, function);
}
public void dropRequiredDatabaseObjects() {
}

@Override
public void dropRequiredDatabaseObjects() {
String function = this.parameterService.getTablePrefix() + "_get_session_variable";
if (installed(SQL_FUNCTION_INSTALLED, function)) {
uninstall(SQL_DROP_FUNCTION, function);
}

function = this.parameterService.getTablePrefix() + "_set_session_variable";
if (installed(SQL_FUNCTION_INSTALLED, function)){
uninstall(SQL_DROP_FUNCTION, function);
}
public boolean supportsTransactionId() {
return false;
}

@Override
protected boolean doesTriggerExistOnPlatform(String catalog, String schema, String tableName,
String triggerName) {
/*
schema = schema == null ? (platform.getDefaultSchema() == null ? null : platform
.getDefaultSchema()) : schema;
String checkSchemaSql = (schema != null && schema.length() > 0) ? " and schema='"
Expand All @@ -117,11 +63,14 @@ protected boolean doesTriggerExistOnPlatform(String catalog, String schema, Stri
.queryForInt(
"select count(*) from system.triggers where triggername = ? and tablename = ?"
+ checkSchemaSql, new Object[] { triggerName, tableName }) > 0;
*/
return true;
}

@Override
public void removeTrigger(StringBuilder sqlBuffer, String catalogName, String schemaName,
String triggerName, String tableName) {
/*
final String sql = "drop trigger " + triggerName;
logSql(sql, sqlBuffer);
if (parameterService.is(ParameterConstants.AUTO_SYNC_TRIGGERS)) {
Expand All @@ -131,23 +80,29 @@ public void removeTrigger(StringBuilder sqlBuffer, String catalogName, String sc
log.warn("Trigger does not exist");
}
}
*/
}

public void disableSyncTriggers(ISqlTransaction transaction, String nodeId) {
/*
transaction.prepareAndExecute("select " + this.parameterService.getTablePrefix() + "_set_session_variable('" + SYNC_TRIGGERS_DISABLED_USER_VARIABLE + "', '1') from dual");
if (nodeId != null) {
transaction
.prepareAndExecute("select " + this.parameterService.getTablePrefix()+ "_set_session_variable('" + SYNC_TRIGGERS_DISABLED_NODE_VARIABLE + "','" + nodeId + "') from dual");
}
*/
}

public void enableSyncTriggers(ISqlTransaction transaction) {
/*
transaction.prepareAndExecute("select " + this.parameterService.getTablePrefix() + "_set_session_variable('" + SYNC_TRIGGERS_DISABLED_USER_VARIABLE + "', null) from dual");
transaction.prepareAndExecute("select " + this.parameterService.getTablePrefix() + "_set_session_variable('" + SYNC_TRIGGERS_DISABLED_NODE_VARIABLE + "', null) from dual");
*/
}

public String getSyncTriggersExpression() {
return this.parameterService.getTablePrefix()+ "_get_session_variable('" + SYNC_TRIGGERS_DISABLED_USER_VARIABLE + "') is null";
//return this.parameterService.getTablePrefix()+ "_get_session_variable('" + SYNC_TRIGGERS_DISABLED_USER_VARIABLE + "') is null";
return "1=1";
}

public void cleanDatabase() {
Expand All @@ -173,5 +128,6 @@ public PermissionType[] getSymTablePermissions() {
PermissionType[] permissions = { PermissionType.CREATE_TABLE, PermissionType.DROP_TABLE, PermissionType.CREATE_TRIGGER, PermissionType.DROP_TRIGGER};
return permissions;
}

}

Expand Up @@ -30,7 +30,6 @@
import org.jumpmind.db.alter.RemoveColumnChange;
import org.jumpmind.db.alter.TableChange;
import org.jumpmind.db.model.Column;
import org.jumpmind.db.model.ColumnTypes;
import org.jumpmind.db.model.Database;
import org.jumpmind.db.model.ForeignKey;
import org.jumpmind.db.model.IIndex;
Expand All @@ -51,30 +50,34 @@ public RaimaDdlBuilder() {
databaseInfo.setNonPKIdentityColumnsSupported(true);
databaseInfo.setSyntheticDefaultValueForRequiredReturned(true);
databaseInfo.setAlterTableForDropUsed(true);
databaseInfo.setCommentPrefix("//");
databaseInfo.setDelimiterToken("`");
databaseInfo.setDelimiterToken("");

databaseInfo.addNativeTypeMapping(Types.BIT, "BOOLEAN", Types.BOOLEAN);
databaseInfo.addNativeTypeMapping(Types.BLOB, "BLOB");
databaseInfo.addNativeTypeMapping(Types.CLOB, "TEXT");
databaseInfo.addNativeTypeMapping(Types.FLOAT, "DOUBLE");
databaseInfo.addNativeTypeMapping(Types.DOUBLE, "DOUBLE");
databaseInfo.addNativeTypeMapping(Types.LONGVARCHAR, "TEXT");
databaseInfo.addNativeTypeMapping(Types.VARBINARY, "VARBINARY");
databaseInfo.addNativeTypeMapping(Types.LONGVARBINARY, "BLOB");
databaseInfo.addNativeTypeMapping(Types.NUMERIC, "DECIMAL");
databaseInfo.addNativeTypeMapping(Types.CHAR, "CHAR");
databaseInfo.addNativeTypeMapping(Types.VARCHAR, "VARCHAR");
databaseInfo.addNativeTypeMapping(Types.TIMESTAMP, "TIMESTAMP");
databaseInfo.addNativeTypeMapping(Types.TINYINT, "SMALLINT",Types.SMALLINT);
databaseInfo.addNativeTypeMapping(Types.NCHAR, "WCHAR");
databaseInfo.addNativeTypeMapping(Types.NVARCHAR, "WVARCHAR");
databaseInfo.addNativeTypeMapping(Types.LONGVARCHAR, "LONG VARCHAR");
databaseInfo.addNativeTypeMapping(Types.CLOB, "CLOB");
databaseInfo.addNativeTypeMapping(Types.LONGNVARCHAR, "LONG NVARCHAR");
databaseInfo.addNativeTypeMapping(Types.NCLOB, "WCLOB");
databaseInfo.addNativeTypeMapping(Types.BINARY, "BINARY");
databaseInfo.addNativeTypeMapping(Types.VARBINARY, "VARBINARY");
databaseInfo.addNativeTypeMapping(Types.LONGVARBINARY, "LONG VARBINARY");
databaseInfo.addNativeTypeMapping(Types.BLOB, "BLOB");
databaseInfo.addNativeTypeMapping(Types.BIT, "BOOLEAN");
databaseInfo.addNativeTypeMapping(Types.BOOLEAN, "BOOLEAN");
databaseInfo.addNativeTypeMapping(Types.TINYINT, "TINYINT");
databaseInfo.addNativeTypeMapping(Types.SMALLINT, "SMALLINT");
databaseInfo.addNativeTypeMapping(Types.INTEGER, "INTEGER");
databaseInfo.addNativeTypeMapping(Types.BIGINT, "BIGINT");
databaseInfo.addNativeTypeMapping(Types.BOOLEAN, "BOOLEAN",Types.BOOLEAN);
databaseInfo.addNativeTypeMapping(Types.REAL, "FLOAT");
databaseInfo.addNativeTypeMapping(Types.FLOAT, "FLOAT");
databaseInfo.addNativeTypeMapping(Types.DOUBLE, "DOUBLE");
databaseInfo.addNativeTypeMapping(Types.NUMERIC, "DECIMAL");
databaseInfo.addNativeTypeMapping(Types.DECIMAL, "DECIMAL");
databaseInfo.addNativeTypeMapping(Types.DATE, "DATE");
databaseInfo.addNativeTypeMapping(Types.TIME, "TIME");
databaseInfo.addNativeTypeMapping(ColumnTypes.NCHAR, "NATIONAL CHARACTER");
databaseInfo.addNativeTypeMapping(Types.TIME, "TIME");
databaseInfo.addNativeTypeMapping(Types.TIMESTAMP, "TIMESTAMP");

databaseInfo.setDefaultSize(Types.CHAR, 254);
databaseInfo.setDefaultSize(Types.VARCHAR, 254);
Expand Down Expand Up @@ -125,19 +128,26 @@ public boolean areColumnSizesTheSame(Column sourceColumn, Column targetColumn){

@Override
protected void dropTable(Table table, StringBuilder ddl, boolean temporary, boolean recreate) {
ddl.append("DROP TABLE IF EXISTS ");
ddl.append("DROP TABLE ");
ddl.append(getFullyQualifiedTableNameShorten(table));
printEndOfStatement(ddl);
}

protected void writeColumnType(Table table, Column column, StringBuilder ddl) {
if (column.isAutoIncrement()) {
ddl.append("ROWID NOT NULL");
} else {
super.writeColumnType(table, column, ddl);
}
}

@Override
protected void writeColumnAutoIncrementStmt(Table table, Column column, StringBuilder ddl) {
ddl.append("GENERATED BY DEFAULT AS IDENTITY");
}

@Override
public String getSelectLastIdentityValues(Table table) {
return "SELECT LAST_INSERT_ID() FROM SYSTEM.DUAL";
return "SELECT LAST_INSERT_ID()";
}

@Override
Expand Down Expand Up @@ -221,7 +231,6 @@ public void writeExternalIndexDropStmt(Table table, IIndex index, StringBuilder
writeTableAlterStmt(table, ddl);
ddl.append("DROP INDEX ");
printIdentifier(getIndexName(index), ddl);
ddl.append(" IF EXISTS ");
printEndOfStatement(ddl);
}

Expand Down
Expand Up @@ -19,7 +19,6 @@
package org.jumpmind.db.platform.raima;
import javax.sql.DataSource;

import org.apache.commons.lang.StringUtils;
import org.jumpmind.db.platform.AbstractJdbcDatabasePlatform;
import org.jumpmind.db.platform.DatabaseNamesConstants;
import org.jumpmind.db.platform.PermissionResult;
Expand Down Expand Up @@ -64,16 +63,13 @@ public String getName() {
}

public String getDefaultSchema() {
if(StringUtils.isBlank(defaultSchema)){
defaultSchema = getSqlTemplate().queryForObject("select upper(database()) from dual", String.class);
}
return defaultSchema;
return null;
}

public String getDefaultCatalog() {
return null;
}

@Override
public PermissionResult getCreateSymTriggerPermission() {
String delimiter = getDatabaseInfo().getDelimiterToken();
Expand All @@ -87,10 +83,10 @@ public PermissionResult getCreateSymTriggerPermission() {
PermissionResult result = new PermissionResult(PermissionType.CREATE_TRIGGER, Status.FAIL);

try {
getSqlTemplate().update(dropTriggerSql);
getSqlTemplate().update(triggerSql);
//getSqlTemplate().update(dropTriggerSql);
//getSqlTemplate().update(triggerSql);
result.setStatus(Status.PASS);
getSqlTemplate().update(dropTriggerSql);
//getSqlTemplate().update(dropTriggerSql);
} catch (SqlException e) {
result.setException(e);
result.setSolution("Grant CREATE TRIGGER permission or TRIGGER permission");
Expand All @@ -107,10 +103,10 @@ public PermissionResult getCreateSymRoutinePermission() {
PermissionResult result = new PermissionResult(PermissionType.CREATE_ROUTINE, Status.FAIL);

try {
getSqlTemplate().update(dropSql);
getSqlTemplate().update(routineSql);
//getSqlTemplate().update(dropSql);
//getSqlTemplate().update(routineSql);
result.setStatus(Status.PASS);
getSqlTemplate().update(dropSql);
//getSqlTemplate().update(dropSql);
} catch (SqlException e) {
result.setException(e);
result.setSolution("Grant CREATE ROUTINE Privilege");
Expand All @@ -124,7 +120,7 @@ protected PermissionResult getDropSymTriggerPermission() {
PermissionResult result = new PermissionResult(PermissionType.DROP_TRIGGER, Status.FAIL);

try {
getSqlTemplate().update(dropTriggerSql);
//getSqlTemplate().update(dropTriggerSql);
result.setStatus(Status.PASS);
} catch (SqlException e) {
result.setException(e);
Expand Down

0 comments on commit cd21af9

Please sign in to comment.