-
Notifications
You must be signed in to change notification settings - Fork 222
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
aaa1d51
commit a7e4139
Showing
13 changed files
with
1,769 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
351 changes: 351 additions & 0 deletions
351
symmetric-client/src/main/java/org/jumpmind/symmetric/db/tibero/TiberoSymmetricDialect.java
Large diffs are not rendered by default.
Oops, something went wrong.
185 changes: 185 additions & 0 deletions
185
symmetric-client/src/main/java/org/jumpmind/symmetric/db/tibero/TiberoTriggerTemplate.java
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
512 changes: 512 additions & 0 deletions
512
symmetric-db/src/main/java/org/jumpmind/db/platform/tibero/TiberoDdlBuilder.java
Large diffs are not rendered by default.
Oops, something went wrong.
70 changes: 70 additions & 0 deletions
70
symmetric-db/src/main/java/org/jumpmind/db/platform/tibero/TiberoDmlStatement.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
package org.jumpmind.db.platform.tibero; | ||
|
||
import java.sql.Types; | ||
|
||
import org.jumpmind.db.model.Column; | ||
import org.jumpmind.db.model.TypeMap; | ||
import org.jumpmind.db.platform.DatabaseInfo; | ||
import org.jumpmind.db.sql.DmlStatement; | ||
|
||
public class TiberoDmlStatement extends DmlStatement { | ||
|
||
public TiberoDmlStatement(DmlType type, String catalogName, String schemaName, String tableName, | ||
Column[] keysColumns, Column[] columns, boolean[] nullKeyValues, | ||
DatabaseInfo databaseInfo, boolean useQuotedIdentifiers, String textColumnExpression) { | ||
super(type, catalogName, schemaName, tableName, keysColumns, columns, | ||
nullKeyValues, databaseInfo, useQuotedIdentifiers, textColumnExpression); | ||
} | ||
|
||
@Override | ||
protected void appendColumnParameter(StringBuilder sql, Column column) { | ||
String name = column.getJdbcTypeName(); | ||
if (column.isTimestampWithTimezone()) { | ||
sql.append("TO_TIMESTAMP_TZ(?, 'YYYY-MM-DD HH24:MI:SS.FF TZH:TZM')") | ||
.append(","); | ||
} else if (name != null && ( | ||
name.toUpperCase().contains(TypeMap.GEOMETRY) || | ||
name.toUpperCase().contains(TypeMap.GEOGRAPHY))) { | ||
sql.append("SYM_WKT2GEOM(?)").append(","); | ||
} else { | ||
super.appendColumnParameter(sql, column); | ||
} | ||
} | ||
|
||
@Override | ||
protected void appendColumnEquals(StringBuilder sql, Column column) { | ||
if (column.isTimestampWithTimezone()) { | ||
sql.append(quote).append(column.getName()).append(quote) | ||
.append(" = TO_TIMESTAMP_TZ(?, 'YYYY-MM-DD HH24:MI:SS.FF TZH:TZM')"); | ||
} else if (column.getJdbcTypeName().toUpperCase().contains(TypeMap.GEOMETRY) || | ||
column.getJdbcTypeName().toUpperCase().contains(TypeMap.GEOGRAPHY)) { | ||
sql.append(quote).append(column.getName()).append(quote).append(" = ") | ||
.append("SYM_WKT2GEOM(?)"); | ||
} else { | ||
super.appendColumnEquals(sql, column); | ||
} | ||
} | ||
|
||
@Override | ||
protected int getTypeCode(Column column, boolean isDateOverrideToTimestamp) { | ||
int typeCode = super.getTypeCode(column, isDateOverrideToTimestamp); | ||
if (column.getJdbcTypeName().startsWith("XML")) { | ||
typeCode = Types.VARCHAR; | ||
} else if (typeCode == Types.LONGVARCHAR) { | ||
typeCode = Types.CLOB; | ||
} | ||
return typeCode; | ||
} | ||
|
||
@Override | ||
protected void appendColumnNameForSql(StringBuilder sql, Column column, boolean select) { | ||
String columnName = column.getName(); | ||
if (select && column.isTimestampWithTimezone()) { | ||
sql.append("to_char(").append(quote).append(columnName).append(quote).append(", 'YYYY-MM-DD HH24:MI:SS.FF TZH:TZM') as ").append(columnName); | ||
} else { | ||
super.appendColumnNameForSql(sql, column, select); | ||
} | ||
} | ||
|
||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
116 changes: 116 additions & 0 deletions
116
symmetric-jdbc/src/main/java/org/jumpmind/db/platform/tibero/TiberoDatabasePlatform.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,116 @@ | ||
package org.jumpmind.db.platform.tibero; | ||
|
||
import javax.sql.DataSource; | ||
|
||
import org.apache.commons.lang.StringUtils; | ||
import org.jumpmind.db.model.Column; | ||
import org.jumpmind.db.platform.AbstractJdbcDatabasePlatform; | ||
import org.jumpmind.db.platform.DatabaseNamesConstants; | ||
import org.jumpmind.db.platform.PermissionResult; | ||
import org.jumpmind.db.platform.PermissionResult.Status; | ||
import org.jumpmind.db.platform.PermissionType; | ||
import org.jumpmind.db.platform.tibero.TiberoDdlBuilder; | ||
import org.jumpmind.db.platform.tibero.TiberoDdlReader; | ||
import org.jumpmind.db.platform.tibero.TiberoJdbcSqlTemplate; | ||
import org.jumpmind.db.platform.tibero.TiberoLobHandler; | ||
import org.jumpmind.db.sql.ISqlTemplate; | ||
import org.jumpmind.db.sql.SqlException; | ||
import org.jumpmind.db.sql.SqlTemplateSettings; | ||
|
||
public class TiberoDatabasePlatform extends AbstractJdbcDatabasePlatform { | ||
|
||
public static final String JDBC_DRIVER = "com.tmax.tibero.jdbc.TbDriver"; | ||
|
||
public static final String JDBC_SUBPROTOCOL_THIN = "tibero:thin"; | ||
|
||
/* | ||
* Creates a new platform instance. | ||
*/ | ||
public TiberoDatabasePlatform(DataSource dataSource, SqlTemplateSettings settings) { | ||
super(dataSource, settings); | ||
} | ||
|
||
@Override | ||
protected TiberoDdlBuilder createDdlBuilder() { | ||
return new TiberoDdlBuilder(); | ||
} | ||
|
||
@Override | ||
protected TiberoDdlReader createDdlReader() { | ||
return new TiberoDdlReader(this); | ||
} | ||
|
||
@Override | ||
protected TiberoJdbcSqlTemplate createSqlTemplate() { | ||
return new TiberoJdbcSqlTemplate(dataSource, settings, new TiberoLobHandler(), getDatabaseInfo()); | ||
} | ||
|
||
@Override | ||
protected ISqlTemplate createSqlTemplateDirty() { | ||
return sqlTemplate; | ||
} | ||
|
||
public String getName() { | ||
return DatabaseNamesConstants.TIBERO; | ||
} | ||
|
||
public String getDefaultCatalog() { | ||
return null; | ||
} | ||
|
||
public String getDefaultSchema() { | ||
if (StringUtils.isBlank(defaultSchema)) { | ||
defaultSchema = (String) getSqlTemplate().queryForObject( | ||
"SELECT sys_context('USERENV', 'CURRENT_SCHEMA') FROM dual", String.class); | ||
} | ||
return defaultSchema; | ||
} | ||
|
||
@Override | ||
public boolean canColumnBeUsedInWhereClause(Column column) { | ||
String jdbcTypeName = column.getJdbcTypeName(); | ||
return !column.isOfBinaryType() || "RAW".equals(jdbcTypeName); | ||
} | ||
|
||
@Override | ||
public PermissionResult getCreateSymTriggerPermission() { | ||
String delimiter = getDatabaseInfo().getDelimiterToken(); | ||
delimiter = delimiter != null ? delimiter : ""; | ||
|
||
String triggerSql = "CREATE OR REPLACE TRIGGER TEST_TRIGGER AFTER UPDATE ON " + delimiter + PERMISSION_TEST_TABLE_NAME + delimiter + " BEGIN END"; | ||
|
||
PermissionResult result = new PermissionResult(PermissionType.CREATE_TRIGGER, Status.FAIL); | ||
|
||
try { | ||
getSqlTemplate().update(triggerSql); | ||
result.setStatus(Status.PASS); | ||
} catch (SqlException e) { | ||
result.setException(e); | ||
result.setSolution("Grant CREATE TRIGGER permission or TRIGGER permission"); | ||
} | ||
|
||
return result; | ||
} | ||
|
||
@Override | ||
public PermissionResult getExecuteSymPermission() { | ||
String delimiter = getDatabaseInfo().getDelimiterToken(); | ||
delimiter = delimiter != null ? delimiter : ""; | ||
|
||
String executeSql = "SELECT DBMS_LOB.GETLENGTH('TEST'), UTL_RAW.CAST_TO_RAW('TEST') FROM DUAL"; | ||
|
||
PermissionResult result = new PermissionResult(PermissionType.EXECUTE, Status.FAIL); | ||
|
||
try { | ||
getSqlTemplate().update(executeSql); | ||
result.setStatus(Status.PASS); | ||
} catch (SqlException e) { | ||
result.setException(e); | ||
result.setSolution("Grant EXECUTE on DBMS_LOB and UTL_RAW"); | ||
} | ||
|
||
return result; | ||
} | ||
|
||
} | ||
|
Oops, something went wrong.