fixed GH #2538: Poco::Data::Session::connector() returns empty string for MySQL session.

This commit is contained in:
Günter Obiltschnig 2018-11-11 20:50:15 +01:00
parent ae9a7368cc
commit 9f53d07d4c

View File

@ -44,8 +44,9 @@ const std::string SessionImpl::MYSQL_REPEATABLE_READ = "REPEATABLE READ";
const std::string SessionImpl::MYSQL_SERIALIZABLE = "SERIALIZABLE"; const std::string SessionImpl::MYSQL_SERIALIZABLE = "SERIALIZABLE";
SessionImpl::SessionImpl(const std::string& connectionString, std::size_t loginTimeout) : SessionImpl::SessionImpl(const std::string& connectionString, std::size_t loginTimeout) :
Poco::Data::AbstractSessionImpl<SessionImpl>(connectionString, loginTimeout), Poco::Data::AbstractSessionImpl<SessionImpl>(connectionString, loginTimeout),
_connector("MySQL"),
_handle(0), _handle(0),
_connected(false), _connected(false),
_inTransaction(false) _inTransaction(false)
@ -70,7 +71,7 @@ void SessionImpl::open(const std::string& connect)
poco_assert_dbg (!connectionString().empty()); poco_assert_dbg (!connectionString().empty());
_handle.init(); _handle.init();
unsigned int timeout = static_cast<unsigned int>(getLoginTimeout()); unsigned int timeout = static_cast<unsigned int>(getLoginTimeout());
_handle.options(MYSQL_OPT_CONNECT_TIMEOUT, timeout); _handle.options(MYSQL_OPT_CONNECT_TIMEOUT, timeout);
@ -88,7 +89,7 @@ void SessionImpl::open(const std::string& connect)
options["character-set"] = "utf8"; options["character-set"] = "utf8";
const std::string& connString = connectionString(); const std::string& connString = connectionString();
for (std::string::const_iterator start = connString.begin();;) for (std::string::const_iterator start = connString.begin();;)
{ {
std::string::const_iterator finish = std::find(start, connString.end(), ';'); std::string::const_iterator finish = std::find(start, connString.end(), ';');
std::string::const_iterator middle = std::find(start, finish, '='); std::string::const_iterator middle = std::find(start, finish, '=');
@ -101,7 +102,7 @@ void SessionImpl::open(const std::string& connect)
if ((finish == connString.end()) || (finish + 1 == connString.end())) break; if ((finish == connString.end()) || (finish + 1 == connString.end())) break;
start = finish + 1; start = finish + 1;
} }
if (options["user"].empty()) if (options["user"].empty())
throw MySQLException("create session: specify user name"); throw MySQLException("create session: specify user name");
@ -139,30 +140,30 @@ void SessionImpl::open(const std::string& connect)
_handle.options(MYSQL_SET_CHARSET_NAME, options["character-set"].c_str()); _handle.options(MYSQL_SET_CHARSET_NAME, options["character-set"].c_str());
// Real connect // Real connect
_handle.connect(options["host"].c_str(), _handle.connect(options["host"].c_str(),
options["user"].c_str(), options["user"].c_str(),
options["password"].c_str(), options["password"].c_str(),
db, db,
port); port);
addFeature("autoCommit", addFeature("autoCommit",
&SessionImpl::autoCommit, &SessionImpl::autoCommit,
&SessionImpl::isAutoCommit); &SessionImpl::isAutoCommit);
_connected = true; _connected = true;
} }
SessionImpl::~SessionImpl() SessionImpl::~SessionImpl()
{ {
close(); close();
} }
Poco::Data::StatementImpl::Ptr SessionImpl::createStatementImpl() Poco::Data::StatementImpl::Ptr SessionImpl::createStatementImpl()
{ {
return new MySQLStatementImpl(*this); return new MySQLStatementImpl(*this);
} }
void SessionImpl::begin() void SessionImpl::begin()
@ -182,7 +183,7 @@ void SessionImpl::commit()
_handle.commit(); _handle.commit();
_inTransaction = false; _inTransaction = false;
} }
void SessionImpl::rollback() void SessionImpl::rollback()
{ {
@ -254,7 +255,7 @@ bool SessionImpl::hasTransactionIsolation(Poco::UInt32 ti) const
Session::TRANSACTION_REPEATABLE_READ == ti || Session::TRANSACTION_REPEATABLE_READ == ti ||
Session::TRANSACTION_SERIALIZABLE == ti; Session::TRANSACTION_SERIALIZABLE == ti;
} }
void SessionImpl::close() void SessionImpl::close()
{ {