mirror of
https://github.com/pocoproject/poco.git
synced 2025-03-28 09:32:52 +01:00
workaround for GH #578
This commit is contained in:
parent
c85ad9f73d
commit
c49a954a8d
@ -28,8 +28,11 @@
|
|||||||
#include "Poco/SharedPtr.h"
|
#include "Poco/SharedPtr.h"
|
||||||
|
|
||||||
|
|
||||||
struct sqlite3;
|
extern "C"
|
||||||
struct sqlite3_stmt;
|
{
|
||||||
|
typedef struct sqlite3 sqlite3;
|
||||||
|
typedef struct sqlite3_stmt sqlite3_stmt;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
namespace Poco {
|
namespace Poco {
|
||||||
|
@ -25,16 +25,16 @@
|
|||||||
#include "Poco/Data/SQLite/Binder.h"
|
#include "Poco/Data/SQLite/Binder.h"
|
||||||
#include "Poco/Data/AbstractSessionImpl.h"
|
#include "Poco/Data/AbstractSessionImpl.h"
|
||||||
#include "Poco/SharedPtr.h"
|
#include "Poco/SharedPtr.h"
|
||||||
|
#include "Poco/Mutex.h"
|
||||||
|
|
||||||
|
|
||||||
struct sqlite3;
|
extern "C"
|
||||||
struct sqlite3_stmt;
|
{
|
||||||
|
typedef struct sqlite3 sqlite3;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
namespace Poco {
|
namespace Poco {
|
||||||
|
|
||||||
class Mutex;
|
|
||||||
|
|
||||||
namespace Data {
|
namespace Data {
|
||||||
namespace SQLite {
|
namespace SQLite {
|
||||||
|
|
||||||
@ -127,7 +127,8 @@ private:
|
|||||||
bool _connected;
|
bool _connected;
|
||||||
bool _isTransaction;
|
bool _isTransaction;
|
||||||
int _timeout;
|
int _timeout;
|
||||||
Mutex _mutex;
|
Poco::Mutex _mutex;
|
||||||
|
|
||||||
static const std::string DEFERRED_BEGIN_TRANSACTION;
|
static const std::string DEFERRED_BEGIN_TRANSACTION;
|
||||||
static const std::string COMMIT_TRANSACTION;
|
static const std::string COMMIT_TRANSACTION;
|
||||||
static const std::string ABORT_TRANSACTION;
|
static const std::string ABORT_TRANSACTION;
|
||||||
|
@ -28,8 +28,11 @@
|
|||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
|
|
||||||
struct sqlite3;
|
extern "C"
|
||||||
struct sqlite3_stmt;
|
{
|
||||||
|
typedef struct sqlite3 sqlite3;
|
||||||
|
typedef struct sqlite3_stmt sqlite3_stmt;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
namespace Poco {
|
namespace Poco {
|
||||||
@ -200,13 +203,6 @@ private:
|
|||||||
//
|
//
|
||||||
// inlines
|
// inlines
|
||||||
//
|
//
|
||||||
|
|
||||||
inline sqlite3* Utility::dbHandle(const Session& session)
|
|
||||||
{
|
|
||||||
return reinterpret_cast<sqlite3*>(AnyCast<void*>(session.getProperty("handle")));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
inline std::string Utility::lastError(const Session& session)
|
inline std::string Utility::lastError(const Session& session)
|
||||||
{
|
{
|
||||||
poco_assert_dbg ((0 == icompare(session.connector(), 0, 6, "sqlite")));
|
poco_assert_dbg ((0 == icompare(session.connector(), 0, 6, "sqlite")));
|
||||||
|
@ -24,7 +24,11 @@
|
|||||||
#include "Poco/String.h"
|
#include "Poco/String.h"
|
||||||
#include "Poco/Mutex.h"
|
#include "Poco/Mutex.h"
|
||||||
#include "Poco/Data/DataException.h"
|
#include "Poco/Data/DataException.h"
|
||||||
|
#if defined(POCO_UNBUNDLED)
|
||||||
|
#include <sqlite3.h>
|
||||||
|
#else
|
||||||
#include "sqlite3.h"
|
#include "sqlite3.h"
|
||||||
|
#endif
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
|
|
||||||
|
|
||||||
@ -52,7 +56,7 @@ SessionImpl::SessionImpl(const std::string& fileName, std::size_t loginTimeout):
|
|||||||
{
|
{
|
||||||
open();
|
open();
|
||||||
setConnectionTimeout(CONNECTION_TIMEOUT_DEFAULT);
|
setConnectionTimeout(CONNECTION_TIMEOUT_DEFAULT);
|
||||||
setProperty("handle", static_cast<void*>(_pDB));
|
setProperty("handle", _pDB);
|
||||||
addFeature("autoCommit",
|
addFeature("autoCommit",
|
||||||
&SessionImpl::autoCommit,
|
&SessionImpl::autoCommit,
|
||||||
&SessionImpl::isAutoCommit);
|
&SessionImpl::isAutoCommit);
|
||||||
@ -255,4 +259,14 @@ bool SessionImpl::isAutoCommit(const std::string&)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// NOTE: Utility::dbHandle() has been moved here from Utility.cpp
|
||||||
|
// as a workaround for a failing AnyCast with Clang.
|
||||||
|
// See <https://github.com/pocoproject/poco/issues/578>
|
||||||
|
// for a discussion.
|
||||||
|
sqlite3* Utility::dbHandle(const Session& session)
|
||||||
|
{
|
||||||
|
return AnyCast<sqlite3*>(session.getProperty("handle"));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
} } } // namespace Poco::Data::SQLite
|
} } } // namespace Poco::Data::SQLite
|
||||||
|
@ -63,8 +63,6 @@ Poco::Mutex Utility::_mutex;
|
|||||||
|
|
||||||
Utility::Utility()
|
Utility::Utility()
|
||||||
{
|
{
|
||||||
Poco::Mutex::ScopedLock l(_mutex);
|
|
||||||
|
|
||||||
if (_types.empty())
|
if (_types.empty())
|
||||||
{
|
{
|
||||||
_types.insert(TypeMap::value_type("", MetaColumn::FDT_STRING));
|
_types.insert(TypeMap::value_type("", MetaColumn::FDT_STRING));
|
||||||
@ -135,7 +133,11 @@ MetaColumn::ColumnDataType Utility::getColumnType(sqlite3_stmt* pStmt, std::size
|
|||||||
{
|
{
|
||||||
poco_assert_dbg (pStmt);
|
poco_assert_dbg (pStmt);
|
||||||
|
|
||||||
static Utility u;
|
// Ensure statics are initialized
|
||||||
|
{
|
||||||
|
Poco::Mutex::ScopedLock lock(_mutex);
|
||||||
|
static Utility u;
|
||||||
|
}
|
||||||
|
|
||||||
const char* pc = sqlite3_column_decltype(pStmt, (int) pos);
|
const char* pc = sqlite3_column_decltype(pStmt, (int) pos);
|
||||||
std::string sqliteType = pc ? pc : "";
|
std::string sqliteType = pc ? pc : "";
|
||||||
@ -314,4 +316,10 @@ void* Utility::eventHookRegister(sqlite3* pDB, RollbackCallbackType callbackFn,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// NOTE: Utility::dbHandle() has been moved to SessionImpl.cpp,
|
||||||
|
// as a workaround for a failing AnyCast with Clang.
|
||||||
|
// See <https://github.com/pocoproject/poco/issues/578>
|
||||||
|
// for a discussion.
|
||||||
|
|
||||||
|
|
||||||
} } } // namespace Poco::Data::SQLite
|
} } } // namespace Poco::Data::SQLite
|
||||||
|
Loading…
x
Reference in New Issue
Block a user