Skip to content

Commit

Permalink
0001959: Add feature where character data can be modified by an prope…
Browse files Browse the repository at this point in the history
…rty expression in order to support "weird" character issues
  • Loading branch information
chenson42 committed Sep 12, 2014
1 parent 39b95bb commit e24f9ad
Show file tree
Hide file tree
Showing 5 changed files with 100 additions and 171 deletions.
Expand Up @@ -35,41 +35,21 @@ public MySqlDmlStatement(DmlType type, String catalogName, String schemaName, St
}

@Override
public void appendColumnQuestions(StringBuilder sql, Column[] columns) {
for (int i = 0; i < columns.length; i++) {
if (columns[i] != null) {
if (columns[i].getJdbcTypeName() != null && columns[i].getJdbcTypeName().toUpperCase().contains(TypeMap.GEOMETRY)) {
sql.append("geomfromtext(?)").append(",");
} else {
sql.append("?").append(",");
}
}
}

if (columns.length > 0) {
sql.replace(sql.length() - 1, sql.length(), "");
protected void appendColumnQuestion(StringBuilder sql, Column column) {
if (column.getJdbcTypeName() != null && column.getJdbcTypeName().toUpperCase().contains(TypeMap.GEOMETRY)) {
sql.append("geomfromtext(?)").append(",");
} else {
super.appendColumnQuestion(sql, column);
}
}

@Override
public void appendColumnEquals(StringBuilder sql, Column[] columns, boolean[] nullValues, String separator) {
for (int i = 0; i < columns.length; i++) {
if (columns[i] != null) {
if (nullValues[i]) {
sql.append(quote).append(columns[i].getName()).append(quote).append(" is NULL")
.append(separator);
} else if (columns[i].getJdbcTypeName().toUpperCase().contains(TypeMap.GEOMETRY)) {
sql.append(quote).append(columns[i].getName()).append(quote).append(" = ")
.append("geomfromtext(?)").append(separator);
} else {
sql.append(quote).append(columns[i].getName()).append(quote).append(" = ?")
.append(separator);
}
}
}

if (columns.length > 0) {
sql.replace(sql.length() - separator.length(), sql.length(), "");
protected void appendColumnEquals(StringBuilder sql, Column column, String separator) {
if (column.getJdbcTypeName().toUpperCase().contains(TypeMap.GEOMETRY)) {
sql.append(quote).append(column.getName()).append(quote).append(" = ")
.append("geomfromtext(?)").append(separator);
} else {
super.appendColumnEquals(sql, column, separator);
}
}

Expand Down
Expand Up @@ -35,54 +35,34 @@ public OracleDmlStatement(DmlType type, String catalogName, String schemaName, S
super(type, catalogName, schemaName, tableName, keysColumns, columns,
nullKeyValues, databaseInfo, useQuotedIdentifiers, textColumnExpression);
}

@Override
public void appendColumnQuestions(StringBuilder sql, Column[] columns) {
for (int i = 0; i < columns.length; i++) {
if (columns[i] != null) {
String name = columns[i].getJdbcTypeName();
if (columns[i].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)) {
sql.append("SYM_WKT2GEOM(?)").append(",");
} else {
sql.append("?").append(",");
}
}
}

if (columns.length > 0) {
sql.replace(sql.length() - 1, sql.length(), "");
protected void appendColumnQuestion(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)) {
sql.append("SYM_WKT2GEOM(?)").append(",");
} else {
super.appendColumnQuestion(sql, column);
}
}

@Override
public void appendColumnEquals(StringBuilder sql, Column[] columns, boolean[] nullValues, String separator) {
for (int i = 0; i < columns.length; i++) {
if (columns[i] != null) {
if (nullValues[i]) {
sql.append(quote).append(columns[i].getName()).append(quote).append(" is NULL")
.append(separator);
} else if (columns[i].isTimestampWithTimezone()) {
sql.append(quote).append(columns[i].getName()).append(quote)
.append(" = TO_TIMESTAMP_TZ(?, 'YYYY-MM-DD HH24:MI:SS.FF TZH:TZM')")
.append(separator);
} else if (columns[i].getJdbcTypeName().toUpperCase().contains(TypeMap.GEOMETRY)) {
sql.append(quote).append(columns[i].getName()).append(quote).append(" = ")
.append("SYM_WKT2GEOM(?)").append(separator);
} else {
sql.append(quote).append(columns[i].getName()).append(quote).append(" = ?")
.append(separator);
}
}
}

if (columns.length > 0) {
sql.replace(sql.length() - separator.length(), sql.length(), "");
}
protected void appendColumnEquals(StringBuilder sql, Column column, String separator) {
if (column.isTimestampWithTimezone()) {
sql.append(quote).append(column.getName()).append(quote)
.append(" = TO_TIMESTAMP_TZ(?, 'YYYY-MM-DD HH24:MI:SS.FF TZH:TZM')")
.append(separator);
} else if (column.getJdbcTypeName().toUpperCase().contains(TypeMap.GEOMETRY)) {
sql.append(quote).append(column.getName()).append(quote).append(" = ")
.append("SYM_WKT2GEOM(?)").append(separator);
} else {
super.appendColumnEquals(sql, column, separator);
}
}

@Override
protected int getTypeCode(Column column, boolean isDateOverrideToTimestamp) {
int typeCode = super.getTypeCode(column, isDateOverrideToTimestamp);
Expand Down
Expand Up @@ -52,7 +52,7 @@ public String buildInsertSql(String tableName, Column[] keyColumns, Column[] col
if (keyColumns == null || keyColumns.length == 0) {
sql.append("1 != 1");
} else {
appendColumnEquals(sql, keyColumns, " and ");
appendColumnsEquals(sql, keyColumns, " and ");
}
sql.append(") is null)");
return sql.toString();
Expand Down Expand Up @@ -112,61 +112,41 @@ protected int[] buildTypes(Column[] keys, Column[] columns, boolean isDateOverri
}

@Override
public void appendColumnQuestions(StringBuilder sql, Column[] columns) {
for (int i = 0; i < columns.length; i++) {
if (columns[i] != null) {
if (columns[i].isTimestampWithTimezone()) {
sql.append("cast(? as timestamp with time zone)").append(",");
} else if (columns[i].getJdbcTypeName() != null && columns[i].getJdbcTypeName().toUpperCase().contains(TypeMap.UUID)) {
sql.append("cast(? as uuid)").append(",");
} else if (columns[i].getJdbcTypeName() != null && columns[i].getJdbcTypeName().toUpperCase().contains(TypeMap.VARBIT)) {
sql.append("cast(? as bit varying)").append(",");
} else if (columns[i].getJdbcTypeName() != null && columns[i].getJdbcTypeName().toUpperCase().contains(TypeMap.INTERVAL)) {
sql.append("cast(? as interval)").append(",");
} else if (columns[i].getJdbcTypeName() != null && columns[i].getJdbcTypeName().toUpperCase().contains(TypeMap.GEOMETRY)) {
sql.append("ST_GEOMFROMTEXT(?)").append(",");
} else {
sql.append("?").append(",");
}
}
}

if (columns.length > 0) {
sql.replace(sql.length() - 1, sql.length(), "");
protected void appendColumnQuestion(StringBuilder sql, Column column) {
if (column.isTimestampWithTimezone()) {
sql.append("cast(? as timestamp with time zone)").append(",");
} else if (column.getJdbcTypeName() != null && column.getJdbcTypeName().toUpperCase().contains(TypeMap.UUID)) {
sql.append("cast(? as uuid)").append(",");
} else if (column.getJdbcTypeName() != null && column.getJdbcTypeName().toUpperCase().contains(TypeMap.VARBIT)) {
sql.append("cast(? as bit varying)").append(",");
} else if (column.getJdbcTypeName() != null && column.getJdbcTypeName().toUpperCase().contains(TypeMap.INTERVAL)) {
sql.append("cast(? as interval)").append(",");
} else if (column.getJdbcTypeName() != null && column.getJdbcTypeName().toUpperCase().contains(TypeMap.GEOMETRY)) {
sql.append("ST_GEOMFROMTEXT(?)").append(",");
} else {
super.appendColumnQuestion(sql, column);
}
}

@Override
public void appendColumnEquals(StringBuilder sql, Column[] columns, boolean[] nullValues, String separator) {
for (int i = 0; i < columns.length; i++) {
if (columns[i] != null) {
if (nullValues[i]) {
sql.append(quote).append(columns[i].getName()).append(quote)
.append(" is NULL").append(separator);
} else if (columns[i].isTimestampWithTimezone()) {
sql.append(quote).append(columns[i].getName()).append(quote)
.append(" = cast(? as timestamp with time zone)").append(separator);
} else if (columns[i].getJdbcTypeName().toUpperCase().contains(TypeMap.UUID)) {
sql.append(quote).append(columns[i].getName()).append(quote)
.append(" = cast(? as uuid)").append(separator);
} else if (columns[i].getJdbcTypeName().toUpperCase().contains(TypeMap.VARBIT)) {
sql.append(quote).append(columns[i].getName()).append(quote)
.append(" = cast(? as bit varying)").append(separator);
} else if (columns[i].getJdbcTypeName().toUpperCase().contains(TypeMap.INTERVAL)) {
sql.append(quote).append(columns[i].getName()).append(quote)
.append(" = cast(? as interval)").append(separator);
} else if (columns[i].getJdbcTypeName().toUpperCase().contains(TypeMap.GEOMETRY)) {
sql.append(quote).append(columns[i].getName()).append(quote)
.append(" = ST_GEOMFROMTEXT(?)").append(separator);
} else {
sql.append(quote).append(columns[i].getName()).append(quote).append(" = ?")
.append(separator);
}
}
}

if (columns.length > 0) {
sql.replace(sql.length() - separator.length(), sql.length(), "");
protected void appendColumnEquals(StringBuilder sql, Column column, String separator) {
if (column.isTimestampWithTimezone()) {
sql.append(quote).append(column.getName()).append(quote)
.append(" = cast(? as timestamp with time zone)").append(separator);
} else if (column.getJdbcTypeName().toUpperCase().contains(TypeMap.UUID)) {
sql.append(quote).append(column.getName()).append(quote)
.append(" = cast(? as uuid)").append(separator);
} else if (column.getJdbcTypeName().toUpperCase().contains(TypeMap.VARBIT)) {
sql.append(quote).append(column.getName()).append(quote)
.append(" = cast(? as bit varying)").append(separator);
} else if (column.getJdbcTypeName().toUpperCase().contains(TypeMap.INTERVAL)) {
sql.append(quote).append(column.getName()).append(quote)
.append(" = cast(? as interval)").append(separator);
} else if (column.getJdbcTypeName().toUpperCase().contains(TypeMap.GEOMETRY)) {
sql.append(quote).append(column.getName()).append(quote)
.append(" = ST_GEOMFROMTEXT(?)").append(separator);
} else {
super.appendColumnEquals(sql, column, separator);
}
}

Expand Down
Expand Up @@ -51,7 +51,7 @@ public String buildInsertSql(String tableName, Column[] keyColumns, Column[] col
if (keyColumns == null || keyColumns.length == 0) {
sql.append("1 != 1");
} else {
appendColumnEquals(sql, keyColumns, " and ");
appendColumnsEquals(sql, keyColumns, " and ");
}
sql.append(") = 0)");
return sql.toString();
Expand Down Expand Up @@ -109,24 +109,5 @@ protected int[] buildTypes(Column[] keys, Column[] columns, boolean isDateOverri
return super.buildTypes(keys, columns, isDateOverrideToTimestamp);
}
}

@Override
public void appendColumnEquals(StringBuilder sql, Column[] columns, boolean[] nullValues, String separator) {
for (int i = 0; i < columns.length; i++) {
if (columns[i] != null) {
if (nullValues[i]) {
sql.append(quote).append(columns[i].getName()).append(quote)
.append(" is NULL").append(separator);
} else {
sql.append(quote).append(columns[i].getName()).append(quote).append(" = ?")
.append(separator);
}
}
}

if (columns.length > 0) {
sql.replace(sql.length() - separator.length(), sql.length(), "");
}
}


}
52 changes: 30 additions & 22 deletions symmetric-db/src/main/java/org/jumpmind/db/sql/DmlStatement.java
Expand Up @@ -189,31 +189,31 @@ protected String buildUpsertSql(String tableName, Column[] keyColumns, Column[]

protected String buildUpdateSql(String tableName, Column[] keyColumns, Column[] columns) {
StringBuilder sql = new StringBuilder("update ").append(tableName).append(" set ");
appendColumnEquals(sql, columns, ", ");
appendColumnsEquals(sql, columns, ", ");
if (keyColumns != null && keyColumns.length > 0) {
sql.append(" where ");
appendColumnEquals(sql, keyColumns, nullKeyValues, " and ");
appendColumnsEquals(sql, keyColumns, nullKeyValues, " and ");
}
return sql.toString();
}

protected String buildDeleteSql(String tableName, Column[] keyColumns) {
StringBuilder sql = new StringBuilder("delete from ").append(tableName).append(" where ");
appendColumnEquals(sql, keyColumns, nullKeyValues, " and ");
appendColumnsEquals(sql, keyColumns, nullKeyValues, " and ");
return sql.toString();
}

protected String buildFromSql(String tableName, Column[] keyColumns) {
StringBuilder sql = new StringBuilder(" from ").append(tableName).append(" where ");
appendColumnEquals(sql, keyColumns, nullKeyValues, " and ");
appendColumnsEquals(sql, keyColumns, nullKeyValues, " and ");
return sql.toString();
}

protected String buildCountSql(String tableName, Column[] keyColumns) {
StringBuilder sql = new StringBuilder("select count(*) from ").append(tableName);
if (keyColumns != null && keyColumns.length > 0) {
sql.append(" where ");
appendColumnEquals(sql, keyColumns, nullKeyValues, " and ");
appendColumnsEquals(sql, keyColumns, nullKeyValues, " and ");
}
return sql.toString();
}
Expand All @@ -222,7 +222,7 @@ protected String buildSelectSql(String tableName, Column[] keyColumns, Column[]
StringBuilder sql = new StringBuilder("select ");
appendColumns(sql, columns, true);
sql.append(" from ").append(tableName).append(" where ");
appendColumnEquals(sql, keyColumns, nullKeyValues, " and ");
appendColumnsEquals(sql, keyColumns, nullKeyValues, " and ");
return sql.toString();
}

Expand All @@ -237,11 +237,11 @@ protected String buildSelectSqlAll(String tableName, Column[] keyColumns, Column
return sql.toString();
}

protected void appendColumnEquals(StringBuilder sql, Column[] columns, String separator) {
appendColumnEquals(sql, columns, new boolean[columns.length], separator);
protected void appendColumnsEquals(StringBuilder sql, Column[] columns, String separator) {
appendColumnsEquals(sql, columns, new boolean[columns.length], separator);
}

protected void appendColumnEquals(StringBuilder sql, Column[] columns, boolean[] nullColumns,
protected void appendColumnsEquals(StringBuilder sql, Column[] columns, boolean[] nullColumns,
String separator) {
int existingCount = 0;
if (columns != null) {
Expand All @@ -251,12 +251,7 @@ protected void appendColumnEquals(StringBuilder sql, Column[] columns, boolean[]
sql.append(separator);
}
if (!nullColumns[i]) {
boolean textType = TypeMap.isTextType(columns[i].getMappedTypeCode());
if (textType && isNotBlank(textColumnExpression)) {
sql.append(quote).append(columns[i].getName()).append(quote).append(" = ").append(textColumnExpression.replace("$(columnName)", "?"));
} else {
sql.append(quote).append(columns[i].getName()).append(quote).append(" = ?");
}
appendColumnEquals(sql, columns[i], separator);
} else {
sql.append(quote).append(columns[i].getName()).append(quote)
.append(" is NULL");
Expand All @@ -265,6 +260,16 @@ protected void appendColumnEquals(StringBuilder sql, Column[] columns, boolean[]
}
}
}

protected void appendColumnEquals(StringBuilder sql, Column column,
String separator) {
boolean textType = TypeMap.isTextType(column.getMappedTypeCode());
if (textType && isNotBlank(textColumnExpression)) {
sql.append(quote).append(column.getName()).append(quote).append(" = ").append(textColumnExpression.replace("$(columnName)", "?"));
} else {
sql.append(quote).append(column.getName()).append(quote).append(" = ?");
}
}

protected int appendColumns(StringBuilder sql, Column[] columns, boolean select) {
int existingCount = 0;
Expand All @@ -290,20 +295,23 @@ protected void appendColumnQuestions(StringBuilder sql, Column[] columns) {
if (columns != null) {
for (int i = 0; i < columns.length; i++) {
if (columns[i] != null) {
boolean textType = TypeMap.isTextType(columns[i].getMappedTypeCode());
if (textType && isNotBlank(textColumnExpression)) {
sql.append(textColumnExpression.replace("$(columnName)", "?")).append(",");
} else {
sql.append("?").append(",");
}
appendColumnQuestion(sql, columns[i]);
}
}

if (columns.length > 0) {
sql.replace(sql.length() - 1, sql.length(), "");
}
}

}

protected void appendColumnQuestion(StringBuilder sql, Column column) {
boolean textType = TypeMap.isTextType(column.getMappedTypeCode());
if (textType && isNotBlank(textColumnExpression)) {
sql.append(textColumnExpression.replace("$(columnName)", "?")).append(",");
} else {
sql.append("?").append(",");
}
}

public String getColumnsSql(Column[] columns) {
Expand Down

0 comments on commit e24f9ad

Please sign in to comment.