mirror of
https://github.com/Telecominfraproject/wlan-cloud-lib-poco.git
synced 2025-11-07 22:13:15 +00:00
Added support for SQLite transaction types using Session property (#3018)
This commit is contained in:
@@ -38,8 +38,10 @@ namespace Poco {
|
||||
namespace Data {
|
||||
namespace SQLite {
|
||||
|
||||
|
||||
const std::string TRANSACTION_TYPE_PROPERTY_KEY = "transactionType";
|
||||
const std::string SessionImpl::DEFERRED_BEGIN_TRANSACTION("BEGIN DEFERRED");
|
||||
const std::string SessionImpl::EXCLUSIVE_BEGIN_TRANSACTION("BEGIN EXCLUSIVE");
|
||||
const std::string SessionImpl::IMMEDIATE_BEGIN_TRANSACTION("BEGIN IMMEDIATE");
|
||||
const std::string SessionImpl::COMMIT_TRANSACTION("COMMIT");
|
||||
const std::string SessionImpl::ABORT_TRANSACTION("ROLLBACK");
|
||||
|
||||
@@ -49,7 +51,8 @@ SessionImpl::SessionImpl(const std::string& fileName, std::size_t loginTimeout):
|
||||
_connector(Connector::KEY),
|
||||
_pDB(0),
|
||||
_connected(false),
|
||||
_isTransaction(false)
|
||||
_isTransaction(false),
|
||||
_transactionType(TransactionType::deferred)
|
||||
{
|
||||
open();
|
||||
setConnectionTimeout(loginTimeout);
|
||||
@@ -58,6 +61,7 @@ SessionImpl::SessionImpl(const std::string& fileName, std::size_t loginTimeout):
|
||||
&SessionImpl::autoCommit,
|
||||
&SessionImpl::isAutoCommit);
|
||||
addProperty("connectionTimeout", &SessionImpl::setConnectionTimeout, &SessionImpl::getConnectionTimeout);
|
||||
addProperty(TRANSACTION_TYPE_PROPERTY_KEY, &SessionImpl::setTransactionType, &SessionImpl::getTransactionType);
|
||||
}
|
||||
|
||||
|
||||
@@ -85,7 +89,18 @@ void SessionImpl::begin()
|
||||
{
|
||||
Poco::Mutex::ScopedLock l(_mutex);
|
||||
SQLiteStatementImpl tmp(*this, _pDB);
|
||||
tmp.add(DEFERRED_BEGIN_TRANSACTION);
|
||||
switch (_transactionType)
|
||||
{
|
||||
case TransactionType::deferred:
|
||||
tmp.add(DEFERRED_BEGIN_TRANSACTION);
|
||||
break;
|
||||
case TransactionType::exclusive:
|
||||
tmp.add(EXCLUSIVE_BEGIN_TRANSACTION);
|
||||
break;
|
||||
case TransactionType::immediate:
|
||||
tmp.add(IMMEDIATE_BEGIN_TRANSACTION);
|
||||
break;
|
||||
}
|
||||
tmp.execute();
|
||||
_isTransaction = true;
|
||||
}
|
||||
@@ -223,6 +238,20 @@ Poco::Any SessionImpl::getConnectionTimeout(const std::string& prop) const
|
||||
return Poco::Any(_timeout/1000);
|
||||
}
|
||||
|
||||
void SessionImpl::setTransactionType(TransactionType transactionType)
|
||||
{
|
||||
_transactionType = transactionType;
|
||||
}
|
||||
|
||||
void SessionImpl::setTransactionType(const std::string &prop, const Poco::Any& value)
|
||||
{
|
||||
setTransactionType(Poco::RefAnyCast<TransactionType>(value));
|
||||
}
|
||||
|
||||
Poco::Any SessionImpl::getTransactionType(const std::string& prop) const
|
||||
{
|
||||
return Poco::Any(_transactionType);
|
||||
}
|
||||
|
||||
void SessionImpl::autoCommit(const std::string&, bool)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user