2018-09-28 02:46:33 +00:00
|
|
|
#include "getIdentifierQuote.h"
|
|
|
|
#if USE_POCO_SQLODBC || USE_POCO_DATAODBC
|
|
|
|
|
|
|
|
#if USE_POCO_SQLODBC
|
2019-06-05 11:52:39 +00:00
|
|
|
#include <Poco/SQL/ODBC/ODBCException.h>
|
|
|
|
#include <Poco/SQL/ODBC/SessionImpl.h>
|
|
|
|
#include <Poco/SQL/ODBC/Utility.h>
|
2018-09-28 02:46:33 +00:00
|
|
|
#define POCO_SQL_ODBC_CLASS Poco::SQL::ODBC
|
|
|
|
#endif
|
|
|
|
#if USE_POCO_DATAODBC
|
|
|
|
#include <Poco/Data/ODBC/ODBCException.h>
|
|
|
|
#include <Poco/Data/ODBC/SessionImpl.h>
|
|
|
|
#include <Poco/Data/ODBC/Utility.h>
|
|
|
|
#define POCO_SQL_ODBC_CLASS Poco::Data::ODBC
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
namespace DB
|
|
|
|
{
|
2018-10-03 10:44:43 +00:00
|
|
|
std::string getIdentifierQuote(SQLHDBC hdbc)
|
|
|
|
{
|
|
|
|
std::string identifier;
|
2018-09-28 02:46:33 +00:00
|
|
|
|
2018-10-03 10:44:43 +00:00
|
|
|
SQLSMALLINT t;
|
2018-10-10 08:38:54 +00:00
|
|
|
SQLRETURN r = POCO_SQL_ODBC_CLASS::SQLGetInfo(hdbc, SQL_IDENTIFIER_QUOTE_CHAR, nullptr, 0, &t);
|
2018-09-28 02:46:33 +00:00
|
|
|
|
2018-10-03 10:44:43 +00:00
|
|
|
if (POCO_SQL_ODBC_CLASS::Utility::isError(r))
|
|
|
|
throw POCO_SQL_ODBC_CLASS::ConnectionException(hdbc);
|
2018-09-28 02:46:33 +00:00
|
|
|
|
2018-10-03 10:44:43 +00:00
|
|
|
if (t > 0)
|
|
|
|
{
|
2018-10-09 23:19:38 +00:00
|
|
|
// I have no idea, why to add '2' here, got from: contrib/poco/Data/ODBC/src/ODBCStatementImpl.cpp:60 (SQL_DRIVER_NAME)
|
2018-10-03 10:44:43 +00:00
|
|
|
identifier.resize(static_cast<std::size_t>(t) + 2);
|
2018-09-28 02:46:33 +00:00
|
|
|
|
2018-10-03 10:44:43 +00:00
|
|
|
if (POCO_SQL_ODBC_CLASS::Utility::isError(POCO_SQL_ODBC_CLASS::SQLGetInfo(
|
|
|
|
hdbc, SQL_IDENTIFIER_QUOTE_CHAR, &identifier[0], SQLSMALLINT((identifier.length() - 1) * sizeof(identifier[0])), &t)))
|
|
|
|
throw POCO_SQL_ODBC_CLASS::ConnectionException(hdbc);
|
2018-09-28 02:46:33 +00:00
|
|
|
|
2018-10-03 10:44:43 +00:00
|
|
|
identifier.resize(static_cast<std::size_t>(t));
|
2018-09-28 02:46:33 +00:00
|
|
|
}
|
2018-10-03 10:44:43 +00:00
|
|
|
return identifier;
|
2018-09-28 02:46:33 +00:00
|
|
|
}
|
2018-10-03 10:44:43 +00:00
|
|
|
}
|
2018-10-09 23:19:38 +00:00
|
|
|
#endif
|