Thanks Adriano, as you have mentioned, there is a mapping available for Table<->Type and Column<->Property in <Table> element in DAS Config. So there is no need to duplicate it in <Relationship> and <KeyPair> and it can be referenced from <Table> when available. The logic used to fix the issue, such that, in case a <Table> entry is found in <Config>, it is used for the above mapping, else default behavior (typeName=tableName and propName=colName) is assumed.
Based on this, I have modified:- 1) MappingWrapper.getRelationshipsByChildTable(name - SDO prop name) and 2) DatabaseObject.initialize() and get(parameter - SDO prop name) Also, added 2 test cases to RelationshipTests - testRelationshipTypesAndProperties() and testRelationshipWithProgrammaticConfig() The relevant JIRA is TUSCANY-1865. Regards, Amita On 10/23/07, Adriano Crestani <[EMAIL PROTECTED]> wrote: > > Hi Amita, > > On DAS C++ when a relationship is found, for example, between table A and > table B, it looks for their Table object in the Config, then, it it's > defined on the Config their type name can be retrieved using > tableA.getTypeName(). The same happens for the Column. It only assumes the > type name to be the table name if it's not defined on the Config. > > If you are saying that the methods below are always assuming the type name > being the table name, so I think they should be corrected. > > MappingWrapper- > getRelationshipByReference() > getRelationshipsByChildTable() > > DatabaseObject- > initialize() > > Regards, > Adriano Crestani > > On 10/23/07, Amita Vadhavkar <[EMAIL PROTECTED]> wrote: > > > > In RDB DAS, the config model has relationship definition as below:- > > <xsd:complexType name="Relationship"> > > <xsd:sequence> > > <xsd:element maxOccurs="unbounded" minOccurs="0" > name="KeyPair" > > type="config:KeyPair"/> > > </xsd:sequence> > > <xsd:attribute name="name" type="xsd:string"/> > > <xsd:attribute name="primaryKeyTable" type="xsd:string"/> > > <xsd:attribute name="foreignKeyTable" type="xsd:string"/> > > <xsd:attribute name="many" type="xsd:boolean"/> > > <xsd:attribute name="keyRestricted" type="xsd:boolean"/> > > </xsd:complexType> > > > > > > <xsd:complexType name="KeyPair"> > > <xsd:attribute name="primaryKeyColumn" type="xsd:string"/> > > <xsd:attribute name="foreignKeyColumn" type="xsd:string"/> > > </xsd:complexType> > > > > So, it does not have a place to store Table<->Type and Column<->Property > > mapping. > > > > Also some methods below show that,they are always assuming TableName > same > > as > > TypeName and ColumnName same as PropertyName. > > e.g. > > > > MappingWrapper- > > getRelationshipByReference() > > getRelationshipsByChildTable() > > > > DatabaseObject- > > initialize() > > > > Thus, in case the das config xml has defined different table/type and > > column/property names and the tables have relationship, > > the CUD operations based on relationship is not succeeding. > > > > e.g. When a das config has - > > > _________________________________________________________________________ > > <Table tableName="CUSTOMER" typeName="Customer"> > > <Column columnName="ID" propertyName="ID" primaryKey="true"/> > > <Column columnName="LASTNAME" propertyName="lastName"/> > > <Column columnName="ADDRESS" propertyName="address"/> > > </Table> > > > > <Table tableName="ANORDER" typeName="AnOrder"> > > <Column columnName="ID" propertyName="OrderId" > primaryKey="true"/> > > </Table> > > > > <Relationship name="orders" primaryKeyTable="CUSTOMER" > > foreignKeyTable="ANORDER" many="true"> > > <KeyPair primaryKeyColumn="ID" foreignKeyColumn="CUSTOMER_ID"/> > > </Relationship> > > > _________________________________________________________________________ > > The below test case results in AnOrder record in DB with CUSTOMER_ID > null, > > as the relationship is not properly picked. > > > > > _________________________________________________________________________________________________________ > > public void testRelationshipTypesAndProperties1() throws Exception { > > //existing records > > DAS das = DAS.FACTORY.createDAS(getConfig(" > > CustomersOrdersConfigProps.xml"), getConnection()); > > Command cmd = das.getCommand("customer and orders"); > > cmd.setParameter("ID", new Integer(1)); > > DataObject root = cmd.executeQuery(); > > DataObject firstCustomer = root.getDataObject("Customer[ID=1]"); > > System.out.println(XMLHelper.INSTANCE.save(firstCustomer, > > "beforeInsertInDG", "beforeInsertInDG")); > > > > DataObject newOrder = root.createDataObject("AnOrder"); > > newOrder.setInt("OrderId", 100); > > newOrder.setString("PRODUCT", "MyProd"); > > > > firstCustomer.getList("orders").add(newOrder); > > > > System.out.println(XMLHelper.INSTANCE.save(firstCustomer, > > "afterInsertInDG", "afterInsertInDG")); > > das.applyChanges(root); > > > > root = cmd.executeQuery(); > > firstCustomer = root.getDataObject("Customer[ID=1]"); > > System.out.println(XMLHelper.INSTANCE.save(firstCustomer, > > "fromDB", > > "fromDB")); > > } > > > > > ___________________________________________________________________________________________________________ > > > > Solution: > > <xsd:complexType name="Relationship"> > > <xsd:sequence> > > <xsd:element maxOccurs="unbounded" minOccurs="0" > name="KeyPair" > > type="config:KeyPair"/> > > </xsd:sequence> > > <xsd:attribute name="name" type="xsd:string"/> > > <xsd:attribute name="primaryKeyTable" type="xsd:string"/> > > <xsd:attribute name="primaryKeyType" type="xsd:string"/> > > <xsd:attribute name="foreignKeyTable" type="xsd:string"/> > > <xsd:attribute name="foreignKeyType" type="xsd:string"/> > > <xsd:attribute name="many" type="xsd:boolean"/> > > <xsd:attribute name="keyRestricted" type="xsd:boolean"/> > > </xsd:complexType> > > > > <xsd:complexType name="KeyPair"> > > <xsd:attribute name="primaryKeyColumn" type="xsd:string"/> > > <xsd:attribute name="primaryKeyColProperty" type="xsd:string"/> > > <xsd:attribute name="foreignKeyColumn" type="xsd:string"/> > > <xsd:attribute name="foreignKeyColProperty" type="xsd:string"/> > > </xsd:complexType> > > > > and all relevant changes in code to support this config model. > > > > Suggestions? > > > > Regards, > > Amita > > >