You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by ad...@apache.org on 2007/10/08 08:52:16 UTC
svn commit: r582728 - in /incubator/tuscany/java/das/rdb/src:
main/java/org/apache/tuscany/das/rdb/
main/java/org/apache/tuscany/das/rdb/config/wrapper/
main/java/org/apache/tuscany/das/rdb/impl/
main/java/org/apache/tuscany/das/rdb/merge/impl/ test/ja...
Author: adrianocrestani
Date: Sun Oct 7 23:52:15 2007
New Revision: 582728
URL: http://svn.apache.org/viewvc?rev=582728&view=rev
Log:
applying patch from JIRA-1827
Modified:
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Changes.java
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/merge/impl/GraphMerger.java
incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GraphMergeTests.java
incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OperationOrderingTests.java
Modified: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java?rev=582728&r1=582727&r2=582728&view=diff
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java (original)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java Sun Oct 7 23:52:15 2007
@@ -82,6 +82,15 @@
}
/**
+ * Add PK information, with different TypeName
+ * @param columnName
+ * @param typeName
+ */
+ public void addPrimaryKey(String columnName, String propertyName) {
+ configWrapper.addPrimaryKey(columnName, propertyName);
+ }
+
+ /**
* Add relationship information
* @param parentName
* @param childName
Modified: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java?rev=582728&r1=582727&r2=582728&view=diff
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java (original)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java Sun Oct 7 23:52:15 2007
@@ -310,6 +310,10 @@
addPrimaryKey(Collections.singletonList(columnName));
}
+ public void addPrimaryKey(String columnName, String propertyName) {
+ addPrimaryKey(Collections.singletonList(columnName), propertyName);
+ }
+
public void addPrimaryKey(List columnNames) {
Iterator i = columnNames.iterator();
@@ -325,6 +329,22 @@
}
}
+ public void addPrimaryKey(List columnNames, String propertyName) {
+
+ Iterator i = columnNames.iterator();
+ while (i.hasNext()) {
+ String columnName = (String) i.next();
+
+ QualifiedColumn pkColumn = null;
+ pkColumn = new QualifiedColumn(columnName, this.config.isDatabaseSchemaNameSupported());
+ //Table t = findOrCreateTable(pkColumn.getTableName());
+ Table t = findOrCreateTable(pkColumn);
+ Column c = findOrCreateColumn(t, pkColumn.getColumnName());
+ c.setPrimaryKey(true);
+ c.setPropertyName(propertyName);
+ }
+ }
+
public String getTableTypeName(String tableName) {
Table t = getTable(tableName);
if (t == null) {
Modified: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Changes.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Changes.java?rev=582728&r1=582727&r2=582728&view=diff
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Changes.java (original)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Changes.java Sun Oct 7 23:52:15 2007
@@ -21,6 +21,9 @@
import java.util.Iterator;
import java.util.List;
+import commonj.sdo.DataObject;
+import commonj.sdo.helper.XMLHelper;
+
/**
* Manages a set of graph-change operations. This simple implementaiton can be
* replaced with a version that provides R/I sorting
@@ -51,19 +54,19 @@
*/
public void execute() {
- Iterator i = inserts.getSortedList().iterator();
+ Iterator i = deletes.getSortedList().iterator();
while (i.hasNext()) {
ChangeOperation c = (ChangeOperation) i.next();
c.execute();
}
- i = updates.getSortedList().iterator();
+ i = inserts.getSortedList().iterator();
while (i.hasNext()) {
ChangeOperation c = (ChangeOperation) i.next();
c.execute();
}
- i = deletes.getSortedList().iterator();
+ i = updates.getSortedList().iterator();
while (i.hasNext()) {
ChangeOperation c = (ChangeOperation) i.next();
c.execute();
Modified: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/merge/impl/GraphMerger.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/merge/impl/GraphMerger.java?rev=582728&r1=582727&r2=582728&view=diff
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/merge/impl/GraphMerger.java (original)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/merge/impl/GraphMerger.java Sun Oct 7 23:52:15 2007
@@ -26,6 +26,8 @@
import org.apache.log4j.Logger;
import org.apache.tuscany.das.rdb.config.Config;
+import org.apache.tuscany.das.rdb.config.Table;
+import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper;
import org.apache.tuscany.das.rdb.config.wrapper.QualifiedColumn;
import org.apache.tuscany.das.rdb.graphbuilder.impl.MultiTableRegistry;
import org.apache.tuscany.das.rdb.graphbuilder.impl.TableRegistry;
@@ -60,6 +62,13 @@
this.config = cfg;
}
+ public DataObject emptyGraph() {
+ if(this.config != null)
+ return emptyGraph(this.config);
+ else
+ return null;
+ }
+
// TODO Replace EMF reference with SDOUtil function when available
// (Tuscany-583)
public DataObject emptyGraph(Config config) {
@@ -191,7 +200,7 @@
Property p = (Property) i.next();
Iterator objects = graph1.getList(p).iterator();
while (objects.hasNext()) {
- DataObject object = (DataObject) objects.next();
+ DataObject object = (DataObject) objects.next();
Object pk = object.get(getPrimaryKeyName(object));
if (logger.isDebugEnabled()) {
logger.debug("Adding object with pk " + pk + " to registry");
@@ -211,6 +220,7 @@
}
//JIRA-952
+ //if the table and column have SDO type name and property name use it else use database table and column name
public void addPrimaryKey(String key) {
QualifiedColumn column = null;
if(this.config != null && this.config.isDatabaseSchemaNameSupported()){
@@ -220,9 +230,31 @@
column = new QualifiedColumn(key);
}
- if (logger.isDebugEnabled()) {
- logger.debug("Adding " + column.getTableName() + " " + column.getColumnName() + " to keys");
+ String tableName = column.getTableName();
+ String columnName = column.getColumnName();
+ String schemaName = column.getSchemaName();
+ String qualifiedTableName = null;
+
+ if(this.config != null && this.config.isDatabaseSchemaNameSupported()) {
+ qualifiedTableName = schemaName+"."+tableName;
+ } else {
+ qualifiedTableName = tableName;
}
- keys.put(column.getTableName(), column.getColumnName());
+ MappingWrapper configWrapper = new MappingWrapper(this.config);
+
+ String typeName = configWrapper.getTableTypeName(qualifiedTableName);
+ String propertyName = configWrapper.getColumnPropertyName(qualifiedTableName, columnName);
+
+ if(typeName != null && propertyName != null) {
+ if (logger.isDebugEnabled()) {
+ logger.debug("Adding " + typeName + " " + propertyName + " to keys");
+ }
+ keys.put(typeName, propertyName);
+ } else {
+ if (logger.isDebugEnabled()) {
+ logger.debug("Adding " + column.getTableName() + " " + column.getColumnName() + " to keys");
+ }
+ keys.put(column.getTableName(), column.getColumnName());
+ }
}
}
Modified: incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GraphMergeTests.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GraphMergeTests.java?rev=582728&r1=582727&r2=582728&view=diff
==============================================================================
--- incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GraphMergeTests.java (original)
+++ incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GraphMergeTests.java Sun Oct 7 23:52:15 2007
@@ -188,4 +188,40 @@
assertEquals(1, mergedGraph.getList("CUSTOMER").size());
}
+ /**
+ * Mix dynamic DO from query result with static DO from customer.xsd. As long as the type and
+ * property names are matching for both, merge can happen - fixing bug 1827- pk hashmap was not
+ * considering type and property names before.
+ * @throws Exception
+ */
+ public void testMergeUpdateSingleTable() throws Exception {
+ //existing records
+ DAS das = DAS.FACTORY.createDAS(getConfig("CustomersOrdersConfigProps.xml"), getConnection());
+ DataObject root = das.getCommand("all customers").executeQuery();
+ DataObject firstCustomer = root.getDataObject("Customer[ID=1]");
+
+ if(firstCustomer != null)
+ firstCustomer.delete();//DAS will not automatic createOrReplace , so do delete here and later doing a create
+
+ //create new customer using static SDO - say a service is doing it
+ String typeUri = "http:///org.apache.tuscany.das.rdb.test/customer.xsd";
+ HelperContext context = HelperProvider.getDefaultContext();
+ CustomerFactory.INSTANCE.register(context);
+ ConfigHelper helper = new ConfigHelper();
+ helper.setDataObjectModel(typeUri);
+ helper.addTable("CUSTOMER", "Customer");
+ helper.addPrimaryKey("CUSTOMER.ID", "ID");
+
+ GraphMerger gm = new GraphMerger(helper.getConfig());
+ DataObject graph = gm.emptyGraph();
+ Customer c = (Customer) graph.createDataObject("Customer");
+ c.setID(1);
+ c.setLastName("WilliamsNew");
+ c.setAddress("400 Fourth Street");
+
+ gm.addPrimaryKey("CUSTOMER.ID");
+
+ DataObject root1 = gm.merge(root, ((DataObject)c).getRootObject());
+ das.applyChanges(root1);
+ }
}
Modified: incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OperationOrderingTests.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OperationOrderingTests.java?rev=582728&r1=582727&r2=582728&view=diff
==============================================================================
--- incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OperationOrderingTests.java (original)
+++ incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OperationOrderingTests.java Sun Oct 7 23:52:15 2007
@@ -88,14 +88,22 @@
String stateName = firstState.getString("NAME");
List cityNames = new ArrayList();
+ DataObject[] citiesToDelete = new DataObject[firstState.getList("cities").size()];
Iterator i = firstState.getList("cities").iterator();
+ int ii=0;
+ //if we perform delete() in while, the 2nd city of the state is not deleted.
while (i.hasNext()) {
DataObject firstCity = (DataObject) i.next();
cityNames.add(firstCity.getString("NAME"));
- firstCity.delete();
+ citiesToDelete[ii] = firstCity;
+ ii++;
}
+
+ for(int j=0; j<citiesToDelete.length; j++) {
+ citiesToDelete[j].delete();
+ }
+
firstState.delete();
-
das.applyChanges(root);
root = select.executeQuery();
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org