summaryrefslogtreecommitdiff
path: root/slicer/db/testSelect.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'slicer/db/testSelect.cpp')
-rw-r--r--slicer/db/testSelect.cpp153
1 files changed, 75 insertions, 78 deletions
diff --git a/slicer/db/testSelect.cpp b/slicer/db/testSelect.cpp
index e1c2068..9ea9139 100644
--- a/slicer/db/testSelect.cpp
+++ b/slicer/db/testSelect.cpp
@@ -12,9 +12,9 @@
using namespace std::literals;
-class StandardMockDatabase : public PQ::Mock {
+class StandardMockDatabase : public DB::PluginMock<PQ::Mock> {
public:
- StandardMockDatabase() : PQ::Mock("user=postgres dbname=postgres", "pqmock", {
+ StandardMockDatabase() : DB::PluginMock<PQ::Mock>("user=postgres dbname=postgres", "pqmock", {
rootDir.parent_path() / "db" / "slicer.sql" })
{
}
@@ -22,61 +22,58 @@ class StandardMockDatabase : public PQ::Mock {
BOOST_GLOBAL_FIXTURE( StandardMockDatabase );
-typedef boost::shared_ptr<DB::Connection> DBPtr;
-typedef boost::shared_ptr<DB::SelectCommand> SelectPtr;
-
BOOST_AUTO_TEST_CASE( select_simple_int )
{
- auto db = DBPtr(DB::MockDatabase::openConnectionTo("pqmock"));
- auto sel = SelectPtr(db->newSelectCommand("SELECT MAX(id) FROM test"));
- auto bi = Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, Ice::Int>(*sel);
+ auto db = DB::MockDatabase::openConnectionTo("pqmock");
+ auto sel = db->select("SELECT MAX(id) FROM test");
+ auto bi = Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, Ice::Int>(sel);
BOOST_REQUIRE_EQUAL(4, bi);
}
BOOST_AUTO_TEST_CASE( select_simple_double )
{
- auto db = DBPtr(DB::MockDatabase::openConnectionTo("pqmock"));
- auto sel = SelectPtr(db->newSelectCommand("SELECT MAX(fl) FROM test"));
- auto bi = Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, Ice::Double>(*sel);
+ auto db = DB::MockDatabase::openConnectionTo("pqmock");
+ auto sel = db->select("SELECT MAX(fl) FROM test");
+ auto bi = Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, Ice::Double>(sel);
BOOST_REQUIRE_CLOSE(1234.1234, bi, 0.0001);
}
BOOST_AUTO_TEST_CASE( select_simple_string )
{
- auto db = DBPtr(DB::MockDatabase::openConnectionTo("pqmock"));
- auto sel = SelectPtr(db->newSelectCommand("SELECT MAX(string) FROM test"));
- auto bi = Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, std::string>(*sel);
+ auto db = DB::MockDatabase::openConnectionTo("pqmock");
+ auto sel = db->select("SELECT MAX(string) FROM test");
+ auto bi = Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, std::string>(sel);
BOOST_REQUIRE_EQUAL("text two", bi);
}
BOOST_AUTO_TEST_CASE( select_simple_true )
{
- auto db = DBPtr(DB::MockDatabase::openConnectionTo("pqmock"));
- auto sel = SelectPtr(db->newSelectCommand("SELECT true"));
- auto bi = Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, bool>(*sel);
+ auto db = DB::MockDatabase::openConnectionTo("pqmock");
+ auto sel = db->select("SELECT true");
+ auto bi = Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, bool>(sel);
BOOST_REQUIRE_EQUAL(true, bi);
}
BOOST_AUTO_TEST_CASE( select_simple_false )
{
- auto db = DBPtr(DB::MockDatabase::openConnectionTo("pqmock"));
- auto sel = SelectPtr(db->newSelectCommand("SELECT NOT(true)"));
- auto bi = Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, bool>(*sel);
+ auto db = DB::MockDatabase::openConnectionTo("pqmock");
+ auto sel = db->select("SELECT NOT(true)");
+ auto bi = Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, bool>(sel);
BOOST_REQUIRE_EQUAL(false, bi);
}
BOOST_AUTO_TEST_CASE( select_single )
{
- auto db = DBPtr(DB::MockDatabase::openConnectionTo("pqmock"));
- auto sel = SelectPtr(db->newSelectCommand(
+ auto db = DB::MockDatabase::openConnectionTo("pqmock");
+ auto sel = db->select(
"SELECT boolean mbool, \
id mbyte, id mshort, id mint, id mlong, \
fl mdouble, fl mfloat, \
string mstring \
FROM test \
ORDER BY id \
- LIMIT 1"));
- auto bi = Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, TestModule::BuiltInsPtr>(*sel);
+ LIMIT 1");
+ auto bi = Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, TestModule::BuiltInsPtr>(sel);
BOOST_REQUIRE(bi);
BOOST_REQUIRE_EQUAL(true, bi->mbool);
BOOST_REQUIRE_EQUAL(1, bi->mbyte);
@@ -90,12 +87,12 @@ BOOST_AUTO_TEST_CASE( select_single )
BOOST_AUTO_TEST_CASE( select_inherit_single )
{
- auto db = DBPtr(DB::MockDatabase::openConnectionTo("pqmock"));
- auto sel = SelectPtr(db->newSelectCommand(
+ auto db = DB::MockDatabase::openConnectionTo("pqmock");
+ auto sel = db->select(
"SELECT id a, '::TestModule::D' || CAST(id AS TEXT) tc, 200 b, 300 c, 400 d \
FROM test \
- WHERE id = 2"));
- auto bi = Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, TestModule::BasePtr>(*sel, "tc"s);
+ WHERE id = 2");
+ auto bi = Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, TestModule::BasePtr>(sel, "tc"s);
BOOST_REQUIRE(bi);
auto d2 = std::dynamic_pointer_cast<TestModule::D2>(bi);
BOOST_REQUIRE(d2);
@@ -105,12 +102,12 @@ BOOST_AUTO_TEST_CASE( select_inherit_single )
BOOST_AUTO_TEST_CASE( select_simple_sequence )
{
- auto db = DBPtr(DB::MockDatabase::openConnectionTo("pqmock"));
- auto sel = SelectPtr(db->newSelectCommand(
+ auto db = DB::MockDatabase::openConnectionTo("pqmock");
+ auto sel = db->select(
"SELECT string \
FROM test \
- ORDER BY id DESC"));
- auto bi = Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, TestModule::SimpleSeq>(*sel);
+ ORDER BY id DESC");
+ auto bi = Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, TestModule::SimpleSeq>(sel);
BOOST_REQUIRE_EQUAL(4, bi.size());
BOOST_REQUIRE_EQUAL("text four", bi[0]);
BOOST_REQUIRE_EQUAL("text three", bi[1]);
@@ -120,13 +117,13 @@ BOOST_AUTO_TEST_CASE( select_simple_sequence )
BOOST_AUTO_TEST_CASE( select_inherit_sequence )
{
- auto db = DBPtr(DB::MockDatabase::openConnectionTo("pqmock"));
- auto sel = SelectPtr(db->newSelectCommand(
+ auto db = DB::MockDatabase::openConnectionTo("pqmock");
+ auto sel = db->select(
"SELECT id a, '::TestModule::D' || CAST(id AS TEXT) tc, 200 b, 300 c, 400 d \
FROM test \
WHERE id < 4 \
- ORDER BY id DESC"));
- auto bi = Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, TestModule::BaseSeq>(*sel, "tc"s);
+ ORDER BY id DESC");
+ auto bi = Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, TestModule::BaseSeq>(sel, "tc"s);
BOOST_REQUIRE_EQUAL(3, bi.size());
auto d3 = std::dynamic_pointer_cast<TestModule::D3>(bi[0]);
auto d2 = std::dynamic_pointer_cast<TestModule::D2>(bi[1]);
@@ -145,12 +142,12 @@ BOOST_AUTO_TEST_CASE( select_inherit_sequence )
BOOST_AUTO_TEST_CASE( select_inherit_datetime )
{
- auto db = DBPtr(DB::MockDatabase::openConnectionTo("pqmock"));
- auto sel = SelectPtr(db->newSelectCommand(
+ auto db = DB::MockDatabase::openConnectionTo("pqmock");
+ auto sel = db->select(
"SELECT dt, to_char(dt, 'YYYY-MM-DD') date, ts \
FROM test \
- WHERE id = 3"));
- TestDatabase::SpecificTypesPtr bi = Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, TestDatabase::SpecificTypesPtr>(*sel);
+ WHERE id = 3");
+ TestDatabase::SpecificTypesPtr bi = Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, TestDatabase::SpecificTypesPtr>(sel);
BOOST_REQUIRE_EQUAL(2015, bi->dt.year);
BOOST_REQUIRE_EQUAL(3, bi->dt.month);
BOOST_REQUIRE_EQUAL(27, bi->dt.day);
@@ -175,101 +172,101 @@ BoostThrowWrapperHelper(P && ... p)
BOOST_AUTO_TEST_CASE( select_unsupportedModel )
{
- auto db = DBPtr(DB::MockDatabase::openConnectionTo("pqmock"));
- auto sel = SelectPtr(db->newSelectCommand("SELECT id FROM test"));
- BOOST_REQUIRE_THROW(BoostThrowWrapperHelper<TestModule::ClassMap>(*sel), Slicer::UnsupportedModelType);
+ auto db = DB::MockDatabase::openConnectionTo("pqmock");
+ auto sel = db->select("SELECT id FROM test");
+ BOOST_REQUIRE_THROW(BoostThrowWrapperHelper<TestModule::ClassMap>(sel), Slicer::UnsupportedModelType);
}
BOOST_AUTO_TEST_CASE( select_tooManyRowsSimple )
{
- auto db = DBPtr(DB::MockDatabase::openConnectionTo("pqmock"));
- auto sel = SelectPtr(db->newSelectCommand("SELECT id FROM test"));
- BOOST_REQUIRE_THROW(BoostThrowWrapperHelper<Ice::Int>(*sel), Slicer::TooManyRowsReturned);
+ auto db = DB::MockDatabase::openConnectionTo("pqmock");
+ auto sel = db->select("SELECT id FROM test");
+ BOOST_REQUIRE_THROW(BoostThrowWrapperHelper<Ice::Int>(sel), Slicer::TooManyRowsReturned);
}
BOOST_AUTO_TEST_CASE( select_noRowsSimple )
{
- auto db = DBPtr(DB::MockDatabase::openConnectionTo("pqmock"));
- auto sel = SelectPtr(db->newSelectCommand("SELECT id FROM test WHERE false"));
- BOOST_REQUIRE_THROW(BoostThrowWrapperHelper<Ice::Int>(*sel), Slicer::NoRowsReturned);
+ auto db = DB::MockDatabase::openConnectionTo("pqmock");
+ auto sel = db->select("SELECT id FROM test WHERE false");
+ BOOST_REQUIRE_THROW(BoostThrowWrapperHelper<Ice::Int>(sel), Slicer::NoRowsReturned);
}
BOOST_AUTO_TEST_CASE( select_noRowsSimpleOptional )
{
- auto db = DBPtr(DB::MockDatabase::openConnectionTo("pqmock"));
- auto sel = SelectPtr(db->newSelectCommand("SELECT id FROM test WHERE false"));
- auto v = Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, IceUtil::Optional<Ice::Int>>(*sel);
+ auto db = DB::MockDatabase::openConnectionTo("pqmock");
+ auto sel = db->select("SELECT id FROM test WHERE false");
+ auto v = Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, IceUtil::Optional<Ice::Int>>(sel);
BOOST_REQUIRE(!v);
}
BOOST_AUTO_TEST_CASE( select_tooManyRowsSimpleOptional )
{
- auto db = DBPtr(DB::MockDatabase::openConnectionTo("pqmock"));
- auto sel = SelectPtr(db->newSelectCommand("SELECT id FROM test"));
- BOOST_REQUIRE_THROW(BoostThrowWrapperHelper<IceUtil::Optional<Ice::Int>>(*sel), Slicer::TooManyRowsReturned);
+ auto db = DB::MockDatabase::openConnectionTo("pqmock");
+ auto sel = db->select("SELECT id FROM test");
+ BOOST_REQUIRE_THROW(BoostThrowWrapperHelper<IceUtil::Optional<Ice::Int>>(sel), Slicer::TooManyRowsReturned);
}
BOOST_AUTO_TEST_CASE( select_simpleOptional )
{
- auto db = DBPtr(DB::MockDatabase::openConnectionTo("pqmock"));
- auto sel = SelectPtr(db->newSelectCommand("SELECT MAX(id) FROM test"));
- auto v = Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, IceUtil::Optional<Ice::Int>>(*sel);
+ auto db = DB::MockDatabase::openConnectionTo("pqmock");
+ auto sel = db->select("SELECT MAX(id) FROM test");
+ auto v = Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, IceUtil::Optional<Ice::Int>>(sel);
BOOST_REQUIRE(v);
BOOST_REQUIRE_EQUAL(4, *v);
}
BOOST_AUTO_TEST_CASE( select_noRowsComplexOptional )
{
- auto db = DBPtr(DB::MockDatabase::openConnectionTo("pqmock"));
- auto sel = SelectPtr(db->newSelectCommand(
+ auto db = DB::MockDatabase::openConnectionTo("pqmock");
+ auto sel = db->select(
"SELECT boolean mbool, \
id mbyte, id mshort, id mint, id mlong, \
fl mdouble, fl mfloat, \
string mstring \
FROM test \
- WHERE false"));
- auto v = Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, IceUtil::Optional<TestModule::BuiltInsPtr>>(*sel);
+ WHERE false");
+ auto v = Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, IceUtil::Optional<TestModule::BuiltInsPtr>>(sel);
BOOST_REQUIRE(!v);
}
BOOST_AUTO_TEST_CASE( select_tooManyRowsComplex )
{
- auto db = DBPtr(DB::MockDatabase::openConnectionTo("pqmock"));
- auto sel = SelectPtr(db->newSelectCommand("SELECT id FROM test"));
- BOOST_REQUIRE_THROW(BoostThrowWrapperHelper<TestModule::BuiltInsPtr>(*sel), Slicer::TooManyRowsReturned);
+ auto db = DB::MockDatabase::openConnectionTo("pqmock");
+ auto sel = db->select("SELECT id FROM test");
+ BOOST_REQUIRE_THROW(BoostThrowWrapperHelper<TestModule::BuiltInsPtr>(sel), Slicer::TooManyRowsReturned);
}
BOOST_AUTO_TEST_CASE( select_noRowsComplex )
{
- auto db = DBPtr(DB::MockDatabase::openConnectionTo("pqmock"));
- auto sel = SelectPtr(db->newSelectCommand("SELECT id FROM test WHERE false"));
- BOOST_REQUIRE_THROW(BoostThrowWrapperHelper<TestModule::BuiltInsPtr>(*sel), Slicer::NoRowsReturned);
+ auto db = DB::MockDatabase::openConnectionTo("pqmock");
+ auto sel = db->select("SELECT id FROM test WHERE false");
+ BOOST_REQUIRE_THROW(BoostThrowWrapperHelper<TestModule::BuiltInsPtr>(sel), Slicer::NoRowsReturned);
}
BOOST_AUTO_TEST_CASE( select_emptySequence )
{
- auto db = DBPtr(DB::MockDatabase::openConnectionTo("pqmock"));
- auto sel = SelectPtr(db->newSelectCommand("SELECT id FROM test WHERE false"));
- auto bi = Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, TestModule::BaseSeq>(*sel);
+ auto db = DB::MockDatabase::openConnectionTo("pqmock");
+ auto sel = db->select("SELECT id FROM test WHERE false");
+ auto bi = Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, TestModule::BaseSeq>(sel);
BOOST_REQUIRE_EQUAL(0, bi.size());
}
BOOST_AUTO_TEST_CASE( select_null )
{
- auto db = DBPtr(DB::MockDatabase::openConnectionTo("pqmock"));
+ auto db = DB::MockDatabase::openConnectionTo("pqmock");
db->execute("INSERT INTO test(id) VALUES(NULL)");
- auto sel = SelectPtr(db->newSelectCommand("SELECT id optSimple FROM test WHERE id IS NULL"));
- auto oi = Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, TestModule::OptionalsPtr>(*sel);
+ auto sel = db->select("SELECT id optSimple FROM test WHERE id IS NULL");
+ auto oi = Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, TestModule::OptionalsPtr>(sel);
BOOST_REQUIRE(!oi->optSimple);
- sel = SelectPtr(db->newSelectCommand("SELECT MAX(id) optSimple FROM test WHERE id IS NOT NULL"));
- oi = Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, TestModule::OptionalsPtr>(*sel);
+ sel = db->select("SELECT MAX(id) optSimple FROM test WHERE id IS NOT NULL");
+ oi = Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, TestModule::OptionalsPtr>(sel);
BOOST_REQUIRE(oi->optSimple);
BOOST_REQUIRE_EQUAL(*oi->optSimple, 4);
- sel = SelectPtr(db->newSelectCommand("SELECT MAX(id) FROM test WHERE false"));
- auto v = Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, IceUtil::Optional<Ice::Int>>(*sel);
+ sel = db->select("SELECT MAX(id) FROM test WHERE false");
+ auto v = Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, IceUtil::Optional<Ice::Int>>(sel);
BOOST_REQUIRE(!v);
}