Author: amita
Date: Wed Jan 2 01:59:35 2008
New Revision: 608066
URL: http://svn.apache.org/viewvc?rev=608066&view=rev
Log:
TUSCANY-1944 support update of PK
Modified:
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java
incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/AliasTests.java
Modified:
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java?rev=608066&r1=608065&r2=608066&view=diff
==============================================================================
---
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java
(original)
+++
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java
Wed Jan 2 01:59:35 2008
@@ -54,6 +54,18 @@
super();
}
+ /*Utility to check if the given HashSet of Properties contains a property
with certain name*/
+ private boolean isContained(HashSet changedFields, String propertyName) {
+ Iterator itr = changedFields.iterator();
+ while(itr.hasNext()) {
+ Property changedProperty = (Property)itr.next();
+ if(changedProperty.getName().equals(propertyName)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
public UpdateCommandImpl getUpdateCommand(MappingWrapper mapping,
DataObject changedObject, Table table) {
List parameters = new ArrayList();
Type type = changedObject.getType();
@@ -98,18 +110,23 @@
while (pkColumnNames.hasNext() && pkPropertyNames.hasNext()) {
String columnName = (String) pkColumnNames.next();
String propertyName = (String) pkPropertyNames.next();
- statement.append(columnName);
- statement.append(" = ?");
- if (pkColumnNames.hasNext() && pkPropertyNames.hasNext()) {
- statement.append(" and ");
+
+ if(!isContained(changedFields, propertyName)) {//if PK itself is
changed, don't add here, will get added below as collision parameter
+ statement.append(columnName);
+ statement.append(" = ?");
+ if (pkColumnNames.hasNext() && pkPropertyNames.hasNext()) {
+ statement.append(" and ");
+ }
+ parameters.add(createParameter(tableWrapper,
type.getProperty(propertyName), idx++));
}
- parameters.add(createParameter(tableWrapper,
type.getProperty(propertyName), idx++));
}
if (tableWrapper.getCollisionColumn() == null) {
Iterator iter = changedFields.iterator();
while (iter.hasNext()) {
- statement.append(" and ");
+ if(statement.lastIndexOf(" where ") != statement.length()-7)
+ statement.append(" and ");
+
Property changedProperty = (Property) iter.next();
Column column =
tableWrapper.getColumnByPropertyName(changedProperty.getName());
statement.append(column == null ? changedProperty.getName() :
column.getColumnName());
@@ -136,8 +153,10 @@
}
} else {
- statement.append(" and ");
-
statement.append(tableWrapper.getCollisionColumn().getColumnName());
+ if(statement.lastIndexOf(" where ") != statement.length()-7)
+ statement.append(" and ");
+
+
statement.append(tableWrapper.getCollisionColumn().getColumnName());
statement.append(" = ?");
parameters.add(createParameter(tableWrapper,
type.getProperty(tableWrapper.getCollisionColumnPropertyName()), idx++));
@@ -146,8 +165,9 @@
UpdateCommandImpl updateCommand = new
OptimisticWriteCommandImpl(statement.toString());
Iterator params = parameters.iterator();
- while (params.hasNext()) {
- updateCommand.addParameter((ParameterExtendedImpl)
params.next());
+ while (params.hasNext()) {
+ ParameterExtendedImpl ptemp = (ParameterExtendedImpl)
params.next();
+ updateCommand.addParameter(ptemp);
}
if (this.logger.isDebugEnabled()) {
Modified:
incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/AliasTests.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/AliasTests.java?rev=608066&r1=608065&r2=608066&view=diff
==============================================================================
---
incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/AliasTests.java
(original)
+++
incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/AliasTests.java
Wed Jan 2 01:59:35 2008
@@ -161,4 +161,26 @@
assertEquals("Williams", customer.getString("lastname"));
}
+
+ /**
+ * Test modify PK value
+ */
+ public void testModifyPK() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("customerMapping.xml"),
getConnection());
+ // Read a customer
+ Command select = das.createCommand("SELECT * FROM CUSTOMER WHERE
CUSTOMER.ID = 1");
+
+ DataObject root = select.executeQuery();
+ DataObject customer = root.getDataObject("Customer[1]");
+ assertEquals(1, customer.getInt("id"));
+
+ customer.setInt("id", 100);
+ das.applyChanges(root);
+
+ select = das.createCommand("SELECT * FROM CUSTOMER WHERE CUSTOMER.ID =
100");
+ root = select.executeQuery();
+ customer = root.getDataObject("Customer[1]");
+ assertEquals(100, customer.getInt("id"));
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]