- fixed bug in SQLite Extractor (DateTime extraction not returning false when value is NullPointerException, see http://pocoproject.org/forum/viewtopic.php?f=12&t=5141#p9363 )

- fixed code indentation (spaces to tabs)
This commit is contained in:
Aleksandar Fabijanic 2012-08-23 02:34:35 +00:00
parent 0ca3bbc848
commit dbda035719
18 changed files with 866 additions and 771 deletions

View File

@ -681,6 +681,7 @@ CppUnit::Test* ODBCDB2Test::suite()
CppUnit_addTest(pSuite, ODBCDB2Test, testSessionTransaction);
CppUnit_addTest(pSuite, ODBCDB2Test, testTransaction);
CppUnit_addTest(pSuite, ODBCDB2Test, testTransactor);
CppUnit_addTest(pSuite, ODBCDB2Test, testNullable);
CppUnit_addTest(pSuite, ODBCDB2Test, testReconnect);
return pSuite;

View File

@ -497,6 +497,7 @@ CppUnit::Test* ODBCMySQLTest::suite()
CppUnit_addTest(pSuite, ODBCMySQLTest, testSessionTransaction);
CppUnit_addTest(pSuite, ODBCMySQLTest, testTransaction);
CppUnit_addTest(pSuite, ODBCMySQLTest, testTransactor);
CppUnit_addTest(pSuite, ODBCMySQLTest, testNullable);
CppUnit_addTest(pSuite, ODBCMySQLTest, testReconnect);
return pSuite;

View File

@ -933,6 +933,7 @@ CppUnit::Test* ODBCOracleTest::suite()
CppUnit_addTest(pSuite, ODBCOracleTest, testSessionTransaction);
CppUnit_addTest(pSuite, ODBCOracleTest, testTransaction);
CppUnit_addTest(pSuite, ODBCOracleTest, testTransactor);
CppUnit_addTest(pSuite, ODBCOracleTest, testNullable);
CppUnit_addTest(pSuite, ODBCOracleTest, testReconnect);
return pSuite;

View File

@ -659,6 +659,7 @@ CppUnit::Test* ODBCPostgreSQLTest::suite()
CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testSessionTransaction);
CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testTransaction);
CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testTransactor);
CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testNullable);
CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testReconnect);
return pSuite;

View File

@ -809,6 +809,7 @@ CppUnit::Test* ODBCSQLServerTest::suite()
CppUnit_addTest(pSuite, ODBCSQLServerTest, testSessionTransaction);
CppUnit_addTest(pSuite, ODBCSQLServerTest, testTransaction);
CppUnit_addTest(pSuite, ODBCSQLServerTest, testTransactor);
CppUnit_addTest(pSuite, ODBCSQLServerTest, testNullable);
CppUnit_addTest(pSuite, ODBCSQLServerTest, testReconnect);
return pSuite;

View File

@ -1204,6 +1204,21 @@ void ODBCTest::testTransactor()
}
void ODBCTest::testNullable()
{
if (!_pSession) fail ("Test not available.");
for (int i = 0; i < 8;)
{
recreatePersonTable();
_pSession->setFeature("autoBind", bindValue(i));
_pSession->setFeature("autoExtract", bindValue(i+1));
_pExecutor->nullable();
i += 2;
}
}
void ODBCTest::testReconnect()
{
if (!_pSession) fail ("Test not available.");

View File

@ -167,6 +167,7 @@ public:
virtual void testSessionTransaction();
virtual void testTransaction();
virtual void testTransactor();
virtual void testNullable();
virtual void testReconnect();

View File

@ -107,6 +107,7 @@ using Poco::Message;
using Poco::NotFoundException;
using Poco::InvalidAccessException;
using Poco::InvalidArgumentException;
using Poco::NotImplementedException;
using Poco::BadCastException;
using Poco::RangeException;
@ -3786,6 +3787,12 @@ void SQLExecutor::transactor()
}
void SQLExecutor::nullable()
{
throw NotImplementedException("TODO - see SQLite test for nullable");
}
void SQLExecutor::reconnect()
{
std::string funct = "reconnect()";

View File

@ -518,6 +518,7 @@ public:
void sessionTransaction(const std::string& connect);
void transaction(const std::string& connect);
void transactor();
void nullable();
void reconnect();

View File

@ -71,8 +71,7 @@ Extractor::~Extractor()
bool Extractor::extract(std::size_t pos, Poco::Int32& val)
{
if (isNull(pos))
return false;
if (isNull(pos)) return false;
val = sqlite3_column_int(_pStmt, (int) pos);
return true;
}
@ -80,8 +79,7 @@ bool Extractor::extract(std::size_t pos, Poco::Int32& val)
bool Extractor::extract(std::size_t pos, Poco::Int64& val)
{
if (isNull(pos))
return false;
if (isNull(pos)) return false;
val = sqlite3_column_int64(_pStmt, (int) pos);
return true;
}
@ -90,8 +88,7 @@ bool Extractor::extract(std::size_t pos, Poco::Int64& val)
#ifndef POCO_LONG_IS_64_BIT
bool Extractor::extract(std::size_t pos, long& val)
{
if (isNull(pos))
return false;
if (isNull(pos)) return false;
val = sqlite3_column_int(_pStmt, (int) pos);
return true;
}
@ -100,8 +97,7 @@ bool Extractor::extract(std::size_t pos, long& val)
bool Extractor::extract(std::size_t pos, double& val)
{
if (isNull(pos))
return false;
if (isNull(pos)) return false;
val = sqlite3_column_double(_pStmt, (int) pos);
return true;
}
@ -109,8 +105,7 @@ bool Extractor::extract(std::size_t pos, double& val)
bool Extractor::extract(std::size_t pos, std::string& val)
{
if (isNull(pos))
return false;
if (isNull(pos)) return false;
const char *pBuf = reinterpret_cast<const char*>(sqlite3_column_text(_pStmt, (int) pos));
if (!pBuf)
val.clear();
@ -122,8 +117,7 @@ bool Extractor::extract(std::size_t pos, std::string& val)
bool Extractor::extract(std::size_t pos, Poco::Int8& val)
{
if (isNull(pos))
return false;
if (isNull(pos)) return false;
val = sqlite3_column_int(_pStmt, (int) pos);
return true;
}
@ -131,8 +125,7 @@ bool Extractor::extract(std::size_t pos, Poco::Int8& val)
bool Extractor::extract(std::size_t pos, Poco::UInt8& val)
{
if (isNull(pos))
return false;
if (isNull(pos)) return false;
val = sqlite3_column_int(_pStmt, (int) pos);
return true;
}
@ -140,8 +133,7 @@ bool Extractor::extract(std::size_t pos, Poco::UInt8& val)
bool Extractor::extract(std::size_t pos, Poco::Int16& val)
{
if (isNull(pos))
return false;
if (isNull(pos)) return false;
val = sqlite3_column_int(_pStmt, (int) pos);
return true;
}
@ -149,8 +141,7 @@ bool Extractor::extract(std::size_t pos, Poco::Int16& val)
bool Extractor::extract(std::size_t pos, Poco::UInt16& val)
{
if (isNull(pos))
return false;
if (isNull(pos)) return false;
val = sqlite3_column_int(_pStmt, (int) pos);
return true;
}
@ -158,8 +149,7 @@ bool Extractor::extract(std::size_t pos, Poco::UInt16& val)
bool Extractor::extract(std::size_t pos, Poco::UInt32& val)
{
if (isNull(pos))
return false;
if (isNull(pos)) return false;
val = sqlite3_column_int(_pStmt, (int) pos);
return true;
}
@ -167,8 +157,7 @@ bool Extractor::extract(std::size_t pos, Poco::UInt32& val)
bool Extractor::extract(std::size_t pos, Poco::UInt64& val)
{
if (isNull(pos))
return false;
if (isNull(pos)) return false;
val = sqlite3_column_int64(_pStmt, (int) pos);
return true;
}
@ -176,8 +165,7 @@ bool Extractor::extract(std::size_t pos, Poco::UInt64& val)
bool Extractor::extract(std::size_t pos, bool& val)
{
if (isNull(pos))
return false;
if (isNull(pos)) return false;
val = (0 != sqlite3_column_int(_pStmt, (int) pos));
return true;
}
@ -185,8 +173,7 @@ bool Extractor::extract(std::size_t pos, bool& val)
bool Extractor::extract(std::size_t pos, float& val)
{
if (isNull(pos))
return false;
if (isNull(pos)) return false;
val = static_cast<float>(sqlite3_column_double(_pStmt, (int) pos));
return true;
}
@ -202,6 +189,7 @@ bool Extractor::extract(std::size_t pos, char& val)
bool Extractor::extract(std::size_t pos, Date& val)
{
if (isNull(pos)) return false;
std::string str;
extract(pos, str);
int tzd;
@ -213,6 +201,7 @@ bool Extractor::extract(std::size_t pos, Date& val)
bool Extractor::extract(std::size_t pos, Time& val)
{
if (isNull(pos)) return false;
std::string str;
extract(pos, str);
int tzd;
@ -224,6 +213,7 @@ bool Extractor::extract(std::size_t pos, Time& val)
bool Extractor::extract(std::size_t pos, DateTime& val)
{
if (isNull(pos)) return false;
std::string dt;
extract(pos, dt);
int tzd;

Binary file not shown.

View File

@ -44,6 +44,7 @@
#include "Poco/Data/SQLite/Utility.h"
#include "Poco/Data/SQLite/SQLiteException.h"
#include "Poco/Data/TypeHandler.h"
#include "Poco/Data/Nullable.h"
#include "Poco/Data/DataException.h"
#include "Poco/Tuple.h"
#include "Poco/Any.h"
@ -73,6 +74,7 @@ using Poco::Data::Time;
using Poco::Data::AbstractExtractionVec;
using Poco::Data::AbstractExtractionVecVec;
using Poco::Data::AbstractBindingVec;
using Poco::Data::Nullable;
using Poco::Data::NotConnectedException;
using Poco::Tuple;
using Poco::Any;
@ -1958,6 +1960,42 @@ void SQLiteTest::testPrimaryKeyConstraint()
}
void SQLiteTest::testNullable()
{
Session ses (Poco::Data::SQLite::Connector::KEY, "dummy.db");
ses << "DROP TABLE IF EXISTS NullableTest", now;
ses << "CREATE TABLE NullableTest (i INTEGER, r REAL, s VARCHAR, d DATETIME)", now;
ses << "INSERT INTO NullableTest VALUES(:i, :r, :s, :d)", use(null), use(null), use(null), use(null), now;
Nullable<int> i = 1;
Nullable<double> f = 1.5;
Nullable<std::string> s = "abc";
Nullable<DateTime> d = DateTime();
assert (!i.isNull());
assert (!f.isNull());
assert (!s.isNull());
assert (!d.isNull());
ses << "SELECT i, r, s FROM NullableTest", into(i), into(f), into(s), into(d), now;
assert (i.isNull());
assert (f.isNull());
assert (s.isNull());
assert (d.isNull());
RecordSet rs(ses, "SELECT * FROM NullableTest");
rs.moveFirst();
assert (rs.isNull("i"));
assert (rs.isNull("r"));
assert (rs.isNull("s"));
assert (rs.isNull("d"));
}
void SQLiteTest::testNull()
{
Session ses (Poco::Data::SQLite::Connector::KEY, "dummy.db");
@ -2564,6 +2602,7 @@ CppUnit::Test* SQLiteTest::suite()
CppUnit_addTest(pSuite, SQLiteTest, testDateTime);
CppUnit_addTest(pSuite, SQLiteTest, testInternalExtraction);
CppUnit_addTest(pSuite, SQLiteTest, testPrimaryKeyConstraint);
CppUnit_addTest(pSuite, SQLiteTest, testNullable);
CppUnit_addTest(pSuite, SQLiteTest, testNull);
CppUnit_addTest(pSuite, SQLiteTest, testRowIterator);
CppUnit_addTest(pSuite, SQLiteTest, testAsync);

View File

@ -115,6 +115,7 @@ public:
void testInternalExtraction();
void testPrimaryKeyConstraint();
void testNullable();
void testNull();
void testRowIterator();
void testAsync();

View File

@ -146,7 +146,7 @@ public:
return _isNull;
}
void setNull(bool isNull)
void setNull(bool isNull = true)
/// Change Nullable "isNull" sign
{
_isNull = isNull;

View File

@ -51,6 +51,7 @@
#include "Poco/Dynamic/Var.h"
#include "Poco/Data/DynamicLOB.h"
#include "Poco/Data/DynamicDateTime.h"
#include "Poco/Data/Nullable.h"
#include "Poco/Exception.h"
#include <cstring>
#include <sstream>
@ -92,6 +93,7 @@ using Poco::Data::AbstractExtractionVec;
using Poco::Data::AbstractExtractionVecVec;
using Poco::Data::AbstractBinding;
using Poco::Data::AbstractBindingVec;
using Poco::Data::Nullable;
using Poco::Data::NotConnectedException;
@ -1385,6 +1387,38 @@ void DataTest::testExternalBindingAndExtraction()
}
void DataTest::testNullable()
{
Nullable<int> i;
Nullable<double> f;
Nullable<std::string> s;
assert (i.isNull());
assert (f.isNull());
assert (s.isNull());
i = 1;
f = 1.5;
s = "abc";
assert (!i.isNull());
assert (!f.isNull());
assert (!s.isNull());
assert (i == 1);
assert (f == 1.5);
assert (s == "abc");
i.setNull();
f.setNull();
s.setNull();
assert (i.isNull());
assert (f.isNull());
assert (s.isNull());
}
void DataTest::setUp()
{
}
@ -1415,6 +1449,7 @@ CppUnit::Test* DataTest::suite()
CppUnit_addTest(pSuite, DataTest, testRowFormat);
CppUnit_addTest(pSuite, DataTest, testDateAndTime);
CppUnit_addTest(pSuite, DataTest, testExternalBindingAndExtraction);
CppUnit_addTest(pSuite, DataTest, testNullable);
return pSuite;
}

View File

@ -65,6 +65,7 @@ public:
void testRowFormat();
void testDateAndTime();
void testExternalBindingAndExtraction();
void testNullable();
void setUp();
void tearDown();