branch | v_0 |
changeset 35 | cd9db43db120 |
parent 34 | 24c05e69d68f |
child 36 | 91cb012d779a |
34:24c05e69d68f | 35:cd9db43db120 |
---|---|
29 namespace sql { |
29 namespace sql { |
30 |
30 |
31 DriverManager::DriverManager() { |
31 DriverManager::DriverManager() { |
32 env = OdbcCommon::allocateHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE); |
32 env = OdbcCommon::allocateHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE); |
33 SQLRETURN result = SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void*) SQL_OV_ODBC3, 0); |
33 SQLRETURN result = SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void*) SQL_OV_ODBC3, 0); |
34 if (OdbcCommon::isNotSuccessful(result)) throw SqlException(L"Unable to set ODBC version"); // TODO:, result, SQL_HANDLE_ENV, environment); |
34 if (OdbcCommon::isNotSuccessful(result)) throw SqlException(L"Unable to set ODBC version", result, SQL_HANDLE_ENV, env); |
35 } |
35 } |
36 |
36 |
37 DriverManager::~DriverManager() { |
37 DriverManager::~DriverManager() { |
38 OdbcCommon::freeHandle(SQL_HANDLE_ENV, env); |
38 OdbcCommon::freeHandle(SQL_HANDLE_ENV, env); |
39 } |
39 } |
49 while (true) { |
49 while (true) { |
50 SQLRETURN result = SQLDataSources(env, SQL_FETCH_NEXT, name, sizeof (name), &nameLength, description, sizeof (description), &descriptionLength); |
50 SQLRETURN result = SQLDataSources(env, SQL_FETCH_NEXT, name, sizeof (name), &nameLength, description, sizeof (description), &descriptionLength); |
51 // TODO: check nameLength and descriptionLength whether values were truncated? |
51 // TODO: check nameLength and descriptionLength whether values were truncated? |
52 if (OdbcCommon::isSuccessful(result)) list.push_back({convertor.from_bytes((char*) name), convertor.from_bytes((char*) description)}); |
52 if (OdbcCommon::isSuccessful(result)) list.push_back({convertor.from_bytes((char*) name), convertor.from_bytes((char*) description)}); |
53 else if (result == SQL_NO_DATA_FOUND) break; |
53 else if (result == SQL_NO_DATA_FOUND) break; |
54 else throw SqlException(L"Unable to list data sources: " + std::to_wstring(result)); |
54 else throw SqlException(L"Unable to list data sources: " + std::to_wstring(result), result, SQL_HANDLE_ENV, env); |
55 } |
55 } |
56 return list; |
56 return list; |
57 } |
57 } |
58 |
58 |
59 |
59 |