diff options
Diffstat (limited to 'slicer/db/testSelect.cpp')
-rw-r--r-- | slicer/db/testSelect.cpp | 153 |
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); } |