fix(SQLite): windows build (global var does not link) #3018

This commit is contained in:
Alex Fabijanic 2022-05-29 23:36:07 -05:00
parent 1a662a113c
commit d93a1885a1
6 changed files with 26 additions and 24 deletions

View File

@ -58,23 +58,5 @@
#endif
#endif
//
// SQLite Transaction type
//
namespace Poco {
namespace Data {
namespace SQLite {
extern const std::string TRANSACTION_TYPE_PROPERTY_KEY;
enum class TransactionType
{
DEFERRED,
EXCLUSIVE,
IMMEDIATE
};
} } } // namespace Poco::Data::SQLite
#endif // SQLite_SQLite_INCLUDED

View File

@ -19,6 +19,7 @@
#include "Poco/Data/SQLite/SQLite.h"
#include "Poco/Data/SQLite/Utility.h"
#include "Poco/Data/SQLite/Connector.h"
#include "Poco/Data/SQLite/Binder.h"
#include "Poco/Data/AbstractSessionImpl.h"
@ -119,6 +120,7 @@ public:
void setTransactionType(TransactionType transactionType);
/// Sets begin transaction type for the session.
TransactionType getTransactionType() const;
/// Returns begin transaction type.

View File

@ -43,6 +43,17 @@ class SQLite_API Utility
/// Various utility functions for SQLite.
{
public:
// SQLite Transaction type
static const std::string TRANSACTION_TYPE_PROPERTY_KEY;
enum class TransactionType
{
DEFERRED,
EXCLUSIVE,
IMMEDIATE
};
static const std::string SQLITE_DATE_FORMAT;
static const std::string SQLITE_TIME_FORMAT;
typedef std::map<std::string, MetaColumn::ColumnDataType> TypeMap;
@ -210,6 +221,9 @@ private:
};
using TransactionType = Utility::TransactionType;
//
// inlines
//

View File

@ -38,7 +38,7 @@ 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");
@ -61,7 +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);
addProperty(Utility::TRANSACTION_TYPE_PROPERTY_KEY, &SessionImpl::setTransactionType, &SessionImpl::getTransactionType);
}

View File

@ -37,6 +37,8 @@ namespace Data {
namespace SQLite {
const std::string Utility::TRANSACTION_TYPE_PROPERTY_KEY = "transactionType";
const int Utility::THREAD_MODE_SINGLE = SQLITE_CONFIG_SINGLETHREAD;
const int Utility::THREAD_MODE_MULTI = SQLITE_CONFIG_MULTITHREAD;
const int Utility::THREAD_MODE_SERIAL = SQLITE_CONFIG_SERIALIZED;

View File

@ -3205,7 +3205,8 @@ void SQLiteTest::testTransaction()
std::string result;
session.setTransactionIsolation(Session::TRANSACTION_READ_COMMITTED);
session.setProperty(Poco::Data::SQLite::TRANSACTION_TYPE_PROPERTY_KEY, Poco::Data::SQLite::TransactionType::EXCLUSIVE);
session.setProperty(Poco::Data::SQLite::Utility::TRANSACTION_TYPE_PROPERTY_KEY,
Poco::Data::SQLite::TransactionType::EXCLUSIVE);
{
Transaction trans(session);
assertTrue (trans.isActive());
@ -3227,7 +3228,8 @@ void SQLiteTest::testTransaction()
session << "SELECT count(*) FROM Person", into(count), now;
assertTrue (0 == count);
assertTrue (!session.isTransaction());
session.setProperty(Poco::Data::SQLite::TRANSACTION_TYPE_PROPERTY_KEY, Poco::Data::SQLite::TransactionType::IMMEDIATE);
session.setProperty(Utility::TRANSACTION_TYPE_PROPERTY_KEY,
Poco::Data::SQLite::TransactionType::IMMEDIATE);
{
Transaction trans(session);
session << "INSERT INTO Person VALUES (?,?,?,?)", use(lastNames), use(firstNames), use(addresses), use(ages), now;
@ -3442,8 +3444,8 @@ void SQLiteTest::testTransactionTypeProperty()
using namespace Poco::Data::SQLite;
Session tmp(Connector::KEY, "dummy.db");
tmp.setProperty(TRANSACTION_TYPE_PROPERTY_KEY, TransactionType::EXCLUSIVE);
Poco::Any property = tmp.getProperty(TRANSACTION_TYPE_PROPERTY_KEY);
tmp.setProperty(Utility::TRANSACTION_TYPE_PROPERTY_KEY, TransactionType::EXCLUSIVE);
Poco::Any property = tmp.getProperty(Utility::TRANSACTION_TYPE_PROPERTY_KEY);
TransactionType value = Poco::RefAnyCast<TransactionType>(property);
assertTrue(value == TransactionType::EXCLUSIVE);
} catch (Poco::Exception&) {}