Skip to content

Commit

Permalink
fix problem with select blob when there is no primary key selected
Browse files Browse the repository at this point in the history
  • Loading branch information
chenson42 committed Dec 22, 2011
1 parent ae6f6a2 commit 31bd033
Showing 1 changed file with 15 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
package org.jumpmind.symmetric.db;

import java.sql.Types;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.NotImplementedException;
Expand Down Expand Up @@ -117,7 +119,7 @@ public String createInitalLoadSql(Node node, IDbDialect dialect, TriggerRouter t
sql = FormatUtils.replace(
"primaryKeyWhereString",
getPrimaryKeyWhereString(dialect.getInitialLoadTableAlias(),
table.getPrimaryKeyColumns()), sql);
table.hasPrimaryKey() ? table.getPrimaryKeyColumns() : table.getColumns()), sql);

// Replace these parameters to give the initiaLoadContition a chance to
// reference the node that is being loaded
Expand Down Expand Up @@ -194,7 +196,7 @@ public String createCsvDataSql(IDbDialect dialect, Trigger trigger, TriggerHisto
sql = FormatUtils.replace(
"primaryKeyWhereString",
getPrimaryKeyWhereString(dialect.getInitialLoadTableAlias(),
table.getPrimaryKeyColumns()), sql);
table.hasPrimaryKey() ? table.getPrimaryKeyColumns() : table.getColumns()), sql);

sql = replaceDefaultSchemaAndCatalog(dialect, trigger, sql);

Expand All @@ -216,7 +218,7 @@ public String createCsvPrimaryKeySql(IDbDialect dialect, Trigger trigger, Trigge
sql = FormatUtils.replace("schemaName", triggerHistory == null ? getSourceTablePrefix(trigger, dialect) : getSourceTablePrefix(triggerHistory, dialect), sql);
sql = FormatUtils.replace("whereClause", whereClause, sql);
sql = FormatUtils.replace("primaryKeyWhereString",
getPrimaryKeyWhereString(dialect.getInitialLoadTableAlias(), columns), sql);
getPrimaryKeyWhereString(dialect.getInitialLoadTableAlias(), table.hasPrimaryKey() ? table.getPrimaryKeyColumns() : table.getColumns()), sql);

return sql;
}
Expand Down Expand Up @@ -339,7 +341,7 @@ public String replaceTemplateVariables(IDbDialect dialect, DataEventType dml, Tr
ddl = FormatUtils.replace(
"primaryKeyWhereString",
getPrimaryKeyWhereString(dml == DataEventType.DELETE ? oldTriggerValue
: newTriggerValue, columns), ddl);
: newTriggerValue, table.hasPrimaryKey() ? table.getPrimaryKeyColumns() : table.getColumns()), ddl);

ddl = FormatUtils.replace("declareOldKeyVariables", buildKeyVariablesDeclare(columns, "old"),
ddl);
Expand Down Expand Up @@ -476,8 +478,15 @@ private String aliasedPrimaryKeyJoinVar(String alias, String prefix, Column[] co

// TODO: move to DerbySqlTemplate or change language for use in all DBMSes
private String getPrimaryKeyWhereString(String alias, Column[] columns) {
StringBuilder b = new StringBuilder("'");
List<Column> columnsMinusLobs = new ArrayList<Column>();
for (Column column : columns) {
if (!column.isOfBinaryType()) {
columnsMinusLobs.add(column);
}
}

StringBuilder b = new StringBuilder("'");
for (Column column : columnsMinusLobs) {
b.append("\"").append(column.getName()).append("\"=");
switch (column.getTypeCode()) {
case Types.BIT:
Expand Down Expand Up @@ -511,7 +520,7 @@ private String getPrimaryKeyWhereString(String alias, Column[] columns) {
b.append(triggerConcatCharacter).append("'''}");
break;
}
if (!column.equals(columns[columns.length - 1])) {
if (!column.equals(columnsMinusLobs.get(columnsMinusLobs.size() - 1))) {
b.append(" and ");
}
}
Expand Down

0 comments on commit 31bd033

Please sign in to comment.