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/11 09:21:44 UTC
svn commit: r583710 - in /incubator/tuscany/cpp/das: VSExpress/tuscany_das/
VSExpress/tuscany_das/das_runtime/ runtime/core/include/apache/das/
runtime/core/include/apache/das/rdb/ runtime/core/src/apache/das/
runtime/core/src/apache/das/rdb/ runtime/t...
Author: adrianocrestani
Date: Thu Oct 11 00:21:41 2007
New Revision: 583710
URL: http://svn.apache.org/viewvc?rev=583710&view=rev
Log:
-added CUD operations to DAS
Added:
incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/RelationshipStatement.h
incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/RelationshipStatement.cpp
Modified:
incubator/tuscany/cpp/das/VSExpress/tuscany_das/das_runtime/das_runtime.vcproj
incubator/tuscany/cpp/das/VSExpress/tuscany_das/tuscany_das.sln
incubator/tuscany/cpp/das/VSExpress/tuscany_das/tuscany_das.suo
incubator/tuscany/cpp/das/runtime/core/include/apache/das/StringWrapper.h
incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/ApplyChanges.h
incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/CreatedDataObject.h
incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/DASDataObject.h
incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/DeletedDataObject.h
incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/ModifiedDataObject.h
incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/PKObject.h
incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/das_constants.h
incubator/tuscany/cpp/das/runtime/core/src/apache/das/StringWrapper.cpp
incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/ApplyChanges.cpp
incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/ColumnData.cpp
incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/CreatedDataObject.cpp
incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/DASDataObject.cpp
incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/DASImpl.cpp
incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/DeteledDataObject.cpp
incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/ModifiedDataObject.cpp
incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/PKObject.cpp
incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/ResultSet.cpp
incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/Statement.cpp
incubator/tuscany/cpp/das/runtime/test/rsc/TestCases.fdb
incubator/tuscany/cpp/das/runtime/test/src/main.cpp
Modified: incubator/tuscany/cpp/das/VSExpress/tuscany_das/das_runtime/das_runtime.vcproj
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/VSExpress/tuscany_das/das_runtime/das_runtime.vcproj?rev=583710&r1=583709&r2=583710&view=diff
==============================================================================
--- incubator/tuscany/cpp/das/VSExpress/tuscany_das/das_runtime/das_runtime.vcproj (original)
+++ incubator/tuscany/cpp/das/VSExpress/tuscany_das/das_runtime/das_runtime.vcproj Thu Oct 11 00:21:41 2007
@@ -370,6 +370,10 @@
>
</File>
<File
+ RelativePath="..\..\..\runtime\core\src\apache\das\rdb\RelationshipStatement.cpp"
+ >
+ </File>
+ <File
RelativePath="..\..\..\runtime\core\src\apache\das\rdb\RelationshipWrapper.cpp"
>
</File>
@@ -572,6 +576,10 @@
</File>
<File
RelativePath="..\..\..\runtime\core\include\apache\das\rdb\Relationship.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\include\apache\das\rdb\RelationshipStatement.h"
>
</File>
<File
Modified: incubator/tuscany/cpp/das/VSExpress/tuscany_das/tuscany_das.sln
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/VSExpress/tuscany_das/tuscany_das.sln?rev=583710&r1=583709&r2=583710&view=diff
==============================================================================
--- incubator/tuscany/cpp/das/VSExpress/tuscany_das/tuscany_das.sln (original)
+++ incubator/tuscany/cpp/das/VSExpress/tuscany_das/tuscany_das.sln Thu Oct 11 00:21:41 2007
@@ -4,6 +4,9 @@
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "das_runtime", "das_runtime\das_runtime.vcproj", "{964F3F93-8D1C-46BE-9724-2313CE7380AA}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "das_test", "das_test\das_test.vcproj", "{277D86C4-0113-49EE-A351-0D32FF2E1EF3}"
+ ProjectSection(ProjectDependencies) = postProject
+ {964F3F93-8D1C-46BE-9724-2313CE7380AA} = {964F3F93-8D1C-46BE-9724-2313CE7380AA}
+ EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Build", "Build\Build.vcproj", "{78511C3F-18E5-44FC-928D-BFAAA4A8BCBE}"
ProjectSection(ProjectDependencies) = postProject
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?rev=583710&r1=583709&r2=583710&view=diff
==============================================================================
Binary files - no diff available.
Modified: incubator/tuscany/cpp/das/runtime/core/include/apache/das/StringWrapper.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/core/include/apache/das/StringWrapper.h?rev=583710&r1=583709&r2=583710&view=diff
==============================================================================
--- incubator/tuscany/cpp/das/runtime/core/include/apache/das/StringWrapper.h (original)
+++ incubator/tuscany/cpp/das/runtime/core/include/apache/das/StringWrapper.h Thu Oct 11 00:21:41 2007
@@ -23,6 +23,8 @@
#include <ctype.h>
#include <sstream>
+#include "commonj/sdo/DataObject.h"
+
namespace apache {
namespace das {
@@ -41,10 +43,12 @@
static std::string toString(const unsigned int& t);
StringWrapper(std::string str);
+ StringWrapper(commonj::sdo::DataObjectPtr dataObject, std::string propertyName);
std::string toLower(void) const;
bool isValidRDBName(void) const;
std::string getString(void) const;
+ void defineOnDataObject(commonj::sdo::DataObjectPtr dataObject, std::string propertyName) const;
};
Modified: incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/ApplyChanges.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/ApplyChanges.h?rev=583710&r1=583709&r2=583710&view=diff
==============================================================================
--- incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/ApplyChanges.h (original)
+++ incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/ApplyChanges.h Thu Oct 11 00:21:41 2007
@@ -23,12 +23,13 @@
#include <list>
#include <string>
+#include "apache/das/rdb/DASImpl.h"
#include "apache/das/rdb/ConfigImpl.h"
#include "apache/das/rdb/Relationship.h"
#include "apache/das/rdb/KeyPair.h"
-#include "apache/das/rdb/CreatedDataObject.h"
-#include "apache/das/rdb/DeletedDataObject.h"
#include "apache/das/rdb/ModifiedDataObject.h"
+#include "apache/das/rdb/DeletedDataObject.h"
+#include "apache/das/rdb/CreatedDataObject.h"
#include "apache/das/rdb/DASPrimaryKeyNotFoundException.h"
#include "commonj/sdo/DataObject.h"
@@ -42,6 +43,7 @@
class CreatedDataObject;
class DeletedDataObject;
class ConfigImpl;
+class DASImpl;
class ApplyChanges {
@@ -55,7 +57,8 @@
std::list<DASDataObject*> updateOrderList;
commonj::sdo::ChangeSummaryPtr summary;
- void processDataObject(commonj::sdo::DataObjectPtr dataObject);
+ void processRootDataObject(commonj::sdo::DataObjectPtr dataObject);
+ DASDataObject& processDataObject(commonj::sdo::DataObjectPtr dataObject);
DeletedDataObject& processDeletedDataObject(commonj::sdo::DataObjectPtr dataObject);
CreatedDataObject& processCreatedDataObject(commonj::sdo::DataObjectPtr dataObject);
ModifiedDataObject& processModifiedDataObject(commonj::sdo::DataObjectPtr dataObject);
@@ -63,10 +66,11 @@
void addDataObject(DASDataObject& dataObject);
void processMetadata(commonj::sdo::DataObjectPtr dataObject);
bool isInStack(const DASDataObject& dasDataObject);
- const Table& getTable(std::string typeName) const;
+ const Table& getTable(commonj::sdo::DataObjectPtr dataObject);
+ const Relationship& getRelationship(DASDataObject& parentDataObject, DASDataObject& dataObject) const;
public:
- ApplyChanges(const Config& config, commonj::sdo::DataObjectPtr root);
+ ApplyChanges(DASImpl& das, commonj::sdo::DataObjectPtr root);
~ApplyChanges(void);
};
Modified: incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/CreatedDataObject.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/CreatedDataObject.h?rev=583710&r1=583709&r2=583710&view=diff
==============================================================================
--- incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/CreatedDataObject.h (original)
+++ incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/CreatedDataObject.h Thu Oct 11 00:21:41 2007
@@ -34,16 +34,14 @@
class CreatedDataObject : public DASDataObject {
- private:
- std::string columns;
- std::string values;
-
public:
CreatedDataObject(const Table& table, commonj::sdo::DataObjectPtr dataObject,
commonj::sdo::ChangeSummaryPtr changeSummary);
- void addFK(const KeyDataList& fkDataList);
- void executeStatements(StatementPtr stmt) const;
+ ~CreatedDataObject(void);
+
+ /*void execute(StatementPtr stmt) const;*/
+ void printStmt(void);
};
Modified: incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/DASDataObject.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/DASDataObject.h?rev=583710&r1=583709&r2=583710&view=diff
==============================================================================
--- incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/DASDataObject.h (original)
+++ incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/DASDataObject.h Thu Oct 11 00:21:41 2007
@@ -21,7 +21,8 @@
#define DAS_DATA_OBJECT_H
#include "apache/das/rdb/PKObject.h"
-#include "apache/das/rdb/Statement.h"
+//#include "apache/das/rdb/Statement.h"
+#include "apache/das/rdb/RelationshipStatement.h"
#include "commonj/sdo/DataObject.h"
#include "commonj/sdo/SettingList.h"
@@ -33,24 +34,36 @@
class ColumnData;
class Table;
+class RelationshipStatement;
class DASDataObject : public PKObject {
private:
commonj::sdo::DataObjectPtr dataObject;
std::list<std::string> updateStatements;
+ std::map<std::string, RelationshipStatement*> fks;
+ std::list<RelationshipStatement*> dependencies;
+
+ protected:
+ std::string statement;
public:
DASDataObject(const Table& table, commonj::sdo::DataObjectPtr dataObject,
commonj::sdo::ChangeSummaryPtr changeSummary);
+ ~DASDataObject(void);
+
const commonj::sdo::DataObjectPtr getDataObject(void) const;
- void printStmt();
+ std::string getWhereStmt(void) const;
+ RelationshipStatement& addFK(const Relationship& relationship, const KeyDataList* keyDataList);
+
+ virtual void appendStatement(std::string statement);
+ virtual void pushStatement(std::string statement);
+ virtual void addDependency(RelationshipStatement& relationshipStatement);
- void appendStatement(std::string statement);
- void pushStatement(std::string statement);
+ virtual void execute(StatementPtr stmt) const;
+ virtual void printStmt(void);
- void DASDataObject::executeStatements(StatementPtr stmt) const;
};
Modified: incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/DeletedDataObject.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/DeletedDataObject.h?rev=583710&r1=583709&r2=583710&view=diff
==============================================================================
--- incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/DeletedDataObject.h (original)
+++ incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/DeletedDataObject.h Thu Oct 11 00:21:41 2007
@@ -36,6 +36,7 @@
public:
DeletedDataObject(const Table& table, commonj::sdo::DataObjectPtr dataObject, commonj::sdo::ChangeSummaryPtr changeSummary);
+ ~DeletedDataObject(void);
};
Modified: incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/ModifiedDataObject.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/ModifiedDataObject.h?rev=583710&r1=583709&r2=583710&view=diff
==============================================================================
--- incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/ModifiedDataObject.h (original)
+++ incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/ModifiedDataObject.h Thu Oct 11 00:21:41 2007
@@ -21,6 +21,7 @@
#define MODIFIED_DATA_OBJECT_H
#include "apache/das/rdb/DASDataObject.h"
+//#include "apache/das/rdb/RelationshipStatement.h"
#include "commonj/sdo/DataObject.h"
#include "commonj/sdo/SettingList.h"
@@ -36,16 +37,15 @@
class ModifiedDataObject : public DASDataObject {
private:
- std::string sets;
- std::string pkWhere;
- std::map<std::string, const KeyDataList*> fks;
-
+ //bool pkModified;
+
public:
ModifiedDataObject(const Table& table, commonj::sdo::DataObjectPtr dataObject,
commonj::sdo::ChangeSummaryPtr changeSummary);
- void setFK(std::string relationshipName, const KeyDataList* keyDataList);
-
+ ~ModifiedDataObject(void);
+ //bool isPKModified(void) const;
+
};
Modified: incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/PKObject.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/PKObject.h?rev=583710&r1=583709&r2=583710&view=diff
==============================================================================
--- incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/PKObject.h (original)
+++ incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/PKObject.h Thu Oct 11 00:21:41 2007
@@ -24,8 +24,6 @@
#include <string>
#include <stdexcept>
-
-
#include "commonj/sdo/DataObject.h"
namespace apache {
Added: incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/RelationshipStatement.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/RelationshipStatement.h?rev=583710&view=auto
==============================================================================
--- incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/RelationshipStatement.h (added)
+++ incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/RelationshipStatement.h Thu Oct 11 00:21:41 2007
@@ -0,0 +1,71 @@
+/*
+ * 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.
+ */
+
+#ifndef RELATIONSHIP_STATEMENT_H
+#define RELATIONSHIP_STATEMENT_H
+
+#include <list>
+#include <string>
+
+//#include "apache/das/rdb/Table.h"
+//#include "apache/das/rdb/DASDataObject.h"
+//#include "apache/das/rdb/Relationship.h"
+#include "apache/das/rdb/StatementPtr.h"
+#include "apache/das/rdb/PKObject.h"
+#include "apache/das/rdb/KeyPair.h"
+
+#include "commonj/sdo/DataObject.h"
+#include "commonj/sdo/ChangeSummary.h"
+
+namespace apache {
+ namespace das {
+ namespace rdb {
+
+class DASDataObject;
+class Table;
+class Relationship;
+
+class RelationshipStatement {
+
+ private:
+ const Relationship* relationship;
+ DASDataObject* dataObject;
+ const KeyDataList* keyDataList;
+ bool executed;
+
+ public:
+ RelationshipStatement(const Relationship& relationship, const KeyDataList* keyDataList = 0);
+ ~RelationshipStatement(void);
+
+ void setFKList(const KeyDataList* keyDataList);
+ void setDASDataObject(DASDataObject& dataObject);
+
+ void execute(StatementPtr stmt);
+ bool isUnset(void) const;
+ DASDataObject& getDASDataObject(void) const;
+
+};
+
+
+
+ };
+ };
+};
+
+#endif //RELATIONSHIP_STATEMENT_H
Modified: incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/das_constants.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/das_constants.h?rev=583710&r1=583709&r2=583710&view=diff
==============================================================================
--- incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/das_constants.h (original)
+++ incubator/tuscany/cpp/das/runtime/core/include/apache/das/rdb/das_constants.h Thu Oct 11 00:21:41 2007
@@ -1,3 +1,4 @@
#define DAS_ROOT_NAME "DAS_ROOT"
#define DAS_NAMESPACE "apache.das"
#define SDO_NAMESPACE "commonj.sdo"
+#define SQL_NULL_VALUE "NULL"
Modified: incubator/tuscany/cpp/das/runtime/core/src/apache/das/StringWrapper.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/core/src/apache/das/StringWrapper.cpp?rev=583710&r1=583709&r2=583710&view=diff
==============================================================================
--- incubator/tuscany/cpp/das/runtime/core/src/apache/das/StringWrapper.cpp (original)
+++ incubator/tuscany/cpp/das/runtime/core/src/apache/das/StringWrapper.cpp Thu Oct 11 00:21:41 2007
@@ -23,6 +23,17 @@
StringWrapper::StringWrapper(std::string str) : str(str) {}
+StringWrapper::StringWrapper(commonj::sdo::DataObjectPtr dataObject, std::string propertyName) {
+ unsigned int length = dataObject->getLength(propertyName);
+ wchar_t* buffer = new wchar_t[length];
+ dataObject->getString(propertyName, buffer, length);
+
+ std::wstring wstr(buffer, 0, length);
+ this->str = std::string(wstr.begin(), wstr.end());
+ delete buffer;
+
+}
+
std::string StringWrapper::toLower(void) const {
std::string str = this->str;
unsigned int length = str.length();
@@ -103,6 +114,12 @@
ss << t;
return ss.str();
+
+}
+
+void StringWrapper::defineOnDataObject(commonj::sdo::DataObjectPtr dataObject, std::string propertyName) const {
+ std::wstring wstr(str.begin(), str.end());
+ dataObject->setString(propertyName, wstr.c_str(), wstr.size());
}
Modified: incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/ApplyChanges.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/ApplyChanges.cpp?rev=583710&r1=583709&r2=583710&view=diff
==============================================================================
--- incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/ApplyChanges.cpp (original)
+++ incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/ApplyChanges.cpp Thu Oct 11 00:21:41 2007
@@ -22,16 +22,25 @@
namespace das {
namespace rdb {
-ApplyChanges::ApplyChanges(const Config& config, commonj::sdo::DataObjectPtr root) : summary(root->getChangeSummary()) {
- this->config = &((const ConfigImpl&) config);
+ApplyChanges::ApplyChanges(DASImpl& das, commonj::sdo::DataObjectPtr root) : summary(root->getChangeSummary()) {
+ this->config = (const ConfigImpl*) &das.getConfig();
this->root = root;
- processDataObject(root);
+ processRootDataObject(root);
+ StatementPtr stmt = *das.getConnection()->createStatement();
- for (std::list<DASDataObject*>::iterator it = updateOrderList.begin() ;
- it != updateOrderList.end() ; it++) {
+ try {
- (*it)->printStmt();
-
+ for (std::list<DASDataObject*>::iterator it = updateOrderList.begin() ;
+ it != updateOrderList.end() ; it++) {
+
+ (*it)->execute(stmt);
+
+ }
+
+ stmt->executeQuery("commit");
+
+ } catch (std::exception&) {
+ stmt->executeQuery("rollback");
}
}
@@ -70,7 +79,7 @@
}
-void ApplyChanges::processDataObject(commonj::sdo::DataObjectPtr dataObject) {
+void ApplyChanges::processRootDataObject(commonj::sdo::DataObjectPtr dataObject) {
commonj::sdo::ChangedDataObjectList& changedObjects = summary->getChangedDataObjects();
std::list<commonj::sdo::DataObjectPtr> createdObjects;
std::list<commonj::sdo::DataObjectPtr> deletedObjects;
@@ -103,6 +112,28 @@
processDeletedDataObject(*deletedIterator);
}
+ std::list<commonj::sdo::DataObjectPtr>::iterator createdIterator;
+ for (createdIterator = createdObjects.begin() ; createdIterator != createdObjects.end() ; createdIterator++) {
+ processCreatedDataObject(*createdIterator);
+ }
+
+ std::list<commonj::sdo::DataObjectPtr>::iterator modifiedIterator;
+ for (modifiedIterator = modifiedObjects.begin() ; modifiedIterator != modifiedObjects.end() ; modifiedIterator++) {
+ processModifiedDataObject(*modifiedIterator);
+ }
+
+}
+
+DASDataObject& ApplyChanges::processDataObject(commonj::sdo::DataObjectPtr dataObject) {
+
+ if (summary->isCreated(dataObject)) {
+ return processCreatedDataObject(dataObject);
+ } else if (summary->isDeleted(dataObject)) {
+ return processDeletedDataObject(dataObject);
+ } else {
+ return processModifiedDataObject(dataObject);
+ }
+
}
void ApplyChanges::processMetadata(commonj::sdo::DataObjectPtr dataObject) {
@@ -223,25 +254,31 @@
}
-const Table& ApplyChanges::getTable(std::string typeName) const {
- return *((std::map<std::string, const Table*>::const_iterator) tables.find(typeName))->second;
+const Table& ApplyChanges::getTable(commonj::sdo::DataObjectPtr dataObject) {
+ std::string typeName = dataObject->getType().getName();
+ std::map<std::string, const Table*>::const_iterator it = tables.find(typeName);
+
+ if (it == tables.end()) {
+ processMetadata(dataObject);
+ }
+
+ it = tables.find(typeName);
+
+ return *it->second;
+
}
CreatedDataObject& ApplyChanges::processCreatedDataObject(commonj::sdo::DataObjectPtr dataObject) {
DASDataObject* dasDB = getDASDataObject(dataObject);
-
+ //dataObject->printSelf(std::cout);
+
if (dasDB != 0) {
return (CreatedDataObject&) *dasDB;
}
CreatedDataObject* createdDataObject = new CreatedDataObject(
- getTable((std::string) dataObject->getType().getName()), dataObject, summary);
-
- if (isInStack(*createdDataObject)) {
- //throw
- }
-
- stack.push_back(createdDataObject);
+ getTable(dataObject), dataObject, summary);
+
updateOrderList.push_back(createdDataObject);
addDataObject(*createdDataObject);
commonj::sdo::PropertyList properties = dataObject->getInstanceProperties();
@@ -254,26 +291,18 @@
commonj::sdo::DataObjectList& dataObjectList = dataObject->getList(properties[i]);
for (unsigned int j = 0 ; j < dataObjectList.size() ; j++) {
-
-
- if (summary->isCreated(dataObjectList[j])) {
- processCreatedDataObject(dataObjectList[j]);
- } else {
- processModifiedDataObject(dataObjectList[j]);
- //needs to continue
- }
-
+ DASDataObject& dob = processDataObject(dataObjectList[j]);
+ RelationshipStatement& rs = dob.addFK(getRelationship(*createdDataObject, dob), &createdDataObject->getPrimaryKeys());
+ dob.addDependency(rs);
+
}
} else {
- commonj::sdo::DataObjectPtr db = dataObject->getDataObject(properties[i]);
-
- if (summary->isCreated(db)) {
- processCreatedDataObject(db);
- } else {
- processModifiedDataObject(db);
- //needs to continue
- }
+ commonj::sdo::DataObjectPtr dao = dataObject->getDataObject(properties[i]);
+ DASDataObject& dob = processDataObject(dao);
+ dob.addFK(getRelationship(*createdDataObject, dob), &createdDataObject->getPrimaryKeys());
+ RelationshipStatement& rs = dob.addFK(getRelationship(*createdDataObject, dob), &createdDataObject->getPrimaryKeys());
+ dob.addDependency(rs);
}
@@ -281,27 +310,28 @@
}
- stack.pop_back();
-
return *createdDataObject;
}
+const Relationship& ApplyChanges::getRelationship(DASDataObject& parentDataObject, DASDataObject& dataObject) const {
+ std::map<std::string, const Relationship*>::const_iterator relatIt = relationships.
+ find(parentDataObject.getTable().getTableName() + "." + dataObject.getTable().getTableName());
+
+ return *relatIt->second;
+
+}
+
DeletedDataObject& ApplyChanges::processDeletedDataObject(commonj::sdo::DataObjectPtr dataObject) {
DASDataObject* dasDB = getDASDataObject(dataObject);
-
+ //dataObject->printSelf(std::cout);
+
if (dasDB != 0) {
return (DeletedDataObject&) *dasDB;
}
DeletedDataObject* deletedDataObject = new DeletedDataObject(
- getTable((std::string) dataObject->getType().getName()), dataObject, summary);
-
- if (isInStack(*deletedDataObject)) {
- //throw
- }
-
- stack.push_back(deletedDataObject);
+ getTable(dataObject), dataObject, summary);
const commonj::sdo::SettingList& setting = summary->getOldValues(dataObject);
@@ -310,56 +340,10 @@
if (setting[i].isSet() && setting[i].getProperty().getType().isDataObjectType()) {
commonj::sdo::DataObjectPtr containedDataObject = setting[i].getDataObjectValue();
- if (summary->isDeleted(containedDataObject)) {
- processDeletedDataObject(containedDataObject);
- } else {
- std::string pkTableName = deletedDataObject->getTable().getTableName();
- std::string fkTableName;
- std::list<std::string> fkColumnNames;
- std::string updateStatement;
-
- const Table* fkTable = config->getTableByTypeName((std::string) containedDataObject->getType().getName());
-
- if (fkTable == 0) {
- fkTableName = containedDataObject->getType().getName();
- } else {
- fkTableName = fkTable->getTableName();
- }
-
- const Relationship* relationship = config->getRelationship(pkTableName, fkTableName);
-
- if (relationship == 0) {
- fkColumnNames.push_back(pkTableName.append("_id"));
- } else {
-
- const std::map<std::string, const KeyPair*>& keyPairs = relationship->getKeyPairs();
-
- for (std::map<std::string, const KeyPair*>::const_iterator keyPairIterator = keyPairs.begin() ;
- keyPairIterator != keyPairs.end() ; keyPairIterator++) {
-
- fkColumnNames.push_back(keyPairIterator->second->getFKColumnName());
-
- }
-
- }
-
- updateStatement.append("update ").append(pkTableName).append(" set ");
-
- std::list<std::string>::iterator fkColumnIterator = fkColumnNames.begin();
- for (unsigned int fkColumnNamesCount = 0 ; fkColumnNames.size() > fkColumnNamesCount ; fkColumnIterator++) {
-
- updateStatement.append(*fkColumnIterator).append("=NULL");
-
- if (fkColumnNamesCount + 1 != fkColumnNames.size()) {
- updateStatement.append(",");
- }
-
- fkColumnNamesCount++;
-
- }
-
- updateStatement.append(")");
- deletedDataObject->pushStatement(updateStatement);
+ if (!summary->isDeleted(containedDataObject)) {
+ DASDataObject& modDO = processDataObject(containedDataObject);
+ RelationshipStatement& rs = modDO.addFK(getRelationship(*deletedDataObject, modDO), 0);
+ deletedDataObject->addDependency(rs);
}
@@ -367,7 +351,6 @@
}
- stack.pop_back();
addDataObject(*deletedDataObject);
updateOrderList.push_back(deletedDataObject);
@@ -398,39 +381,163 @@
ModifiedDataObject& ApplyChanges::processModifiedDataObject(commonj::sdo::DataObjectPtr dataObject) {
DASDataObject* dasDB = getDASDataObject(dataObject);
+ //dataObject->printSelf(std::cout);
if (dasDB != 0) {
return (ModifiedDataObject&) *dasDB;
}
ModifiedDataObject* modifiedDataObject = new ModifiedDataObject(
- getTable((std::string) dataObject->getType().getName()), dataObject, summary);
+ getTable(dataObject), dataObject, summary);
-
updateOrderList.push_back(modifiedDataObject);
addDataObject(*modifiedDataObject);
- const commonj::sdo::SettingList& setting = summary->getOldValues(dataObject);
- for (int i = 0 ; i < setting.size() ; i++) {
- const commonj::sdo::Property& prop = setting[i].getProperty();
+ if (summary->isModified(dataObject)) {
+ std::map<const commonj::sdo::Property*, std::list<commonj::sdo::DataObjectPtr>*> manyOldValuedProperties;
+ std::map<const commonj::sdo::Property*, commonj::sdo::DataObjectPtr> singleOldValuedProperties;
+ commonj::sdo::PropertyList props = dataObject->getInstanceProperties();
+ const commonj::sdo::SettingList& setting = summary->getOldValues(dataObject);
+
+ for (int i = 0 ; i < setting.size() ; i++) {
+ const commonj::sdo::Property& prop = setting[i].getProperty();
+
+ if (prop.getType().isDataObjectType()) {
+
+ if (!setting[i].isNull() && setting[i].isSet()) {
+ commonj::sdo::DataObjectPtr oldDO = setting[i].getDataObjectValue();
+ //oldDO->printSelf(std::cout);
+ //std::cout << std::endl;
+
+ if (prop.isMany()) {
+ std::map<const commonj::sdo::Property*, std::list<commonj::sdo::DataObjectPtr>*>::iterator manyIt =
+ manyOldValuedProperties.find(&prop);
+
+ std::list<commonj::sdo::DataObjectPtr>* list;
+
+ if (manyIt == manyOldValuedProperties.end()) {
+ list = new std::list<commonj::sdo::DataObjectPtr>();
+ manyOldValuedProperties.insert(std::make_pair(&prop, list));
+
+ } else {
+ list = manyIt->second;
+ }
- if (setting[i].isSet() && prop.getType().isDataObjectType()) {
+ list->push_back(oldDO);
+
+ } else {
+ singleOldValuedProperties.insert(std::make_pair(&prop, oldDO));
+ }
+
+ }
- if (setting[i].isNull()) {
- //modifiedDataObject->setFK();
}
+ }
- commonj::sdo::DataObjectPtr oldDB = setting[i].getDataObjectValue();
+ for (unsigned int i = 0 ; i < props.size() ; i++) {
- if (setting[i].isNull()) {
- //summary->getOldContainer(
+ if (props[i].getType().isDataObjectType()) {
+
+ if (props[i].isMany()) {
+
+ if (!dataObject->isSet(props[i]) || !dataObject->isNull(props[i])) {
+ commonj::sdo::DataObjectList& doList = dataObject->getList(props[i]);
+
+ for (unsigned int j = 0 ; j < doList.size() ; j++) {
+ commonj::sdo::DataObjectPtr dob = doList[j];
+
+ if (summary->isCreated(dob)) {
+ CreatedDataObject& createdDO = processCreatedDataObject(dob);
+ RelationshipStatement& rs = createdDO.addFK(getRelationship(*modifiedDataObject, createdDO), &modifiedDataObject->getPrimaryKeys());
+ modifiedDataObject->addDependency(rs);
+
+ } else {
+ std::map<const commonj::sdo::Property*, std::list<commonj::sdo::DataObjectPtr>*>::iterator manyIt =
+ manyOldValuedProperties.find(&props[i]);
+
+ bool existsOldDO = false;
+
+ if (manyIt != manyOldValuedProperties.end()) {
+ std::list<commonj::sdo::DataObjectPtr>& list = *manyIt->second;
+
+ for (std::list<commonj::sdo::DataObjectPtr>::iterator listIt = list.begin() ;
+ listIt != list.end() ; listIt++) {
+
+ if (*listIt == dob) {
+ existsOldDO = true;
+ list.erase(listIt);
+ break;
+
+ }
+
+ }
+
+ }
+
+ if (!existsOldDO) {
+ ModifiedDataObject& modDO = processModifiedDataObject(dob);
+ RelationshipStatement& rs = modDO.addFK(getRelationship(*modifiedDataObject, modDO), &modifiedDataObject->getPrimaryKeys());
+ modifiedDataObject->addDependency(rs);
+
+ }
+
+ }
+
+ }
+
+ }
+
+ } else {
+
+ if (!dataObject->isSet(props[i]) || !dataObject->isNull(props[i])) {
+ commonj::sdo::DataObjectPtr dob = dataObject->getDataObject(props[i]);
+
+ if (summary->isCreated(dob)) {
+ CreatedDataObject& createdDO = processCreatedDataObject(dob);
+ RelationshipStatement& rs = createdDO.addFK(getRelationship(*modifiedDataObject, createdDO), &modifiedDataObject->getPrimaryKeys());
+ modifiedDataObject->addDependency(rs);
+
+ } else {
+ std::map<const commonj::sdo::Property*, commonj::sdo::DataObjectPtr>::iterator singleIt =
+ singleOldValuedProperties.find(&props[i]);
+
+ if (singleIt == singleOldValuedProperties.end() || singleIt->second != dob) {
+ ModifiedDataObject& modDO = processModifiedDataObject(dob);
+ RelationshipStatement& rs = modDO.addFK(getRelationship(*modifiedDataObject, modDO), &modifiedDataObject->getPrimaryKeys());
+ modifiedDataObject->addDependency(rs);
+
+
+ }
+
+ }
+
+ }
+
+ }
+
}
}
- }
+ for (std::map<const commonj::sdo::Property*, std::list<commonj::sdo::DataObjectPtr>*>::iterator manyIt = manyOldValuedProperties.begin() ;
+ manyIt != manyOldValuedProperties.end() ; manyIt++) {
- stack.pop_back();
+ std::list<commonj::sdo::DataObjectPtr>* list = manyIt->second;
+
+ for (std::list<commonj::sdo::DataObjectPtr>::const_iterator listIt = list->begin() ;
+ listIt != list->end() ; listIt++) {
+
+ ModifiedDataObject& modDO = processModifiedDataObject(*listIt);
+ RelationshipStatement& rs = modDO.addFK(getRelationship(*modifiedDataObject, modDO), 0);
+ modDO.addDependency(rs);
+
+ }
+
+ delete list;
+
+ }
+
+ }
return *modifiedDataObject;
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?rev=583710&r1=583709&r2=583710&view=diff
==============================================================================
--- 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 Thu Oct 11 00:21:41 2007
@@ -268,7 +268,7 @@
wchar_t* buffer = new wchar_t[length];
dataObject->getString(column.getPropertyName().c_str(), buffer, length);
- data = new std::wstring(buffer);
+ data = new std::wstring(buffer, 0, length);
delete buffer;
}
Modified: incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/CreatedDataObject.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/CreatedDataObject.cpp?rev=583710&r1=583709&r2=583710&view=diff
==============================================================================
--- incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/CreatedDataObject.cpp (original)
+++ incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/CreatedDataObject.cpp Thu Oct 11 00:21:41 2007
@@ -28,46 +28,73 @@
commonj::sdo::PropertyList properties = dataObject->getInstanceProperties();
+ statement.append("insert into ").append(table.getTableName()).append("(");
+ bool containsDataType = false;
+ std::string columns;
+ std::string values;
for (unsigned int i = 0 ; i < properties.size() ; i++) {
if (properties[i].getType().isDataType()) {
+
+ if (containsDataType) {
+ columns.append(",");
+ values.append(",");
+
+ }
+
+ containsDataType = true;
const Column* column = table.getColumnByProperty(properties[i].getName());
ColumnData columnData(*column, dataObject);
- columns.append(column->getName()).append(",");
- values.append(columnData.toSQL()).append(",");
+ columns.append(column->getName());
+ values.append(columnData.toSQL());
}
}
- columns.erase(columns.end()--);
- values.erase(values.end()--);
+ statement.append(columns).append(") values(").append(values).append(");");
}
-void CreatedDataObject::addFK(const KeyDataList& fkDataList) {
+CreatedDataObject::~CreatedDataObject(void) {}
- for (KeyDataList::const_iterator it = fkDataList.begin() ; it != fkDataList.end() ; it++) {
- columns.append(it->second->getColumn().getName()).append(",");
- values.append(it->second->toSQL()).append(",");
-
- }
+//void CreatedDataObject::execute(StatementPtr stmt) const {
+// DASDataObject::execute(stmt);
+//
+// std::string statement;
+// statement = statement.append("insert into ").append(getDataObject()->getType().getName()).append("(");
+//
+// stmt->executeQuery(statement);
+//
+//
+//}
+//
+//void CreatedDataObject::execute(StatementPtr stmt) const {
+//
+// for (std::list<RelationshipStatement*>::const_iterator it = dependencies.begin() ;
+// it != dependencies.end() ; it++) {
+//
+// (*it)->execute(stmt);
+//
+// }
+//
+// std::cout << statement << std::endl;
+//
+// if (statement != "") {
+// stmt->executeQuery(statement);
+// }
+//
+//}
- columns.erase(columns.end()--);
- values.erase(values.end()--);
-
-}
-
-void CreatedDataObject::executeStatements(StatementPtr stmt) const {
- DASDataObject::executeStatements(stmt);
+void CreatedDataObject::printStmt(void) {
+ /*DASDataObject::printStmt();
std::string statement;
- statement = statement.append("insert into ").append(getDataObject()->getType().getName()).append("(");
-
- stmt->executeQuery(statement);
+ statement = statement.append("insert into ").append(getDataObject()->getType().getName()).append("(").append(columns).append(") values(").append(values).append(");");
+ std::cout << statement << std::endl;*/
}
Modified: incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/DASDataObject.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/DASDataObject.cpp?rev=583710&r1=583709&r2=583710&view=diff
==============================================================================
--- incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/DASDataObject.cpp (original)
+++ incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/DASDataObject.cpp Thu Oct 11 00:21:41 2007
@@ -25,31 +25,60 @@
DASDataObject::DASDataObject(const Table& table, commonj::sdo::DataObjectPtr dataObject,
commonj::sdo::ChangeSummaryPtr changeSummary) : PKObject(table) {
- commonj::sdo::SettingList& settingList = changeSummary->getOldValues(dataObject);
+ commonj::sdo::SettingList* settingList = 0;
+ this->dataObject = dataObject;
+ bool modifiedOnGraph = changeSummary->isDeleted(dataObject) || changeSummary->isModified(dataObject);
+
+ if (modifiedOnGraph) {
+ settingList = &changeSummary->getOldValues(dataObject);
+ }
+
std::map<std::string, const commonj::sdo::Setting*> settingMap;
const std::map<std::string, const Column*> columns = table.getColumns();
std::string statement;
unsigned int pkColumnCount = table.getPKColumnCount();
unsigned int pkCount = 0;
- for (int i = 0 ; i < settingList.size() ; i++) {
- settingMap.insert(std::make_pair(settingList[i].getProperty().getName(), &settingList[i]));
+ if (modifiedOnGraph) {
+
+ for (int i = 0 ; i < settingList->size() ; i++) {
+ settingMap.insert(std::make_pair((*settingList)[i].getProperty().getName(), &(*settingList)[i]));
+ }
+
}
for (std::map<std::string, const Column*>::const_iterator columnsIterator = columns.begin() ;
columnsIterator != columns.end() && pkColumnCount > pkCount ; columnsIterator++) {
-
const Column& column = *columnsIterator->second;
- std::map<std::string, const commonj::sdo::Setting*>::const_iterator settingIterator =
- settingMap.find(column.getPropertyName());
- if (settingIterator != settingMap.end()) {
- addPrimaryKey(column.getPropertyName(),
- *(new ColumnData(column, *settingIterator->second)));
-
- } else {
- addPrimaryKey(column.getPropertyName(),
- *(new ColumnData(column, dataObject)));
+ if (column.isPK()) {
+
+ if (modifiedOnGraph) {
+
+ std::map<std::string, const commonj::sdo::Setting*>::const_iterator settingIterator =
+ settingMap.find(column.getPropertyName());
+
+ if (settingIterator != settingMap.end()) {
+
+ if (settingIterator->second->isNull() || !settingIterator->second->isSet()) {
+ //throw exception
+ }
+
+ ColumnData* oldPKData = new ColumnData(column, *settingIterator->second);
+ addPrimaryKey(column.getPropertyName(),
+ *(oldPKData));
+
+ continue;
+
+ }
+
+ }
+
+ if (dataObject->isNull(column.getPropertyName()) || !dataObject->isSet(column.getPropertyName())) {
+ //throw exception
+ }
+
+ addPrimaryKey(column.getPropertyName(), *(new ColumnData(column, dataObject)));
}
@@ -68,20 +97,88 @@
}
+DASDataObject::~DASDataObject(void) {
+
+ for (std::map<std::string, RelationshipStatement*>::iterator it = fks.begin() ; it != fks.end() ; it++) {
+ delete it->second;
+ }
+
+}
+
const commonj::sdo::DataObjectPtr DASDataObject::getDataObject(void) const {
return dataObject;
}
-void DASDataObject::executeStatements(StatementPtr stmt) const {
+//void DASDataObject::execute(StatementPtr stmt) const {
+//
+// for (std::list<std::string>::const_iterator it = updateStatements.begin() ; it != updateStatements.end() ; it++) {
+// stmt->executeQuery(*it);
+// }
+//
+//}
+
+void DASDataObject::appendStatement(std::string statement) {
+ updateStatements.push_back(statement);
+}
+
+std::string DASDataObject::getWhereStmt(void) const {
+ std::string stmt = "where ";
+ const KeyDataList& pks = getPrimaryKeys();
+ unsigned int i = 1;
+
+ for (KeyDataList::const_iterator it = pks.begin() ; it != pks.end() ; it++) {
+ stmt.append(getTable().getTableName() + "." + it->second->getColumn().getName()).append("=").append(/*"2"*/it->second->toSQL());
+
+ if (i != pks.size()) {
+ stmt.append(" and ");
+ }
+
+ i++;
+
+ }
+
+ return stmt;
+
+}
+
+RelationshipStatement& DASDataObject::addFK(const Relationship& relationship, const KeyDataList* keyDataList) {
+ std::map<std::string, RelationshipStatement*>::iterator it = fks.find(relationship.getName());
+ RelationshipStatement* relatStmt;
+
+ if (it == fks.end()) {
+ relatStmt = new RelationshipStatement(relationship, keyDataList);
+ relatStmt->setDASDataObject(*this);
+ fks.insert(std::make_pair(relationship.getName(), relatStmt));
+
+ } else if (keyDataList != 0) {
+ relatStmt = it->second;
+ relatStmt->setFKList(keyDataList);
+
+ }
+
+ return *relatStmt;
+
+}
+
+void DASDataObject::execute(StatementPtr stmt) const {
- for (std::list<std::string>::const_iterator it = updateStatements.begin() ; it != updateStatements.end() ; it++) {
- stmt->executeQuery(*it);
+ if (statement != "") {
+ //std::cout << statement << std::endl;
+ stmt->executeQuery(statement);
+ //stmt->executeQuery("commit");
+ }
+
+ for (std::list<RelationshipStatement*>::const_iterator it = dependencies.begin() ;
+ it != dependencies.end() ; it++) {
+
+ (*it)->execute(stmt);
+
}
}
-void DASDataObject::appendStatement(std::string statement) {
- updateStatements.push_back(statement);
+void DASDataObject::addDependency(RelationshipStatement& relationshipStatement) {
+ dependencies.push_back(&relationshipStatement);
}
void DASDataObject::pushStatement(std::string statement) {
Modified: incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/DASImpl.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/DASImpl.cpp?rev=583710&r1=583709&r2=583710&view=diff
==============================================================================
--- incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/DASImpl.cpp (original)
+++ incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/DASImpl.cpp Thu Oct 11 00:21:41 2007
@@ -139,7 +139,7 @@
}
void DASImpl::applyChanges(commonj::sdo::DataObjectPtr root) {
- ApplyChanges(*config, root);
+ ApplyChanges(*this, root);
}
};
Modified: incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/DeteledDataObject.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/DeteledDataObject.cpp?rev=583710&r1=583709&r2=583710&view=diff
==============================================================================
--- incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/DeteledDataObject.cpp (original)
+++ incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/DeteledDataObject.cpp Thu Oct 11 00:21:41 2007
@@ -26,7 +26,6 @@
commonj::sdo::ChangeSummaryPtr changeSummary)
: DASDataObject(table, dataObject, changeSummary) {
- std::string statement;
statement.append("delete from ").append(table.getTableName()).append(" where ");
const KeyDataList& columnDataList = getPrimaryKeys();
unsigned int pkCount = 0;
@@ -46,9 +45,11 @@
}
- appendStatement(statement.append(";"));
+ statement.append(";");
}
+
+DeletedDataObject::~DeletedDataObject(void) {}
};
};
Modified: incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/ModifiedDataObject.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/ModifiedDataObject.cpp?rev=583710&r1=583709&r2=583710&view=diff
==============================================================================
--- incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/ModifiedDataObject.cpp (original)
+++ incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/ModifiedDataObject.cpp Thu Oct 11 00:21:41 2007
@@ -21,63 +21,98 @@
namespace apache {
namespace das {
namespace rdb {
-
+
ModifiedDataObject::ModifiedDataObject(const Table& table, commonj::sdo::DataObjectPtr dataObject,
commonj::sdo::ChangeSummaryPtr changeSummary) : DASDataObject(table, dataObject, changeSummary) {
- std::string statement;
- statement.append("update ").append(table.getTableName()).append(" set");
+ bool modifiedOnGraph = changeSummary->isCreated(dataObject) || changeSummary->isDeleted(dataObject) || changeSummary->isModified(dataObject);
const KeyDataList& columnDataList = getPrimaryKeys();
unsigned int pkCount = 0;
unsigned int pkColumnCount = columnDataList.size();
-
- commonj::sdo::SettingList& settings = changeSummary->getOldValues(dataObject);
-
- for (int i = 0 ; i < settings.size() ; i++) {
- std::string propName = settings[i].getProperty().getName();
- const Column* column = table.getColumnByProperty(propName);
+ bool dataTypeModified = false;
+ //pkModified = false;
- KeyDataList::const_iterator it = columnDataList.find(column->getName());
+ if (modifiedOnGraph) {
+ statement.append("update ").append(table.getTableName()).append(" set");
+ commonj::sdo::SettingList& settings = changeSummary->getOldValues(dataObject);
+ /*const KeyDataList& keyDataList = getPrimaryKeys();
+
+ for (KeyDataList::const_iterator pkIt = keyDataList.begin() ; pkIt != keyDataList.end() ; pkIt++) {
+ ColumnData actualColumnData(pkIt->second->getColumn(), dataObject);
+
+ if (actualColumnData != *pkIt->second) {
+ pkModified = true;
+ break;
- if (it == columnDataList.end()) {
- sets.append(" ").append(column->getName()).append("=").append(ColumnData(*column, dataObject).toSQL()).append(",");
- }
+ }
- }
-
- pkWhere = " where ";
+ }*/
+
+ for (int i = 0 ; i < settings.size() ; i++) {
- for (KeyDataList::const_iterator columnDataListIterator = columnDataList.begin() ;
- columnDataListIterator != columnDataList.end() ; columnDataListIterator++) {
+ if (settings[i].getType().isDataType()) {
- ColumnData& columnData = *columnDataListIterator->second;
- pkWhere.append(columnData.getColumn().getName()).append("=").append(columnData.toSQL());
- pkCount++;
+ if (dataTypeModified) {
+ statement.append(",");
+ }
- if (pkCount != pkColumnCount) {
- pkWhere.append(" and ");
+ std::string propName = settings[i].getProperty().getName();
+ const Column* column = table.getColumnByProperty(propName);
+ dataTypeModified = true;
+ statement.append(" ").append(column->getName()).append("=").append(ColumnData(*column, dataObject).toSQL());
+
}
+ }
+
+ if (!dataTypeModified) {
+ statement = "";
+ } else {
+ statement.append(" ").append(getWhereStmt()).append(";");
+ }
+
}
- pkWhere.append(";");
-
}
-void ModifiedDataObject::setFK(std::string relationshipName, const KeyDataList* keyDataList) {
-
- if (keyDataList == 0) {
- std::map<std::string, const KeyDataList*>::const_iterator it = fks.find(relationshipName);
+ModifiedDataObject::~ModifiedDataObject(void) {}
+
+//bool ModifiedDataObject::isPKModified(void) const {
+// return pkModified;
+//}
+
+
+//
+//void ModifiedDataObject::printStmt() {
+// DASDataObject::printStmt();
+//
+// if (sets.size() != 0 || fks.size() != 0) {
+// std::string statement;
+// statement.append("update ").append(getTable().getTableName()).append(" set").append(sets);
+//
+// for (std::map<std::string, const ColumnData*>::const_iterator it = fks.begin() ; it != fks.end() ; it++) {
+//
+// statement.append(" ").append(it->first).append("=");
+//
+// if (it->second == 0) {
+// statement.append(SQL_NULL_VALUE);
+// } else {
+// statement.append(it->second->toSQL());
+// }
+//
+// }
+//
+// statement.append(" ").append(whereStmt).append(";");
+//
+// std::cout << statement << std::endl;
+//
+// }
+//
+//}
- if (it != fks.end() && it->second != 0) {
- return;
- }
-
- }
- fks.insert(std::make_pair(relationshipName, keyDataList));
-}
+
};
};
Modified: incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/PKObject.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/PKObject.cpp?rev=583710&r1=583709&r2=583710&view=diff
==============================================================================
--- incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/PKObject.cpp (original)
+++ incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/PKObject.cpp Thu Oct 11 00:21:41 2007
@@ -19,7 +19,6 @@
#include "apache/das/rdb/PKObject.h"
#include "apache/das/rdb/ColumnData.h"
-
namespace apache {
namespace das {
namespace rdb {
Added: incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/RelationshipStatement.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/RelationshipStatement.cpp?rev=583710&view=auto
==============================================================================
--- incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/RelationshipStatement.cpp (added)
+++ incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/RelationshipStatement.cpp Thu Oct 11 00:21:41 2007
@@ -0,0 +1,96 @@
+/*
+ * 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.
+ */
+#include "apache/das/rdb/RelationshipStatement.h"
+#include "apache/das/rdb/Relationship.h"
+
+namespace apache {
+ namespace das {
+ namespace rdb {
+
+RelationshipStatement::RelationshipStatement(const Relationship& relationship, const KeyDataList* keyDataList) {
+ this->relationship = &relationship;
+ this->keyDataList = keyDataList;
+ executed = false;
+
+}
+
+void RelationshipStatement::setDASDataObject(DASDataObject& dataObject) {
+ this->dataObject = &dataObject;
+}
+
+RelationshipStatement::~RelationshipStatement(void) {}
+
+bool RelationshipStatement::isUnset(void) const {
+ return keyDataList == 0;
+}
+
+DASDataObject& RelationshipStatement::getDASDataObject(void) const {
+ return *dataObject;
+}
+
+void RelationshipStatement::setFKList(const KeyDataList* keyDataList) {
+ this->keyDataList = keyDataList;
+}
+
+void RelationshipStatement::execute(StatementPtr statement) {
+
+ if (!executed) {
+ const std::map<std::string, const KeyPair*>& keyPairs = relationship->getKeyPairs();
+ std::string stmt;
+ stmt.append("update ").append(relationship->getFKTableName()).append(" set");
+ unsigned int i = 1;
+
+ for (std::map<std::string, const KeyPair*>::const_iterator it = keyPairs.begin() ; it != keyPairs.end() ; it++) {
+ stmt.append(" ").append(it->second->getFKColumnName()).append("=");
+
+ if (keyDataList == 0) {
+ stmt.append(SQL_NULL_VALUE);
+ } else {
+ KeyDataList::const_iterator pkIt = keyDataList->find(it->second->getPKColumnName());
+
+ if (pkIt == keyDataList->end()) {
+ //throw exception
+ }
+
+ stmt.append(pkIt->second->toSQL());
+
+ }
+
+ if (i != keyPairs.size()) {
+ stmt.append(",");
+ }
+
+ i++;
+
+ }
+
+ //statement->executeQuery("commit");
+ stmt.append(" ").append(dataObject->getWhereStmt()).append(";");
+ //std::cout << stmt << std::endl;
+ statement->executeQuery(stmt);
+
+ executed = true;
+
+ }
+
+}
+
+ };
+ };
+};
Modified: incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/ResultSet.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/ResultSet.cpp?rev=583710&r1=583709&r2=583710&view=diff
==============================================================================
--- incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/ResultSet.cpp (original)
+++ incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/ResultSet.cpp Thu Oct 11 00:21:41 2007
@@ -51,7 +51,7 @@
SQLRETURN result = SQLGetData(stmt->getODBCStatement(), columnIndex + 1, SQL_C_LONG, &sqlPtr, 0, &aux);
if ((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO))
- throw SQLException("Error to get database data!");
+ throw SQLException("Error on getting database data!");
} else {
throw DASInvalidSQLTypeException("Column sql type on index " + columnIndex + (std::string) " is not integer!");
@@ -74,7 +74,7 @@
SQLRETURN result = SQLGetData(stmt->getODBCStatement(), columnIndex + 1, SQL_C_WCHAR, &strAux, 1, &length);
if ((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO))
- throw SQLException("Error to get database data!");
+ throw SQLException("Error on getting database data!");
ret = (wchar_t) strAux;
@@ -99,7 +99,7 @@
SQLRETURN result = SQLGetData(stmt->getODBCStatement(), columnIndex + 1, SQL_C_FLOAT, &real, 1, &length);
if ((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO))
- throw SQLException("Error to get database data!");
+ throw SQLException("Error on getting database data!");
ret = (float) real;
@@ -124,7 +124,7 @@
SQLRETURN result = SQLGetData(stmt->getODBCStatement(), columnIndex + 1, SQL_C_DOUBLE, &data, 1, &length);
if ((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO))
- throw SQLException("Error to get database data!");
+ throw SQLException("error on getting database data!");
ret = (double) data;
@@ -149,7 +149,7 @@
SQLRETURN result = SQLGetData(stmt->getODBCStatement(), columnIndex + 1, SQL_C_DOUBLE, &data, 1, &length);
if ((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO))
- throw SQLException("Error to get database data!");
+ throw SQLException("error on getting database data!");
ret = (double) data;
@@ -196,7 +196,7 @@
SQLRETURN result = SQLColAttribute(stmt->getODBCStatement(), NULL, SQL_DESC_COUNT, NULL, NULL, NULL, &columnCount);
if ((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO))
- throw SQLException("Error to get row count!");
+ throw SQLException("error on getting row count!");
return (unsigned int) columnCount;
@@ -209,7 +209,7 @@
SQLRETURN result = SQLGetData(stmt->getODBCStatement(), columnIndex + 1, SQL_C_CHAR, &strAux, 1, &length);
if ((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO))
- throw SQLException("Error to get database data!");
+ throw SQLException("error on getting database data!");
length++;
sqlPtr = new SQLCHAR[length];
@@ -217,7 +217,7 @@
result = SQLGetData(stmt->getODBCStatement(), columnIndex + 1, SQL_C_CHAR, sqlPtr, length, &aux);
if ((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO))
- throw SQLException("Error to get database data!");
+ throw SQLException("error on getting database data!");
std::string ret = (char*) sqlPtr;
delete [] ((SQLCHAR*) sqlPtr);
Modified: incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/Statement.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/Statement.cpp?rev=583710&r1=583709&r2=583710&view=diff
==============================================================================
--- incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/Statement.cpp (original)
+++ incubator/tuscany/cpp/das/runtime/core/src/apache/das/rdb/Statement.cpp Thu Oct 11 00:21:41 2007
@@ -70,6 +70,7 @@
}
ResultSetPtr Statement::executeQuery(std::string sql) {
+ SQLCloseCursor(statementHandle);
SQLRETURN result = SQLExecDirect(statementHandle, (SQLCHAR*) (char*) sql.c_str(), SQL_NTS);
if ((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO)) {
Modified: incubator/tuscany/cpp/das/runtime/test/rsc/TestCases.fdb
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/test/rsc/TestCases.fdb?rev=583710&r1=583709&r2=583710&view=diff
==============================================================================
Binary files - no diff available.
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?rev=583710&r1=583709&r2=583710&view=diff
==============================================================================
--- incubator/tuscany/cpp/das/runtime/test/src/main.cpp (original)
+++ incubator/tuscany/cpp/das/runtime/test/src/main.cpp Thu Oct 11 00:21:41 2007
@@ -31,6 +31,7 @@
#include <apache/das/DataGraphPrinter.h>
#include <commonj/sdo/DataObject.h>
#include <commonj/sdo/SDORuntimeException.h>
+#include <commonj/sdo/DataFactory.h>
#include <libxml/xmlreader.h>
#define TEST_RESOURCE_PATH "../../../../runtime/test/rsc/"
@@ -113,21 +114,11 @@
Connection* conn;
try {
- // Connect to a database using a connect string
- /*string user = "SYSDBA";
- string password = "masterkey";
- string driver = "Firebird/InterBase(r) driver";
- string dataSourcePath = (string) tuscanyDASCPPPath + "/../runtime/test/rsc/TestCases.fdb";
-
- conn = new Connection((string)
- "DRIVER=" + driver +
- "; UID=" + user +
- "; PWD=" + password +
- ";DBNAME=localhost:" + dataSourcePath + ";"
- );*/
-
- conn = new Connection("driver={MySQL ODBC 3.51 Driver};server=localhost;database=testcases;user=root;PWD=masterkey");
+ std::string dsn = "PostgresTestcases";
+ std::string user = "postgres";
+ std::string password = "tuscany";
+ conn = new Connection(dsn, user, password);
} catch (SQLException& ex) {
cout << "couldn't connect to the data source: " << ex.what() << endl;
@@ -142,22 +133,20 @@
try {
stmt->executeQuery(clearDBStatements[i]);
- } catch (SQLException& ex) {/*cout << ex.what() << endl;*/}
+ } catch (SQLException& ex) {cout << ex.what() << endl;}
}
- //stmt->executeQuery("commit");
- //stmt = conn->createStatement();
-
for (unsigned int i = 0 ; i < 19 ; i++) {
- stmt->executeQuery(resetDBStatements[i]);
-
- //if (i == 2) stmt->executeQuery("commit");
+ try {
+ stmt->executeQuery(resetDBStatements[i]);
+ } catch (SQLException& ex) {cout << ex.what() << endl;}
+
}
stmt->executeQuery("commit");
-
+
return conn;
}
@@ -425,22 +414,426 @@
cout << "-------------testDeleteOperation--------------" << endl;
Connection* conn = getConnection();
+
+ ConfigImpl config((std::string) TEST_RESOURCE_PATH + "testDeleteOperation.xml");
+ DASImpl* das = (DASImpl*) DASImpl::getFACTORY().createDAS(config, *conn);
+ CommandPtr command = das->createCommand("SELECT * FROM company, department, employee;");
+ commonj::sdo::DataObjectPtr root = command->executeQuery();
+
+ root->getDataObject("company[1]")->getDataObject("department[1]")->detach();
+ commonj::sdo::DataObjectPtr company = root->getDataObject("company[1]");
+ company->detach();
+ long removedCompanyID = company->getInt("id");
+
+ cout << "Company with id " << removedCompanyID << " deleted on database: ";
+
+ das->applyChanges(root);
+
+ command = das->createCommand("SELECT * FROM company, department, employee;");
+ root = command->executeQuery();
+
+ commonj::sdo::DataObjectList& companies = root->getList("company");
+ bool failed = false;
+ for (unsigned int i = 0 ; i < companies.size() ; i++) {
+
+ if (companies[i]->getInt("id") == removedCompanyID) {
+ cout << "Failed" << endl;
+ failed = true;
+ break;
+
+ }
+
+ }
+
+ if (!failed) {
+ cout << "OK" << endl;
+ }
+
+ delete conn;
+
+ cout << "---------------------------------" << endl << endl;
+
+}
+
+void testCreateOperation() {
+ cout << "-------------testCreateOperation--------------" << endl;
+
+ Connection* conn = getConnection();
+ ConfigImpl config((std::string) TEST_RESOURCE_PATH + "testDeleteOperation.xml");
+ DASImpl* das = (DASImpl*) DASImpl::getFACTORY().createDAS(config, *conn);
+ CommandPtr command = das->createCommand("SELECT * FROM company, department, employee;");
+ commonj::sdo::DataObjectPtr root = command->executeQuery();
+
+ commonj::sdo::DataObjectPtr company = root->createDataObject("company");
+ StringWrapper("hp").defineOnDataObject(company, "name");
+ company->setInt("id", 40);
+
+ commonj::sdo::DataObjectPtr department = root->createDataObject("department");
+ StringWrapper("department40").defineOnDataObject(department, "name");
+ department->setInt("id", 39);
+
+ company = root->getDataObject("company[1]");
+ long departmentCompanyID = company->getInt("id");
+ company->getList("department").append(department);
+
+ commonj::sdo::DataObjectPtr employee = root->createDataObject("employee");
+ StringWrapper("juan").defineOnDataObject(employee, "name");
+ employee->setInt("id", 38);
+ department->getList("employee").append(employee);
+
+ //cout << "Company with id " << removedCompanyID << " deleted on database: ";
+
+ das->applyChanges(root);
+
+ command = das->createCommand("SELECT * FROM company, department, employee;");
+ root = command->executeQuery();
+
+ commonj::sdo::DataObjectList& departments = root->getList("department");
+ bool failed = true;
+ for (unsigned int i = 0 ; i < departments.size() ; i++) {
+
+ if (departments[i]->getInt("id") == 39 && StringWrapper(departments[i], "name").getString() == "department40"
+ && departments[i]->getDataObject("employee[1]")->getInt("id") == 38
+ && StringWrapper(departments[i]->getDataObject("employee[1]"), "name").getString() == "juan") {
+
+ failed = false;
+ break;
+
+ }
+
+ }
+
+ if (!failed) {
+ failed = true;
+ commonj::sdo::DataObjectList& companies = root->getList("company");
+ for (unsigned int i = 0 ; i < companies.size() ; i++) {
+
+ if (companies[i]->getInt("id") == departmentCompanyID) {
+ commonj::sdo::DataObjectList& companyDepartments = root->getList("department");
+
+ for (unsigned int i = 0 ; i < companyDepartments.size() ; i++) {
+
+ if (companyDepartments[i]->getInt("id") == 39) {
+ failed = false;
+ break;
+
+ }
+
+ }
+
+ break;
+
+ }
+
+ }
+
+ }
+
+ if (failed) {
+ cout << "Failed" << endl;
+ } else {
+ cout << "OK" << endl;
+ }
+
+
+ delete conn;
+
+ cout << "---------------------------------" << endl << endl;
+
+}
+
+void testMofidyOperation2() {
+ cout << "-------------testMofidyOperation2--------------" << endl;
+
+ Connection* conn = getConnection();
+ ConfigImpl config((std::string) TEST_RESOURCE_PATH + "testDeleteOperation.xml");
+ DASImpl* das = (DASImpl*) DASImpl::getFACTORY().createDAS(config, *conn);
+ CommandPtr command = das->createCommand("SELECT * FROM company, department, employee;");
+ commonj::sdo::DataObjectPtr root = command->executeQuery();
+
+ /*DataGraphPrinter(root).printMetaData(cout);
+ DataGraphPrinter(root).print(cout);*/
+
+ commonj::sdo::DataObjectPtr company = root->getDataObject("company[1]");
+ StringWrapper("intel").defineOnDataObject(company, "name");
+
+ commonj::sdo::DataObjectPtr department = root->createDataObject("department");
+ StringWrapper("department40").defineOnDataObject(department, "name");
+ department->setInt("id", 39);
+ company->getList("department").append(department);
+
+ department = company->getDataObject("department[1]");
+
+ commonj::sdo::DataObjectPtr employee = root->createDataObject("employee");
+ StringWrapper("albert").defineOnDataObject(employee, "name");
+ employee->setInt("id", 37);
+ department->getList("employee").append(employee);
+
+ std::cout << "department modified:" << std::endl;
+ department->printSelf(std::cout);
+
+
+ das->applyChanges(root);
+
+ delete conn;
+
+ cout << "---------------------------------" << endl << endl;
+
+}
+
+void test() {
+
+ /*Connection* conn = getConnection();
+ ConfigImpl config((std::string) TEST_RESOURCE_PATH + "testDeleteOperation.xml");
+ DASImpl* das = (DASImpl*) DASImpl::getFACTORY().createDAS(config, *conn);
+ CommandPtr command = das->createCommand("SELECT * FROM company, department, employee;");
+ commonj::sdo::DataObjectPtr root = command->executeQuery();
+
+ commonj::sdo::DataObjectPtr company1 = root->getDataObject("company[1]");
+ commonj::sdo::DataObjectPtr company2 = root->getDataObject("company[1]");
+
+ department = company1->getList("department").remove(0);
+ company2->getList("department").append(department);
+
+ commonj::sdo::ChangeSummaryPtr csummary = root->getChangeSummary();
+
+ commonj::sdo::SettingList& settings = csummary->getOldValues();
+
+
+ das->applyChanges(root);
+
+ delete conn;*/
+
+ commonj::sdo::DataFactoryPtr mdg = commonj::sdo::DataFactory::getDataFactory();
+
+ mdg->addType("apache.tuscany.das", "Root");
+ mdg->addType("apache.tuscany.das", "company");
+ mdg->addType("apache.tuscany.das", "department");
+ mdg->addType("apache.tuscany.das", "employee");
+
+ const commonj::sdo::Type& rootType = mdg->getType("apache.tuscany.das", "Root");
+ const commonj::sdo::Type& companyType = mdg->getType("apache.tuscany.das", "company");
+ const commonj::sdo::Type& departmentType = mdg->getType("apache.tuscany.das", "department");
+ const commonj::sdo::Type& employeeType = mdg->getType("apache.tuscany.das", "employee");
+
+ mdg->addPropertyToType("apache.tuscany.das", "Root", "ChangeSummary", "commonj.sdo", "ChangeSummary", false, false, true);
+ mdg->addPropertyToType("apache.tuscany.das", "Root", "company", "apache.tuscany.das", "company", true, false, true);
+ mdg->addPropertyToType("apache.tuscany.das", "Root", "employee", "apache.tuscany.das", "employee", true, false, true);
+ mdg->addPropertyToType("apache.tuscany.das", "Root", "department", "apache.tuscany.das", "department", true, false, true);
+
+ mdg->addPropertyToType("apache.tuscany.das", "company", "id", "commonj.sdo", "Integer", false, false, true);
+ mdg->addPropertyToType("apache.tuscany.das", "company", "name", "commonj.sdo", "String", false, false, true);
+ mdg->addPropertyToType("apache.tuscany.das", "company", "department", "apache.tuscany.das", "department", true, false, false);
+
+ mdg->addPropertyToType("apache.tuscany.das", "department", "id", "commonj.sdo", "Integer", false, false, true);
+ mdg->addPropertyToType("apache.tuscany.das", "department", "name", "commonj.sdo", "String", false, false, true);
+ mdg->addPropertyToType("apache.tuscany.das", "department", "employee", "apache.tuscany.das", "employee", true, false, false);
+
+ mdg->addPropertyToType("apache.tuscany.das", "employee", "id", "commonj.sdo", "Integer", false, false, true);
+ mdg->addPropertyToType("apache.tuscany.das", "employee", "name", "commonj.sdo", "String", false, false, true);
+
+ std::wstring waux;
+ commonj::sdo::DataObjectPtr root = mdg->create(rootType);
+
+ commonj::sdo::DataObjectPtr company1 = root->createDataObject("company");
+ company1->setInt("id", 1);
+ waux = L"apache";
+ company1->setString("name", waux.c_str(), waux.length());
+
+ commonj::sdo::DataObjectPtr company2 = root->createDataObject("company");
+ company2->setInt("id", 2);
+ waux = L"acme";
+ company2->setString("name", waux.c_str(), waux.length());
+
+ commonj::sdo::DataObjectPtr company3 = root->createDataObject("company");
+ company3->setInt("id", 3);
+ waux = L"google";
+ company3->setString("name", waux.c_str(), waux.length());
+
+ commonj::sdo::DataObjectPtr company4 = root->createDataObject("company");
+ company1->setInt("id", 4);
+ waux = L"ibm";
+ company4->setString("name", waux.c_str(), waux.length());
+
+ commonj::sdo::DataObjectPtr company5 = root->createDataObject("company");
+ company5->setInt("id", 5);
+ waux = L"yahoo";
+ company5->setString("name", waux.c_str(), waux.length());
+
+ commonj::sdo::DataObjectPtr depart1 = root->createDataObject("department");
+ depart1->setInt("id", 1);
+ waux = L"department1";
+ depart1->setString("name", waux.c_str(), waux.length());
+
+ commonj::sdo::DataObjectPtr depart2 = root->createDataObject("department");
+ depart2->setInt("id", 2);
+ waux = L"department1";
+ depart2->setString("name", waux.c_str(), waux.length());
+
+ commonj::sdo::DataObjectPtr depart3 = root->createDataObject("department");
+ depart3->setInt("id", 3);
+ waux = L"department2";
+ depart3->setString("name", waux.c_str(), waux.length());
+
+ commonj::sdo::DataObjectPtr depart4 = root->createDataObject("department");
+ depart4->setInt("id", 4);
+ waux = L"department5";
+ depart4->setString("name", waux.c_str(), waux.length());
+
+ commonj::sdo::DataObjectPtr depart5 = root->createDataObject("department");
+ depart5->setInt("id", 5);
+ waux = L"department3";
+ depart5->setString("name", waux.c_str(), waux.length());
+
+ commonj::sdo::DataObjectPtr depart6 = root->createDataObject("department");
+ depart6->setInt("id", 6);
+ waux = L"department6";
+ depart6->setString("name", waux.c_str(), waux.length());
+
+ commonj::sdo::DataObjectPtr employee1 = root->createDataObject("employee");
+ employee1->setInt("id", 1);
+ waux = L"adriano";
+ employee1->setString("name", waux.c_str(), waux.length());
+
+ commonj::sdo::DataObjectPtr employee2 = root->createDataObject("employee");
+ employee2->setInt("id", 2);
+ waux = L"paul";
+ employee2->setString("name", waux.c_str(), waux.length());
+
+ commonj::sdo::DataObjectPtr employee3 = root->createDataObject("employee");
+ employee3->setInt("id", 3);
+ waux = L"richard";
+ employee3->setString("name", waux.c_str(), waux.length());
+
+ commonj::sdo::DataObjectPtr employee4 = root->createDataObject("employee");
+ employee4->setInt("id", 4);
+ waux = L"ema";
+ employee4->setString("name", waux.c_str(), waux.length());
+
+ commonj::sdo::DataObjectPtr employee5 = root->createDataObject("employee");
+ employee5->setInt("id", 5);
+ waux = L"james";
+ employee5->setString("name", waux.c_str(), waux.length());
+
+ company1->getList("department").append(depart1);
+ company1->getList("department").append(depart2);
+
+ company2->getList("department").append(depart3);
+ company2->getList("department").append(depart4);
+
+ company3->getList("department").append(depart5);
+ company3->getList("department").append(depart6);
+
+ depart1->getList("employee").append(employee1);
+ depart1->getList("employee").append(employee2);
+ depart1->getList("employee").append(employee3);
+
+ root->getChangeSummary()->beginLogging();
+
+ commonj::sdo::DataObjectPtr department = company1->getList("department").remove(0);
+
+ cout << "removed department:" << endl;
+ department->printSelf(cout);
+
+ company2->getList("department").append(department);
+
+ commonj::sdo::SettingList& settings = root->getChangeSummary()->getOldValues(company1);
+
+ for (unsigned int i = 0 ; i < settings.size() ; i++) {
+
+ if ((std::string) settings[i].getProperty().getName() == "department") {
+ settings[i].getDataObjectValue()->printSelf(cout);
+ }
+
+ }
+
+}
+
+void printCompany(commonj::sdo::DataObjectPtr company) {
+ cout << "----------------------" << endl;
+ company->printSelf(cout);
+
+ commonj::sdo::DataObjectList& departments = company->getList("department");
+
+ for (unsigned int i = 0 ; i < departments.size() ; i++) {
+ departments[i]->printSelf(cout);
+ }
+
+ cout << "----------------------" << endl << endl;
+
+}
+
+void testMofidyOperation() {
+ cout << "-------------testMofidyOperation--------------" << endl;
+
+ Connection* conn = getConnection();
ConfigImpl config((std::string) TEST_RESOURCE_PATH + "testDeleteOperation.xml");
DASImpl* das = (DASImpl*) DASImpl::getFACTORY().createDAS(config, *conn);
CommandPtr command = das->createCommand("SELECT * FROM company, department, employee;");
commonj::sdo::DataObjectPtr root = command->executeQuery();
- DataGraphPrinter(root).printMetaData(cout);
- DataGraphPrinter(root).print(cout);
+ //DataGraphPrinter(root).print(cout);
+
+ commonj::sdo::DataObjectPtr company1 = root->getDataObject("company[1]");
+ commonj::sdo::DataObjectPtr company2 = root->getDataObject("company[2]");
+
+ StringWrapper("intel").defineOnDataObject(company1, "name");
+ commonj::sdo::DataObjectPtr department = root->createDataObject("department");
+ StringWrapper("department40").defineOnDataObject(department, "name");
+ department->setInt("id", 39);
+ company1->getList("department").append(department);
- //root->getDataObject("company[1]")->getDataObject("department[1]")->detach();
- root->getDataObject("company[1]")->detach();
+ department = company1->getList("department").remove(0);//company->getDataObject("department[1]");
+ company2->getList("department").append(department);
- commonj::sdo::ChangeSummaryPtr summary = root->getChangeSummary();
+ commonj::sdo::DataObjectPtr employee = root->createDataObject("employee");
+ StringWrapper("albert").defineOnDataObject(employee, "name");
+ employee->setInt("id", 37);
+ department->getList("employee").append(employee);
das->applyChanges(root);
+ commonj::sdo::DataObjectPtr dob;
+ bool failed = false;
+ try {
+ dob = root->getDataObject("company[name='intel']");
+ } catch (commonj::sdo::SDOPathNotFoundException& ex) {
+ cout << ex.getMessageText() << endl;
+ failed = true;
+
+ }
+
+ try {
+ dob = root->getDataObject("company[name='intel']/department[name='department40' and id=39]");
+ } catch (commonj::sdo::SDOPathNotFoundException& ex) {
+ cout << ex.getMessageText() << endl;
+ failed = true;
+
+ }
+
+ try {
+ dob = root->getDataObject("company[id=2]/department[id=1]");
+ } catch (commonj::sdo::SDOPathNotFoundException& ex) {
+ cout << ex.getMessageText() << endl;
+ failed = true;
+
+ }
+
+ try {
+ dob = root->getDataObject("company[id=2]/department[id=1]/employee[id=37 and name='albert']");
+ } catch (commonj::sdo::SDOPathNotFoundException& ex) {
+ cout << ex.getMessageText() << endl;
+ failed = true;
+
+ }
+
+ if (failed) {
+ cout << "Failed" << endl;
+ } else {
+ cout << "OK" << endl;
+ }
+
delete conn;
cout << "---------------------------------" << endl << endl;
@@ -503,12 +896,24 @@
}
int main() {
+
+ try {
+ testMofidyOperation();
+ } catch (std::exception& exp) {
+ cout << "Exception occurred: " << exp.what() << endl;
+ }
- /*try {
+ try {
testDeleteOperation();
} catch (std::exception& exp) {
cout << "Exception occurred: " << exp.what() << endl;
- }*/
+ }
+
+ try {
+ testCreateOperation();
+ } catch (std::exception& exp) {
+ cout << "Exception occurred: " << exp.what() << endl;
+ }
try {
testPointers();
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org