Skip to content

Commit e6d1551

Browse files
committed
provide real name of current connection
1 parent e8d44ed commit e6d1551

File tree

5 files changed

+26
-11
lines changed

5 files changed

+26
-11
lines changed

driver/connection.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,8 @@ void Connection::init(const std::string & connection_string)
7474
}
7575
else if (current_key == "DATABASE")
7676
database = current_value.toString();
77+
else if (current_key == "DSN")
78+
data_source = current_value.toString();
7779
}
7880

7981
init();

driver/connection.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,14 @@
88
struct Connection
99
{
1010
Environment & environment;
11+
1112
std::string host = "localhost";
1213
uint16_t port = 8123;
1314
std::string user = "default";
1415
std::string password;
1516
std::string database = "default";
17+
std::string data_source = "ClickHouse";
18+
1619
Poco::Net::HTTPClientSession session;
1720
DiagnosticRecord diagnostic_record;
1821
int retry_count = 3;

driver/info.cpp

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@
1717
# define SQL_ASYNC_NOTIFICATION_CAPABLE 0x00000001L
1818
#endif // ODBCVER >= 0x0380
1919

20+
#ifdef UNICODE
21+
# define DRIVER_FILE_NAME "CLICKHOUSEODBCW.DLL"
22+
#else
23+
# define DRIVER_FILE_NAME "CLICKHOUSEODBC.DLL"
24+
#endif
25+
2026
extern "C"
2127
{
2228

@@ -38,17 +44,17 @@ SQLGetInfo(HDBC connection_handle,
3844
return doWith<Connection>(connection_handle, [&](Connection & connection)
3945
{
4046
const char * name = nullptr;
41-
47+
4248
switch (info_type)
4349
{
4450
CASE_STRING(SQL_DRIVER_VER, "1.0")
4551
CASE_STRING(SQL_DRIVER_ODBC_VER, "03.80")
4652
CASE_STRING(SQL_DM_VER, "03.80.0000.0000")
47-
CASE_STRING(SQL_DRIVER_NAME, "ClickHouse ODBC")
53+
CASE_STRING(SQL_DRIVER_NAME, DRIVER_FILE_NAME)
4854
CASE_STRING(SQL_DBMS_NAME, "ClickHouse")
4955
CASE_STRING(SQL_DBMS_VER, "01.00.0000")
5056
CASE_STRING(SQL_SERVER_NAME, connection.host)
51-
CASE_STRING(SQL_DATA_SOURCE_NAME, "ClickHouse")
57+
CASE_STRING(SQL_DATA_SOURCE_NAME, connection.data_source)
5258
CASE_STRING(SQL_CATALOG_TERM, "catalog")
5359
CASE_STRING(SQL_COLLATION_SEQ, "UTF-8")
5460
CASE_STRING(SQL_DATABASE_NAME, connection.database)
@@ -81,7 +87,7 @@ SQLGetInfo(HDBC connection_handle,
8187
CASE_FALLTHROUGH(SQL_ROW_UPDATES)
8288
CASE_STRING(SQL_DESCRIBE_PARAMETER, "N")
8389

84-
/// UINTEGER single values
90+
/// UINTEGER single values
8591
CASE_NUM(SQL_ODBC_INTERFACE_CONFORMANCE, SQLUINTEGER, SQL_OIC_CORE)
8692
CASE_NUM(SQL_ASYNC_MODE, SQLUINTEGER, SQL_AM_NONE)
8793
CASE_NUM(SQL_ASYNC_NOTIFICATION, SQLUINTEGER, SQL_ASYNC_NOTIFICATION_NOT_CAPABLE)
@@ -91,7 +97,8 @@ SQLGetInfo(HDBC connection_handle,
9197
CASE_NUM(SQL_PARAM_ARRAY_SELECTS, SQLUINTEGER, SQL_PAS_NO_SELECT)
9298
CASE_NUM(SQL_SQL_CONFORMANCE, SQLUINTEGER, SQL_SC_SQL92_ENTRY)
9399

94-
/// USMALLINT single values
100+
/// USMALLINT single values
101+
CASE_NUM(SQL_ODBC_API_CONFORMANCE, SQLSMALLINT, SQL_OAC_LEVEL1);
95102
CASE_NUM(SQL_GROUP_BY, SQLUSMALLINT, SQL_GB_GROUP_BY_CONTAINS_SELECT)
96103
CASE_NUM(SQL_CATALOG_LOCATION, SQLUSMALLINT, SQL_CL_START)
97104
CASE_NUM(SQL_FILE_USAGE, SQLUSMALLINT, SQL_FILE_NOT_SUPPORTED)
@@ -106,7 +113,7 @@ SQLGetInfo(HDBC connection_handle,
106113
CASE_NUM(SQL_NULL_COLLATION, SQLUSMALLINT, SQL_NC_END)
107114
CASE_NUM(SQL_TXN_CAPABLE, SQLUSMALLINT, SQL_TC_NONE)
108115

109-
/// UINTEGER non-empty bitmasks
116+
/// UINTEGER non-empty bitmasks
110117
CASE_NUM(SQL_CATALOG_USAGE, SQLUINTEGER, SQL_CU_DML_STATEMENTS | SQL_CU_TABLE_DEFINITION)
111118
CASE_NUM(SQL_AGGREGATE_FUNCTIONS, SQLUINTEGER, SQL_AF_ALL | SQL_AF_AVG | SQL_AF_COUNT | SQL_AF_DISTINCT | SQL_AF_MAX | SQL_AF_MIN | SQL_AF_SUM)
112119
CASE_NUM(SQL_ALTER_TABLE, SQLUINTEGER, SQL_AT_ADD_COLUMN_DEFAULT | SQL_AT_ADD_COLUMN_SINGLE | SQL_AT_DROP_COLUMN_DEFAULT | SQL_AT_SET_COLUMN_DEFAULT)
@@ -204,7 +211,7 @@ SQLGetInfo(HDBC connection_handle,
204211

205212
CASE_NUM(SQL_UNION, SQLUINTEGER, SQL_U_UNION | SQL_U_UNION_ALL)
206213

207-
/// UINTEGER empty bitmasks
214+
/// UINTEGER empty bitmasks
208215
CASE_FALLTHROUGH(SQL_ALTER_DOMAIN)
209216
CASE_FALLTHROUGH(SQL_BATCH_ROW_COUNT)
210217
CASE_FALLTHROUGH(SQL_BATCH_SUPPORT)
@@ -237,7 +244,7 @@ SQLGetInfo(HDBC connection_handle,
237244
CASE_FALLTHROUGH(SQL_SQL92_REVOKE)
238245
CASE_NUM(SQL_DDL_INDEX, SQLUINTEGER, 0)
239246

240-
/// Limits on the maximum number, USMALLINT.
247+
/// Limits on the maximum number, USMALLINT.
241248
CASE_FALLTHROUGH(SQL_ACTIVE_ENVIRONMENTS)
242249
CASE_FALLTHROUGH(SQL_MAX_COLUMNS_IN_GROUP_BY)
243250
CASE_FALLTHROUGH(SQL_MAX_COLUMNS_IN_INDEX)
@@ -256,7 +263,7 @@ SQLGetInfo(HDBC connection_handle,
256263
CASE_FALLTHROUGH(SQL_MAX_TABLE_NAME_LEN)
257264
CASE_NUM(SQL_MAX_CATALOG_NAME_LEN, SQLUSMALLINT, 0)
258265

259-
/// Limitations on the maximum number, UINTEGER.
266+
/// Limitations on the maximum number, UINTEGER.
260267
CASE_FALLTHROUGH(SQL_MAX_ROW_SIZE)
261268
CASE_FALLTHROUGH(SQL_MAX_STATEMENT_LEN)
262269
CASE_FALLTHROUGH(SQL_MAX_BINARY_LITERAL_LEN)

driver/odbc.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -531,6 +531,9 @@ impl_SQLGetDiagRec(SQLSMALLINT handle_type, SQLHANDLE handle,
531531
case SQL_HANDLE_STMT:
532532
diagnostic_record = &reinterpret_cast<Statement *>(handle)->diagnostic_record;
533533
break;
534+
case SQL_HANDLE_DESC:
535+
// TODO (artpaul) implement
536+
return SQL_NO_DATA;
534537
default:
535538
return SQL_ERROR;
536539
}

driver/utils.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,13 +111,13 @@ RETCODE fillOutputString(const std::string & value,
111111

112112
if (out_value_max_length >= (size_without_zero + 1) * sizeof(TCHAR))
113113
{
114-
memcpy(out_value, tmp.data(), (size_without_zero + 1) * sizeof(TCHAR));
114+
memcpy(out_value, tmp.c_str(), (size_without_zero + 1) * sizeof(TCHAR));
115115
}
116116
else
117117
{
118118
if (out_value_max_length > 0)
119119
{
120-
memcpy(out_value, tmp.data(), (out_value_max_length - 1) * sizeof(TCHAR));
120+
memcpy(out_value, tmp.c_str(), (out_value_max_length - 1) * sizeof(TCHAR));
121121
reinterpret_cast<LPTSTR>(out_value)[out_value_max_length - 1] = 0;
122122

123123
LOG((LPCTSTR)(out_value));

0 commit comments

Comments
 (0)