--- 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()
-}
-
-
}
}
}