mirror of
https://github.com/pocoproject/poco.git
synced 2025-04-02 17:50:53 +02:00
DateTime support & some test tidying
This commit is contained in:
parent
2dbfb583c9
commit
3b66a355c2
@ -222,6 +222,42 @@ inline Poco::Any SessionImpl::dataTypeInfo(const std::string& rName)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline void SessionImpl::setEnforceCapability(const std::string&, bool val)
|
||||||
|
{
|
||||||
|
_enforceCapability = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline bool SessionImpl::getEnforceCapability(const std::string&)
|
||||||
|
{
|
||||||
|
return _enforceCapability;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline void SessionImpl::autoBind(const std::string&, bool val)
|
||||||
|
{
|
||||||
|
_autoBind = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline bool SessionImpl::isAutoBind(const std::string& name)
|
||||||
|
{
|
||||||
|
return _autoBind;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline void SessionImpl::autoExtract(const std::string&, bool val)
|
||||||
|
{
|
||||||
|
_autoExtract = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline bool SessionImpl::isAutoExtract(const std::string& name)
|
||||||
|
{
|
||||||
|
return _autoExtract;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
} } } // namespace Poco::Data::ODBC
|
} } } // namespace Poco::Data::ODBC
|
||||||
|
|
||||||
|
|
||||||
|
@ -104,6 +104,7 @@ void ODBCColumn::init()
|
|||||||
case SQL_CHAR:
|
case SQL_CHAR:
|
||||||
case SQL_VARCHAR:
|
case SQL_VARCHAR:
|
||||||
case SQL_LONGVARCHAR:
|
case SQL_LONGVARCHAR:
|
||||||
|
case -9:// SQL Server NVARCHAR
|
||||||
setType(MetaColumn::FDT_STRING); break;
|
setType(MetaColumn::FDT_STRING); break;
|
||||||
case SQL_TINYINT:
|
case SQL_TINYINT:
|
||||||
setType(MetaColumn::FDT_INT8); break;
|
setType(MetaColumn::FDT_INT8); break;
|
||||||
|
@ -203,8 +203,12 @@ void SessionImpl::close()
|
|||||||
{
|
{
|
||||||
if (!isConnected()) return;
|
if (!isConnected()) return;
|
||||||
|
|
||||||
commit();
|
try
|
||||||
checkError(SQLDisconnect(_db));
|
{
|
||||||
|
commit();
|
||||||
|
}catch (ConnectionException&) { }
|
||||||
|
|
||||||
|
SQLDisconnect(_db);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -265,40 +269,4 @@ int SessionImpl::maxStatementLength()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SessionImpl::setEnforceCapability(const std::string&, bool val)
|
|
||||||
{
|
|
||||||
_enforceCapability = val;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool SessionImpl::getEnforceCapability(const std::string&)
|
|
||||||
{
|
|
||||||
return _enforceCapability;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void SessionImpl::autoBind(const std::string&, bool val)
|
|
||||||
{
|
|
||||||
_autoBind = val;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool SessionImpl::isAutoBind(const std::string& name)
|
|
||||||
{
|
|
||||||
return _autoBind;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void SessionImpl::autoExtract(const std::string&, bool val)
|
|
||||||
{
|
|
||||||
_autoExtract = val;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool SessionImpl::isAutoExtract(const std::string& name)
|
|
||||||
{
|
|
||||||
return _autoExtract;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
} } } // namespace Poco::Data::ODBC
|
} } } // namespace Poco::Data::ODBC
|
||||||
|
@ -49,28 +49,28 @@
|
|||||||
|
|
||||||
|
|
||||||
using namespace Poco::Data;
|
using namespace Poco::Data;
|
||||||
using Poco::Data::ODBC::Utility;
|
using ODBC::Utility;
|
||||||
using Poco::Data::ODBC::ConnectionException;
|
using ODBC::ConnectionException;
|
||||||
using Poco::Data::ODBC::StatementException;
|
using ODBC::StatementException;
|
||||||
using Poco::Data::ODBC::StatementDiagnostics;
|
using ODBC::StatementDiagnostics;
|
||||||
using Poco::format;
|
using Poco::format;
|
||||||
using Poco::NotFoundException;
|
using Poco::NotFoundException;
|
||||||
|
|
||||||
|
|
||||||
Poco::SharedPtr<Poco::Data::Session> ODBCAccessTest::_pSession = 0;
|
Session* ODBCAccessTest::_pSession = 0;
|
||||||
std::string ODBCAccessTest::_dbConnString;
|
std::string ODBCAccessTest::_dbConnString;
|
||||||
Poco::Data::ODBC::Utility::DriverMap ODBCAccessTest::_drivers;
|
ODBC::Utility::DriverMap ODBCAccessTest::_drivers;
|
||||||
|
|
||||||
|
|
||||||
ODBCAccessTest::ODBCAccessTest(const std::string& name):
|
ODBCAccessTest::ODBCAccessTest(const std::string& name):
|
||||||
CppUnit::TestCase(name)
|
CppUnit::TestCase(name)
|
||||||
{
|
{
|
||||||
|
ODBC::Connector::registerConnector();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ODBCAccessTest::~ODBCAccessTest()
|
ODBCAccessTest::~ODBCAccessTest()
|
||||||
{
|
{
|
||||||
ODBC::Connector::unregisterConnector();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -72,7 +72,7 @@ private:
|
|||||||
|
|
||||||
static Poco::Data::ODBC::Utility::DriverMap _drivers;
|
static Poco::Data::ODBC::Utility::DriverMap _drivers;
|
||||||
static std::string _dbConnString;
|
static std::string _dbConnString;
|
||||||
static Poco::SharedPtr<Poco::Data::Session> _pSession;
|
static Poco::Data::Session* _pSession;
|
||||||
bool _owner;
|
bool _owner;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -50,20 +50,21 @@
|
|||||||
|
|
||||||
|
|
||||||
using namespace Poco::Data;
|
using namespace Poco::Data;
|
||||||
using Poco::Data::ODBC::Utility;
|
using ODBC::Utility;
|
||||||
using Poco::Data::ODBC::ConnectionException;
|
using ODBC::ConnectionException;
|
||||||
using Poco::Data::ODBC::StatementException;
|
using ODBC::StatementException;
|
||||||
using Poco::Data::ODBC::StatementDiagnostics;
|
using ODBC::StatementDiagnostics;
|
||||||
using Poco::format;
|
using Poco::format;
|
||||||
using Poco::Tuple;
|
using Poco::Tuple;
|
||||||
using Poco::NotFoundException;
|
using Poco::NotFoundException;
|
||||||
|
|
||||||
|
|
||||||
const bool ODBCDB2Test::bindValues[8] = {true, true, true, false, false, true, false, false};
|
ODBCDB2Test::SessionPtr ODBCDB2Test::_pSession = 0;
|
||||||
Poco::SharedPtr<Poco::Data::Session> ODBCDB2Test::_pSession = 0;
|
ODBCDB2Test::ExecPtr ODBCDB2Test::_pExecutor = 0;
|
||||||
Poco::SharedPtr<SQLExecutor> ODBCDB2Test::_pExecutor = 0;
|
std::string ODBCDB2Test::_dbConnString;
|
||||||
std::string ODBCDB2Test::_dbConnString;
|
ODBCDB2Test::Drivers ODBCDB2Test::_drivers;
|
||||||
Poco::Data::ODBC::Utility::DriverMap ODBCDB2Test::_drivers;
|
const bool ODBCDB2Test::bindValues[8] =
|
||||||
|
{true, true, true, false, false, true, false, false};
|
||||||
|
|
||||||
|
|
||||||
ODBCDB2Test::ODBCDB2Test(const std::string& name):
|
ODBCDB2Test::ODBCDB2Test(const std::string& name):
|
||||||
|
@ -131,6 +131,10 @@ public:
|
|||||||
static CppUnit::Test* suite();
|
static CppUnit::Test* suite();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
typedef Poco::Data::ODBC::Utility::DriverMap Drivers;
|
||||||
|
typedef Poco::SharedPtr<Poco::Data::Session> SessionPtr;
|
||||||
|
typedef Poco::SharedPtr<SQLExecutor> ExecPtr;
|
||||||
|
|
||||||
void dropObject(const std::string& type, const std::string& tableName);
|
void dropObject(const std::string& type, const std::string& tableName);
|
||||||
void recreatePersonTable();
|
void recreatePersonTable();
|
||||||
void recreatePersonBLOBTable();
|
void recreatePersonBLOBTable();
|
||||||
@ -145,11 +149,11 @@ private:
|
|||||||
static bool init(const std::string& driver, const std::string& dsn);
|
static bool init(const std::string& driver, const std::string& dsn);
|
||||||
static bool canConnect(const std::string& driver, const std::string& dsn);
|
static bool canConnect(const std::string& driver, const std::string& dsn);
|
||||||
|
|
||||||
static Poco::Data::ODBC::Utility::DriverMap _drivers;
|
static Drivers _drivers;
|
||||||
static std::string _dbConnString;
|
static std::string _dbConnString;
|
||||||
static Poco::SharedPtr<Poco::Data::Session> _pSession;
|
static SessionPtr _pSession;
|
||||||
static Poco::SharedPtr<SQLExecutor> _pExecutor;
|
static ExecPtr _pExecutor;
|
||||||
static const bool bindValues[8];
|
static const bool bindValues[8];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -50,20 +50,21 @@
|
|||||||
|
|
||||||
|
|
||||||
using namespace Poco::Data;
|
using namespace Poco::Data;
|
||||||
using Poco::Data::ODBC::Utility;
|
using ODBC::Utility;
|
||||||
using Poco::Data::ODBC::ConnectionException;
|
using ODBC::ConnectionException;
|
||||||
using Poco::Data::ODBC::StatementException;
|
using ODBC::StatementException;
|
||||||
using Poco::Data::ODBC::StatementDiagnostics;
|
using ODBC::StatementDiagnostics;
|
||||||
using Poco::format;
|
using Poco::format;
|
||||||
using Poco::Tuple;
|
using Poco::Tuple;
|
||||||
using Poco::NotFoundException;
|
using Poco::NotFoundException;
|
||||||
|
|
||||||
|
|
||||||
const bool ODBCMySQLTest::bindValues[8] = {true, true, true, false, false, true, false, false};
|
ODBCMySQLTest::SessionPtr ODBCMySQLTest::_pSession = 0;
|
||||||
Poco::SharedPtr<Poco::Data::Session> ODBCMySQLTest::_pSession = 0;
|
ODBCMySQLTest::ExecPtr ODBCMySQLTest::_pExecutor = 0;
|
||||||
Poco::SharedPtr<SQLExecutor> ODBCMySQLTest::_pExecutor = 0;
|
std::string ODBCMySQLTest::_dbConnString;
|
||||||
std::string ODBCMySQLTest::_dbConnString;
|
ODBCMySQLTest::Drivers ODBCMySQLTest::_drivers;
|
||||||
Poco::Data::ODBC::Utility::DriverMap ODBCMySQLTest::_drivers;
|
const bool ODBCMySQLTest::bindValues[8] =
|
||||||
|
{true, true, true, false, false, true, false, false};
|
||||||
|
|
||||||
|
|
||||||
ODBCMySQLTest::ODBCMySQLTest(const std::string& name):
|
ODBCMySQLTest::ODBCMySQLTest(const std::string& name):
|
||||||
|
@ -133,6 +133,10 @@ public:
|
|||||||
static CppUnit::Test* suite();
|
static CppUnit::Test* suite();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
typedef Poco::Data::ODBC::Utility::DriverMap Drivers;
|
||||||
|
typedef Poco::SharedPtr<Poco::Data::Session> SessionPtr;
|
||||||
|
typedef Poco::SharedPtr<SQLExecutor> ExecPtr;
|
||||||
|
|
||||||
void dropObject(const std::string& type, const std::string& name);
|
void dropObject(const std::string& type, const std::string& name);
|
||||||
void recreatePersonTable();
|
void recreatePersonTable();
|
||||||
void recreatePersonBLOBTable();
|
void recreatePersonBLOBTable();
|
||||||
@ -147,11 +151,11 @@ private:
|
|||||||
static bool init(const std::string& driver, const std::string& dsn);
|
static bool init(const std::string& driver, const std::string& dsn);
|
||||||
static bool canConnect(const std::string& driver, const std::string& dsn);
|
static bool canConnect(const std::string& driver, const std::string& dsn);
|
||||||
|
|
||||||
static Poco::Data::ODBC::Utility::DriverMap _drivers;
|
static Drivers _drivers;
|
||||||
static std::string _dbConnString;
|
static std::string _dbConnString;
|
||||||
static Poco::SharedPtr<Poco::Data::Session> _pSession;
|
static SessionPtr _pSession;
|
||||||
static Poco::SharedPtr<SQLExecutor> _pExecutor;
|
static ExecPtr _pExecutor;
|
||||||
static const bool bindValues[8];
|
static const bool bindValues[8];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -51,21 +51,22 @@
|
|||||||
|
|
||||||
|
|
||||||
using namespace Poco::Data;
|
using namespace Poco::Data;
|
||||||
using Poco::Data::ODBC::Utility;
|
using ODBC::Utility;
|
||||||
using Poco::Data::ODBC::ConnectionException;
|
using ODBC::ConnectionException;
|
||||||
using Poco::Data::ODBC::StatementException;
|
using ODBC::StatementException;
|
||||||
using Poco::Data::ODBC::StatementDiagnostics;
|
using ODBC::StatementDiagnostics;
|
||||||
using Poco::format;
|
using Poco::format;
|
||||||
using Poco::Tuple;
|
using Poco::Tuple;
|
||||||
using Poco::DateTime;
|
using Poco::DateTime;
|
||||||
using Poco::NotFoundException;
|
using Poco::NotFoundException;
|
||||||
|
|
||||||
|
|
||||||
const bool ODBCOracleTest::bindValues[8] = {true, true, true, false, false, true, false, false};
|
ODBCOracleTest::SessionPtr ODBCOracleTest::_pSession = 0;
|
||||||
Poco::SharedPtr<Poco::Data::Session> ODBCOracleTest::_pSession = 0;
|
ODBCOracleTest::ExecPtr ODBCOracleTest::_pExecutor = 0;
|
||||||
Poco::SharedPtr<SQLExecutor> ODBCOracleTest::_pExecutor = 0;
|
std::string ODBCOracleTest::_dbConnString;
|
||||||
std::string ODBCOracleTest::_dbConnString;
|
ODBC::Utility::DriverMap ODBCOracleTest::_drivers;
|
||||||
Poco::Data::ODBC::Utility::DriverMap ODBCOracleTest::_drivers;
|
const bool ODBCOracleTest::bindValues[8] =
|
||||||
|
{true, true, true, false, false, true, false, false};
|
||||||
|
|
||||||
|
|
||||||
ODBCOracleTest::ODBCOracleTest(const std::string& name):
|
ODBCOracleTest::ODBCOracleTest(const std::string& name):
|
||||||
@ -79,10 +80,8 @@ ODBCOracleTest::~ODBCOracleTest()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ODBCOracleTest::testBareboneODBC()
|
void ODBCOracleTest::testBarebone()
|
||||||
{
|
{
|
||||||
if (!_pSession) fail ("Test not available.");
|
|
||||||
|
|
||||||
std::string tableCreateString = "CREATE TABLE Test "
|
std::string tableCreateString = "CREATE TABLE Test "
|
||||||
"(First VARCHAR(30),"
|
"(First VARCHAR(30),"
|
||||||
"Second VARCHAR(30),"
|
"Second VARCHAR(30),"
|
||||||
@ -1297,6 +1296,15 @@ bool ODBCOracleTest::init(const std::string& driver, const std::string& dsn)
|
|||||||
|
|
||||||
_pExecutor = new SQLExecutor(driver + " SQL Executor", _pSession);
|
_pExecutor = new SQLExecutor(driver + " SQL Executor", _pSession);
|
||||||
|
|
||||||
|
// Workaround:
|
||||||
|
//
|
||||||
|
// Barebone ODBC test is called initially for Oracle only.
|
||||||
|
// The test framework does not exit cleanly if
|
||||||
|
// Oracle tests are enabled (i.e. Oracle driver is found)
|
||||||
|
// but no tests are executed.
|
||||||
|
// The exact reason for this behavior is unknown at this time.
|
||||||
|
testBarebone();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -131,6 +131,12 @@ public:
|
|||||||
static CppUnit::Test* suite();
|
static CppUnit::Test* suite();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
typedef Poco::Data::ODBC::Utility::DriverMap Drivers;
|
||||||
|
typedef Poco::SharedPtr<Poco::Data::Session> SessionPtr;
|
||||||
|
typedef Poco::SharedPtr<SQLExecutor> ExecPtr;
|
||||||
|
|
||||||
|
static void testBarebone();
|
||||||
|
|
||||||
void dropObject(const std::string& type, const std::string& name);
|
void dropObject(const std::string& type, const std::string& name);
|
||||||
void recreatePersonTable();
|
void recreatePersonTable();
|
||||||
void recreatePersonBLOBTable();
|
void recreatePersonBLOBTable();
|
||||||
@ -145,12 +151,18 @@ private:
|
|||||||
static bool init(const std::string& driver, const std::string& dsn);
|
static bool init(const std::string& driver, const std::string& dsn);
|
||||||
static bool canConnect(const std::string& driver, const std::string& dsn);
|
static bool canConnect(const std::string& driver, const std::string& dsn);
|
||||||
|
|
||||||
static Poco::Data::ODBC::Utility::DriverMap _drivers;
|
static Drivers _drivers;
|
||||||
static std::string _dbConnString;
|
static std::string _dbConnString;
|
||||||
static Poco::SharedPtr<Poco::Data::Session> _pSession;
|
static SessionPtr _pSession;
|
||||||
static Poco::SharedPtr<SQLExecutor> _pExecutor;
|
static ExecPtr _pExecutor;
|
||||||
static const bool bindValues[8];
|
static const bool bindValues[8];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
inline void ODBCOracleTest::testBareboneODBC()
|
||||||
|
{
|
||||||
|
return testBarebone();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#endif // ODBCOracleTest_INCLUDED
|
#endif // ODBCOracleTest_INCLUDED
|
||||||
|
@ -51,22 +51,25 @@
|
|||||||
|
|
||||||
|
|
||||||
using namespace Poco::Data;
|
using namespace Poco::Data;
|
||||||
using Poco::Data::ODBC::Utility;
|
using ODBC::Utility;
|
||||||
using Poco::Data::ODBC::ODBCException;
|
using ODBC::ODBCException;
|
||||||
using Poco::Data::ODBC::ConnectionException;
|
using ODBC::ConnectionException;
|
||||||
using Poco::Data::ODBC::StatementException;
|
using ODBC::StatementException;
|
||||||
using Poco::Data::ODBC::StatementDiagnostics;
|
using ODBC::StatementDiagnostics;
|
||||||
using Poco::format;
|
using Poco::format;
|
||||||
using Poco::Tuple;
|
using Poco::Tuple;
|
||||||
using Poco::DateTime;
|
using Poco::DateTime;
|
||||||
using Poco::NotFoundException;
|
using Poco::NotFoundException;
|
||||||
|
|
||||||
|
|
||||||
const bool ODBCPostgreSQLTest::bindValues[8] = {true, true, true, false, false, true, false, false};
|
ODBCPostgreSQLTest::SessionPtr ODBCPostgreSQLTest::_pSession = 0;
|
||||||
Poco::SharedPtr<Poco::Data::Session> ODBCPostgreSQLTest::_pSession = 0;
|
ODBCPostgreSQLTest::ExecPtr ODBCPostgreSQLTest::_pExecutor = 0;
|
||||||
Poco::SharedPtr<SQLExecutor> ODBCPostgreSQLTest::_pExecutor = 0;
|
std::string ODBCPostgreSQLTest::_dbConnString;
|
||||||
std::string ODBCPostgreSQLTest::_dbConnString;
|
ODBCPostgreSQLTest::Drivers ODBCPostgreSQLTest::_drivers;
|
||||||
Poco::Data::ODBC::Utility::DriverMap ODBCPostgreSQLTest::_drivers;
|
const bool ODBCPostgreSQLTest::bindValues[8] =
|
||||||
|
{true, true, true, false, false, true, false, false};
|
||||||
|
|
||||||
|
|
||||||
#ifdef POCO_OS_FAMILY_WINDOWS
|
#ifdef POCO_OS_FAMILY_WINDOWS
|
||||||
const std::string ODBCPostgreSQLTest::libDir = "C:\\\\Program Files\\\\PostgreSQL\\\\8.2\\\\lib\\\\";
|
const std::string ODBCPostgreSQLTest::libDir = "C:\\\\Program Files\\\\PostgreSQL\\\\8.2\\\\lib\\\\";
|
||||||
#else
|
#else
|
||||||
@ -1222,7 +1225,7 @@ bool ODBCPostgreSQLTest::init(const std::string& driver, const std::string& dsn)
|
|||||||
CppUnit::Test* ODBCPostgreSQLTest::suite()
|
CppUnit::Test* ODBCPostgreSQLTest::suite()
|
||||||
{
|
{
|
||||||
if (init("PostgreSQL ANSI", "PocoDataPostgreSQLTest"))
|
if (init("PostgreSQL ANSI", "PocoDataPostgreSQLTest"))
|
||||||
//if (init("Mammoth ODBCng Beta", "Mammoth ODBCng beta"))
|
//if (init("Mammoth ODBCng Beta", "Mammoth ODBCng Beta"))
|
||||||
{
|
{
|
||||||
CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("ODBCPostgreSQLTest");
|
CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("ODBCPostgreSQLTest");
|
||||||
|
|
||||||
|
@ -132,6 +132,10 @@ public:
|
|||||||
static CppUnit::Test* suite();
|
static CppUnit::Test* suite();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
typedef Poco::Data::ODBC::Utility::DriverMap Drivers;
|
||||||
|
typedef Poco::SharedPtr<Poco::Data::Session> SessionPtr;
|
||||||
|
typedef Poco::SharedPtr<SQLExecutor> ExecPtr;
|
||||||
|
|
||||||
void dropObject(const std::string& type, const std::string& name);
|
void dropObject(const std::string& type, const std::string& name);
|
||||||
void recreatePersonTable();
|
void recreatePersonTable();
|
||||||
void recreatePersonBLOBTable();
|
void recreatePersonBLOBTable();
|
||||||
@ -154,11 +158,12 @@ private:
|
|||||||
/// modify the function and recompile.
|
/// modify the function and recompile.
|
||||||
/// Alternative is direct database configuration for PL/pgSQL usage.
|
/// Alternative is direct database configuration for PL/pgSQL usage.
|
||||||
|
|
||||||
static Poco::Data::ODBC::Utility::DriverMap _drivers;
|
static Drivers _drivers;
|
||||||
static std::string _dbConnString;
|
static std::string _dbConnString;
|
||||||
static Poco::SharedPtr<Poco::Data::Session> _pSession;
|
static SessionPtr _pSession;
|
||||||
static Poco::SharedPtr<SQLExecutor> _pExecutor;
|
static ExecPtr _pExecutor;
|
||||||
static const bool bindValues[8];
|
static const bool bindValues[8];
|
||||||
|
|
||||||
static const std::string libDir;
|
static const std::string libDir;
|
||||||
/// Varible determining the location of the library directory
|
/// Varible determining the location of the library directory
|
||||||
/// on the database installation system.
|
/// on the database installation system.
|
||||||
|
@ -51,21 +51,22 @@
|
|||||||
|
|
||||||
|
|
||||||
using namespace Poco::Data;
|
using namespace Poco::Data;
|
||||||
using Poco::Data::ODBC::Utility;
|
using ODBC::Utility;
|
||||||
using Poco::Data::ODBC::ConnectionException;
|
using ODBC::ConnectionException;
|
||||||
using Poco::Data::ODBC::StatementException;
|
using ODBC::StatementException;
|
||||||
using Poco::Data::ODBC::StatementDiagnostics;
|
using ODBC::StatementDiagnostics;
|
||||||
using Poco::format;
|
using Poco::format;
|
||||||
using Poco::Tuple;
|
using Poco::Tuple;
|
||||||
using Poco::DateTime;
|
using Poco::DateTime;
|
||||||
using Poco::NotFoundException;
|
using Poco::NotFoundException;
|
||||||
|
|
||||||
|
|
||||||
const bool ODBCSQLServerTest::bindValues[8] = {true, true, true, false, false, true, false, false};
|
ODBCSQLServerTest::SessionPtr ODBCSQLServerTest::_pSession = 0;
|
||||||
Poco::SharedPtr<Poco::Data::Session> ODBCSQLServerTest::_pSession = 0;
|
ODBCSQLServerTest::ExecPtr ODBCSQLServerTest::_pExecutor = 0;
|
||||||
Poco::SharedPtr<SQLExecutor> ODBCSQLServerTest::_pExecutor = 0;
|
std::string ODBCSQLServerTest::_dbConnString;
|
||||||
std::string ODBCSQLServerTest::_dbConnString;
|
ODBCSQLServerTest::Drivers ODBCSQLServerTest::_drivers;
|
||||||
Poco::Data::ODBC::Utility::DriverMap ODBCSQLServerTest::_drivers;
|
const bool ODBCSQLServerTest::bindValues[8] =
|
||||||
|
{true, true, true, false, false, true, false, false};
|
||||||
|
|
||||||
|
|
||||||
ODBCSQLServerTest::ODBCSQLServerTest(const std::string& name):
|
ODBCSQLServerTest::ODBCSQLServerTest(const std::string& name):
|
||||||
|
@ -134,6 +134,10 @@ public:
|
|||||||
static CppUnit::Test* suite();
|
static CppUnit::Test* suite();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
typedef Poco::Data::ODBC::Utility::DriverMap Drivers;
|
||||||
|
typedef Poco::SharedPtr<Poco::Data::Session> SessionPtr;
|
||||||
|
typedef Poco::SharedPtr<SQLExecutor> ExecPtr;
|
||||||
|
|
||||||
void dropObject(const std::string& type, const std::string& name);
|
void dropObject(const std::string& type, const std::string& name);
|
||||||
void recreatePersonTable();
|
void recreatePersonTable();
|
||||||
void recreatePersonBLOBTable();
|
void recreatePersonBLOBTable();
|
||||||
@ -149,10 +153,10 @@ private:
|
|||||||
static bool init(const std::string& driver, const std::string& dsn);
|
static bool init(const std::string& driver, const std::string& dsn);
|
||||||
static bool canConnect(const std::string& driver, const std::string& dsn);
|
static bool canConnect(const std::string& driver, const std::string& dsn);
|
||||||
|
|
||||||
static Poco::Data::ODBC::Utility::DriverMap _drivers;
|
static Drivers _drivers;
|
||||||
static std::string _dbConnString;
|
static std::string _dbConnString;
|
||||||
static Poco::SharedPtr<Poco::Data::Session> _pSession;
|
static SessionPtr _pSession;
|
||||||
static Poco::SharedPtr<SQLExecutor> _pExecutor;
|
static ExecPtr _pExecutor;
|
||||||
static const bool bindValues[8];
|
static const bool bindValues[8];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -49,19 +49,20 @@
|
|||||||
|
|
||||||
|
|
||||||
using namespace Poco::Data;
|
using namespace Poco::Data;
|
||||||
using Poco::Data::ODBC::Utility;
|
using ODBC::Utility;
|
||||||
using Poco::Data::ODBC::ConnectionException;
|
using ODBC::ConnectionException;
|
||||||
using Poco::Data::ODBC::StatementException;
|
using ODBC::StatementException;
|
||||||
using Poco::Data::ODBC::StatementDiagnostics;
|
using ODBC::StatementDiagnostics;
|
||||||
using Poco::format;
|
using Poco::format;
|
||||||
using Poco::NotFoundException;
|
using Poco::NotFoundException;
|
||||||
|
|
||||||
|
|
||||||
const bool ODBCSQLiteTest::bindValues[8] = {true, true, true, false, false, true, false, false};
|
ODBCSQLiteTest::SessionPtr ODBCSQLiteTest::_pSession = 0;
|
||||||
Poco::SharedPtr<Poco::Data::Session> ODBCSQLiteTest::_pSession = 0;
|
ODBCSQLiteTest::ExecPtr ODBCSQLiteTest::_pExecutor = 0;
|
||||||
Poco::SharedPtr<SQLExecutor> ODBCSQLiteTest::_pExecutor = 0;
|
std::string ODBCSQLiteTest::_dbConnString;
|
||||||
std::string ODBCSQLiteTest::_dbConnString;
|
ODBCSQLiteTest::Drivers ODBCSQLiteTest::_drivers;
|
||||||
Poco::Data::ODBC::Utility::DriverMap ODBCSQLiteTest::_drivers;
|
const bool ODBCSQLiteTest::bindValues[8] =
|
||||||
|
{true, true, true, false, false, true, false, false};
|
||||||
|
|
||||||
|
|
||||||
ODBCSQLiteTest::ODBCSQLiteTest(const std::string& name):
|
ODBCSQLiteTest::ODBCSQLiteTest(const std::string& name):
|
||||||
|
@ -128,6 +128,10 @@ public:
|
|||||||
static CppUnit::Test* suite();
|
static CppUnit::Test* suite();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
typedef Poco::Data::ODBC::Utility::DriverMap Drivers;
|
||||||
|
typedef Poco::SharedPtr<Poco::Data::Session> SessionPtr;
|
||||||
|
typedef Poco::SharedPtr<SQLExecutor> ExecPtr;
|
||||||
|
|
||||||
void dropObject(const std::string& type, const std::string& name);
|
void dropObject(const std::string& type, const std::string& name);
|
||||||
void recreatePersonTable();
|
void recreatePersonTable();
|
||||||
void recreatePersonBLOBTable();
|
void recreatePersonBLOBTable();
|
||||||
@ -142,11 +146,11 @@ private:
|
|||||||
static bool init(const std::string& driver, const std::string& dsn);
|
static bool init(const std::string& driver, const std::string& dsn);
|
||||||
static bool canConnect(const std::string& driver, const std::string& dsn);
|
static bool canConnect(const std::string& driver, const std::string& dsn);
|
||||||
|
|
||||||
static Poco::Data::ODBC::Utility::DriverMap _drivers;
|
static Drivers _drivers;
|
||||||
static std::string _dbConnString;
|
static std::string _dbConnString;
|
||||||
static Poco::SharedPtr<Poco::Data::Session> _pSession;
|
static SessionPtr _pSession;
|
||||||
static Poco::SharedPtr<SQLExecutor> _pExecutor;
|
static ExecPtr _pExecutor;
|
||||||
static const bool bindValues[8];
|
static const bool bindValues[8];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -56,16 +56,19 @@ CppUnit::Test* ODBCTestSuite::suite()
|
|||||||
// nativeError=160
|
// nativeError=160
|
||||||
// System error 127 is "The specified procedure could not be found."
|
// System error 127 is "The specified procedure could not be found."
|
||||||
//
|
//
|
||||||
// 2) When Oracle test is loaded after DB2, the test application does not exit cleanly.
|
// Workaround is to connect to DB2 after connecting to PostgreSQL.
|
||||||
// All tests pass, though.
|
|
||||||
//
|
//
|
||||||
// Workaround is to connect to DB2 after connecting to PostgreSQL and Oracle.
|
// 2) When Oracle driver is found, but no tests executed, the test application does not exit cleanly.
|
||||||
// The reason causing these errors is not known.
|
//
|
||||||
|
// Workaround is to run barebone ODBC test upon initialization of Oracle test.
|
||||||
|
// (see ODBCOracleTest::init())
|
||||||
|
//
|
||||||
|
// The reason causing the above errors is not known at this time.
|
||||||
|
|
||||||
addTest(pSuite, ODBCOracleTest::suite());
|
|
||||||
addTest(pSuite, ODBCPostgreSQLTest::suite());
|
addTest(pSuite, ODBCPostgreSQLTest::suite());
|
||||||
addTest(pSuite, ODBCDB2Test::suite());
|
addTest(pSuite, ODBCDB2Test::suite());
|
||||||
addTest(pSuite, ODBCMySQLTest::suite());
|
addTest(pSuite, ODBCMySQLTest::suite());
|
||||||
|
addTest(pSuite, ODBCOracleTest::suite());
|
||||||
addTest(pSuite, ODBCSQLiteTest::suite());
|
addTest(pSuite, ODBCSQLiteTest::suite());
|
||||||
addTest(pSuite, ODBCSQLServerTest::suite());
|
addTest(pSuite, ODBCSQLServerTest::suite());
|
||||||
#if defined(POCO_OS_FAMILY_WINDOWS)
|
#if defined(POCO_OS_FAMILY_WINDOWS)
|
||||||
|
@ -56,12 +56,12 @@
|
|||||||
|
|
||||||
|
|
||||||
using namespace Poco::Data;
|
using namespace Poco::Data;
|
||||||
using Poco::Data::ODBC::Utility;
|
using ODBC::Utility;
|
||||||
using Poco::Data::ODBC::Preparation;
|
using ODBC::Preparation;
|
||||||
using Poco::Data::ODBC::ConnectionException;
|
using ODBC::ConnectionException;
|
||||||
using Poco::Data::ODBC::StatementException;
|
using ODBC::StatementException;
|
||||||
using Poco::Data::ODBC::DataTruncatedException;
|
using ODBC::DataTruncatedException;
|
||||||
using Poco::Data::ODBC::StatementDiagnostics;
|
using ODBC::StatementDiagnostics;
|
||||||
using Poco::format;
|
using Poco::format;
|
||||||
using Poco::Tuple;
|
using Poco::Tuple;
|
||||||
using Poco::Any;
|
using Poco::Any;
|
||||||
@ -1832,6 +1832,12 @@ void SQLExecutor::dateTime()
|
|||||||
catch(ConnectionException& ce){ std::cout << ce.toString() << std::endl; fail (funct); }
|
catch(ConnectionException& ce){ std::cout << ce.toString() << std::endl; fail (funct); }
|
||||||
catch(StatementException& se){ std::cout << se.toString() << std::endl; fail (funct); }
|
catch(StatementException& se){ std::cout << se.toString() << std::endl; fail (funct); }
|
||||||
assert (res == born);
|
assert (res == born);
|
||||||
|
|
||||||
|
Statement stmt = (*_pSession << "SELECT Born FROM Person", now);
|
||||||
|
RecordSet rset(stmt);
|
||||||
|
|
||||||
|
res = rset["Born"].convert<DateTime>();
|
||||||
|
assert (res == born);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -294,6 +294,31 @@ public:
|
|||||||
throw Poco::BadCastException();
|
throw Poco::BadCastException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void convert(Poco::Timestamp& val) const
|
||||||
|
{
|
||||||
|
throw Poco::BadCastException();
|
||||||
|
}
|
||||||
|
|
||||||
|
void convert(Poco::DateTime& val) const
|
||||||
|
{
|
||||||
|
throw Poco::BadCastException();
|
||||||
|
}
|
||||||
|
|
||||||
|
void convert(Poco::LocalDateTime& val) const
|
||||||
|
{
|
||||||
|
throw Poco::BadCastException();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isArray() const
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual bool isStruct() const
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void convert(std::string& val) const
|
void convert(std::string& val) const
|
||||||
{
|
{
|
||||||
val.assign(_val.begin(), _val.end());
|
val.assign(_val.begin(), _val.end());
|
||||||
|
@ -36,6 +36,10 @@
|
|||||||
|
|
||||||
#include "Poco/Data/RecordSet.h"
|
#include "Poco/Data/RecordSet.h"
|
||||||
#include "Poco/Data/Session.h"
|
#include "Poco/Data/Session.h"
|
||||||
|
#include "Poco/DateTime.h"
|
||||||
|
|
||||||
|
|
||||||
|
using Poco::DateTime;
|
||||||
|
|
||||||
|
|
||||||
namespace Poco {
|
namespace Poco {
|
||||||
@ -77,18 +81,19 @@ DynamicAny RecordSet::value(std::size_t col, std::size_t row) const
|
|||||||
switch (columnType(col))
|
switch (columnType(col))
|
||||||
{
|
{
|
||||||
case MetaColumn::FDT_BOOL:
|
case MetaColumn::FDT_BOOL:
|
||||||
case MetaColumn::FDT_INT8: return value<Int8>(col, row);
|
case MetaColumn::FDT_INT8: return value<Int8>(col, row);
|
||||||
case MetaColumn::FDT_UINT8: return value<UInt8>(col, row);
|
case MetaColumn::FDT_UINT8: return value<UInt8>(col, row);
|
||||||
case MetaColumn::FDT_INT16: return value<Int16>(col, row);
|
case MetaColumn::FDT_INT16: return value<Int16>(col, row);
|
||||||
case MetaColumn::FDT_UINT16: return value<UInt16>(col, row);
|
case MetaColumn::FDT_UINT16: return value<UInt16>(col, row);
|
||||||
case MetaColumn::FDT_INT32: return value<Int32>(col, row);
|
case MetaColumn::FDT_INT32: return value<Int32>(col, row);
|
||||||
case MetaColumn::FDT_UINT32: return value<UInt32>(col, row);
|
case MetaColumn::FDT_UINT32: return value<UInt32>(col, row);
|
||||||
case MetaColumn::FDT_INT64: return value<Int64>(col, row);
|
case MetaColumn::FDT_INT64: return value<Int64>(col, row);
|
||||||
case MetaColumn::FDT_UINT64: return value<UInt64>(col, row);
|
case MetaColumn::FDT_UINT64: return value<UInt64>(col, row);
|
||||||
case MetaColumn::FDT_FLOAT: return value<float>(col, row);
|
case MetaColumn::FDT_FLOAT: return value<float>(col, row);
|
||||||
case MetaColumn::FDT_DOUBLE: return value<double>(col, row);
|
case MetaColumn::FDT_DOUBLE: return value<double>(col, row);
|
||||||
case MetaColumn::FDT_STRING: return value<std::string>(col, row);
|
case MetaColumn::FDT_STRING: return value<std::string>(col, row);
|
||||||
case MetaColumn::FDT_BLOB: return value<BLOB>(col, row);
|
case MetaColumn::FDT_BLOB: return value<BLOB>(col, row);
|
||||||
|
case MetaColumn::FDT_TIMESTAMP: return value<DateTime>(col, row);
|
||||||
default:
|
default:
|
||||||
throw Poco::InvalidArgumentException("Data type not supported.");
|
throw Poco::InvalidArgumentException("Data type not supported.");
|
||||||
}
|
}
|
||||||
@ -100,18 +105,19 @@ DynamicAny RecordSet::value(const std::string& name, std::size_t row) const
|
|||||||
switch (columnType(name))
|
switch (columnType(name))
|
||||||
{
|
{
|
||||||
case MetaColumn::FDT_BOOL:
|
case MetaColumn::FDT_BOOL:
|
||||||
case MetaColumn::FDT_INT8: return value<Int8>(name, row);
|
case MetaColumn::FDT_INT8: return value<Int8>(name, row);
|
||||||
case MetaColumn::FDT_UINT8: return value<UInt8>(name, row);
|
case MetaColumn::FDT_UINT8: return value<UInt8>(name, row);
|
||||||
case MetaColumn::FDT_INT16: return value<Int16>(name, row);
|
case MetaColumn::FDT_INT16: return value<Int16>(name, row);
|
||||||
case MetaColumn::FDT_UINT16: return value<UInt16>(name, row);
|
case MetaColumn::FDT_UINT16: return value<UInt16>(name, row);
|
||||||
case MetaColumn::FDT_INT32: return value<Int32>(name, row);
|
case MetaColumn::FDT_INT32: return value<Int32>(name, row);
|
||||||
case MetaColumn::FDT_UINT32: return value<UInt32>(name, row);
|
case MetaColumn::FDT_UINT32: return value<UInt32>(name, row);
|
||||||
case MetaColumn::FDT_INT64: return value<Int64>(name, row);
|
case MetaColumn::FDT_INT64: return value<Int64>(name, row);
|
||||||
case MetaColumn::FDT_UINT64: return value<UInt64>(name, row);
|
case MetaColumn::FDT_UINT64: return value<UInt64>(name, row);
|
||||||
case MetaColumn::FDT_FLOAT: return value<float>(name, row);
|
case MetaColumn::FDT_FLOAT: return value<float>(name, row);
|
||||||
case MetaColumn::FDT_DOUBLE: return value<double>(name, row);
|
case MetaColumn::FDT_DOUBLE: return value<double>(name, row);
|
||||||
case MetaColumn::FDT_STRING: return value<std::string>(name, row);
|
case MetaColumn::FDT_STRING: return value<std::string>(name, row);
|
||||||
case MetaColumn::FDT_BLOB: return value<BLOB>(name, row);
|
case MetaColumn::FDT_BLOB: return value<BLOB>(name, row);
|
||||||
|
case MetaColumn::FDT_TIMESTAMP: return value<DateTime>(name, row);
|
||||||
default:
|
default:
|
||||||
throw Poco::InvalidArgumentException("Data type not supported.");
|
throw Poco::InvalidArgumentException("Data type not supported.");
|
||||||
}
|
}
|
||||||
|
@ -91,6 +91,12 @@ bool SessionImpl::isConnected()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool SessionImpl::isTransaction()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool SessionImpl::getConnected(const std::string& name)
|
bool SessionImpl::getConnected(const std::string& name)
|
||||||
{
|
{
|
||||||
return _connected;
|
return _connected;
|
||||||
|
@ -75,6 +75,9 @@ public:
|
|||||||
/// Returns true if session is connected to the database,
|
/// Returns true if session is connected to the database,
|
||||||
/// false otherwise.
|
/// false otherwise.
|
||||||
|
|
||||||
|
bool isTransaction();
|
||||||
|
/// Returns true iff a transaction is a transaction is in progress, false otherwise.
|
||||||
|
|
||||||
void setConnected(const std::string& name, bool value);
|
void setConnected(const std::string& name, bool value);
|
||||||
bool getConnected(const std::string& name);
|
bool getConnected(const std::string& name);
|
||||||
/// Sets/gets the connected property.
|
/// Sets/gets the connected property.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user