feat(Data::AbstractSessionImpl): add autoCommit property and tests #4261 (#4262)

* fix(Data::AbstracSessionImpl): protect autocommit feature handlers #4261

* chore(CI): re-enable mysql

* MySQL SessionImpl: make sure autocommit mode is on when session is openend or reset.

* PostgreSQL SessionImpl: reuse autocommit flag of AbstractSessionImpl.

* Github workflow: re-activated linux-gcc-make-postgres

* Fixed indentation in ci.yml

* Fix for DataTest SQLExecutor: use connector

* Data::Session: when parser is not used and autocommit mode is off, assume any SQL statement begins a transaction.

* PostgreSQL: don't use SQL parser (it currently cannot handle placeholders).

* PostgreSQL: added test sessionTransactionNoAutoCommit

* PostgreSQL test suite: removed reference to generic SQLExecutor

* PostgreSQL: fixes for sessionTransactionNoAutoCommit.

* MySQL: added test sessionPoolAndUnicode (from #2801)

* Fixed #define in sql-parser

* Data generic testsuite: support numbered placeholders

* PostgreSQL test suite: added missing include directory to Makefile.

* Attempt to fix PostgreSQL Makefiles

* PostgreSQL testsuite: added include path to Makefile

* PostgreSQL testsuite: added PocoDataTest library to Makefile

* DataTest SQLExecutor::formatSQL: don't use string_view

* PostgreSQL test suite: delegated most tests to Poco::Data::Test

* Makefile: added dependencies on Data-Tests

* Weaken assumptions about async in generic transaction tests

* Makefile: added dependency for Prometheus samples

* Fix deadlock in DataTest SQLExecutor

* PostgreSQL tests SQLExecutor: cleanup

* feat(Data::AbstractSessionImpl): add autoCommit property and tests #4261

* Brought MySQL backend in line with _autoCommit flag of AbstractSessionImpl.

---------

Co-authored-by: Friedrich Wilckens <frwilckens@gmail.com>
Co-authored-by: Friedrich Wilckens <friedrich.wilckens@ingramcontent.com>
This commit is contained in:
Aleksandar Fabijanic
2023-12-22 09:27:34 +01:00
committed by GitHub
parent 80cde9e3e6
commit 86084cb7b2
27 changed files with 441 additions and 1340 deletions

View File

@@ -181,6 +181,13 @@ void SessionHandle::rollback()
}
void SessionHandle::autoCommit(bool val)
{
if (mysql_autocommit(_pHandle, val) != 0)
throw TransactionException("Setting autocommit mode failed.", _pHandle);
}
void SessionHandle::reset()
{
#if ((defined (MYSQL_VERSION_ID)) && (MYSQL_VERSION_ID >= 50700)) || ((defined (MARIADB_PACKAGE_VERSION_ID)) && (MARIADB_PACKAGE_VERSION_ID >= 30000))

View File

@@ -173,6 +173,9 @@ void SessionImpl::open(const std::string& connect)
&SessionImpl::autoCommit,
&SessionImpl::isAutoCommit);
// autocommit is initially on when a session is opened
AbstractSessionImpl::setAutoCommit("", true);
_connected = true;
}
@@ -215,18 +218,18 @@ void SessionImpl::rollback()
}
void SessionImpl::autoCommit(const std::string&, bool val)
void SessionImpl::autoCommit(const std::string& s, bool val)
{
StatementExecutor ex(_handle);
ex.prepare(Poco::format("SET autocommit=%d", val ? 1 : 0));
ex.execute();
if (val != getAutoCommit(s)) {
_handle.autoCommit(val);
AbstractSessionImpl::setAutoCommit(s, val);
}
}
bool SessionImpl::isAutoCommit(const std::string&) const
bool SessionImpl::isAutoCommit(const std::string& s) const
{
int ac = 0;
return 1 == getSetting("autocommit", ac);
return AbstractSessionImpl::getAutoCommit(s);
}
@@ -306,6 +309,7 @@ void SessionImpl::reset()
if (_connected && _reset)
{
_handle.reset();
AbstractSessionImpl::setAutoCommit("", true);
}
}