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/05/30 05:31:26 UTC
svn commit: r542740 - in /incubator/tuscany/cpp/das: VSExpress/tuscany_das/
VSExpress/tuscany_das/das_test/ runtime/core/include/apache/das/rdb/
runtime/core/src/apache/das/rdb/ runtime/test/resource/ runtime/test/src/
Author: adrianocrestani
Date: Tue May 29 20:31:25 2007
New Revision: 542740
URL: http://svn.apache.org/viewvc?view=rev&rev=542740
Log:
- added support to one to one relationship
- fixed minor bugs on Config class
- added testcase to one to one and many to one relationship
Added:
incubator/tuscany/cpp/das/runtime/test/resource/testKeyPairColumnTypeNotEqual.xml
incubator/tuscany/cpp/das/runtime/test/resource/testManyRelationship1.xml
incubator/tuscany/cpp/das/runtime/test/resource/testManyRelationship2.xml
Modified:
incubator/tuscany/cpp/das/VSExpress/tuscany_das/das_test/das_test.vcproj
incubator/tuscany/cpp/das/VSExpress/tuscany_das/tuscany_das.suo
incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/ColumnData.h
incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/ConfigImpl.h
incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/Relationship.h
incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/Table.h
incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/ColumnData.cpp
incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/ConfigImpl.cpp
incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/GraphBuilder.cpp
incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/GraphBuilderMetaData.cpp
incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/Relationship.cpp
incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/Table.cpp
incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/TableData.cpp
incubator/tuscany/cpp/das/runtime/test/src/main.cpp
Modified: incubator/tuscany/cpp/das/VSExpress/tuscany_das/das_test/das_test.vcproj
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/VSExpress/tuscany_das/das_test/das_test.vcproj?view=diff&rev=542740&r1=542739&r2=542740
==============================================================================
--- incubator/tuscany/cpp/das/VSExpress/tuscany_das/das_test/das_test.vcproj (original)
+++ incubator/tuscany/cpp/das/VSExpress/tuscany_das/das_test/das_test.vcproj Tue May 29 20:31:25 2007
@@ -182,7 +182,27 @@
Name="Resource Files"
>
<File
- RelativePath="..\..\..\runtime\test\resource\testIncompleteCompositeRelationship.xml"
+ RelativePath="..\..\..\runtime\test\resource\testCompositeRelationship.xml"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\test\resource\testIncompleteCompositeRelationship1.xml"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\test\resource\testIncompleteCompositeRelationship2.xml"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\test\resource\testKeyPairColumnTypeNotEqual.xml"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\test\resource\testManyRelationship1.xml"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\test\resource\testManyRelationship2.xml"
>
</File>
</Filter>
Modified: incubator/tuscany/cpp/das/VSExpress/tuscany_das/tuscany_das.suo
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/VSExpress/tuscany_das/tuscany_das.suo?view=diff&rev=542740&r1=542739&r2=542740
==============================================================================
Binary files - no diff available.
Modified: incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/ColumnData.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/ColumnData.h?view=diff&rev=542740&r1=542739&r2=542740
==============================================================================
--- incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/ColumnData.h (original)
+++ incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/ColumnData.h Tue May 29 20:31:25 2007
@@ -38,18 +38,18 @@
class ColumnData {
private:
- Column* column;
+ const Column* column;
void* data;
public:
- ColumnData(Column& column, ResultSetPtr resultSet);
+ ColumnData(const Column& column, ResultSetPtr resultSet);
virtual ~ColumnData(void);
bool operator==(ColumnData& columnData) const;
bool operator!=(ColumnData& columnData) const;
bool operator<(ColumnData& columnData) const;
bool operator>(ColumnData& columnData) const;
- Column& getColumn(void) const;
+ const Column& getColumn(void) const;
void populateDataGraph(TableData& tableData) const;
Modified: incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/ConfigImpl.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/ConfigImpl.h?view=diff&rev=542740&r1=542739&r2=542740
==============================================================================
--- incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/ConfigImpl.h (original)
+++ incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/ConfigImpl.h Tue May 29 20:31:25 2007
@@ -48,8 +48,8 @@
class ConfigImpl : public ::apache::das::Config {
private:
- std::map<std::string, Relationship*>* relationships;
- std::map<std::string, Table*>* tables;
+ std::map<std::string, const Relationship*>* relationships;
+ std::map<std::string, const Table*>* tables;
bool convOverConfig;
Table& newTable(Table& table);
@@ -66,14 +66,14 @@
Relationship& addRelationship(std::string pkTableName, std::string fkTableName, std::string name = "");
Relationship& addRelationship(const Relationship& relationship);
- std::map<std::string, Relationship*>& getRelationships(void) const;
- std::map<std::string, Table*>& getTables(void) const;
+ const std::map<std::string, Relationship*>& getRelationships(void) const;
+ const std::map<std::string, Table*>& getTables(void) const;
DAS& getDAS(void) const;
bool isConvOverConfig(void) const;
- Table* getTable(std::string tableName) const;
- Relationship* getRelationship(std::string pkTableName, std::string fkTableName) const;
+ const Table* getTable(std::string tableName) const;
+ const Relationship* getRelationship(std::string pkTableName, std::string fkTableName) const;
};
Modified: incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/Relationship.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/Relationship.h?view=diff&rev=542740&r1=542739&r2=542740
==============================================================================
--- incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/Relationship.h (original)
+++ incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/Relationship.h Tue May 29 20:31:25 2007
@@ -37,7 +37,8 @@
std::string relationshipName;
std::string pkTableName;
std::string fkTableName;
- std::map<std::string, KeyPair*>* keyPairs;
+ bool many;
+ std::map<std::string, const KeyPair*>* keyPairs;
KeyPair& newKeyPair(KeyPair& keyPair);
@@ -48,14 +49,16 @@
KeyPair& addKeyPair(std::string pkColumnName, std::string fkColumnName);
KeyPair& addKeyPair(const KeyPair& keyPair);
+ void setMany(bool many);
std::string getPKTableName(void) const;
std::string getFKTableName(void) const;
std::string getName(void) const;
+ bool isMany(void) const;
- std::map<std::string, KeyPair*>& getKeyPairs(void) const;
- KeyPair* getKeyPair(std::string pkColumnName, std::string fkColumnName) const;
- std::list<KeyPair*>* getKeyPair(std::string columnName, bool pkColumn = true) const;
+ const std::map<std::string, const KeyPair*>& getKeyPairs(void) const;
+ const KeyPair* getKeyPair(std::string pkColumnName, std::string fkColumnName) const;
+ std::list<const KeyPair*>* getKeyPair(std::string columnName, bool pkColumn = true) const;
bool containsColumn(std::string columnName, bool pkColumn = true) const;
};
Modified: incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/Table.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/Table.h?view=diff&rev=542740&r1=542739&r2=542740
==============================================================================
--- incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/Table.h (original)
+++ incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/Table.h Tue May 29 20:31:25 2007
@@ -47,7 +47,7 @@
class Table {
private:
- std::map<std::string, Column*>* columns;
+ std::map<std::string, const Column*>* columns;
std::string tableName;
std::string typeName;
@@ -64,8 +64,9 @@
std::string getTypeName(void) const;
std::string getTableName(void) const;
- Column* getColumn(std::string columnName) const;
- const std::map<std::string, Column*>& getColumns(void) const;
+ const Column* getColumn(std::string columnName) const;
+ Column* getColumn(std::string columnName);
+ const std::map<std::string, const Column*>& getColumns(void) const;
unsigned int getPKColumnCount(void) const;
void createGraph(const GraphBuilderMetaData& graphBuilderMetaData, commonj::sdo::DataFactoryPtr dataFactory) const;
Modified: incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/ColumnData.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/ColumnData.cpp?view=diff&rev=542740&r1=542739&r2=542740
==============================================================================
--- incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/ColumnData.cpp (original)
+++ incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/ColumnData.cpp Tue May 29 20:31:25 2007
@@ -22,7 +22,7 @@
namespace das {
namespace rdb {
-ColumnData::ColumnData(Column& column, ResultSetPtr resultSet) {
+ColumnData::ColumnData(const Column& column, ResultSetPtr resultSet) {
this->column = &column;
switch (column.getSQLType()) {
@@ -220,7 +220,7 @@
return !(*this == columnData);
}
-Column& ColumnData::getColumn(void) const {
+const Column& ColumnData::getColumn(void) const {
return *column;
}
Modified: incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/ConfigImpl.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/ConfigImpl.cpp?view=diff&rev=542740&r1=542739&r2=542740
==============================================================================
--- incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/ConfigImpl.cpp (original)
+++ incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/ConfigImpl.cpp Tue May 29 20:31:25 2007
@@ -23,19 +23,19 @@
namespace rdb {
ConfigImpl::ConfigImpl(void) {
- relationships = new std::map<std::string, Relationship*>();
- tables = new std::map<std::string, Table*>();
+ relationships = new std::map<std::string, const Relationship*>();
+ tables = new std::map<std::string, const Table*>();
convOverConfig = false;
}
ConfigImpl::ConfigImpl(const Config& config) : Config(config) {
ConfigImpl& thisConfig = (ConfigImpl&) config;
- tables = new std::map<std::string, Table*>(*thisConfig.tables);
- relationships = new std::map<std::string, Relationship*>(*thisConfig.relationships);
+ tables = new std::map<std::string, const Table*>(*thisConfig.tables);
+ relationships = new std::map<std::string, const Relationship*>(*thisConfig.relationships);
- std::map<std::string, Table*>::iterator tableIterator;
- std::map<std::string, Relationship*>::iterator relationshipIterator;
+ std::map<std::string, const Table*>::iterator tableIterator;
+ std::map<std::string, const Relationship*>::iterator relationshipIterator;
for (tableIterator = tables->begin() ; tableIterator != tables->end() ;
tableIterator++) {
@@ -55,8 +55,8 @@
}
ConfigImpl::ConfigImpl(std::string xmlFile) {
- relationships = new std::map<std::string, Relationship*>();
- tables = new std::map<std::string, Table*>();
+ relationships = new std::map<std::string, const Relationship*>();
+ tables = new std::map<std::string, const Table*>();
convOverConfig = false;
commonj::sdo::DataFactoryPtr df = commonj::sdo::DataFactory::getDataFactory();
@@ -112,6 +112,7 @@
std::string name = SDODataObjectWrapper(relationshipList[i]).getString("name");;
Relationship& relationship = addRelationship(primaryKeyTable, foreignKeyTable);
+ relationship.setMany(relationshipList[i]->getBoolean("many"));
commonj::sdo::DataObjectList& keyPairList = relationshipList[i]->getList("KeyPair");
@@ -127,8 +128,8 @@
}
ConfigImpl::~ConfigImpl(void) {
- std::map<std::string, Table*>::iterator tableIterator;
- std::map<std::string, Relationship*>::iterator relationshipIterator;
+ std::map<std::string, const Table*>::const_iterator tableIterator;
+ std::map<std::string, const Relationship*>::const_iterator relationshipIterator;
tableIterator = tables->begin();
for ( ; tableIterator != tables->end() ;
@@ -156,21 +157,21 @@
Table& ConfigImpl::newTable(Table& table) {
std::string tableName = table.getTableName();
- Table* configTable = getTable(tableName);
-
- if (configTable == 0) {
+ std::map<std::string, const Table*>::iterator tableIterator = tables->find(tableName);
+
+ if (tableIterator == tables->end()) {
tables->insert(std::make_pair(tableName, &table));
return table;
}
- return *configTable;
+ return (Table&) *tableIterator->second;
}
-std::map<std::string, Relationship*>& ConfigImpl::getRelationships(void) const {
- return *relationships;
+const std::map<std::string, Relationship*>& ConfigImpl::getRelationships(void) const {
+ return (const std::map<std::string, Relationship*>&) *relationships;
}
Relationship& ConfigImpl::addRelationship(std::string pkTableName, std::string fkTableName, std::string name) {
@@ -182,21 +183,22 @@
}
Relationship& ConfigImpl::newRelationship(Relationship& relationship) {
- Relationship* configRelationship = getRelationship(relationship.getPKTableName(), relationship.getFKTableName());
-
- if (configRelationship == 0) {
- relationships->insert(std::make_pair(relationship.getPKTableName() + "." + relationship.getFKTableName(), &relationship));
+ std::string pkXfk = relationship.getPKTableName() + "." + relationship.getFKTableName();
+ std::map<std::string, const Relationship*>::iterator it = relationships->find(pkXfk);
+
+ if (it == relationships->end()) {
+ relationships->insert(std::make_pair(pkXfk, &relationship));
return relationship;
}
- return *configRelationship;
+ return (Relationship&) *it->second;
}
-Relationship* ConfigImpl::getRelationship(std::string pkTableName, std::string fkTableName) const {
- std::map<std::string, Relationship*>::iterator it = relationships->find(pkTableName + "." + fkTableName);
+const Relationship* ConfigImpl::getRelationship(std::string pkTableName, std::string fkTableName) const {
+ std::map<std::string, const Relationship*>::iterator it = relationships->find(pkTableName + "." + fkTableName);
if (it == relationships->end()) {
return 0;
@@ -206,16 +208,16 @@
}
-std::map<std::string, Table*>& ConfigImpl::getTables(void) const {
- return *tables;
+const std::map<std::string, Table*>& ConfigImpl::getTables(void) const {
+ return (const std::map<std::string, Table*>&) *tables;
}
bool ConfigImpl::isConvOverConfig(void) const {
return convOverConfig;
}
-Table* ConfigImpl::getTable(std::string tableName) const {
- std::map<std::string, Table*>::iterator tableIterator = tables->find(tableName);
+const Table* ConfigImpl::getTable(std::string tableName) const {
+ std::map<std::string, const Table*>::iterator tableIterator = tables->find(tableName);
if (tableIterator == tables->end()) {
return 0;
Modified: incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/GraphBuilder.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/GraphBuilder.cpp?view=diff&rev=542740&r1=542739&r2=542740
==============================================================================
--- incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/GraphBuilder.cpp (original)
+++ incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/GraphBuilder.cpp Tue May 29 20:31:25 2007
@@ -129,14 +129,14 @@
fkTablesList.end() ; tableDataIterator++) {
TableData& fkTableData = **tableDataIterator;
- std::map<std::string, KeyPair*>& keyPairs = (*relationshipIterator)->getKeyPairs();
- std::map<std::string, KeyPair*>::iterator keyPairIterator;
+ const std::map<std::string, const KeyPair*>& keyPairs = (*relationshipIterator)->getKeyPairs();
+ std::map<std::string, const KeyPair*>::const_iterator keyPairIterator;
KeyDataList fksColumnList;
for (keyPairIterator = keyPairs.begin() ; keyPairIterator != keyPairs.end() ;
keyPairIterator++) {
- KeyPair& keyPair = *keyPairIterator->second;
+ const KeyPair& keyPair = *keyPairIterator->second;
ColumnData* columnData = fkTableData.
getColumnData(keyPair.getFKColumnName());
@@ -151,8 +151,15 @@
if (pkTablaDataIterator != pkTablesData.end()) {
TableData& pkTableData = *pkTablaDataIterator->second;
- pkTableData.getGraphObject()->getList((*relationshipIterator)->getName().c_str()).
- append(fkTableData.getGraphObject());
+ if ((*relationshipIterator)->isMany()) {
+ pkTableData.getGraphObject()->getList((*relationshipIterator)->getName().c_str()).
+ append(fkTableData.getGraphObject());
+
+ } else {
+ pkTableData.getGraphObject()->setDataObject((*relationshipIterator)->getName().c_str(),
+ fkTableData.getGraphObject());
+
+ }
}
Modified: incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/GraphBuilderMetaData.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/GraphBuilderMetaData.cpp?view=diff&rev=542740&r1=542739&r2=542740
==============================================================================
--- incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/GraphBuilderMetaData.cpp (original)
+++ incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/GraphBuilderMetaData.cpp Tue May 29 20:31:25 2007
@@ -26,9 +26,9 @@
this->resultSetMetaData = &resultSetMetaData;
this->config = &config;
graphTables = new std::map<std::string, Table*>();
- std::map<std::string, Relationship*>& configRelationships = config.getRelationships();
+ const std::map<std::string, Relationship*>& configRelationships = config.getRelationships();
relationships = new std::map<std::string, Relationship*>();
- std::map<std::string, Relationship*>::iterator relationshipIterator;
+ std::map<std::string, Relationship*>::const_iterator relationshipIterator;
unsigned int colCount = resultSetMetaData.getColumnCount();
std::map<std::string, std::list<Column*>*> tablesColumns;
@@ -41,7 +41,7 @@
find(columnTableName);
Table* table = 0;
- Table* configTable = config.getTable(columnTableName);
+ const Table* configTable = config.getTable(columnTableName);
if (tableIterator == graphTables->end()) {
table = new Table(columnTableName);
@@ -59,7 +59,7 @@
if (configTable == 0) {
table->addColumn(columnName, columnSQLType);
} else {
- Column* column = configTable->getColumn(columnName);
+ Column* column = (Column*) configTable->getColumn(columnName);
if (column != 0) {
table->addColumn(Column(*column));
@@ -76,7 +76,7 @@
tableIterator++) {
Table& table = *tableIterator->second;
- Table* configTable = config.getTable(table.getTableName());
+ const Table* configTable = config.getTable(table.getTableName());
bool hasPK = false;
if (configTable != 0 && configTable->getPKColumnCount() ==
@@ -85,24 +85,19 @@
}
- const std::map<std::string, Column*>& tableColumns = table.getColumns();
- std::map<std::string, Column*>::const_iterator columnIterator;
+ const std::map<std::string, const Column*>& tableColumns = table.getColumns();
+ std::map<std::string, const Column*>::const_iterator columnIterator;
if (!hasPK) {
- for (columnIterator = tableColumns.begin() ;
- columnIterator != tableColumns.end() ; columnIterator++) {
+ Column* column = table.getColumn("id");
- std::string columnName = columnIterator->second->getName();
-
- if (columnName == "id") {
- columnIterator->second->setPK(true);
- hasPK = true;
- break;
-
- }
+ if (column != 0) {
+ column->setPK(true);
+ hasPK = true;
}
+
}
if (!hasPK) {
@@ -111,7 +106,7 @@
for (columnIterator = tableColumns.begin() ;
columnIterator != tableColumns.end() ; columnIterator++) {
- columnIterator->second->setPK(true);
+ ((Column*) columnIterator->second)->setPK(true);
}
}
@@ -125,39 +120,37 @@
Relationship& relationship = *relationshipIterator->second;
bool contains = true;
- std::map<std::string, KeyPair*>& keyPairs = relationship.getKeyPairs();
- std::map<std::string, KeyPair*>::iterator keyPairIterator;
+ const std::map<std::string, const KeyPair*>& keyPairs = relationship.getKeyPairs();
+ std::map<std::string, const KeyPair*>::const_iterator keyPairIterator;
std::map<std::string, Table*>::iterator pkTableIterator =
graphTables->find(relationship.getPKTableName());
- if (pkTableIterator == graphTables->end()) {
+ std::map<std::string, Table*>::iterator fkTableIterator =
+ graphTables->find(relationship.getFKTableName());
+
+ if (pkTableIterator == graphTables->end() ||
+ fkTableIterator == graphTables->end()) {
continue;
}
Table& pkTable = *pkTableIterator->second;
+ Table& fkTable = *fkTableIterator->second;
for (keyPairIterator = keyPairs.begin() ; keyPairIterator != keyPairs.end() ;
keyPairIterator++) {
- KeyPair& keyPair = *keyPairIterator->second;
+ const KeyPair& keyPair = *keyPairIterator->second;
Column* pkColumn = pkTable.getColumn(keyPair.getPKColumnName());
+ Column* fkColumn = fkTable.getColumn(keyPair.getFKColumnName());
+
+ if (fkColumn == 0 || pkColumn == 0 || !pkColumn->isPK() ||
+ fkColumn->getSQLType() != pkColumn->getSQLType()) {
- if (pkColumn == 0 || !pkColumn->isPK()) {
contains = false;
break;
}
-
- if (!resultSetMetaData.containsColumn(relationship.getPKTableName(),
- keyPair.getPKColumnName()) ||
- !resultSetMetaData.containsColumn(relationship.getFKTableName(),
- keyPair.getFKColumnName())) {
-
- contains = false;
- break;
-
- }
-
+
}
if (contains) {
@@ -173,8 +166,8 @@
tableIterator++) {
Table& table = *tableIterator->second;
- const std::map<std::string, Column*>& tableColumns = table.getColumns();
- std::map<std::string, Column*>::const_iterator columnIterator;
+ const std::map<std::string, const Column*>& tableColumns = table.getColumns();
+ std::map<std::string, const Column*>::const_iterator columnIterator;
for (columnIterator = tableColumns.begin() ;
columnIterator != tableColumns.end() ; columnIterator++) {
@@ -195,7 +188,8 @@
}
Column* pkColumn = pkTableIterator->second->getColumn("id");
- if (!pkColumn) {
+ if (pkColumn == 0 ||
+ columnIterator->second->getSQLType() != pkColumn->getSQLType()) {
continue;
}
@@ -262,7 +256,7 @@
dataFactory->addPropertyToType(DAS_NAMESPACE, relationship.getPKTableName().c_str(),
relationship.getName().c_str(), DAS_NAMESPACE,
- relationship.getFKTableName().c_str(), true, false, false);
+ relationship.getFKTableName().c_str(), relationship.isMany(), false, false);
}
Modified: incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/Relationship.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/Relationship.cpp?view=diff&rev=542740&r1=542739&r2=542740
==============================================================================
--- incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/Relationship.cpp (original)
+++ incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/Relationship.cpp Tue May 29 20:31:25 2007
@@ -23,12 +23,13 @@
namespace rdb {
Relationship::Relationship(const Relationship& relationship) {
+ many = relationship.many;
relationshipName = relationship.relationshipName;
pkTableName = relationship.pkTableName;
fkTableName = relationship.fkTableName;
keyPairs = relationship.keyPairs;
- std::map<std::string, KeyPair*>::iterator it;
+ std::map<std::string, const KeyPair*>::iterator it;
for (it = keyPairs->begin() ; it != keyPairs->end() ; it++) {
KeyPair* newKeyPair = new KeyPair(*it->second);
newKeyPair->setRelationship(this);
@@ -49,10 +50,19 @@
this->pkTableName = pkTableName;
this->fkTableName = fkTableName;
- keyPairs = new std::map<std::string, KeyPair*>();
+ many = true;
+ keyPairs = new std::map<std::string, const KeyPair*>();
}
+void Relationship::setMany(bool many) {
+ this->many = many;
+}
+
+bool Relationship::isMany(void) const {
+ return many;
+}
+
KeyPair& Relationship::addKeyPair(std::string pkColumnName, std::string fkColumnName) {
return newKeyPair(*(new KeyPair(pkColumnName, fkColumnName)));
}
@@ -62,7 +72,7 @@
}
KeyPair& Relationship::newKeyPair(KeyPair& keyPair) {
- KeyPair* configKeyPair = getKeyPair(keyPair.getPKColumnName(), keyPair.getFKColumnName());
+ const KeyPair* configKeyPair = getKeyPair(keyPair.getPKColumnName(), keyPair.getFKColumnName());
if (configKeyPair == 0) {
keyPairs->insert(std::make_pair(keyPair.getPKColumnName() + "." + keyPair.getFKColumnName(), &keyPair));
@@ -71,7 +81,7 @@
}
- return *configKeyPair;
+ return (KeyPair&) *configKeyPair;
}
@@ -91,12 +101,12 @@
return fkTableName;
}
-std::map<std::string, KeyPair*>& Relationship::getKeyPairs(void) const {
- return *keyPairs;
+const std::map<std::string, const KeyPair*>& Relationship::getKeyPairs(void) const {
+ return (const std::map<std::string, const KeyPair*>&) *keyPairs;
}
-KeyPair* Relationship::getKeyPair(std::string pkColumnName, std::string fkColumnName) const {
- std::map<std::string, KeyPair*>::iterator it = keyPairs->
+const KeyPair* Relationship::getKeyPair(std::string pkColumnName, std::string fkColumnName) const {
+ std::map<std::string, const KeyPair*>::iterator it = keyPairs->
find(pkColumnName + "." + fkColumnName);
if (it == keyPairs->end()) {
@@ -107,9 +117,9 @@
}
-std::list<KeyPair*>* Relationship::getKeyPair(std::string columnName, bool pkColumn) const {
- std::map<std::string, KeyPair*>::const_iterator it;
- std::list<KeyPair*>* ret = new std::list<KeyPair*>();
+std::list<const KeyPair*>* Relationship::getKeyPair(std::string columnName, bool pkColumn) const {
+ std::map<std::string, const KeyPair*>::const_iterator it;
+ std::list<const KeyPair*>* ret = new std::list<const KeyPair*>();
for (it = keyPairs->begin() ; it != keyPairs->end() ; it++) {
std::string actualColumnName;
@@ -132,7 +142,7 @@
bool Relationship::containsColumn(std::string columnName, bool pkColumn) const {
- std::map<std::string, KeyPair*>::const_iterator it;
+ std::map<std::string, const KeyPair*>::const_iterator it;
for (it = keyPairs->begin() ; it != keyPairs->end() ; it++) {
Modified: incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/Table.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/Table.cpp?view=diff&rev=542740&r1=542739&r2=542740
==============================================================================
--- incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/Table.cpp (original)
+++ incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/Table.cpp Tue May 29 20:31:25 2007
@@ -25,16 +25,16 @@
Table::Table(std::string tableName) {
this->tableName = tableName;
this->typeName = tableName;
- this->columns = new std::map<std::string, Column*>();
+ this->columns = new std::map<std::string, const Column*>();
}
Table::Table(const Table& table) {
tableName = table.tableName;
typeName = table.typeName;
- this->columns = new std::map<std::string, Column*>(*table.columns);
+ this->columns = new std::map<std::string, const Column*>(*table.columns);
- std::map<std::string, Column*>::iterator it;
+ std::map<std::string, const Column*>::iterator it;
for (it = columns->begin() ; it != columns->end() ; it++) {
Column* newColumn = new Column(*it->second);
newColumn->setContainerTable(this);
@@ -45,7 +45,7 @@
}
Table::~Table(void) {
- std::map<std::string, Column*>::iterator it;
+ std::map<std::string, const Column*>::iterator it;
for (it = columns->begin() ; it != columns->end() ; it++) {
delete it->second;
@@ -85,7 +85,7 @@
}
void Table::createGraph(const GraphBuilderMetaData& graphBuilderMetaData, commonj::sdo::DataFactoryPtr dataFactory) const {
- std::map<std::string, Column*>::const_iterator it;
+ std::map<std::string, const Column*>::const_iterator it;
std::map<std::string, Relationship*>& relationships = graphBuilderMetaData.getRelationships();
std::map<std::string, Relationship*>::const_iterator relationshipIterator;
std::list<Relationship*> tablePKRelationships;
@@ -96,8 +96,8 @@
relationships.end() ; relationshipIterator++) {
if (relationshipIterator->second->getFKTableName() == tableName) {
- std::map<std::string, KeyPair*>& keyPairs = relationshipIterator->second->getKeyPairs();
- std::map<std::string, KeyPair*>::const_iterator keyPairIterator;
+ const std::map<std::string, const KeyPair*>& keyPairs = relationshipIterator->second->getKeyPairs();
+ std::map<std::string, const KeyPair*>::const_iterator keyPairIterator;
for (keyPairIterator = keyPairs.begin() ; keyPairIterator !=
keyPairs.end() ; keyPairIterator++) {
@@ -112,7 +112,7 @@
}
for (it = columns->begin() ; it != columns->end() ; it++) {
- Column& column = *(it->second);
+ const Column& column = *(it->second);
if (graphBuilderMetaData.getResultSetMetaData().containsColumn(tableName, column.getName())) {
@@ -137,28 +137,32 @@
this->typeName = typeName;
}
-Column* Table::getColumn(std::string columnName) const {
- std::map<std::string, Column*>::const_iterator it = columns->find(columnName);
+Column* Table::getColumn(std::string columnName) {
+ std::map<std::string, const Column*>::const_iterator it = columns->find(columnName);
if (it == columns->end()) {
return 0;
}
- return it->second;
+ return (Column*) it->second;
}
+const Column* Table::getColumn(std::string columnName) const {
+ return ((Table*) this)->getColumn(columnName);
+}
+
std::string Table::getTypeName(void) const {
return typeName;
}
-const std::map<std::string, Column*>& Table::getColumns(void) const {
+const std::map<std::string, const Column*>& Table::getColumns(void) const {
return *columns;
}
unsigned int Table::getPKColumnCount(void) const {
unsigned int count = 0;
- std::map<std::string, Column*>::const_iterator it;
+ std::map<std::string, const Column*>::const_iterator it;
for (it = columns->begin() ; it != columns->end() ; it++) {
Modified: incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/TableData.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/TableData.cpp?view=diff&rev=542740&r1=542739&r2=542740
==============================================================================
--- incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/TableData.cpp (original)
+++ incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/TableData.cpp Tue May 29 20:31:25 2007
@@ -26,14 +26,14 @@
this->table = &table;
primaryKeys = new KeyDataList();
dataObject = 0;
- const std::map<std::string, Column*>& columns = table.getColumns();
- std::map<std::string, Column*>::const_iterator columnIterator;
+ const std::map<std::string, const Column*>& columns = table.getColumns();
+ std::map<std::string, const Column*>::const_iterator columnIterator;
ResultSetMetaData& metaData = resultSet->getResultSetMetaData();
for (columnIterator = columns.begin() ; columnIterator != columns.end() ;
columnIterator++) {
- Column& column = *columnIterator->second;
+ const Column& column = *columnIterator->second;
std::string columnName = column.getName();
if (metaData.containsColumn(table.getTableName(), columnName)) {
Added: incubator/tuscany/cpp/das/runtime/test/resource/testKeyPairColumnTypeNotEqual.xml
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/test/resource/testKeyPairColumnTypeNotEqual.xml?view=auto&rev=542740
==============================================================================
--- incubator/tuscany/cpp/das/runtime/test/resource/testKeyPairColumnTypeNotEqual.xml (added)
+++ incubator/tuscany/cpp/das/runtime/test/resource/testKeyPairColumnTypeNotEqual.xml Tue May 29 20:31:25 2007
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ -->
+
+<Config xmlns="http:///org.apache.tuscany.das.rdb/config.xsd">
+
+ <Table tableName="department">
+ <Column sqlType="integer" columnName="id" primaryKey="true"/>
+ </Table>
+
+ <Table tableName="employee">
+ <Column sqlType="float" columnName="department_id" primaryKey="true"/>
+ </Table>
+
+ <Relationship primaryKeyTable="department" foreignKeyTable="employee" many="true">
+ <KeyPair primaryKeyColumn="id" foreignKeyColumn="department_id"/>
+ </Relationship>
+
+</Config>
\ No newline at end of file
Added: incubator/tuscany/cpp/das/runtime/test/resource/testManyRelationship1.xml
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/test/resource/testManyRelationship1.xml?view=auto&rev=542740
==============================================================================
--- incubator/tuscany/cpp/das/runtime/test/resource/testManyRelationship1.xml (added)
+++ incubator/tuscany/cpp/das/runtime/test/resource/testManyRelationship1.xml Tue May 29 20:31:25 2007
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ -->
+
+<Config xmlns="http:///org.apache.tuscany.das.rdb/config.xsd">
+
+ <Relationship primaryKeyTable="company" foreignKeyTable="department" many="true">
+ <KeyPair primaryKeyColumn="id" foreignKeyColumn="company_id"/>
+ </Relationship>
+
+</Config>
\ No newline at end of file
Added: incubator/tuscany/cpp/das/runtime/test/resource/testManyRelationship2.xml
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/test/resource/testManyRelationship2.xml?view=auto&rev=542740
==============================================================================
--- incubator/tuscany/cpp/das/runtime/test/resource/testManyRelationship2.xml (added)
+++ incubator/tuscany/cpp/das/runtime/test/resource/testManyRelationship2.xml Tue May 29 20:31:25 2007
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ -->
+
+<Config xmlns="http:///org.apache.tuscany.das.rdb/config.xsd">
+
+ <Relationship primaryKeyTable="company" foreignKeyTable="department" many="false">
+ <KeyPair primaryKeyColumn="id" foreignKeyColumn="company_id"/>
+ </Relationship>
+
+</Config>
\ No newline at end of file
Modified: incubator/tuscany/cpp/das/runtime/test/src/main.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/test/src/main.cpp?view=diff&rev=542740&r1=542739&r2=542740
==============================================================================
--- incubator/tuscany/cpp/das/runtime/test/src/main.cpp (original)
+++ incubator/tuscany/cpp/das/runtime/test/src/main.cpp Tue May 29 20:31:25 2007
@@ -201,7 +201,6 @@
} catch (SDOPropertyNotFoundException ex) {
cout << "not created" << endl;
- cout << "references set = not set" << endl;
}
@@ -238,12 +237,36 @@
}
+void testKeyPairColumnTypeNotEqual() {
+ cout << "-------------testKeyPairColumnTypeNotEqual--------------" << endl;
+
+ Connection* conn = getConnection();
+ ConfigImpl config((std::string) TEST_RESOURCE_PATH + "testKeyPairColumnTypeNotEqual.xml");
+ DASImpl* das = (DASImpl*) DASImpl::getFACTORY()->createDAS(config, *conn);
+ CommandPtr command = das->createCommand("SELECT * FROM department, employee;");
+ commonj::sdo::DataObjectPtr root = command->executeQuery();
+
+ cout << "relationship ignored when keypair types are not equal = ";
+ try {
+ root->getDataFactory()->getType(DAS_NAMESPACE, "department").getProperty("employee");
+ cout << "not ignored" << endl;
+
+ } catch (SDOPropertyNotFoundException ex) {
+ cout << "OK" << endl;
+ }
+
+ delete conn;
+
+ cout << "---------------------------------" << endl << endl;
+
+}
+
void testUniqueObjectByID() {
cout << "-------------testUniqueObjectByID--------------" << endl;
Connection* conn = getConnection();
DASImpl* das = (DASImpl*) DASImpl::getFACTORY()->createDAS(*conn);
- CommandPtr command = das->createCommand("SELECT * FROM company, employee where company.id = 1;");
+ CommandPtr command = das->createCommand("SELECT * FROM company, department where company.id = 1;");
commonj::sdo::DataObjectPtr root = command->executeQuery();
cout << "table duplicated row ignored = ";
@@ -259,12 +282,69 @@
}
+void testManyRelationship() {
+ cout << "-------------testManyRelationship--------------" << endl;
+
+ Connection* conn = getConnection();
+ {
+ ConfigImpl config((std::string) TEST_RESOURCE_PATH + "testManyRelationship1.xml");
+ DASImpl* das = (DASImpl*) DASImpl::getFACTORY()->createDAS(config, *conn);
+ CommandPtr command = das->createCommand("SELECT * FROM company, department where company.id = 1;");
+ commonj::sdo::DataObjectPtr root = command->executeQuery();
+
+ cout << "reference created as many on data graph = ";
+ if (root->getDataFactory()->getType(DAS_NAMESPACE, "company").getProperty("department").isMany()) {
+ cout << "OK" << endl;
+
+ cout << "all data objects added on reference list = ";
+ if (root->getDataObject("company[1]")->getList("department").size() > 1) {
+ cout << "OK" << endl;
+ } else {
+ cout << "not added all data objects" << endl;
+ }
+
+ } else {
+ cout << "not created as many" << endl;
+ }
+ }
+
+ {
+ ConfigImpl config((std::string) TEST_RESOURCE_PATH + "testManyRelationship2.xml");
+ DASImpl* das = (DASImpl*) DASImpl::getFACTORY()->createDAS(config, *conn);
+ CommandPtr command = das->createCommand("SELECT * FROM company, department where company.id = 1;");
+ commonj::sdo::DataObjectPtr root = command->executeQuery();
+
+ cout << "reference created as not many on data graph = ";
+ if (!root->getDataFactory()->getType(DAS_NAMESPACE, "company").getProperty("department").isMany()) {
+ cout << "OK" << endl;
+
+ cout << "only one data object added on reference = ";
+ if (root->getDataObject("company[1]")->isNull("department")) {
+ cout << "reference data object not set" << endl;
+ } else {
+ cout << "OK" << endl;
+ }
+
+ } else {
+ cout << "not created as many" << endl;
+ }
+
+ }
+
+ delete conn;
+
+ cout << "---------------------------------" << endl << endl;
+
+}
+
int main() {
testPointers();
testUniqueObjectByID();
testIncompleteCompositeRelationship();
testCompositeRelationship();
testeCOCRelationship();
+ testKeyPairColumnTypeNotEqual();
+ testManyRelationship();
system("PAUSE");
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org