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/04/20 06:15:21 UTC

svn commit: r530633 - in /incubator/tuscany/cpp/das: VSExpress/tuscany_das/das_lite/ VSExpress/tuscany_das/das_runtime/ runtime/das_lite/src/

Author: adrianocrestani
Date: Thu Apr 19 21:15:19 2007
New Revision: 530633

URL: http://svn.apache.org/viewvc?view=rev&rev=530633
Log:
Added Connection, Database and Statement classes for tests
Modified VC project include dir settings

Added:
    incubator/tuscany/cpp/das/runtime/das_lite/src/Connection.cpp
      - copied, changed from r528901, incubator/tuscany/cpp/das/runtime/das_lite/src/ConnectionImpl.cpp
    incubator/tuscany/cpp/das/runtime/das_lite/src/Connection.h
      - copied, changed from r528901, incubator/tuscany/cpp/das/runtime/das_lite/src/ConnectionImpl.h
    incubator/tuscany/cpp/das/runtime/das_lite/src/Database.cpp
    incubator/tuscany/cpp/das/runtime/das_lite/src/Database.h
Removed:
    incubator/tuscany/cpp/das/runtime/das_lite/src/ConnectionImpl.cpp
    incubator/tuscany/cpp/das/runtime/das_lite/src/ConnectionImpl.h
Modified:
    incubator/tuscany/cpp/das/VSExpress/tuscany_das/das_lite/das_lite.vcproj
    incubator/tuscany/cpp/das/VSExpress/tuscany_das/das_runtime/das_runtime.suo
    incubator/tuscany/cpp/das/runtime/das_lite/src/BaseCommandImpl.cpp
    incubator/tuscany/cpp/das/runtime/das_lite/src/BaseCommandImpl.h
    incubator/tuscany/cpp/das/runtime/das_lite/src/Column.cpp
    incubator/tuscany/cpp/das/runtime/das_lite/src/Column.h
    incubator/tuscany/cpp/das/runtime/das_lite/src/CommandImpl.cpp
    incubator/tuscany/cpp/das/runtime/das_lite/src/CommandImpl.h
    incubator/tuscany/cpp/das/runtime/das_lite/src/Config.cpp
    incubator/tuscany/cpp/das/runtime/das_lite/src/Config.h
    incubator/tuscany/cpp/das/runtime/das_lite/src/DASFactoryImpl.cpp
    incubator/tuscany/cpp/das/runtime/das_lite/src/DASFactoryImpl.h
    incubator/tuscany/cpp/das/runtime/das_lite/src/DASImpl.cpp
    incubator/tuscany/cpp/das/runtime/das_lite/src/DASImpl.h
    incubator/tuscany/cpp/das/runtime/das_lite/src/GraphBuilder.cpp
    incubator/tuscany/cpp/das/runtime/das_lite/src/GraphBuilder.h
    incubator/tuscany/cpp/das/runtime/das_lite/src/GraphBuilderMetaData.cpp
    incubator/tuscany/cpp/das/runtime/das_lite/src/GraphBuilderMetaData.h
    incubator/tuscany/cpp/das/runtime/das_lite/src/KeyPair.cpp
    incubator/tuscany/cpp/das/runtime/das_lite/src/KeyPair.h
    incubator/tuscany/cpp/das/runtime/das_lite/src/ReadCommandImpl.cpp
    incubator/tuscany/cpp/das/runtime/das_lite/src/ReadCommandImpl.h
    incubator/tuscany/cpp/das/runtime/das_lite/src/Relationship.cpp
    incubator/tuscany/cpp/das/runtime/das_lite/src/Relationship.h
    incubator/tuscany/cpp/das/runtime/das_lite/src/ResultSet.cpp
    incubator/tuscany/cpp/das/runtime/das_lite/src/ResultSet.h
    incubator/tuscany/cpp/das/runtime/das_lite/src/ResultSetMetaData.cpp
    incubator/tuscany/cpp/das/runtime/das_lite/src/ResultSetMetaData.h
    incubator/tuscany/cpp/das/runtime/das_lite/src/Statement.cpp
    incubator/tuscany/cpp/das/runtime/das_lite/src/Statement.h
    incubator/tuscany/cpp/das/runtime/das_lite/src/Table.cpp
    incubator/tuscany/cpp/das/runtime/das_lite/src/Table.h

Modified: incubator/tuscany/cpp/das/VSExpress/tuscany_das/das_lite/das_lite.vcproj
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/VSExpress/tuscany_das/das_lite/das_lite.vcproj?view=diff&rev=530633&r1=530632&r2=530633
==============================================================================
--- incubator/tuscany/cpp/das/VSExpress/tuscany_das/das_lite/das_lite.vcproj (original)
+++ incubator/tuscany/cpp/das/VSExpress/tuscany_das/das_lite/das_lite.vcproj Thu Apr 19 21:15:19 2007
@@ -4,6 +4,7 @@
 	Version="8,00"
 	Name="das_lite"
 	ProjectGUID="{FFDC7773-6FA6-4477-8624-8D96AACB6BF0}"
+	RootNamespace="das_lite"
 	>
 	<Platforms>
 		<Platform
@@ -37,8 +38,10 @@
 			<Tool
 				Name="VCCLCompilerTool"
 				Optimization="0"
-				AdditionalIncludeDirectories="&quot;C:\Program Files\Microsoft Visual Studio 8\VC\include&quot;;C:\Adriano\Faculdade\Tuscany\Tuscany\CPP\DAS\runtime\das_lite\src;&quot;C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Include\crt&quot;;&quot;C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Include&quot;;&quot;$(TUSCANY_SDOCPP)\include&quot;;&quot;%LIBXML2_HOME%\include&quot;;&quot;%ZLIB_HOME%\include&quot;;&quot;%ICONV_HOME%\include&quot;"
+				AdditionalIncludeDirectories="&quot;$(VCInstallDir)\include&quot;;..\..\..\runtime\das_lite\src;&quot;C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Include\crt&quot;;&quot;C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Include&quot;;&quot;$(TUSCANY_SDOCPP)\include&quot;;&quot;%LIBXML2_HOME%\include&quot;;&quot;%ZLIB_HOME%\include&quot;;&quot;%ICONV_HOME%\include&quot;"
 				PreprocessorDefinitions="WIN32;_DEBUG"
+				IgnoreStandardIncludePath="false"
+				GeneratePreprocessedFile="0"
 				RuntimeLibrary="3"
 				DebugInformationFormat="4"
 			/>
@@ -53,6 +56,8 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
+				AdditionalDependencies="odbc32.lib tuscany_sdo.lib"
+				AdditionalLibraryDirectories="&quot;$(TUSCANY_SDOCPP)\lib&quot;;&quot;C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Lib&quot;"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -165,7 +170,7 @@
 				>
 			</File>
 			<File
-				RelativePath="..\..\..\runtime\das_lite\src\ConnectionImpl.cpp"
+				RelativePath="..\..\..\runtime\das_lite\src\Connection.cpp"
 				>
 			</File>
 			<File
@@ -185,6 +190,10 @@
 				>
 			</File>
 			<File
+				RelativePath="..\..\..\runtime\das_lite\src\Database.cpp"
+				>
+			</File>
+			<File
 				RelativePath="..\..\..\runtime\das_lite\src\GraphBuilder.cpp"
 				>
 			</File>
@@ -224,6 +233,12 @@
 				RelativePath="..\..\..\runtime\das_lite\src\Table.cpp"
 				>
 			</File>
+			<Filter
+				Name="Resource Files"
+				Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+				UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+				>
+			</Filter>
 		</Filter>
 		<Filter
 			Name="Header Files"
@@ -251,7 +266,7 @@
 				>
 			</File>
 			<File
-				RelativePath="..\..\..\runtime\das_lite\src\ConnectionImpl.h"
+				RelativePath="..\..\..\runtime\das_lite\src\Connection.h"
 				>
 			</File>
 			<File
@@ -275,6 +290,10 @@
 				>
 			</File>
 			<File
+				RelativePath="..\..\..\runtime\das_lite\src\Database.h"
+				>
+			</File>
+			<File
 				RelativePath="..\..\..\runtime\das_lite\src\GraphBuilder.h"
 				>
 			</File>
@@ -314,12 +333,6 @@
 				RelativePath="..\..\..\runtime\das_lite\src\Table.h"
 				>
 			</File>
-		</Filter>
-		<Filter
-			Name="Resource Files"
-			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
-			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
-			>
 		</Filter>
 	</Files>
 	<Globals>

Modified: incubator/tuscany/cpp/das/VSExpress/tuscany_das/das_runtime/das_runtime.suo
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/VSExpress/tuscany_das/das_runtime/das_runtime.suo?view=diff&rev=530633&r1=530632&r2=530633
==============================================================================
Binary files - no diff available.

Modified: incubator/tuscany/cpp/das/runtime/das_lite/src/BaseCommandImpl.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/das_lite/src/BaseCommandImpl.cpp?view=diff&rev=530633&r1=530632&r2=530633
==============================================================================
--- incubator/tuscany/cpp/das/runtime/das_lite/src/BaseCommandImpl.cpp (original)
+++ incubator/tuscany/cpp/das/runtime/das_lite/src/BaseCommandImpl.cpp Thu Apr 19 21:15:19 2007
@@ -22,9 +22,5 @@
 
 BaseCommandImpl::~BaseCommandImpl(void) {}
 
-void BaseCommandImpl::setConnection(HENV* env, HDBC* hdbc) {
-	setConnection(env, hdbc);
-}
-
-void BaseCommandImpl::setConnection(ConnectionImpl* c) {
+void BaseCommandImpl::setConnection(Connection* c) {
 }

Modified: incubator/tuscany/cpp/das/runtime/das_lite/src/BaseCommandImpl.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/das_lite/src/BaseCommandImpl.h?view=diff&rev=530633&r1=530632&r2=530633
==============================================================================
--- incubator/tuscany/cpp/das/runtime/das_lite/src/BaseCommandImpl.h (original)
+++ incubator/tuscany/cpp/das/runtime/das_lite/src/BaseCommandImpl.h Thu Apr 19 21:15:19 2007
@@ -22,15 +22,14 @@
 #include <windows.h>
 #include <sql.h>
 
-#include "ConnectionImpl.h"
+#include "Connection.h"
 
 class BaseCommandImpl {
 
 	public:
 		BaseCommandImpl(void);
 		virtual ~BaseCommandImpl(void);
-		void setConnection(HENV* env, HDBC* hdbc);
-		virtual void setConnection(ConnectionImpl* c);
+		virtual void setConnection(Connection* c);
 		
 };
 

Modified: incubator/tuscany/cpp/das/runtime/das_lite/src/Column.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/das_lite/src/Column.cpp?view=diff&rev=530633&r1=530632&r2=530633
==============================================================================
--- incubator/tuscany/cpp/das/runtime/das_lite/src/Column.cpp (original)
+++ incubator/tuscany/cpp/das/runtime/das_lite/src/Column.cpp Thu Apr 19 21:15:19 2007
@@ -23,7 +23,6 @@
 	this->mappedName = columnName;
 	this->sqlType = sqlType;
 	containerTable = 0;
-	fk = false;
 	pk = false;
 	
 }
@@ -51,7 +50,7 @@
 }
 
 SQLSMALLINT Column::getSQLType(void) const {
-	return sqlType`;
+	return sqlType;
 }
 
 void Column::setMappedName(std::string mappedName) {

Modified: incubator/tuscany/cpp/das/runtime/das_lite/src/Column.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/das_lite/src/Column.h?view=diff&rev=530633&r1=530632&r2=530633
==============================================================================
--- incubator/tuscany/cpp/das/runtime/das_lite/src/Column.h (original)
+++ incubator/tuscany/cpp/das/runtime/das_lite/src/Column.h Thu Apr 19 21:15:19 2007
@@ -19,6 +19,11 @@
 #ifndef COLUMN_H
 #define COLUMN_H
 
+#include <windows.h>
+#include <sql.h>
+#include <sqlext.h>
+#include <string>
+
 #include "Table.h"
 #include "das_constants.h"
 

Modified: incubator/tuscany/cpp/das/runtime/das_lite/src/CommandImpl.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/das_lite/src/CommandImpl.cpp?view=diff&rev=530633&r1=530632&r2=530633
==============================================================================
--- incubator/tuscany/cpp/das/runtime/das_lite/src/CommandImpl.cpp (original)
+++ incubator/tuscany/cpp/das/runtime/das_lite/src/CommandImpl.cpp Thu Apr 19 21:15:19 2007
@@ -19,9 +19,12 @@
 #include "CommandImpl.h"
 
 CommandImpl::CommandImpl(DAS& das, std::string sqlString) {
-	statement = new Statement(sqlString);
 	this->das = &das;
-
+	statement = &(((DASImpl&) das).getConnection()->createStatement());
+	sql = sqlString;
+	
+	//statement = new Statement();
+	
     //try {
         /*URL url = getClass().getResource("/xml/sdoJava.xsd");
         if (url == null) {
@@ -41,14 +44,6 @@
 	delete statement;
 }
 
-void CommandImpl::setConnection(ConnectionImpl* connection) {
-	statement->setConnection(connection);
-}
-
 void CommandImpl::close(void) {
 	statement->close();
-}
-
-commonj::sdo::DataObjectPtr CommandImpl::executeQuery(void) {
-	return 0;
 }

Modified: incubator/tuscany/cpp/das/runtime/das_lite/src/CommandImpl.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/das_lite/src/CommandImpl.h?view=diff&rev=530633&r1=530632&r2=530633
==============================================================================
--- incubator/tuscany/cpp/das/runtime/das_lite/src/CommandImpl.h (original)
+++ incubator/tuscany/cpp/das/runtime/das_lite/src/CommandImpl.h Thu Apr 19 21:15:19 2007
@@ -19,29 +19,36 @@
 #ifndef COMMAND_IMPL_H
 #define COMMAND_IMPL_H
 
-#include <vector>
+#include <string>
 
 #include "Command.h"
+#include "DAS.h"
+#include "DASImpl.h"
 #include "Statement.h"
-#include "ConnectionImpl.h"
+#include "Connection.h"
 #include "BaseCommandImpl.h"
 
 #include "commonj/sdo/DataObject.h"
 
+class DASImpl;
+
 class CommandImpl : public Command, public BaseCommandImpl {
 
 	protected:
+		DAS* das;
+		std::string sql;
 		Statement *statement;
-		
-		ConnectionImpl* getConnection(void);
 
+		Connection* getConnection(void);
+		
 	public:
-		CommandImpl(std::string sqlString);
+		CommandImpl(DAS& das, std::string sqlString);
 		virtual ~CommandImpl(void);
-		virtual commonj::sdo::DataObjectPtr executeQuery(void);
-		virtual void setConnection(ConnectionImpl* connection);
+		virtual commonj::sdo::DataObjectPtr executeQuery(void) = 0;
 		virtual void close(void);
 
 };
 
 #endif //COMMAND_IMPL_H
+
+

Modified: incubator/tuscany/cpp/das/runtime/das_lite/src/Config.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/das_lite/src/Config.cpp?view=diff&rev=530633&r1=530632&r2=530633
==============================================================================
--- incubator/tuscany/cpp/das/runtime/das_lite/src/Config.cpp (original)
+++ incubator/tuscany/cpp/das/runtime/das_lite/src/Config.cpp Thu Apr 19 21:15:19 2007
@@ -18,73 +18,66 @@
  */
 #include "Config.h"
 
-Config::Config(void) {}
+Config::Config(DAS& das) {
+	relationships = new std::map<std::string, Relationship*>();
+	tables = new std::map<std::string, Table*>();
+	this->das = &das;
+		
+}
 
 Config::~Config(void) {
 	std::map<std::string, Table*>::iterator tableIterator;
-	std::map<std::string, Column*>::iterator columnIterator;
 	std::map<std::string, Relationship*>::iterator relationshipIterator;
 
-	for (tableIterator = tables.begin() ; tableIterator != tables.end() ; 
+	for (tableIterator = tables->begin() ; tableIterator != tables->end() ; 
 		tableIterator++) {
-		delete *tableIterator->second;
+		delete tableIterator->second;
 	}
 	
-	for (columnIterator = columns.begin() ; columnIterator != columns.end() ; 
-		columnIterator++) {
-			delete *columnIterator->second;
+	for (relationshipIterator = relationships->begin() ; 
+		relationshipIterator != relationships->end() ; tableIterator++) {
+			delete relationshipIterator->second;
 	}
 
-	for (relationshipIterator = relationships.begin() ; 
-		relationshipIterator != relationshipIterator.end() ; tableIterator++) {
-			delete *relationshipIterator->second;
-	}
+	delete relationships;
+	delete tables;
 
 }
 
 
 void Config::addTable(Table& table) {
-	tables.insert(std::make_pair(table.getTableName(), &table));
-}
-
-void Config::addColumn(Column& column) {
-	columns.insert(std::make_pair(column.getName(), &column));
+	tables->insert(std::make_pair(table.getTableName(), &table));
 }
 
 void Config::addRelationship(Relationship& relationship) {
-	columns.insert(std::make_pair(relationship.getPKTable + relationship.getFKTable, 
+	relationships->insert(std::make_pair(relationship.getPKTableName() + relationship.getFKTableName(), 
 		&relationship));
 }
 
 Relationship* Config::getRelationship(std::string tableName, std::string referencedTableName) const {
 	std::map<std::string, Relationship*>::iterator it = 
-		relationships.find(tableName + referencedTableName);
+		relationships->find(tableName + referencedTableName);
 
-	if (it == relationships.end()) {
+	if (it == relationships->end()) {
 		return 0;
 	}
 
-	return *it;
+	return it->second;
 
 }
 
 std::map<std::string, Relationship*>& Config::getRelationships(void) const {
-	return relationships;
+	return *relationships;
 }
 
 std::map<std::string, Table*>& Config::getTables(void) const {
-	return tables;
+	return *tables;
 }
 
-std::map<std::string, Column*>& Config::getColumns(void) const {
-	return columns;
-}
-
-
 Table* Config::getTable(std::string tableName) const {
-	std::map<std::string, Table*>::iterator tableIterator = tables.find(tableName);
+	std::map<std::string, Table*>::iterator tableIterator = tables->find(tableName);
 
-	if (tableIterator == tables.end()) {
+	if (tableIterator == tables->end()) {
 		return 0;
 	}
 
@@ -96,8 +89,8 @@
 	std::map<std::string, Relationship*>::iterator it;
 	std::list<Relationship*>* relationshipList = new std::list<Relationship*>();
 
-	for (it = relationships.begin() ; it != relationships.end() ; it++) {
-		Relationship* relationship = *it;
+	for (it = relationships->begin() ; it != relationships->end() ; it++) {
+		Relationship* relationship = it->second;
 
 		if (relationship->getFKTableName() == tableName) {
 			relationshipList->push_back(relationship);
@@ -107,4 +100,8 @@
 
 	return relationshipList;
 
+}
+
+DAS& Config::getDAS(void) const {
+	return *das;
 }

Modified: incubator/tuscany/cpp/das/runtime/das_lite/src/Config.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/das_lite/src/Config.h?view=diff&rev=530633&r1=530632&r2=530633
==============================================================================
--- incubator/tuscany/cpp/das/runtime/das_lite/src/Config.h (original)
+++ incubator/tuscany/cpp/das/runtime/das_lite/src/Config.h Thu Apr 19 21:15:19 2007
@@ -22,18 +22,22 @@
 #include <list>
 #include <map>
 
+#include "DAS.h"
 #include "Table.h"
 #include "Column.h"
 #include "Relationship.h"
 
+class Table;
+
 class Config {
 
 	private:
-		std::map<std::string, Relationship*> relationships;
-		std::map<std::string, Table*> tables;
-		
+		std::map<std::string, Relationship*>* relationships;
+		std::map<std::string, Table*>* tables;
+		DAS* das;
+
 	public:
-		Config(void);
+		Config(DAS& das);
 		virtual ~Config(void);
 
 		void addTable(Table& table);
@@ -41,6 +45,8 @@
 
 		std::map<std::string, Relationship*>& getRelationships(void) const;
 		std::map<std::string, Table*>& getTables(void) const;
+
+		DAS& getDAS(void) const;
 		
 		Table* getTable(std::string tableName) const;
 		Relationship* getRelationship(std::string tableName, std::string referencedTableName) const;

Copied: incubator/tuscany/cpp/das/runtime/das_lite/src/Connection.cpp (from r528901, incubator/tuscany/cpp/das/runtime/das_lite/src/ConnectionImpl.cpp)
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/das_lite/src/Connection.cpp?view=diff&rev=530633&p1=incubator/tuscany/cpp/das/runtime/das_lite/src/ConnectionImpl.cpp&r1=528901&p2=incubator/tuscany/cpp/das/runtime/das_lite/src/Connection.cpp&r2=530633
==============================================================================
--- incubator/tuscany/cpp/das/runtime/das_lite/src/ConnectionImpl.cpp (original)
+++ incubator/tuscany/cpp/das/runtime/das_lite/src/Connection.cpp Thu Apr 19 21:15:19 2007
@@ -16,24 +16,25 @@
  * specific language governing permissions and limitations
  * under the License.    
  */
-#include "ConnectionImpl.h"
+#include "Connection.h"
 
-ConnectionImpl::ConnectionImpl(HENV* aEnvironment, HDBC* aConnection) {
+Connection::Connection(HENV aEnvironment, HDBC aConnection) {
 	connection = aConnection;
 	environment = aEnvironment;
+	database = new Database(*this);
 
    //try {
-		SQLCHAR sqlDbmsName[255];
+//		SQLCHAR sqlDbmsName[255];
 		SQLSMALLINT strLen;
 		SQLINTEGER strLen2;
-		SQLGetInfo(connection, SQL_DBMS_NAME, sqlDbmsName, sizeof(sqlDbmsName), &strLen);
-		std::string dbmsName = (char*) sqlDbmsName;
-
-        if (dbmsName.find("Oracle") < 0) {
-//            boolUseGetGeneratedKeys = false;
-        } else {
-  //          boolUseGetGeneratedKeys = true;
-        }
+//		SQLGetInfo(connection, SQL_DBMS_NAME, sqlDbmsName, sizeof(sqlDbmsName), &strLen);
+//		std::string dbmsName = (char*) sqlDbmsName;
+//
+//        if (dbmsName.find("Oracle") < 0) {
+////            boolUseGetGeneratedKeys = false;
+//        } else {
+//  //          boolUseGetGeneratedKeys = true;
+//        }
 
 		SQLSMALLINT autoCommit;
 		if (SQLGetConnectAttr(connection, SQL_ATTR_AUTOCOMMIT, &autoCommit, sizeof(autoCommit), &strLen2) == SQL_AUTOCOMMIT_ON) {
@@ -46,30 +47,72 @@
 
 }
 
-ConnectionImpl::~ConnectionImpl(void) {
+Connection::~Connection(void) {
+	std::list<Statement*>::iterator it;
+
+	for (it = statements.begin() ; it != statements.end() ; it++ ) {
+		delete *it;
+	}
+
+	delete database;
+
+	SQLDisconnect(connection);
+	SQLFreeConnect(connection);
+	SQLFreeEnv(environment);
+
 }
 
-HDBC* ConnectionImpl::getODBCConnection(void) {
+HDBC Connection::getODBCConnection(void) const {
 	return connection;
 }
 
-void ConnectionImpl::cleanUp(void) {
+void Connection::cleanUp(void) {
 	SQLEndTran(SQL_HANDLE_DBC, connection, SQL_COMMIT);
 }
 
-void ConnectionImpl::errorCleanUp(void) {
+void Connection::errorCleanUp(void) {
 	SQLTransact(environment, connection, SQL_ROLLBACK);
 }
 
-HSTMT* ConnectionImpl::prepareStatement(std::string queryString) {
+//HSTMT* Connection::prepareStatement(std::string queryString) {
+//
+//	/*if (this.logger.isDebugEnabled()) {
+//		this.logger.debug("Preparing Statement: " + queryString);
+//	}*/
+//	HSTMT statement;
+//	SQLAllocStmt( connection, &statement);
+//	SQLPrepare(statement, (SQLCHAR*) queryString.c_str(), SQL_NTS);
+//	
+//	return &statement;
+//
+//}
+
+Statement& Connection::createStatement(void) {
+	HSTMT statementHandle;
+	SQLAllocStmt(connection, &statementHandle);
+
+	Statement* statement = new Statement(*this, statementHandle);
+	statements.push_back(statement);
+
+	return *statement;
+
+}
+
+void Connection::freeStatement(Statement& statement) {
+	std::list<Statement*>::iterator it;
+
+	for (it = statements.begin() ; it != statements.end() ; it++) {
+
+		if (&statement == *it) {
+			statements.erase(it);
+			return;
 
-	/*if (this.logger.isDebugEnabled()) {
-		this.logger.debug("Preparing Statement: " + queryString);
-	}*/
-	HSTMT statement;
-	SQLAllocStmt( connection, &statement);
-	SQLPrepare(statement, (SQLCHAR*) queryString.c_str(), SQL_NTS);
-	
-	return &statement;
+		}
+
+	}
+
+}
 
+Database& Connection::getDatabase(void) const {
+	return *database;
 }

Copied: incubator/tuscany/cpp/das/runtime/das_lite/src/Connection.h (from r528901, incubator/tuscany/cpp/das/runtime/das_lite/src/ConnectionImpl.h)
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/das_lite/src/Connection.h?view=diff&rev=530633&p1=incubator/tuscany/cpp/das/runtime/das_lite/src/ConnectionImpl.h&r1=528901&p2=incubator/tuscany/cpp/das/runtime/das_lite/src/Connection.h&r2=530633
==============================================================================
--- incubator/tuscany/cpp/das/runtime/das_lite/src/ConnectionImpl.h (original)
+++ incubator/tuscany/cpp/das/runtime/das_lite/src/Connection.h Thu Apr 19 21:15:19 2007
@@ -16,30 +16,43 @@
  * specific language governing permissions and limitations
  * under the License.    
  */
-#ifndef CONNECTION_IMPL_H
-#define CONNECTION_IMPL_H
+#ifndef CONNECTION_H
+#define CONNECTION_H
 
 #include <windows.h>
 #include <sql.h>
 #include <sqlext.h>
 #include <string>
+#include <list>
 
-class ConnectionImpl {
+#include "Statement.h"
+#include "Database.h"
+
+class Database;
+class Statement;
+
+class Connection {
+	
+	friend class Statement;
 
 	private:
 		HDBC connection;
 		HENV environment;
-		Statement* statement;
+		Database* database;
+		std::list<Statement*> statements;
+
+		void freeStatement(Statement& statement);
 		
 	public:
-		ConnectionImpl(std::string dns, std::string user, std::string password);
-		virtual ~ConnectionImpl(void);
+		Connection(HENV aEnvironment, HDBC aConnection);
+		virtual ~Connection(void);
 		HDBC getODBCConnection(void) const;
 		void cleanUp(void);
 		void errorCleanUp(void);
 		Statement& createStatement(void);
-		Statement& prepareStatement(std::string queryString);
+		Database& getDatabase(void) const;
+		//Statement& prepareStatement(std::string queryString);
 		
 };
 
-#endif //CONNECTION_IMPL_H
+#endif //CONNECTION_H

Modified: incubator/tuscany/cpp/das/runtime/das_lite/src/DASFactoryImpl.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/das_lite/src/DASFactoryImpl.cpp?view=diff&rev=530633&r1=530632&r2=530633
==============================================================================
--- incubator/tuscany/cpp/das/runtime/das_lite/src/DASFactoryImpl.cpp (original)
+++ incubator/tuscany/cpp/das/runtime/das_lite/src/DASFactoryImpl.cpp Thu Apr 19 21:15:19 2007
@@ -22,6 +22,6 @@
 
 DASFactoryImpl::~DASFactoryImpl(void) {}
 
-DAS* DASFactoryImpl::createDAS(ConnectionImpl* connection) {
+DAS* DASFactoryImpl::createDAS(Connection* connection) {
 	return new DASImpl(connection);
 }

Modified: incubator/tuscany/cpp/das/runtime/das_lite/src/DASFactoryImpl.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/das_lite/src/DASFactoryImpl.h?view=diff&rev=530633&r1=530632&r2=530633
==============================================================================
--- incubator/tuscany/cpp/das/runtime/das_lite/src/DASFactoryImpl.h (original)
+++ incubator/tuscany/cpp/das/runtime/das_lite/src/DASFactoryImpl.h Thu Apr 19 21:15:19 2007
@@ -32,7 +32,7 @@
 	public:
 		DASFactoryImpl(void);
 		virtual ~DASFactoryImpl(void);
-		DAS* createDAS(ConnectionImpl* connection);
+		DAS* createDAS(Connection* connection);
 
 };
 

Modified: incubator/tuscany/cpp/das/runtime/das_lite/src/DASImpl.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/das_lite/src/DASImpl.cpp?view=diff&rev=530633&r1=530632&r2=530633
==============================================================================
--- incubator/tuscany/cpp/das/runtime/das_lite/src/DASImpl.cpp (original)
+++ incubator/tuscany/cpp/das/runtime/das_lite/src/DASImpl.cpp Thu Apr 19 21:15:19 2007
@@ -17,6 +17,7 @@
  * under the License.    
  */
 #include "DASImpl.h"
+#include "ReadCommandImpl.h"
 
 void toLower(std::string str) {
 	int i;
@@ -59,8 +60,10 @@
 
 }
 
-DASImpl::DASImpl(ConnectionImpl* inConnection) {
+DASImpl::DASImpl(Connection* inConnection) {
     setConnection(inConnection);
+	config = new Config(*this);
+
 }
 
 DASImpl::~DASImpl() {
@@ -75,11 +78,11 @@
 }
 
 
-void DASImpl::setConnection(ConnectionImpl* aConnection) {
+void DASImpl::setConnection(Connection* aConnection) {
 	connection = aConnection;
 }
 
-ConnectionImpl* DASImpl::getConnection(void) {
+Connection* DASImpl::getConnection(void) {
 	return connection;
 }
 
@@ -98,7 +101,7 @@
 
     switch (firstChar) {
         case 'S':
-            returnCmd = new ReadCommandImpl(inSql);
+            returnCmd = new ReadCommandImpl(*this, inSql);
             break;
      
     }
@@ -122,4 +125,8 @@
 
     }
 
+}
+
+Config& DASImpl::getConfig(void) const {
+	return *config;
 }

Modified: incubator/tuscany/cpp/das/runtime/das_lite/src/DASImpl.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/das_lite/src/DASImpl.h?view=diff&rev=530633&r1=530632&r2=530633
==============================================================================
--- incubator/tuscany/cpp/das/runtime/das_lite/src/DASImpl.h (original)
+++ incubator/tuscany/cpp/das/runtime/das_lite/src/DASImpl.h Thu Apr 19 21:15:19 2007
@@ -28,23 +28,30 @@
 
 #include "DAS.h"
 #include "Command.h"
-#include "ReadCommandImpl.h"
+#include "Connection.h"
+#include "CommandImpl.h"
+#include "Config.h"
 
 #include "commonj/sdo/DataFactory.h"
 
+class Config;
+class ReadCommandImpl;
+
 class DASImpl : public DAS {
 
 	private:
-		ConnectionImpl* connection;
+		Connection* connection;
 		std::list<Command*> createdCommands;
+		Config* config;
 		
 		Command* baseCreateCommand(std::string inSql);
 		
 	public:
-		DASImpl(ConnectionImpl* inConnection);
+		DASImpl(Connection* inConnection);
 		virtual ~DASImpl(void);
-		ConnectionImpl* getConnection(void);
-		void setConnection(ConnectionImpl* aConnection);
+		Connection* getConnection(void);
+		Config& getConfig(void) const;
+		void setConnection(Connection* aConnection);
 		void releaseResources(void);
 		Command* createCommand(std::string sql);
 		void closeConnection(void);

Added: incubator/tuscany/cpp/das/runtime/das_lite/src/Database.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/das_lite/src/Database.cpp?view=auto&rev=530633
==============================================================================
--- incubator/tuscany/cpp/das/runtime/das_lite/src/Database.cpp (added)
+++ incubator/tuscany/cpp/das/runtime/das_lite/src/Database.cpp Thu Apr 19 21:15:19 2007
@@ -0,0 +1,41 @@
+/*
+ * 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 "Database.h"
+
+Database::Database(Connection& connection) {
+	this->connection = &connection;
+}
+
+Database::~Database(void) {}
+
+ResultSet* Database::getPKs(std::string tableName) const {
+	Statement& statement = connection->createStatement();
+	SQLPrimaryKeysA(statement.getODBCStatement(), 0,0,0,0, (SQLCHAR*) (char*) tableName.c_str(), tableName.size());
+
+	return new ResultSet(statement);
+	
+}
+
+ResultSet* Database::getFKs(std::string tableName) const {
+	Statement& statement = connection->createStatement();
+	SQLForeignKeysA(statement.getODBCStatement(), 0,0,0,0,0,0, 0,0,0,0,(SQLCHAR*) (char*) tableName.c_str(), tableName.size());
+
+	return new ResultSet(statement);
+
+}

Added: incubator/tuscany/cpp/das/runtime/das_lite/src/Database.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/das_lite/src/Database.h?view=auto&rev=530633
==============================================================================
--- incubator/tuscany/cpp/das/runtime/das_lite/src/Database.h (added)
+++ incubator/tuscany/cpp/das/runtime/das_lite/src/Database.h Thu Apr 19 21:15:19 2007
@@ -0,0 +1,48 @@
+/*
+ * 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 DATABASE_H
+#define DATABASE_H
+
+#include <windows.h>
+#include <sql.h>
+#include <sqlext.h>
+#include <string>
+
+#include "Connection.h"
+#include "ResultSet.h"
+#include "Statement.h"
+
+class Connection;
+class ResultSet;
+
+class Database {
+
+	private:
+		Connection* connection;
+		
+	public:
+		Database(Connection& connection);
+		virtual ~Database(void);
+
+		ResultSet* getPKs(std::string tableName) const;
+		ResultSet* getFKs(std::string tableName) const;
+		
+};
+
+#endif //DATABASE_H

Modified: incubator/tuscany/cpp/das/runtime/das_lite/src/GraphBuilder.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/das_lite/src/GraphBuilder.cpp?view=diff&rev=530633&r1=530632&r2=530633
==============================================================================
--- incubator/tuscany/cpp/das/runtime/das_lite/src/GraphBuilder.cpp (original)
+++ incubator/tuscany/cpp/das/runtime/das_lite/src/GraphBuilder.cpp Thu Apr 19 21:15:19 2007
@@ -18,10 +18,9 @@
  */
 #include "GraphBuilder.h"
 
-GraphBuilder::GraphBuilder(ResultSet& resultSet) :
-		graphBuiderMetaData(resultSet.getMetaData()) {
-
-	this->resultSet* = resultSet;
+GraphBuilder::GraphBuilder(Config& config, ResultSet& resultSet) {
+	graphBuilderMetaData = new GraphBuilderMetaData(config, resultSet.getResultSetMetaData()) ;
+	/*this->resultSet* = resultSet;
 	
 	commonj::sdo::DataFactoryPtr dataFactory = graphBuiderMetaData.createGraph();
 	root = dataFactory->create(DAS_NAMESPACE, DAS_ROOT_NAME);
@@ -38,14 +37,15 @@
 
 		}
 
-	}
+	}*/
 	
 }
 
 GraphBuilder::~GraphBuilder(void) {
 	delete root;
+	delete graphBuilderMetaData;
 }
 
-DataObjectPtr GraphBuilder::getRoot(void) const {
+commonj::sdo::DataObjectPtr GraphBuilder::getRoot(void) const {
 	return root;
-}
\ No newline at end of file
+}

Modified: incubator/tuscany/cpp/das/runtime/das_lite/src/GraphBuilder.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/das_lite/src/GraphBuilder.h?view=diff&rev=530633&r1=530632&r2=530633
==============================================================================
--- incubator/tuscany/cpp/das/runtime/das_lite/src/GraphBuilder.h (original)
+++ incubator/tuscany/cpp/das/runtime/das_lite/src/GraphBuilder.h Thu Apr 19 21:15:19 2007
@@ -20,7 +20,8 @@
 #define GRAPH_BUILDER_H
 
 #include "ResultSet.h"
-#include "GraphBuiderMetaData.h"
+#include "Config.h"
+#include "GraphBuilderMetaData.h"
 #include "commonj/sdo/DataFactory.h"
 #include "commonj/sdo/DataObject.h"
 #include "das_constants.h"
@@ -28,14 +29,14 @@
 class GraphBuilder {
 	private:
 		ResultSet* resultSet;
-		GraphBuiderMetaData graphBuiderMetaData;
+		GraphBuilderMetaData* graphBuilderMetaData;
 		commonj::sdo::DataObjectPtr root;
 		
 	public:
-		GraphBuilder(ResultSet& resultSet);
+		GraphBuilder(Config& config, ResultSet& resultSet);
 		virtual ~GraphBuilder(void);
 
-		DataObjectPtr getRoot(void) const;
+		commonj::sdo::DataObjectPtr getRoot(void) const;
 
 };
 

Modified: incubator/tuscany/cpp/das/runtime/das_lite/src/GraphBuilderMetaData.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/das_lite/src/GraphBuilderMetaData.cpp?view=diff&rev=530633&r1=530632&r2=530633
==============================================================================
--- incubator/tuscany/cpp/das/runtime/das_lite/src/GraphBuilderMetaData.cpp (original)
+++ incubator/tuscany/cpp/das/runtime/das_lite/src/GraphBuilderMetaData.cpp Thu Apr 19 21:15:19 2007
@@ -21,38 +21,38 @@
 GraphBuilderMetaData::GraphBuilderMetaData(Config& config, ResultSetMetaData& resultSetMetaData) {
 	this->resultSetMetaData = &resultSetMetaData;
 	this->config = &config;
+	graphTables = new std::map<std::string, Table*>();
 
-	const ResultSetMetaData& metaData = resultSet.getMetaData();
-	unsigned int colCount = metaData.getColumnCount();
+	unsigned int colCount = resultSetMetaData.getColumnCount();
 	std::map<std::string, std::list<Column*>*> tablesColumns;
 	
 	for (int i = 0 ; i < colCount ; i++) {
-		std::string columnName = metaData.getColumnName(i);
-		SQLSMALLINT columnSQLType = metaData.getSQLType(i);
-		std::string columnTableName = metaData.getTableName(i);
+		std::string columnName = resultSetMetaData.getColumnName(i);
+		SQLSMALLINT columnSQLType = resultSetMetaData.getSQLType(i);
+		std::string columnTableName = resultSetMetaData.getTableName(i);
 		Table* table = config.getTable(columnTableName);
 
 		if (table == 0) {
-			Table* newTable = new Table(*this, columnTableName);
+			Table* newTable = new Table(config, columnTableName);
 			config.addTable(*newTable);
-			tablesColumns.insert(std::make_pair(columnTableName, new std::list<std::string>()));
+			tablesColumns.insert(std::make_pair(columnTableName, new std::list<Column*>()));
 			table = newTable;
 
 		} else {
-			tablesColumns.insert(std::make_pair(table->getTableName(), new std::list<std::string>()));
+			tablesColumns.insert(std::make_pair(table->getTableName(), new std::list<Column*>()));
 		}
 
-		graphTables.insert(std::make_pair(table->getTableName(), table));
-		tablesColumns[table->getTableName()]->insert(new Column(columnName, columnSQLType));
+		graphTables->insert(std::make_pair(table->getTableName(), table));
+		tablesColumns[table->getTableName()]->push_back(new Column(columnName, columnSQLType));
 
 	}
 
 	std::map<std::string, Table*>::iterator it;
 
-	for (it = graphTables.begin() ; it != graphTables.end() ; it++) {
-		Table* table = *it;
+	for (it = graphTables->begin() ; it != graphTables->end() ; it++) {
+		Table* table = it->second;
 		std::string tableName = table->getTableName();
-		std::list<Column>* columns = tablesColumns[tableName];
+		std::list<Column*>* columns = tablesColumns[tableName];
 
 		table->addColumns(*columns);
 		delete columns;
@@ -61,16 +61,18 @@
 
 }
 
-GraphBuilderMetaData::~GraphBuilderMetaData(void) {}
+GraphBuilderMetaData::~GraphBuilderMetaData(void) {
+	delete graphTables;
+}
 
 commonj::sdo::DataFactoryPtr GraphBuilderMetaData::createGraph(void) const {
 	commonj::sdo::DataFactoryPtr dataFactory = commonj::sdo::DataFactory::getDataFactory();
 	dataFactory->addType(DAS_NAMESPACE, DAS_ROOT_NAME);
 
-	std::map<std::string, Table*>::iterator it;
+	std::map<std::string, Table*>::const_iterator it;
 	
-	for (it = graphTables.begin() ; it != graphTables.end() ; it++) {
-		Table& table = **it;
+	for (it = graphTables->begin() ; it != graphTables->end() ; it++) {
+		Table& table = *(it->second);
 		std::string tableName = table.getTableName();
 
 		dataFactory->addType(DAS_NAMESPACE, tableName);
@@ -79,8 +81,8 @@
 
 	}
 
-	for (it = tables.begin() ; it != tables.end() ; it++) {
-		table.createGraph(dataFactory);
+	for (it = graphTables->begin() ; it != graphTables->end() ; it++) {
+		it->second->createGraph(*this, dataFactory);
 	}
 
 	return dataFactory;
@@ -96,13 +98,13 @@
 }
 
 std::map<std::string, Table*>& GraphBuilderMetaData::getTables(void) const {
-	return graphTables;
+	return *graphTables;
 }
 
 Table* GraphBuilderMetaData::getTable(std::string tableName) const {
-	std::map<std::string, Table*>::iterator it = graphTables.find(tableName);
+	std::map<std::string, Table*>::iterator it = graphTables->find(tableName);
 
-	if (it == graphTables.end()) {
+	if (it == graphTables->end()) {
 		return 0;
 	}
 

Modified: incubator/tuscany/cpp/das/runtime/das_lite/src/GraphBuilderMetaData.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/das_lite/src/GraphBuilderMetaData.h?view=diff&rev=530633&r1=530632&r2=530633
==============================================================================
--- incubator/tuscany/cpp/das/runtime/das_lite/src/GraphBuilderMetaData.h (original)
+++ incubator/tuscany/cpp/das/runtime/das_lite/src/GraphBuilderMetaData.h Thu Apr 19 21:15:19 2007
@@ -30,11 +30,13 @@
 #include "commonj/sdo/DataFactory.h"
 #include "das_constants.h"
 
+class Config;
+
 class GraphBuilderMetaData {
 
 	private:
 		ResultSetMetaData* resultSetMetaData;
-		std::map<std::string, Table*> graphTables;
+		std::map<std::string, Table*>* graphTables;
 		Config* config;
 
 	public:
@@ -42,7 +44,7 @@
 		virtual ~GraphBuilderMetaData(void);
 
 		ResultSetMetaData& getResultSetMetaData(void) const;
-		std::map<std::string, Table*>& getGraphTables(void) const;
+		std::map<std::string, Table*>& getTables(void) const;
 		Config& getConfig(void) const;
 		Table* getTable(std::string tableName) const;
 

Modified: incubator/tuscany/cpp/das/runtime/das_lite/src/KeyPair.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/das_lite/src/KeyPair.cpp?view=diff&rev=530633&r1=530632&r2=530633
==============================================================================
--- incubator/tuscany/cpp/das/runtime/das_lite/src/KeyPair.cpp (original)
+++ incubator/tuscany/cpp/das/runtime/das_lite/src/KeyPair.cpp Thu Apr 19 21:15:19 2007
@@ -32,10 +32,4 @@
 
 std::string KeyPair::getFKColumnName(void) const {
 	return fkColumnName;
-}
-
-void KeyPair::addKeyPair(KeyPair& keyPair) {
-	keyPairs.insert(
-		std::make_pair(keyPair.pkColumnName + keyPair.getFKColumnName, &keyPair));
-
-}
+}
\ No newline at end of file

Modified: incubator/tuscany/cpp/das/runtime/das_lite/src/KeyPair.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/das_lite/src/KeyPair.h?view=diff&rev=530633&r1=530632&r2=530633
==============================================================================
--- incubator/tuscany/cpp/das/runtime/das_lite/src/KeyPair.h (original)
+++ incubator/tuscany/cpp/das/runtime/das_lite/src/KeyPair.h Thu Apr 19 21:15:19 2007
@@ -19,6 +19,9 @@
 #ifndef KEY_PAIR_H
 #define KEY_PAIR_H
 
+#include <map>
+#include <string>
+
 class KeyPair {
 
 	private:

Modified: incubator/tuscany/cpp/das/runtime/das_lite/src/ReadCommandImpl.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/das_lite/src/ReadCommandImpl.cpp?view=diff&rev=530633&r1=530632&r2=530633
==============================================================================
--- incubator/tuscany/cpp/das/runtime/das_lite/src/ReadCommandImpl.cpp (original)
+++ incubator/tuscany/cpp/das/runtime/das_lite/src/ReadCommandImpl.cpp Thu Apr 19 21:15:19 2007
@@ -18,109 +18,101 @@
  */
 #include "ReadCommandImpl.h"
 
-int getColumnCount(HSTMT statement) {
-	SQLINTEGER columnCount = 0;
-	SQLRETURN ret = SQLColAttribute(statement, NULL, SQL_DESC_COUNT, NULL, NULL, NULL, &columnCount);
-	
-	return columnCount;
-
-}
+//int getColumnCount(HSTMT statement) {
+//	SQLINTEGER columnCount = 0;
+//	SQLRETURN ret = SQLColAttribute(statement, NULL, SQL_DESC_COUNT, NULL, NULL, NULL, &columnCount);
+//	
+//	return columnCount;
+//
+//}
+//
+//std::string getColumnName(HSTMT statement, int column) {
+//	SQLCHAR* sqlPtr = 0;
+//	char strAux[1];
+//	SQLSMALLINT length = 0;
+//	SQLColAttribute(statement, column, SQL_DESC_BASE_COLUMN_NAME, &strAux, 1, (SQLSMALLINT*) &length, NULL);
+//	length++;
+//	sqlPtr = (SQLCHAR*) new SQLCHAR[length];
+//	SQLColAttributeA(statement, column, SQL_DESC_BASE_COLUMN_NAME, sqlPtr, length, (SQLSMALLINT*) &length, NULL);
+//
+//	std::string ret((char*) sqlPtr);
+//	delete [] sqlPtr;
+//	return ret;
+//
+//}
+//
+//std::string getColumnTableName(HSTMT statement, int column) {
+//	SQLCHAR* sqlPtr = 0;
+//	char strAux[1];
+//	SQLSMALLINT length = 0;
+//	SQLColAttribute(statement, column, SQL_DESC_TABLE_NAME, &strAux, 1, (SQLSMALLINT*) &length, NULL);
+//	length++;
+//	sqlPtr = (SQLCHAR*) new SQLCHAR[length];
+//	SQLColAttributeA(statement, column, SQL_DESC_TABLE_NAME, sqlPtr, length, (SQLSMALLINT*) &length, NULL);
+//
+//	std::string ret((char*) sqlPtr);
+//	delete [] sqlPtr;
+//	return ret;
+//
+//}
+//
+//std::string getStringData(HSTMT statement, int column) {
+//	SQLPOINTER sqlPtr = 0;
+//	SQLCHAR strAux[1];
+//	SQLINTEGER length = 0;
+//	SQLGetData(statement, column, SQL_C_CHAR, &strAux, 1, &length);
+//	length++;
+//	sqlPtr = (SQLCHAR*) malloc(length*sizeof(SQLCHAR));
+//	SQLINTEGER aux = 0;
+//	SQLGetData(statement, column, SQL_C_CHAR, sqlPtr, length, &aux);
+//		
+//	std::string ret = (char*) sqlPtr;
+//	return ret;
+//
+//}
+//
+//int getIntegerData(HSTMT statement, int column) {
+//	SQLCHAR strAux[1];
+//	SQLINTEGER sqlPtr = 0;
+//	SQLSMALLINT length = 0;
+//	SQLINTEGER aux = 0;
+//	SQLGetData(statement, column, SQL_C_ULONG, &sqlPtr, 0, &aux);
+//		
+//	return (int) sqlPtr;
+//
+//}
+//
+//int getSQLColumnType(HSTMT statement, int column) {
+//	SQLSMALLINT sqlType = 0;
+//	SQLColAttribute(statement, column, SQL_DESC_TYPE, NULL, NULL, NULL, &sqlType);
+//		
+//	return (int) sqlType;
+//
+//}
 
-std::string getColumnName(HSTMT statement, int column) {
-	SQLCHAR* sqlPtr = 0;
-	char strAux[1];
-	SQLSMALLINT length = 0;
-	SQLColAttribute(statement, column, SQL_DESC_BASE_COLUMN_NAME, &strAux, 1, (SQLSMALLINT*) &length, NULL);
-	length++;
-	sqlPtr = (SQLCHAR*) new SQLCHAR[length];
-	SQLColAttributeA(statement, column, SQL_DESC_BASE_COLUMN_NAME, sqlPtr, length, (SQLSMALLINT*) &length, NULL);
-
-	std::string ret((char*) sqlPtr);
-	delete [] sqlPtr;
-	return ret;
+ReadCommandImpl::ReadCommandImpl(DAS& das, std::string sqlString) : CommandImpl(das, sqlString) {}
 
-}
-
-std::string getColumnTableName(HSTMT statement, int column) {
-	SQLCHAR* sqlPtr = 0;
-	char strAux[1];
-	SQLSMALLINT length = 0;
-	SQLColAttribute(statement, column, SQL_DESC_TABLE_NAME, &strAux, 1, (SQLSMALLINT*) &length, NULL);
-	length++;
-	sqlPtr = (SQLCHAR*) new SQLCHAR[length];
-	SQLColAttributeA(statement, column, SQL_DESC_TABLE_NAME, sqlPtr, length, (SQLSMALLINT*) &length, NULL);
-
-	std::string ret((char*) sqlPtr);
-	delete [] sqlPtr;
-	return ret;
-
-}
-
-std::string getStringData(HSTMT statement, int column) {
-	SQLPOINTER sqlPtr = 0;
-	SQLCHAR strAux[1];
-	SQLINTEGER length = 0;
-	SQLGetData(statement, column, SQL_C_CHAR, &strAux, 1, &length);
-	length++;
-	sqlPtr = (SQLCHAR*) malloc(length*sizeof(SQLCHAR));
-	SQLINTEGER aux = 0;
-	SQLGetData(statement, column, SQL_C_CHAR, sqlPtr, length, &aux);
-		sqlfo
-	std::string ret = (char*) sqlPtr;
-	return ret;
-
-}
-
-int getIntegerData(HSTMT statement, int column) {
-	SQLCHAR strAux[1];
-	SQLINTEGER sqlPtr = 0;
-	SQLSMALLINT length = 0;
-	SQLINTEGER aux = 0;
-	SQLGetData(statement, column, SQL_C_ULONG, &sqlPtr, 0, &aux);
-		
-	return (int) sqlPtr;
+ReadCommandImpl::~ReadCommandImpl(void) {}
 
-}
+commonj::sdo::DataObjectPtr ReadCommandImpl::executeQuery(void) {
+	ResultSet* results = statement->executeQuery(sql);
+    commonj::sdo::DataObjectPtr root = buildGraph(*results);
+	
+	delete results;
 
-int getSQLColumnType(HSTMT statement, int column) {
-	SQLSMALLINT sqlType = 0;
-	SQLColAttribute(statement, column, SQL_DESC_TYPE, NULL, NULL, NULL, &sqlType);
-		
-	return (int) sqlType;
+    return root;
 
 }
 
-ReadCommandImpl::ReadCommandImpl(std::string sqlString) : CommandImpl(sqlString) {}
-
-ReadCommandImpl::~ReadCommandImpl(void) {}
-
-commonj::sdo::DataObjectPtr ReadCommandImpl::executeQuery(void) {
+commonj::sdo::DataObjectPtr ReadCommandImpl::buildGraph(ResultSet& resultSet) { /*throws SQLException*/
+	GraphBuilderMetaData graphBuilderMetaData(((DASImpl*) das)->getConfig(), resultSet.getResultSetMetaData()); 
+	commonj::sdo::DataFactoryPtr dataFactory = graphBuilderMetaData.createGraph();
 
-	if (statement->getConnection() == NULL) {
-		//throw new RuntimeException("A DASConnection object must be specified before executing the query.");
-    }
-
-    int success = 0;
-
-    //try {
-        HSTMT& results = statement->executeQuery();
-        success = 1;
-
-        return buildGraph(results);
-
-    //} catch (SQLException e) {
-      //  throw new RuntimeException(e);
-    //} finally {
-        /*if (success) {
-            statement->getConnection()->cleanUp();
-        } else {
-            statement->getConnection()->errorCleanUp();
-        }*/
-    //}
-}
+	//commonj::sdo::ChangeSummaryPtr changeSummary = rootDataObject->getChangeSummary();
+	
+	return 0;
 
-commonj::sdo::DataObjectPtr ReadCommandImpl::buildGraph(HSTMT& statement) { /*throws SQLException*/
-	int columnCount = getColumnCount(statement);
+	/*int columnCount = getColumnCount(statement);
 	int col;
 	int i;
 	SQLSMALLINT sqlType = 0;
@@ -130,32 +122,32 @@
 	dataFactory->addType(DAS_NAMESPACE, DAS_ROOT);
 	const commonj::sdo::Type& dasType = dataFactory->getType(DAS_NAMESPACE, DAS_ROOT);
 	const commonj::sdo::Type& intType = dataFactory->getType("commonj.sdo","Integer");
-	const commonj::sdo::Type& stringType = dataFactory->getType("commonj.sdo","String");
-	
-	for (col = 1 ; col <= columnCount ; col++) {
-		sqlType = getSQLColumnType(statement, col);
-		columnName = getColumnName(statement, col);
-		columnTypes.push_back(sqlType);
-		
-		switch (sqlType) {
-
-			case SQL_INTEGER :
-				dataFactory->addPropertyToType(dasType, columnName, intType);
-				break;
-
-			case SQL_CHAR :
-				dataFactory->addPropertyToType(dasType, columnName, stringType);
-				break;
-
-			default :
-				;
-				//throw exception
-
-		}
+	const commonj::sdo::Type& stringType = dataFactory->getType("commonj.sdo","String");*/
 	
-	}
+	//for (col = 1 ; col <= columnCount ; col++) {
+	//	sqlType = getSQLColumnType(statement, col);
+	//	columnName = getColumnName(statement, col);
+	//	columnTypes.push_back(sqlType);
+	//	
+	//	switch (sqlType) {
+
+	//		case SQL_INTEGER :
+	//			dataFactory->addPropertyToType(dasType, columnName, intType);
+	//			break;
+
+	//		case SQL_CHAR :
+	//			dataFactory->addPropertyToType(dasType, columnName, stringType);
+	//			break;
+
+	//		default :
+	//			;
+	//			//throw exception
+
+	//	}
+	//
+	//}
 
-	commonj::sdo::DataObjectPtr rootDataObject = dataFactory->create(DAS_NAMESPACE, DAS_ROOT);
+	/*commonj::sdo::DataObjectPtr rootDataObject = dataFactory->create(DAS_NAMESPACE, DAS_ROOT);
 	SQLRETURN sqlRet = SQLFetch(statement);
 
 	while (sqlRet == SQL_SUCCESS) {
@@ -178,10 +170,8 @@
 	
 		}
 
-	}
+	}*/
 
-	commonj::sdo::ChangeSummaryPtr changeSummary = rootDataObject->getChangeSummary();
 	
-	return rootDataObject;
 
 }

Modified: incubator/tuscany/cpp/das/runtime/das_lite/src/ReadCommandImpl.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/das_lite/src/ReadCommandImpl.h?view=diff&rev=530633&r1=530632&r2=530633
==============================================================================
--- incubator/tuscany/cpp/das/runtime/das_lite/src/ReadCommandImpl.h (original)
+++ incubator/tuscany/cpp/das/runtime/das_lite/src/ReadCommandImpl.h Thu Apr 19 21:15:19 2007
@@ -19,10 +19,10 @@
 #ifndef READ_COMMAND_IMPL_H
 #define READ_COMMAND_IMPL_H
 
-#include <vector>
 #include <list>
 
 #include "CommandImpl.h"
+#include "GraphBuilderMetaData.h"
 
 #include "commonj/sdo/DataFactory.h"
 #include "commonj/sdo/DataObject.h"
@@ -35,12 +35,11 @@
 		unsigned int startRow;
 		unsigned int endRow;
 
-	protected:
-		public:
-		commonj::sdo::DataObjectPtr buildGraph(HSTMT& statement); /*throws SQLException*/
+	public:
+		commonj::sdo::DataObjectPtr buildGraph(ResultSet& resultSet); /*throws SQLException*/
 		
 	
-		ReadCommandImpl(std::string sqlString);
+		ReadCommandImpl(DAS& das, std::string sqlString);
 		~ReadCommandImpl(void);
 		commonj::sdo::DataObjectPtr executeQuery(void);
 

Modified: incubator/tuscany/cpp/das/runtime/das_lite/src/Relationship.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/das_lite/src/Relationship.cpp?view=diff&rev=530633&r1=530632&r2=530633
==============================================================================
--- incubator/tuscany/cpp/das/runtime/das_lite/src/Relationship.cpp (original)
+++ incubator/tuscany/cpp/das/runtime/das_lite/src/Relationship.cpp Thu Apr 19 21:15:19 2007
@@ -18,13 +18,16 @@
  */
 #include "Relationship.h"
 
-Relationship(std::string pkTableName, std::string fkTableName) {
+Relationship::Relationship(std::string pkTableName, std::string fkTableName) {
 	this->pkTableName = pkTableName;
 	this->fkTableName = fkTableName;
+	keyPairs = new std::map<std::string, KeyPair*>();
 
 }
 
-Relationship::~Relationship(void) {}
+Relationship::~Relationship(void) {
+	delete keyPairs;
+}
 
 std::string Relationship::getPKTableName(void) const {
 	return pkTableName;
@@ -35,17 +38,24 @@
 }
 
 std::map<std::string, KeyPair*>& Relationship::getKeyPairs(void) const {
-	return keyPairs;
+	return *keyPairs;
 }
 
 KeyPair* Relationship::getKeyPair(std::string pkColumnName, std::string fkColumnName) const {
-	std::map<std::string, KeyPair*>::iterator it = keyPairs.
+	std::map<std::string, KeyPair*>::iterator it = keyPairs->
 		find(pkColumnName + fkColumnName);
 
-	if (it == keyPairs.end()) {
+	if (it == keyPairs->end()) {
 		return 0;
 	}
 
-	return *it;
+	return it->second;
 
 }
+
+void Relationship::addKeyPair(KeyPair& keyPair) {
+	keyPairs->insert(
+		std::make_pair(keyPair.getPKColumnName() + keyPair.getFKColumnName(), &keyPair));
+
+}
+

Modified: incubator/tuscany/cpp/das/runtime/das_lite/src/Relationship.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/das_lite/src/Relationship.h?view=diff&rev=530633&r1=530632&r2=530633
==============================================================================
--- incubator/tuscany/cpp/das/runtime/das_lite/src/Relationship.h (original)
+++ incubator/tuscany/cpp/das/runtime/das_lite/src/Relationship.h Thu Apr 19 21:15:19 2007
@@ -22,12 +22,14 @@
 #include <string>
 #include <map>
 
+#include "KeyPair.h"
+
 class Relationship {
 
 	private:
 		std::string pkTableName;
 		std::string fkTableName;
-		std::map<std::string, KeyPair*> keyPairs;
+		std::map<std::string, KeyPair*>* keyPairs;
 		
 	public:
 		Relationship(std::string pkTableName, std::string fkTableName);

Modified: incubator/tuscany/cpp/das/runtime/das_lite/src/ResultSet.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/das_lite/src/ResultSet.cpp?view=diff&rev=530633&r1=530632&r2=530633
==============================================================================
--- incubator/tuscany/cpp/das/runtime/das_lite/src/ResultSet.cpp (original)
+++ incubator/tuscany/cpp/das/runtime/das_lite/src/ResultSet.cpp Thu Apr 19 21:15:19 2007
@@ -18,24 +18,28 @@
  */
 #include "ResultSet.h"
 
-ResultSet::ResultSet(Statement* aStmt) {
-	stmt = aStmt;
+ResultSet::ResultSet(Statement& aStmt) {
+	stmt = &aStmt;
+	metaData = new ResultSetMetaData(this);
+
 }
 
-ResultSet::~ResultSet(void) {}
+ResultSet::~ResultSet(void) {
+	delete metaData;
+}
 
-const ResultSetMetaData& ResultSet::getMetaData(void) const {
-	return metaData;
+ResultSetMetaData& ResultSet::getResultSetMetaData(void) const {
+	return *metaData;
 }
 
-const Statement& ResultSet::getStatement(void) const {
+Statement& ResultSet::getStatement(void) const {
 	return *stmt;
 }
 
 wchar_t ResultSet::getSQLChar(unsigned int columnIndex) const {
 	wchar_t ret = 0;
 
-	if (metaData.getSQLType(columnIndex) == SQL_CHAR) {
+	if (metaData->getSQLType(columnIndex) == SQL_CHAR) {
 		SQLWCHAR strAux = 0;
 		SQLINTEGER length = 0;
 		SQLGetData(stmt->getODBCStatement(), columnIndex + 1, SQL_C_WCHAR, &strAux, 1, &length);
@@ -51,13 +55,13 @@
 }
 
 wchar_t ResultSet::getSQLChar(std::string tableName, std::string columnName) const {
-	return getSQLChar(metaData.getColumnIndex(tableName + columnName));
+	return getSQLChar(metaData->getColumnIndex(tableName, columnName));
 }
 
 float ResultSet::getSQLReal(unsigned int columnIndex) const {
 	float ret = 0;
 
-	if (metaData.getSQLType(columnIndex) == SQL_REAL) {
+	if (metaData->getSQLType(columnIndex) == SQL_REAL) {
 		SQLFLOAT real = 0;
 		SQLINTEGER length = 0;
 		SQLGetData(stmt->getODBCStatement(), columnIndex + 1, SQL_C_FLOAT, &real, 1, &length);
@@ -73,18 +77,18 @@
 }
 
 float ResultSet::getSQLReal(std::string tableName, std::string columnName) const {
-	return getSQLReal(metaData.getColumnIndex(tableName + columnName));
+	return getSQLReal(metaData->getColumnIndex(tableName, columnName));
 }
 
 double ResultSet::getSQLFloat(unsigned int columnIndex) const {
 	double ret = 0;
 
-	if (metaData.getSQLType(columnIndex) == SQL_FLOAT) {
+	if (metaData->getSQLType(columnIndex) == SQL_FLOAT) {
 		SQLDOUBLE data = 0;
 		SQLINTEGER length = 0;
 		SQLGetData(stmt->getODBCStatement(), columnIndex + 1, SQL_C_DOUBLE, &data, 1, &length);
 		
-		ret = (double) strAux;
+		ret = (double) data;
 		
 	} else {
 		//throw an exception if the column type is not the requested
@@ -95,18 +99,18 @@
 }
 
 double ResultSet::getSQLFloat(std::string tableName, std::string columnName) const {
-	return getSQLFloat(metaData.getColumnIndex(tableName + columnName));
+	return getSQLFloat(metaData->getColumnIndex(tableName, columnName));
 }
 
 double ResultSet::getSQLDouble(unsigned int columnIndex) const {
 	double ret = 0;
 
-	if (metaData.getSQLType(columnIndex) == SQL_DOUBLE) {
+	if (metaData->getSQLType(columnIndex) == SQL_DOUBLE) {
 		SQLDOUBLE data = 0;
 		SQLINTEGER length = 0;
 		SQLGetData(stmt->getODBCStatement(), columnIndex + 1, SQL_C_DOUBLE, &data, 1, &length);
 		
-		ret = (double) strAux;
+		ret = (double) data;
 		
 	} else {
 		//throw an exception if the column type is not the requested
@@ -117,41 +121,46 @@
 }
 
 double ResultSet::getSQLDouble(std::string tableName, std::string columnName) const {
-	return getSQLDouble(metaData.getColumnIndex(tableName + columnName));
+	return getSQLDouble(metaData->getColumnIndex(tableName, columnName));
 }
 
 std::string ResultSet::getSQLDecimal(unsigned int columnIndex) const {
-	std::string ret;
+	//std::string ret;
 
-	if (metaData.getSQLType(columnIndex) == SQL_DECIMAL) {
-		SQLPOINTER sqlPtr = 0;
-		SQLCHAR strAux[1];
-		SQLINTEGER length = 0;
-		SQLGetData(statement, columnIndex + 1, SQL_C_CHAR, &strAux, 1, &length);
-		length++;
-		sqlPtr = (SQLCHAR*) malloc(length*sizeof(SQLCHAR));
-		SQLINTEGER aux = 0;
-		SQLGetData(statement, columnIndex + 1, SQL_C_CHAR, sqlPtr, length, &aux);
-			
-		std::string ret = (char*) sqlPtr);
-		delete [] sqlPtr;
-		ret = &((double) strAux);
-		
-	} else {
-		//throw an exception if the column type is not the requested
-	}
+	//if (metaData.getSQLType(columnIndex) == SQL_DECIMAL) {
+	//	SQLPOINTER sqlPtr = 0;
+	//	SQLCHAR strAux[1];
+	//	SQLINTEGER length = 0;
+	//	SQLGetData(statement, columnIndex + 1, SQL_C_CHAR, &strAux, 1, &length);
+	//	length++;
+	//	sqlPtr = (SQLCHAR*) malloc(length*sizeof(SQLCHAR));
+	//	SQLINTEGER aux = 0;
+	//	SQLGetData(statement, columnIndex + 1, SQL_C_CHAR, sqlPtr, length, &aux);
+	//		
+	//	std::string ret = (char*) sqlPtr);
+	//	delete [] sqlPtr;
+	//	ret = &((double) strAux);
+	//	
+	//} else {
+	//	//throw an exception if the column type is not the requested
+	//}
 
-	return ret;
+	//return ret;
+	return "";
 
 }
 
 std::string ResultSet::getSQLDecimal(std::string tableName, std::string columnName) const {
-	return getSQLDecimal(metaData.getColumnIndex(tableName + columnName));
+	return getSQLDecimal(metaData->getColumnIndex(tableName, columnName));
 }
 
-bool ResultSet::isNull(unsigned int columnIndex) const {}
+bool ResultSet::isNull(unsigned int columnIndex) const { 
+	return false; 
+}
 
-bool ResultSet::isNull(std::string tableName, std::string columnName) const {}
+bool ResultSet::isNull(std::string tableName, std::string columnName) const {
+	return false;
+}
 
 bool ResultSet::next(void) {
 	return (SQL_SUCCESS == SQLFetch(stmt->getODBCStatement()));
@@ -159,9 +168,27 @@
 
 unsigned int ResultSet::rowCount(void) const {
 	SQLINTEGER columnCount = 0;
-	SQLRETURN ret = SQLColAttribute(statement, NULL, SQL_DESC_COUNT, NULL, NULL, NULL, &columnCount);
+	SQLRETURN ret = SQLColAttribute(stmt->getODBCStatement(), NULL, SQL_DESC_COUNT, NULL, NULL, NULL, &columnCount);
 	
 	return (unsigned int) columnCount;
 
 }
 
+std::string ResultSet::getSQLVarchar(unsigned int columnIndex) const {
+	SQLPOINTER sqlPtr = 0;
+	SQLCHAR strAux[1];
+	SQLINTEGER length = 0;
+	SQLGetData(stmt->getODBCStatement(), columnIndex + 1, SQL_C_CHAR, &strAux, 1, &length);
+	length++;
+	sqlPtr = (SQLCHAR*) malloc(length*sizeof(SQLCHAR));
+	SQLINTEGER aux = 0;
+	SQLGetData(stmt->getODBCStatement(), columnIndex + 1, SQL_C_CHAR, sqlPtr, length, &aux);
+		
+	std::string ret = (char*) sqlPtr;
+	return ret;
+
+}
+
+std::string ResultSet::getSQLVarchar(std::string tableName, std::string columnName) const {
+	return getSQLVarchar(metaData->getColumnIndex(tableName, columnName));
+}

Modified: incubator/tuscany/cpp/das/runtime/das_lite/src/ResultSet.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/das_lite/src/ResultSet.h?view=diff&rev=530633&r1=530632&r2=530633
==============================================================================
--- incubator/tuscany/cpp/das/runtime/das_lite/src/ResultSet.h (original)
+++ incubator/tuscany/cpp/das/runtime/das_lite/src/ResultSet.h Thu Apr 19 21:15:19 2007
@@ -25,22 +25,29 @@
 #include <string>
 
 #include "ResultSetMetaData.h"
+#include "Statement.h"
+
+class Statement;
+class ResultSetMetaData;
 
 class ResultSet {
 
 	private:
-		ResultSetMetaData metaData;
+		ResultSetMetaData* metaData;
 		Statement* stmt;
 
 	public:
-		ResultSet(Statement* aStmt);
+		ResultSet(Statement& aStmt);
 		virtual ~ResultSet(void);
 
-		const ResultMetaData& getMetaData(void) const;
-		const Statement& getStatement(void) const;
+		ResultSetMetaData& getResultSetMetaData(void) const;
+		Statement& getStatement(void) const;
 		
 		wchar_t getSQLChar(unsigned int columnIndex) const;
 		wchar_t getSQLChar(std::string tableName, std::string columnName) const;
+
+		std::string getSQLVarchar(unsigned int columnIndex) const;
+		std::string getSQLVarchar(std::string tableName, std::string columnName) const;
 
 		float getSQLReal(unsigned int columnIndex) const;
 		float getSQLReal(std::string tableName, std::string columnName) const;

Modified: incubator/tuscany/cpp/das/runtime/das_lite/src/ResultSetMetaData.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/das_lite/src/ResultSetMetaData.cpp?view=diff&rev=530633&r1=530632&r2=530633
==============================================================================
--- incubator/tuscany/cpp/das/runtime/das_lite/src/ResultSetMetaData.cpp (original)
+++ incubator/tuscany/cpp/das/runtime/das_lite/src/ResultSetMetaData.cpp Thu Apr 19 21:15:19 2007
@@ -31,13 +31,13 @@
 
 }
 
-virtual ResultSetMetaData::~ResultSetMetaData(void) {}
+ResultSetMetaData::~ResultSetMetaData(void) {}
 
-SQLSMALLINT ResultSetMetaData::getSQLCType(SQLSMALLINT sqlType) {
+SQLSMALLINT ResultSetMetaData::getSQLCType(SQLSMALLINT sqlType) const {
 
 	switch (sqlType) {
 
-		case SQLCHAR :
+		case SQL_CHAR :
 			return SQL_C_CHAR;
 
 		case SQL_BINARY :
@@ -86,13 +86,13 @@
 			return SQL_C_BINARY;
 
 		default :
-			throw logic_error("Illegal SQL type!");
+			throw std::invalid_argument("Illegal SQL type!");
 		
 	}
 
 }
 
-SQLSMALLINT ResultSetMetaData::getSQLType(unsigned int columnIndex) {
+SQLSMALLINT ResultSetMetaData::getSQLType(unsigned int columnIndex) const {
 	SQLSMALLINT sqlType = 0;
 	SQLColAttribute(resultSet->getStatement().getODBCStatement(), columnIndex + 1, SQL_DESC_TYPE, NULL, NULL, NULL, &sqlType);
 		
@@ -100,12 +100,12 @@
 
 }
 
-SQLSMALLINT ResultSetMetaData::getSQLType(std::string tableName, std::string columnName) {
-	return getSQLType(getColumnIndex(tableName + columnName));
+SQLSMALLINT ResultSetMetaData::getSQLType(std::string tableName, std::string columnName) const {
+	return getSQLType(getColumnIndex(tableName, columnName));
 }
 
 
-std::string ResultSetMetaData::getSQLTypeName(unsigned int columnIndex) {
+std::string ResultSetMetaData::getSQLTypeName(unsigned int columnIndex) const {
 	SQLCHAR* sqlPtr = 0;
 	char strAux[1];
 	SQLSMALLINT length = 0;
@@ -121,12 +121,12 @@
 
 }
 
-std::string ResultSetMetaData::getSQLTypeName(std::string tableName, std::string columnName) {
-	unsigned int columnIndex = getColumnIndex(tableName + columnName);
+std::string ResultSetMetaData::getSQLTypeName(std::string tableName, std::string columnName) const {
+	return getSQLTypeName(getColumnIndex(tableName, columnName));
 }
 
 
-std::string ResultSetMetaData::getColumnName(unsigned int columnIndex) {
+std::string ResultSetMetaData::getColumnName(unsigned int columnIndex) const {
 	SQLCHAR* sqlPtr = 0;
 	char strAux[1];
 	SQLSMALLINT length = 0;
@@ -142,11 +142,11 @@
 
 }
 
-unsigned int ResultSetMetaData::getColumnIndex(std::string tableName, std::string columnName) {
-	std::map<std::string, unsigned int>::iterator it = columnsIndexes.find(tableName + columnName);
+unsigned int ResultSetMetaData::getColumnIndex(std::string tableName, std::string columnName) const {
+	std::map<std::string, unsigned int>::const_iterator it = columnsIndexes.find(tableName + columnName);
 
 	if (it == columnsIndexes.end()) {
-		throw logic_error("No such column name: " + columnName);
+		throw std::invalid_argument("No such column name: " + columnName);
 	}
 
 	return it->second;
@@ -154,7 +154,7 @@
 }
 
 
-std::string ResultSetMetaData::getTableName(unsigned int columnIndex) {
+std::string ResultSetMetaData::getTableName(unsigned int columnIndex) const {
 	SQLCHAR* sqlPtr = 0;
 	char strAux[1];
 	SQLSMALLINT length = 0;
@@ -170,33 +170,20 @@
 
 }
 
-std::string ResultSetMetaData::getTableName(std::string tableName, std::string columnName) {
-	return getTableName(getColumnIndex(tableName + columnName));
+std::string ResultSetMetaData::getTableName(std::string tableName, std::string columnName) const {
+	return getTableName(getColumnIndex(tableName, columnName));
 }
 
 
-SQLSMALLINT ResultSetMetaData::getSQLType(unsigned int columnIndex) {
-	SQLSMALLINT sqlType = 0;
-	SQLColAttribute(resultSet->getStatement().getODBCStatement(), columnIndex + 1, SQL_DESC_TYPE, NULL, NULL, NULL, &sqlType);
-		
-	return sqlType;
-
-}
-
-SQLSMALLINT ResultSetMetaData::getSQLType(std::string tableName, std::string columnName) {
-	return getSQLType(getColumnIndex(tableName + columnName));
-}
-
-
-SQLSMALLINT ResultSetMetaData::getSQLCType(unsigned int columnIndex) {
+SQLSMALLINT ResultSetMetaData::getSQLCType(unsigned int columnIndex) const {
 	return getSQLCType(getSQLType(columnIndex));
 }
 
-SQLSMALLINT ResultSetMetaData::getSQLCType(std::string tableName, std::string columnName) {
-	return getSQLCType(getSQLType(getColumnIndex(tableName + columnName)));
+SQLSMALLINT ResultSetMetaData::getSQLCType(std::string tableName, std::string columnName) const {
+	return getSQLCType(getSQLType(getColumnIndex(tableName, columnName)));
 }
 
-unsigned int ResultSetMetaData::getColumnCount(void) {
+unsigned int ResultSetMetaData::getColumnCount(void) const {
 	SQLUINTEGER columnCount = 0;
 	SQLRETURN ret = SQLColAttribute(resultSet->getStatement().getODBCStatement(), NULL, SQL_DESC_COUNT, NULL, NULL, NULL, &columnCount);
 	
@@ -205,7 +192,7 @@
 }
 
 bool ResultSetMetaData::containsColumn(std::string tableName, std::string columnName) const {
-	std::map<std::string, int>::iterator it = columnsIndexes.find(tableName + columnName);
+	std::map<std::string, unsigned int>::const_iterator it = columnsIndexes.find(tableName + columnName);
 	
 	if (it == columnsIndexes.end()) {
 		return false;

Modified: incubator/tuscany/cpp/das/runtime/das_lite/src/ResultSetMetaData.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/das_lite/src/ResultSetMetaData.h?view=diff&rev=530633&r1=530632&r2=530633
==============================================================================
--- incubator/tuscany/cpp/das/runtime/das_lite/src/ResultSetMetaData.h (original)
+++ incubator/tuscany/cpp/das/runtime/das_lite/src/ResultSetMetaData.h Thu Apr 19 21:15:19 2007
@@ -30,32 +30,30 @@
 
 	private:
 		ResultSet* resultSet;
-		std::map<std::string, int> columnsIndexes;
+		std::map<std::string, unsigned int> columnsIndexes;
 
+		SQLSMALLINT getSQLCType(SQLSMALLINT sqlType) const;
+
+	public:
 		ResultSetMetaData(ResultSet* aResultSet);
 		virtual ~ResultSetMetaData(void);
 
-		SQLSMALLINT getSQLCType(SQLSMALLINT sqlType) const;
 
-	public:
 		const ResultSet& getResultSet(void) const;
 
-		SQLSMALLINT getSQLType(int columnIndex) const;
-		SQLSMALLINT getSQLType(std::string tableName, std::string columnName) const;
-
-		std::string getSQLTypeName(int columnIndex) const;
+		std::string getSQLTypeName(unsigned int columnIndex) const;
 		std::string getSQLTypeName(std::string tableName, std::string columnName) const;
 
-		std::string getColumnName(int columnIndex) const;
+		std::string getColumnName(unsigned int columnIndex) const;
 		unsigned int getColumnIndex(std::string tableName, std::string columnName) const;
 
-		std::string getTableName(int columnIndex) const;
+		std::string getTableName(unsigned int columnIndex) const;
 		std::string getTableName(std::string tableName, std::string columnName) const;
 
-		SQLSMALLINT getSQLType(int columnIndex) const;
+		SQLSMALLINT getSQLType(unsigned int columnIndex) const;
 		SQLSMALLINT getSQLType(std::string tableName, std::string columnName) const;
 
-		SQLSMALLINT getSQLCType(int columnIndex) const;
+		SQLSMALLINT getSQLCType(unsigned int columnIndex) const;
 		SQLSMALLINT getSQLCType(std::string tableName, std::string columnName) const;
 
 		unsigned int getColumnCount(void) const;

Modified: incubator/tuscany/cpp/das/runtime/das_lite/src/Statement.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/das_lite/src/Statement.cpp?view=diff&rev=530633&r1=530632&r2=530633
==============================================================================
--- incubator/tuscany/cpp/das/runtime/das_lite/src/Statement.cpp (original)
+++ incubator/tuscany/cpp/das/runtime/das_lite/src/Statement.cpp Thu Apr 19 21:15:19 2007
@@ -18,24 +18,36 @@
  */
 #include "Statement.h"
 
-Statement::Statement(std::string sqlString) {
-	queryString = sqlString;	
+Statement::Statement(Connection& connection, HSTMT statementHandle) {
+	this->statementHandle = statementHandle;	
+	this->connection = &connection;
+	resultSet = 0;
+
 }
 
 Statement::~Statement(void) {
-}
+	connection->freeStatement(*this);
+	SQLFreeHandle(SQL_HANDLE_STMT, statementHandle);
+	delete resultSet;
 
-HSTMT& Statement::executeQuery(void) { /*throws SQLException*/
-    return *(new HSTMT);
 }
 
-void Statement::setConnection(ConnectionImpl* connection) {
+ResultSet* Statement::executeQuery(std::string sql) { /*throws SQLException*/
+	SQLExecDirect(statementHandle, (SQLCHAR*) (char*) sql.c_str(), SQL_NTS);
+	resultSet = new ResultSet(*this);
+
+    return resultSet;
+
 }
 
-ConnectionImpl* Statement::getConnection(void) {
-	return connection;
+Connection& Statement::getConnection(void) {
+	return *connection;
 }
 
 void Statement::close(void) {
+	delete this;
+}
 
+HSTMT Statement::getODBCStatement(void) const {
+	return statementHandle;
 }

Modified: incubator/tuscany/cpp/das/runtime/das_lite/src/Statement.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/das_lite/src/Statement.h?view=diff&rev=530633&r1=530632&r2=530633
==============================================================================
--- incubator/tuscany/cpp/das/runtime/das_lite/src/Statement.h (original)
+++ incubator/tuscany/cpp/das/runtime/das_lite/src/Statement.h Thu Apr 19 21:15:19 2007
@@ -23,23 +23,28 @@
 #include <windows.h>
 #include <sql.h>
 
-#include "ConnectionImpl.h"
+#include "Connection.h"
+#include "ResultSet.h"
+
+class Connection;
+class ResultSet;
 
 class Statement {
 	
 	private:
-		HSTMT preparedStatement;
+		HSTMT statementHandle;
+		Connection* connection;
+		ResultSet* resultSet;
 		
 	protected:
 		std::string queryString;
-		ConnectionImpl* connection;
 		
 	public:
-		Statement(std::string sqlString);
+		Statement(Connection& connection, HSTMT statementHandle);
 		~Statement(void);
-		HSTMT& executeQuery(); /*throws SQLException*/
-		void setConnection(ConnectionImpl* jdbcConnection);
-		ConnectionImpl* getConnection(void);
+		HSTMT getODBCStatement(void) const;
+		ResultSet* executeQuery(std::string sql); /*throws SQLException*/
+		Connection& getConnection(void);
 		void close(void);
 		
 };

Modified: incubator/tuscany/cpp/das/runtime/das_lite/src/Table.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/das_lite/src/Table.cpp?view=diff&rev=530633&r1=530632&r2=530633
==============================================================================
--- incubator/tuscany/cpp/das/runtime/das_lite/src/Table.cpp (original)
+++ incubator/tuscany/cpp/das/runtime/das_lite/src/Table.cpp Thu Apr 19 21:15:19 2007
@@ -18,45 +18,63 @@
  */
 #include "Table.h"
 
-Table::Table(GraphBuilder& graphBuilderMetaData, std::string tableName) {
-	this->config = &graphBuilderMetaData->getConfig();
+Table::Table(Config& config, std::string tableName) {
+	this->config = &config;
 	this->tableName = tableName;
 	this->mappedName = tableName;
 	convOverConfig = false;
+	Connection* conn = ((DASImpl&) config.getDAS()).getConnection();
+
+	//load PKs
+	ResultSet* pksResultSet = 0;
+
+	try {
+		pksResultSet = conn->getDatabase().getPKs(tableName);
+	} catch (std::runtime_error& e) {
+		convOverConfig = true;
+		return;
+
+	}
+
+	if (pksResultSet != 0) {
+			
+		while (pksResultSet->next()) {
+			pkColumns.push_back(pksResultSet->getSQLVarchar(3));
+		}
+
+	}
 	
 	//load FKs
-	Connection& conn = graphBuilderMetaData.getResultSetMetaData().
-		getResultSet().getStatement().getConnection();
 	ResultSet* fksResultSet = 0;
 
 	try {
-		fksResultSet = &conn.getDatabase().getFKs(tableName);
-	} throw (std::runtime_error& e) {
+		fksResultSet = conn->getDatabase().getFKs(tableName);
+	} catch (std::runtime_error& e) {
 		convOverConfig = true;
 		return;
 
 	}
 			
-	while (fkResultSet->next()) {
+	while (fksResultSet->next()) {
 		std::string fkColumnName = fksResultSet->getSQLVarchar(7);
 		std::string pkTableName = fksResultSet->getSQLVarchar(2);
 		std::string pkColumnName = fksResultSet->getSQLVarchar(3);
 		
-		Relationship relationship = new Relationship(pkTableName, tableName);
-		graphBuilderMetaData->getConfig().addRelationship(*relationship);
+		Relationship* relationship = new Relationship(pkTableName, tableName);
+		config.addRelationship(*relationship);
 		
-		KeyPair keyPair = new KeyPair(pkColumnName, fkColumnName);
-		relationship.addKeyPair(*keyPair);
+		KeyPair* keyPair = new KeyPair(pkColumnName, fkColumnName);
+		relationship->addKeyPair(*keyPair);
 
 	}
 	
 }
 
 Table::~Table(void) {
-	std::list<Column*>::iterator it;
+	std::map<std::string, Column*>::iterator it;
 
 	for (it = columns.begin() ; it != columns.end() ; it++) {
-		delete *it;
+		delete it->second;
 	}
 
 }
@@ -65,85 +83,66 @@
 	return tableName;
 }
 
-void Table::loadColumn(std::list<Column*>& columns) {
+void Table::addColumns(std::list<Column*>& columns) {
 	ResultSet* pksResultSet = 0;
 
-	std::list<Columns*>::iterator it;
+	std::list<Column*>::iterator it;
 	for (it = columns.begin() ; it != columns.end() ;) {
 		std::map<std::string, Column*>::iterator it2 = this->columns.
 			find((*it)->getName());
 		
 		if (it2 != this->columns.end()) {
 			(*it)->setContainerTable(this);
-			this->columns.insert(std::make_pair((*it)->getName(), column));
+			this->columns.insert(std::make_pair((*it)->getName(), *it));
 			it++;
 
 		} else {
 			std::list<Column*>::iterator aux = it;
 			it++;
-			this->columns.erase(aux);
+			columns.erase(aux);
 
 		}
 
 	}
 
-	try {
-		pksResultSet = &conn.getDatabase().getPKs(tableName);
-	} throw (std::runtime_error& e) {}
-
-	if (pksResultSet != 0) {
-			
-		while (pkResultSet->next()) {
-			std::string pkColumnName = fksResultSet->getSQLVarchar(3);
-			Column* actualColumn = this->column[pkColumnName];
-
-			if (actualColumn->getName() == pkColumnName) {
-				actualColumn->setPK(true);
-					
-				break;
-
-			}
-
-		}
-
-	} else {
-		std::list<Columns*>::iterator it;
+	if (convOverConfig) {
+		std::list<Column*>::iterator it;
 
 		for (it == columns.begin() ; it != columns.end() ; it++) {
 			Column* column = *it;
 			std::string columnName = column->getName();
-
+			
 			if (columnName == "id") {
 				column->setPK(true);
+				pkColumns.push_back(columnName);
+
 			}
 			
 		}
 
-	}
-
-	if (convOverConfig) {
 		loadConvOverConfigFKs(columns);
+
 	}
 
 }
 
-Config& getConfig(void) const {
+Config& Table::getConfig(void) const {
 	return *config;
 }
 
-void Table::createGraph(GraphBuilderMetaData& graphBuilderMetaData, commonj::sdo::DataFactoryPtr dataFactory) const {
-	std::map<std::string, Column*>::iterator it;
+void Table::createGraph(const GraphBuilderMetaData& graphBuilderMetaData, commonj::sdo::DataFactoryPtr dataFactory) const {
+	std::map<std::string, Column*>::const_iterator it;
 	std::list<Relationship*>* relationships = config->getRelationships(tableName);
 	std::map<std::string, Relationship*> columnsRelationships;
 	
 	for (std::list<Relationship*>::iterator relationshipsIterator = relationships->begin() ; 
 		relationshipsIterator != relationships->end() ; relationshipsIterator++) {
 			Relationship* relationship = *relationshipsIterator;
-			std::map<std::string, KeyPair*>& keyPairs; = relationship->getKeyPairs();
+			std::map<std::string, KeyPair*>& keyPairs = relationship->getKeyPairs();
 			
 			for (std::map<std::string, KeyPair*>::iterator keyPairsIterator = keyPairs.begin() ; 
 				keyPairsIterator != keyPairs.end() ; keyPairsIterator++) {
-					KeyPair* keyPair = *keyPairsIterator;
+					KeyPair* keyPair = keyPairsIterator->second;
 
 					columnsRelationships.insert(std::make_pair(keyPair->getFKColumnName(), 
 						relationship));
@@ -155,9 +154,9 @@
 	delete relationships;
 
 	for (it = columns.begin() ; it != columns.end() ; it++) {
-		Column& column = **it;
+		Column& column = *(it->second);
 	
-		std::map<std::string, Relationship*> it2 = columnsRelationships.find(column.getName());
+		std::map<std::string, Relationship*>::const_iterator it2 = columnsRelationships.find(column.getName());
 
 		if (it2 == columnsRelationships.end()) {
 			dataFactory->addType(DAS_NAMESPACE, column.getName());
@@ -168,7 +167,7 @@
 			continue;
 	
 		} else {
-			Relationship& relationship = *((*it)->second);
+			Relationship& relationship = *(it2->second);
 			Table* referecedTable = graphBuilderMetaData.getTable(relationship.getPKTableName());
 			
 			if (referecedTable != 0) {
@@ -184,10 +183,9 @@
 
 }
 
-void Table::populateGraph(commonj::sdo::DataObjectPtr dataObject, 
-				   ResultSet& resultSet) const {
+void Table::populateGraph(commonj::sdo::DataObjectPtr dataObject/*, ResultSet& resultSet*/) const {
 
-	std::map<std::string, Column*>::iterator it;
+	/*std::map<std::string, Column*>::iterator it;
 	for (it = columns.begin() ; it != columns.end() ; it++) {
 		Column* column = it->second;
 
@@ -195,7 +193,7 @@
 
 		}
 
-	}
+	}*/
 
 }
 
@@ -208,7 +206,7 @@
 }
 
 void Table::loadConvOverConfigFKs(std::list<Column*>& columns) {
-	std::list<Columns*>::iterator it;
+	std::list<Column*>::iterator it;
 
 	for (it == columns.begin() ; it != columns.end() ; it++) {
 		Column* column = *it;
@@ -216,17 +214,17 @@
 
 		if (columnName.substr(columnName.size() - 4, 3) == "_id") {
 			std::string referencedTable = columnName.substr(0, columnName.size() - 3);
-			Relationship* relationship = graphBuilderMetaData->getConfig().
+			Relationship* relationship = config->
 				getRelationship(tableName, referencedTable);
 
 			if (relationship == 0) {
 				relationship = new Relationship(tableName, referencedTable);
-				graphBuilderMetaData->getConfig().addRelationship(*relationship);
+				config->addRelationship(*relationship);
 				
 			}
 
-			KeyPair keyPair = new KeyPair("id", column->getName());
-			relationship.addKeyPair(*keyPair);
+			KeyPair* keyPair = new KeyPair("id", column->getName());
+			relationship->addKeyPair(*keyPair);
 
 		}
 		
@@ -237,4 +235,3 @@
 void Table::removeAllColumns(void) {
 	columns.clear();
 }
-

Modified: incubator/tuscany/cpp/das/runtime/das_lite/src/Table.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/das/runtime/das_lite/src/Table.h?view=diff&rev=530633&r1=530632&r2=530633
==============================================================================
--- incubator/tuscany/cpp/das/runtime/das_lite/src/Table.h (original)
+++ incubator/tuscany/cpp/das/runtime/das_lite/src/Table.h Thu Apr 19 21:15:19 2007
@@ -21,27 +21,36 @@
 
 #include <map>
 #include <list>
+#include <string>
 #include <stdexcept>
 
 #include "das_constants.h"
 #include "Relationship.h"
 #include "Config.h"
+#include "ResultSet.h"
 #include "Column.h"
+#include "DASImpl.h"
+#include "GraphBuilderMetaData.h"
 #include "ODBCTypeHelper.h"
 #include "commonj/sdo/DataFactory.h"
 #include "commonj/sdo/DataObject.h"
 
+class GraphBuilderMetaData;
+class Config;
+class Column;
+
 class Table {
 
 	private:
 		std::map<std::string, Column*> columns;
+		std::list<std::string> pkColumns;
 		Config* config;
 		std::string tableName;
 		std::string mappedName;
 		bool convOverConfig;
 		
 	public:
-		Table(GraphBuilderMetaData& graphBuilderMetaData, std::string tableName);
+		Table(Config& config, std::string tableName);
 		virtual ~Table(void);
 
 		void addColumns(std::list<Column*>& columns);
@@ -52,10 +61,9 @@
 		std::string getMappedName(void) const;
 		Config& getConfig(void) const;
 		std::string getTableName(void) const;
-		Table* clone();
 		
-		void createGraph(GraphBuilderMetaData& graphBuilderMetaData, commonj::sdo::DataFactoryPtr dataFactory) const;
-		void populateGraph(commonj::sdo::DataObjectPtr dataObject, ResultSet& resultSet) const;
+		void createGraph(const GraphBuilderMetaData& graphBuilderMetaData, commonj::sdo::DataFactoryPtr dataFactory) const;
+		void populateGraph(commonj::sdo::DataObjectPtr dataObject/*, ResultSet& resultSet*/) const;
 
 };
 



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org