src/DriverManager.cpp
branchv_0
changeset 37 3de41719d7eb
parent 36 91cb012d779a
child 38 a871779a4e3c
--- a/src/DriverManager.cpp	Sun May 31 16:56:07 2020 +0200
+++ b/src/DriverManager.cpp	Sun May 31 21:20:24 2020 +0200
@@ -30,13 +30,13 @@
 namespace sql {
 
 DriverManager::DriverManager() {
-	env = OdbcCommon::allocateHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE);
-	SQLRETURN result = SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void*) SQL_OV_ODBC3, 0);
-	if (OdbcCommon::isNotSuccessful(result)) throw SqlException(L"Unable to set ODBC version", result, SQL_HANDLE_ENV, env);
+	environment = OdbcCommon::allocateHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE);
+	SQLRETURN result = SQLSetEnvAttr(environment, SQL_ATTR_ODBC_VERSION, (void*) SQL_OV_ODBC3, 0);
+	if (OdbcCommon::isNotSuccessful(result)) throw SqlException(L"Unable to set ODBC version", result, SQL_HANDLE_ENV, environment);
 }
 
 DriverManager::~DriverManager() {
-	OdbcCommon::freeHandle(SQL_HANDLE_ENV, env);
+	OdbcCommon::freeHandle(SQL_HANDLE_ENV, environment);
 }
 
 std::vector<DriverManager::DataSource> DriverManager::getDataSources() {
@@ -48,33 +48,33 @@
 	SQLSMALLINT nameLength;
 	SQLSMALLINT descriptionLength;
 	while (true) {
-		SQLRETURN result = SQLDataSources(env, SQL_FETCH_NEXT, name, sizeof (name), &nameLength, description, sizeof (description), &descriptionLength);
+		SQLRETURN result = SQLDataSources(environment, SQL_FETCH_NEXT, name, sizeof (name), &nameLength, description, sizeof (description), &descriptionLength);
 		// TODO: check nameLength and descriptionLength whether values were truncated?
 		if (OdbcCommon::isSuccessful(result)) list.push_back({convertor.from_bytes((char*) name), convertor.from_bytes((char*) description)});
 		else if (result == SQL_NO_DATA_FOUND) break;
-		else throw SqlException(L"Unable to list data sources: " + std::to_wstring(result), result, SQL_HANDLE_ENV, env);
+		else throw SqlException(L"Unable to list data sources: " + std::to_wstring(result), result, SQL_HANDLE_ENV, environment);
 	}
 	return list;
 }
 
 Connection* DriverManager::getConnectionByDSN(relpipe::reader::string_t dataSourceName, relpipe::reader::string_t userName, relpipe::reader::string_t password) {
-	SQLHDBC connection = OdbcCommon::allocateHandle(SQL_HANDLE_DBC, env);
+	SQLHDBC connection = OdbcCommon::allocateHandle(SQL_HANDLE_DBC, environment);
 	std::string dataSourceNameBytes = convertor.to_bytes(dataSourceName);
 	std::string userNameBytes = convertor.to_bytes(userName);
 	std::string passwordBytes = convertor.to_bytes(password);
 	SQLRETURN result = SQLConnect(connection,
 			(SQLCHAR*) dataSourceNameBytes.c_str(), SQL_NTS,
 			(SQLCHAR*) userNameBytes.c_str(), SQL_NTS,
-			(SQLCHAR*) password.c_str(), SQL_NTS);
+			(SQLCHAR*) passwordBytes.c_str(), SQL_NTS);
 	if (OdbcCommon::isNotSuccessful(result)) {
 		OdbcCommon::freeHandle(SQL_HANDLE_DBC, connection);
-		throw SqlException(L"Unable to connect to " + dataSourceName, result, SQL_HANDLE_ENV, env);
+		throw SqlException(L"Unable to connect to " + dataSourceName, result, SQL_HANDLE_ENV, environment);
 	}
 	return new Connection(connection);
 }
 
-Connection* DriverManager::getConnectionByString(relpipe::reader::string_t connectionString) {
-	SQLHDBC connection = OdbcCommon::allocateHandle(SQL_HANDLE_DBC, env);
+Connection* DriverManager::getConnectionByURL(relpipe::reader::string_t connectionString) {
+	SQLHDBC connection = OdbcCommon::allocateHandle(SQL_HANDLE_DBC, environment);
 	char completeConnectionString[SQL_MAX_OPTION_STRING_LENGTH];
 	memset(completeConnectionString, 0, sizeof (completeConnectionString));
 	SQLSMALLINT completeConnectionStringLength = -1;
@@ -82,16 +82,10 @@
 			(SQLCHAR*) convertor.to_bytes(connectionString).c_str(), SQL_NTS,
 			(SQLCHAR*) completeConnectionString, sizeof (completeConnectionString), &completeConnectionStringLength,
 			SQL_DRIVER_NOPROMPT);
-	if (OdbcCommon::isNotSuccessful(result)) throw SqlException(L"Unable to connect to " + connectionString, result, SQL_HANDLE_ENV, env);
-	std::wcerr << "ODBC connected to: " << convertor.from_bytes(completeConnectionString) << std::endl; // FIXME: remove
+	if (OdbcCommon::isNotSuccessful(result)) throw SqlException(L"Unable to connect to " + connectionString, result, SQL_HANDLE_ENV, environment);
 	return new Connection(connection);
 }
 
-relpipe::reader::string_t DriverManager::buildDSN(const std::map<relpipe::reader::string_t, relpipe::reader::string_t>& parameters) {
-	throw SqlException(L"not yet implemented: buildDSN()"); // FIXME: implement buildDSN()
-}
-
-
 }
 }
 }