Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Move code to figure out whether a table contains columns that 'isBlob…
…Clob' to the same place so we don't have duplicate code to detect isBlobClob
  • Loading branch information
chenson42 committed May 15, 2009
1 parent cb2db86 commit 012d73a
Showing 1 changed file with 31 additions and 30 deletions.
61 changes: 31 additions & 30 deletions symmetric/src/main/java/org/jumpmind/symmetric/db/SqlTemplate.java
Expand Up @@ -101,7 +101,7 @@ public String createInitalLoadSql(Node node, IDbDialect dialect, Trigger trig, T

Column[] columns = trig.orderColumnsForTable(metaData);
String columnsText = buildColumnString(dialect.getInitialLoadTableAlias(), dialect.getInitialLoadTableAlias(),
"", columns);
"", columns).columnString;
sql = replace("columns", columnsText, sql);

sql = replace("tableName", trig.getSourceTableName(), sql);
Expand Down Expand Up @@ -133,7 +133,7 @@ public String createCsvDataSql(IDbDialect dialect, Trigger trig, Table metaData,

Column[] columns = trig.orderColumnsForTable(metaData);
String columnsText = buildColumnString(dialect.getInitialLoadTableAlias(), dialect.getInitialLoadTableAlias(),
"", columns);
"", columns).columnString;
sql = replace("columns", columnsText, sql);

sql = replace("tableName", trig.getSourceTableName(), sql);
Expand All @@ -150,7 +150,7 @@ public String createCsvPrimaryKeySql(IDbDialect dialect, Trigger trig, Table met

Column[] columns = metaData.getPrimaryKeyColumns();
String columnsText = buildColumnString(dialect.getInitialLoadTableAlias(), dialect.getInitialLoadTableAlias(),
"", columns);
"", columns).columnString;
sql = replace("columns", columnsText, sql);

sql = replace("tableName", trig.getSourceTableName(), sql);
Expand Down Expand Up @@ -247,17 +247,17 @@ public String replaceTemplateVariables(IDbDialect dialect, DataEventType dml, Tr
ddl = replace("origTableAlias", ORIG_TABLE_ALIAS, ddl);

Column[] columns = trigger.orderColumnsForTable(metaData);
String columnsText = buildColumnString(ORIG_TABLE_ALIAS, newTriggerValue, newColumnPrefix, columns);
ddl = replace("columns", columnsText, ddl);
ColumnString columnString = buildColumnString(ORIG_TABLE_ALIAS, newTriggerValue, newColumnPrefix, columns);
ddl = replace("columns", columnString.columnString, ddl);
ddl = replace("virtualOldNewTable", buildVirtualTableSql(dialect, oldColumnPrefix, newColumnPrefix, metaData.getColumns()),
ddl);
String oldColumnString = "null";
if (trigger.isSyncColumnLevel()) {
columnsText = buildColumnString(ORIG_TABLE_ALIAS, oldTriggerValue, oldColumnPrefix, columns);
} else {
columnsText = "null";
}
ddl = replace("oldColumns", columnsText, ddl);
ddl = eval(containsBlobClobColumns(columns), "containsBlobClobColumns", ddl);
oldColumnString = buildColumnString(ORIG_TABLE_ALIAS, oldTriggerValue, oldColumnPrefix, columns).columnString;
}

ddl = replace("oldColumns", oldColumnString, ddl);
ddl = eval(columnString.isBlobClob, "containsBlobClobColumns", ddl);

// some column templates need tableName and schemaName
ddl = replace("tableName", history == null ? trigger.getSourceTableName() : history.getSourceTableName(), ddl);
Expand All @@ -267,8 +267,8 @@ public String replaceTemplateVariables(IDbDialect dialect, DataEventType dml, Tr
+ "." : "")), ddl);

columns = metaData.getPrimaryKeyColumns();
columnsText = buildColumnString(ORIG_TABLE_ALIAS, oldTriggerValue, oldColumnPrefix, columns);
ddl = replace("oldKeys", columnsText, ddl);
oldColumnString = buildColumnString(ORIG_TABLE_ALIAS, oldTriggerValue, oldColumnPrefix, columns).columnString;
ddl = replace("oldKeys", oldColumnString, ddl);
ddl = replace("oldNewPrimaryKeyJoin", aliasedPrimaryKeyJoin(oldTriggerValue, newTriggerValue, columns), ddl);
ddl = replace("tableNewPrimaryKeyJoin", aliasedPrimaryKeyJoin(ORIG_TABLE_ALIAS, newTriggerValue, columns), ddl);
ddl = replace("primaryKeyWhereString", getPrimaryKeyWhereString(newTriggerValue, columns), ddl);
Expand Down Expand Up @@ -360,20 +360,6 @@ private String eval(boolean condition, String prop, String ddl) {
return ddl;
}

private boolean containsBlobClobColumns(Column[] columns) {
for (Column column : columns) {
switch (column.getTypeCode()) {
case Types.CLOB:
case Types.BLOB:
case Types.BINARY:
// SQL-Server ntext binary type
case -10:
return true;
}
}
return false;
}

private String aliasedPrimaryKeyJoin(String aliasOne, String aliasTwo, Column[] columns) {
StringBuilder b = new StringBuilder();
for (Column column : columns) {
Expand Down Expand Up @@ -442,8 +428,9 @@ private String getPrimaryKeyWhereString(String alias, Column[] columns) {
return b.toString();
}

private String buildColumnString(String origTableAlias, String tableAlias, String columnPrefix, Column[] columns) {
private ColumnString buildColumnString(String origTableAlias, String tableAlias, String columnPrefix, Column[] columns) {
String columnsText = "";
boolean isBlobClob = false;
for (Column column : columns) {
String templateToUse = null;
switch (column.getTypeCode()) {
Expand All @@ -465,6 +452,7 @@ private String buildColumnString(String origTableAlias, String tableAlias, Strin
break;
case Types.CLOB:
templateToUse = clobColumnTemplate;
isBlobClob = true;
break;
case Types.BLOB:
case Types.BINARY:
Expand All @@ -473,6 +461,7 @@ private String buildColumnString(String origTableAlias, String tableAlias, Strin
// SQL-Server ntext binary type
case -10:
templateToUse = blobColumnTemplate;
isBlobClob = true;
break;
case Types.DATE:
if(noDateColumnTemplate()){
Expand Down Expand Up @@ -532,8 +521,8 @@ private String buildColumnString(String origTableAlias, String tableAlias, Strin
}

columnsText = replace("origTableAlias", origTableAlias, columnsText);
return replace("tableAlias", tableAlias, columnsText);

columnsText = replace("tableAlias", tableAlias, columnsText);
return new ColumnString(columnsText, isBlobClob);
}

private boolean noTimeColumnTemplate() {
Expand Down Expand Up @@ -717,5 +706,17 @@ public String getFunctionInstalledSql(String functionName) {
return null;
}
}

private class ColumnString {

String columnString;
boolean isBlobClob = false;

ColumnString(String columnExpression, boolean isBlobClob) {
this.columnString = columnExpression;
this.isBlobClob = isBlobClob;
}

}

}

0 comments on commit 012d73a

Please sign in to comment.