DateTime support & some test tidying

This commit is contained in:
Aleksandar Fabijanic 2007-08-20 11:55:18 +00:00
parent 2dbfb583c9
commit 3b66a355c2
23 changed files with 266 additions and 164 deletions

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -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();
} }

View File

@ -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;
}; };

View File

@ -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):

View File

@ -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];
}; };

View File

@ -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):

View File

@ -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];
}; };

View File

@ -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;
} }

View File

@ -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

View File

@ -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");

View File

@ -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.

View File

@ -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):

View File

@ -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];
}; };

View File

@ -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):

View File

@ -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];
}; };

View File

@ -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)

View File

@ -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);
} }

View File

@ -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());

View File

@ -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.");
} }

View File

@ -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;

View File

@ -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.