summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlresende <lresende@13f79535-47bb-0310-9956-ffa450edef68>2008-08-19 08:26:35 +0000
committerlresende <lresende@13f79535-47bb-0310-9956-ffa450edef68>2008-08-19 08:26:35 +0000
commitc59ec7e6c787a0cb92a221ac5ab165832f2f645f (patch)
tree2a24dda7fc744d6c7d9be05c5e362e6b4f9407b5
parent994c753d4c4f224e7b93fa8dc6ae807367317678 (diff)
TUSCANY-2551 - Applying Florian's patch to correct invalid SQL when data object has no changed fields
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@686982 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java12
-rw-r--r--java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java22
-rw-r--r--java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeSummarizer.java20
3 files changed, 44 insertions, 10 deletions
diff --git a/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java b/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java
index 7c353b3c57..d74d3f413f 100644
--- a/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java
+++ b/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java
@@ -70,17 +70,23 @@ public final class UpdateGenerator extends BaseGenerator {
List parameters = new ArrayList();
Type type = changedObject.getType();
TableWrapper tableWrapper = new TableWrapper(table);
+ // get changed fields
+ ChangeSummary summary = changedObject.getDataGraph().getChangeSummary();
+ HashSet changedFields = getChangedFields(mapping, summary, changedObject, tableWrapper);
+ // if there are no changed fields return null
+ if (changedFields.size() == 0) {
+ return null;
+ }
+ // compose statement
StringBuffer statement = new StringBuffer("update ");
if(mapping.getConfig().isDatabaseSchemaNameSupported()){
statement.append(table.getSchemaName()+"."+table.getTableName());
}
else{
- statement.append(table.getTableName());
+ statement.append(table.getTableName());
}
statement.append(" set ");
- ChangeSummary summary = changedObject.getDataGraph().getChangeSummary();
- HashSet changedFields = getChangedFields(mapping, summary, changedObject, tableWrapper);
Iterator i = changedFields.iterator();
int idx = 1;
diff --git a/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java b/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java
index c348eae54e..f8c669ed43 100644
--- a/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java
+++ b/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java
@@ -65,9 +65,14 @@ public class ChangeFactory {
deleteCommand = cmd;
}
- ChangeOperation createUpdateOperation(DataObject changedObject, String propagatedID) {
- return new UpdateOperation(getUpdateCommand(changedObject), changedObject, propagatedID);
- }
+ ChangeOperation createUpdateOperation(DataObject changedObject, String propagatedID) {
+ UpdateCommandImpl cmd = getUpdateCommand(changedObject);
+ if (cmd == null) {
+ return null;
+ } else {
+ return new UpdateOperation(cmd, changedObject, propagatedID);
+ }
+ }
ChangeOperation createUpdateOperation(DataObject changedObject) {
return createUpdateOperation(changedObject, null);
@@ -160,9 +165,16 @@ public class ChangeFactory {
updateCommand = new UpdateCommandImpl(update);
}
}
- updateCommand.setConnection(connection);
- updateCommand.configWrapper = mapping;
+ if (updateCommand != null) {
+ updateCommand.setConnection(connection);
+ updateCommand.configWrapper = mapping;
+ } else {
+ if(this.logger.isDebugEnabled()) {
+ this.logger.debug("Update command is NULL");
+ }
+ }
+
if (this.logger.isDebugEnabled()) {
this.logger.debug("Returning updateCommand: " + updateCommand);
}
diff --git a/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeSummarizer.java b/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeSummarizer.java
index 5131819b69..0f83dcd939 100644
--- a/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeSummarizer.java
+++ b/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeSummarizer.java
@@ -112,7 +112,15 @@ public class ChangeSummarizer {
this.logger.debug("Attribute Change for " + changedObject.getType().getName());
}
String propagatedID = (String) generatedKeys.get(changedObject.getType().getName());
- changes.addUpdate(factory.createUpdateOperation(changedObject, propagatedID));
+ ChangeOperation op = factory.createUpdateOperation(changedObject, propagatedID);
+ if (op != null) {
+ changes.addUpdate(op);
+ } else {
+ if(this.logger.isDebugEnabled()) {
+ this.logger.debug("Update Operation is NULL");
+ }
+ }
+
} else {
List values = changeSummary.getOldValues(changedObject);
Iterator i = values.iterator();
@@ -128,7 +136,15 @@ public class ChangeSummarizer {
}
if (hasState(ref, changedObject)) {
ChangeFactory factory = getRegistry().getFactory(changedObject.getType());
- changes.addUpdate(factory.createUpdateOperation(changedObject));
+ ChangeOperation op = factory.createUpdateOperation(changedObject);
+ if (op != null) {
+ changes.addUpdate(op);
+ } else {
+ if(this.logger.isDebugEnabled()) {
+ this.logger.debug("Update Operation is NULL");
+ }
+ }
+
}
}
}