|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044 |
- #include <cpphibernate/driver/mariadb.h>
-
- #include "test_helper.h"
- #include "test_schema.h"
- #include "mariadb_mock.h"
-
- using namespace ::testing;
- using namespace ::cpphibernate;
- using namespace ::boost::hana::literals;
-
- TEST(CppHibernateTests, read_test1)
- {
- StrictMock<mariadb_mock> mock;
-
- expect_query(mock, "START TRANSACTION");
- expect_query(mock, "SELECT "
- "BinToUuid(`tbl_test1`.`tbl_test1_id`), "
- "`tbl_test1`.`str_data`, "
- "`tbl_test1`.`str64_data`, "
- "`tbl_test1`.`u32_nullable`, "
- "`tbl_test1`.`u32_ptr_u`, "
- "`tbl_test1`.`u32_ptr_s` "
- "FROM "
- "`tbl_test1` "
- "WHERE "
- "(`tbl_test1`.`tbl_test1_id`=UuidToBin('X3d12697a-abb9-11e8-98d0-529269fb1459X')) ",
- result_used({
- { "3d12697a-abb9-11e8-98d0-529269fb1459", "str_data of class `test1` object `t1`", "str64_data of class `test1` object `t1`", nullptr, "123", "456" }
- }));
- expect_query(mock, "COMMIT");
-
- EXPECT_CALL(
- mock,
- mysql_close(
- reinterpret_cast<MYSQL*>(0x1111)));
-
- EXPECT_CALL(
- mock,
- mysql_real_escape_string(reinterpret_cast<MYSQL*>(0x1111), _, _, _))
- .Times(AnyNumber())
- .WillRepeatedly(WithArgs<1, 2, 3>(EscapeString()));
-
- test1 t1;
- t1.id = uuid("3d12697a-abb9-11e8-98d0-529269fb1459");
-
- ::cppmariadb::connection connection(reinterpret_cast<MYSQL*>(0x1111));
- auto context = make_context<mariadb_driver>(test_schema, connection);
-
- context.read(t1);
-
- EXPECT_EQ (t1.id, uuid("3d12697a-abb9-11e8-98d0-529269fb1459"));
- EXPECT_EQ (t1.str_data, "str_data of class `test1` object `t1`");
- EXPECT_EQ (t1.str64_data, "str64_data of class `test1` object `t1`");
- EXPECT_FALSE(static_cast<bool>(t1.u32_nullable));
- ASSERT_TRUE (static_cast<bool>(t1.u32_ptr_u));
- EXPECT_EQ (*t1.u32_ptr_u, 123);
- ASSERT_TRUE (static_cast<bool>(t1.u32_ptr_s));
- EXPECT_EQ (*t1.u32_ptr_s, 456);
- }
-
- TEST(CppHibernateTests, read_test2)
- {
- StrictMock<mariadb_mock> mock;
-
- expect_query(mock, "START TRANSACTION");
- expect_query(mock, "SELECT "
- "BinToUuid(`tbl_test2`.`tbl_test2_id`), "
- "`tbl_test2`.`u8_data`, "
- "`tbl_test2`.`i8_data`, "
- "`tbl_test2`.`u16_data`, "
- "`tbl_test2`.`i16_data` "
- "FROM "
- "`tbl_test2` "
- "WHERE "
- "(`tbl_test2`.`tbl_test2_id`=UuidToBin('X3d1270dc-abb9-11e8-98d0-529269fb1459X')) ",
- result_used({
- { "3d1270dc-abb9-11e8-98d0-529269fb1459", "1", "2", "3", "4" }
- }));
- expect_query(mock, "COMMIT");
-
- EXPECT_CALL(
- mock,
- mysql_real_escape_string(reinterpret_cast<MYSQL*>(0x1111), _, _, _))
- .Times(AnyNumber())
- .WillRepeatedly(WithArgs<1, 2, 3>(EscapeString()));
-
- EXPECT_CALL(
- mock,
- mysql_close(
- reinterpret_cast<MYSQL*>(0x1111)));
-
- ::cppmariadb::connection connection(reinterpret_cast<MYSQL*>(0x1111));
- auto context = make_context<mariadb_driver>(test_schema, connection);
-
- constexpr decltype(auto) test2_key_field = test_schema.tables[1_c].fields[0_c];
-
- test2 t2;
- context.read(t2, where(equal(test2_key_field, "3d1270dc-abb9-11e8-98d0-529269fb1459")));
-
- EXPECT_EQ(t2.id, uuid("3d1270dc-abb9-11e8-98d0-529269fb1459"));
- EXPECT_EQ(t2.u8_data, 1);
- EXPECT_EQ(t2.i8_data, 2);
- EXPECT_EQ(t2.u16_data, 3);
- EXPECT_EQ(t2.i16_data, 4);
- }
-
- TEST(CppHibernateTests, read_test3)
- {
- StrictMock<mariadb_mock> mock;
-
- expect_query(mock, "START TRANSACTION");
- expect_query(mock, "SELECT "
- "BinToUuid(`tbl_test3`.`tbl_test3_id`), "
- "`tbl_test3`.`u32_data`, "
- "`tbl_test3`.`i32_data`, "
- "`tbl_test3`.`u64_data`, "
- "`tbl_test3`.`i64_data` "
- "FROM "
- "`tbl_test3` "
- "WHERE "
- "(`tbl_test3`.`tbl_test3_id`=UuidToBin('X3d12737a-abb9-11e8-98d0-529269fb1459X')) ",
- result_used({
- { "3d12737a-abb9-11e8-98d0-529269fb1459", "5", "6", "7", "8" }
- }));
- expect_query(mock, "COMMIT");
-
- EXPECT_CALL(
- mock,
- mysql_real_escape_string(reinterpret_cast<MYSQL*>(0x1111), _, _, _))
- .Times(AnyNumber())
- .WillRepeatedly(WithArgs<1, 2, 3>(EscapeString()));
-
- EXPECT_CALL(
- mock,
- mysql_close(
- reinterpret_cast<MYSQL*>(0x1111)));
-
- ::cppmariadb::connection connection(reinterpret_cast<MYSQL*>(0x1111));
- auto context = make_context<mariadb_driver>(test_schema, connection);
-
- test3 t3;
- t3.id = uuid("3d12737a-abb9-11e8-98d0-529269fb1459");
-
- context.read(t3);
-
- EXPECT_EQ(t3.id, uuid("3d12737a-abb9-11e8-98d0-529269fb1459"));
- EXPECT_EQ(t3.u32_data, 5);
- EXPECT_EQ(t3.i32_data, 6);
- EXPECT_EQ(t3.u64_data, 7);
- EXPECT_EQ(t3.i64_data, 8);
- }
-
- TEST(CppHibernateTests, read_derived1_static)
- {
- StrictMock<mariadb_mock> mock;
-
- expect_query(mock, "START TRANSACTION");
- expect_query(mock, "SELECT "
- "BinToUuid(`tbl_base`.`tbl_base_id`), "
- "`tbl_base`.`name`, "
- "BinToUuid(`tbl_derived1`.`tbl_derived1_id`), "
- "`tbl_derived1`.`enum_data`, "
- "BinToUuid(`T0`.`tbl_test1_id`), "
- "`T0`.`str_data`, "
- "`T0`.`str64_data`, "
- "`T0`.`u32_nullable`, "
- "`T0`.`u32_ptr_u`, "
- "`T0`.`u32_ptr_s` "
- "FROM "
- "`tbl_derived1` "
- "JOIN "
- "`tbl_base` ON `tbl_derived1`.`tbl_base_id`=`tbl_base`.`tbl_base_id` "
- "LEFT JOIN "
- "`tbl_test1` AS `T0` ON `tbl_derived1`.`tbl_test1_id_test1_data`=`T0`.`tbl_test1_id` "
- "WHERE "
- "(`tbl_derived1`.`tbl_derived1_id`=UuidToBin('X3d12758c-abb9-11e8-98d0-529269fb1459X')) ",
- result_used({
- { "3d12778a-abb9-11e8-98d0-529269fb1459", "derived1", "3d12758c-abb9-11e8-98d0-529269fb1459", "test2", "3d127988-abb9-11e8-98d0-529269fb1459", "str_data of class `test1` object `d1.test1_data`", "str64_data of class `test1` object `d1.test1_data`", "32", nullptr, "789" }
- }));
- expect_query(mock, "COMMIT");
-
- EXPECT_CALL(
- mock,
- mysql_real_escape_string(reinterpret_cast<MYSQL*>(0x1111), _, _, _))
- .Times(AnyNumber())
- .WillRepeatedly(WithArgs<1, 2, 3>(EscapeString()));
-
- EXPECT_CALL(
- mock,
- mysql_close(
- reinterpret_cast<MYSQL*>(0x1111)));
-
- ::cppmariadb::connection connection(reinterpret_cast<MYSQL*>(0x1111));
- auto context = make_context<mariadb_driver>(test_schema, connection);
-
- derived1 d1;
- d1.derived1_id = uuid("3d12758c-abb9-11e8-98d0-529269fb1459");
-
- context.read(d1);
-
- EXPECT_EQ (d1.id, uuid("3d12778a-abb9-11e8-98d0-529269fb1459"));
- EXPECT_EQ (d1.derived1_id, uuid("3d12758c-abb9-11e8-98d0-529269fb1459"));
- EXPECT_EQ (d1.name, "derived1");
- EXPECT_EQ (d1.enum_data, test_enum::test2);
- EXPECT_EQ (d1.test1_data.str_data, "str_data of class `test1` object `d1.test1_data`");
- EXPECT_EQ (d1.test1_data.str64_data, "str64_data of class `test1` object `d1.test1_data`");
- ASSERT_TRUE (static_cast<bool>(d1.test1_data.u32_nullable));
- EXPECT_EQ (*d1.test1_data.u32_nullable, 32);
- ASSERT_TRUE (static_cast<bool>(d1.test1_data.u32_ptr_s));
- EXPECT_EQ (*d1.test1_data.u32_ptr_s, 789);
- EXPECT_FALSE(static_cast<bool>(d1.test1_data.u32_ptr_u));
- }
-
- TEST(CppHibernateTests, read_derived2_static)
- {
- StrictMock<mariadb_mock> mock;
-
- expect_query(mock, "START TRANSACTION");
- expect_query(mock, "SELECT "
- "BinToUuid(`tbl_base`.`tbl_base_id`), "
- "`tbl_base`.`name`, "
- "BinToUuid(`tbl_derived2`.`tbl_derived2_id`), "
- "BinToUuid(`T0`.`tbl_test2_id`), "
- "`T0`.`u8_data`, "
- "`T0`.`i8_data`, "
- "`T0`.`u16_data`, "
- "`T0`.`i16_data`, "
- "BinToUuid(`T1`.`tbl_test2_id`), "
- "`T1`.`u8_data`, "
- "`T1`.`i8_data`, "
- "`T1`.`u16_data`, "
- "`T1`.`i16_data`, "
- "BinToUuid(`T2`.`tbl_test2_id`), "
- "`T2`.`u8_data`, "
- "`T2`.`i8_data`, "
- "`T2`.`u16_data`, "
- "`T2`.`i16_data` "
- "FROM "
- "`tbl_derived2` "
- "JOIN "
- "`tbl_base` ON `tbl_derived2`.`tbl_base_id`=`tbl_base`.`tbl_base_id` "
- "LEFT JOIN "
- "`tbl_test2` AS `T0` ON `tbl_derived2`.`tbl_test2_id_test2_nullable`=`T0`.`tbl_test2_id` "
- "LEFT JOIN "
- "`tbl_test2` AS `T1` ON `tbl_derived2`.`tbl_test2_id_test2_ptr_u`=`T1`.`tbl_test2_id` "
- "LEFT JOIN "
- "`tbl_test2` AS `T2` ON `tbl_derived2`.`tbl_test2_id_test2_ptr_s`=`T2`.`tbl_test2_id` "
- "WHERE "
- "(`tbl_derived2`.`tbl_derived2_id`=UuidToBin('X3d127bcc-abb9-11e8-98d0-529269fb1459X')) ",
- result_used({
- { "3d127db6-abb9-11e8-98d0-529269fb1459", "derived2", "3d127bcc-abb9-11e8-98d0-529269fb1459", "3d1283a6-abb9-11e8-98d0-529269fb1459", "10", "11", "12", "13", "3d128522-abb9-11e8-98d0-529269fb1459", "20", "21", "22", "23", nullptr, nullptr, nullptr, nullptr, nullptr }
- }));
- expect_query(mock, "COMMIT");
-
- EXPECT_CALL(
- mock,
- mysql_real_escape_string(reinterpret_cast<MYSQL*>(0x1111), _, _, _))
- .Times(AnyNumber())
- .WillRepeatedly(WithArgs<1, 2, 3>(EscapeString()));
-
- EXPECT_CALL(
- mock,
- mysql_close(
- reinterpret_cast<MYSQL*>(0x1111)));
-
- ::cppmariadb::connection connection(reinterpret_cast<MYSQL*>(0x1111));
- auto context = make_context<mariadb_driver>(test_schema, connection);
-
- derived2 d2;
- d2.derived2_id = uuid("3d127bcc-abb9-11e8-98d0-529269fb1459");
-
- context.read(d2);
-
- EXPECT_EQ (d2.id, uuid("3d127db6-abb9-11e8-98d0-529269fb1459"));
- EXPECT_EQ (d2.derived2_id, uuid("3d127bcc-abb9-11e8-98d0-529269fb1459"));
- EXPECT_EQ (d2.name, "derived2");
- ASSERT_TRUE (static_cast<bool>(d2.test2_nullable));
- EXPECT_EQ (d2.test2_nullable->u8_data, 10);
- EXPECT_EQ (d2.test2_nullable->i8_data, 11);
- EXPECT_EQ (d2.test2_nullable->u16_data, 12);
- EXPECT_EQ (d2.test2_nullable->i16_data, 13);
- ASSERT_TRUE (static_cast<bool>(d2.test2_ptr_u));
- EXPECT_EQ (d2.test2_ptr_u->u8_data, 20);
- EXPECT_EQ (d2.test2_ptr_u->i8_data, 21);
- EXPECT_EQ (d2.test2_ptr_u->u16_data, 22);
- EXPECT_EQ (d2.test2_ptr_u->i16_data, 23);
- EXPECT_FALSE(static_cast<bool>(d2.test2_ptr_s));
- }
-
- TEST(CppHibernateTests, read_derived3_static)
- {
- StrictMock<mariadb_mock> mock;
-
- expect_query(mock, "START TRANSACTION");
- expect_query(mock, "SELECT "
- "BinToUuid(`tbl_base`.`tbl_base_id`), "
- "`tbl_base`.`name`, "
- "BinToUuid(`tbl_derived2`.`tbl_derived2_id`), "
- "BinToUuid(`T0`.`tbl_test2_id`), "
- "`T0`.`u8_data`, "
- "`T0`.`i8_data`, "
- "`T0`.`u16_data`, "
- "`T0`.`i16_data`, "
- "BinToUuid(`T1`.`tbl_test2_id`), "
- "`T1`.`u8_data`, "
- "`T1`.`i8_data`, "
- "`T1`.`u16_data`, "
- "`T1`.`i16_data`, "
- "BinToUuid(`T2`.`tbl_test2_id`), "
- "`T2`.`u8_data`, "
- "`T2`.`i8_data`, "
- "`T2`.`u16_data`, "
- "`T2`.`i16_data`, "
- "BinToUuid(`tbl_derived3`.`tbl_derived3_id`) "
- "FROM "
- "`tbl_derived3` "
- "JOIN "
- "`tbl_derived2` ON `tbl_derived3`.`tbl_derived2_id`=`tbl_derived2`.`tbl_derived2_id` "
- "JOIN "
- "`tbl_base` ON `tbl_derived2`.`tbl_base_id`=`tbl_base`.`tbl_base_id` "
- "LEFT JOIN "
- "`tbl_test2` AS `T0` ON `tbl_derived2`.`tbl_test2_id_test2_nullable`=`T0`.`tbl_test2_id` "
- "LEFT JOIN "
- "`tbl_test2` AS `T1` ON `tbl_derived2`.`tbl_test2_id_test2_ptr_u`=`T1`.`tbl_test2_id` "
- "LEFT JOIN "
- "`tbl_test2` AS `T2` ON `tbl_derived2`.`tbl_test2_id_test2_ptr_s`=`T2`.`tbl_test2_id` "
- "WHERE "
- "(`tbl_derived3`.`tbl_derived3_id`=UuidToBin('X3d12866c-abb9-11e8-98d0-529269fb1459X')) ",
- result_used({
- { "3d1288ce-abb9-11e8-98d0-529269fb1459", "derived3", "3d1287a2-abb9-11e8-98d0-529269fb1459", nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, "3d12866c-abb9-11e8-98d0-529269fb1459" }
- }));
- expect_query(mock, "SELECT "
- "BinToUuid(`tbl_test3`.`tbl_test3_id`), "
- "`tbl_test3`.`u32_data`, "
- "`tbl_test3`.`i32_data`, "
- "`tbl_test3`.`u64_data`, "
- "`tbl_test3`.`i64_data` "
- "FROM "
- "`tbl_test3` "
- "WHERE "
- "(`tbl_test3`.`tbl_derived3_id_test3_list`=UuidToBin('X3d12866c-abb9-11e8-98d0-529269fb1459X')) "
- "ORDER BY "
- "`tbl_test3`.`tbl_derived3_index_test3_list` ASC ",
- result_used({
- { "3d1289f0-abb9-11e8-98d0-529269fb1459", "100", "101", "102", "103" },
- { "3d128b26-abb9-11e8-98d0-529269fb1459", "110", "111", "112", "113" },
- }));
- expect_query(mock, "SELECT "
- "BinToUuid(`tbl_test3`.`tbl_test3_id`), "
- "`tbl_test3`.`u32_data`, "
- "`tbl_test3`.`i32_data`, "
- "`tbl_test3`.`u64_data`, "
- "`tbl_test3`.`i64_data` "
- "FROM "
- "`tbl_test3` "
- "WHERE "
- "(`tbl_test3`.`tbl_derived3_id_test3_vector`=UuidToBin('X3d12866c-abb9-11e8-98d0-529269fb1459X')) "
- "ORDER BY "
- "`tbl_test3`.`tbl_derived3_index_test3_vector` ASC ",
- result_used({
- { "3d128eb4-abb9-11e8-98d0-529269fb1459", "120", "121", "122", "123" },
- { "3d128ffe-abb9-11e8-98d0-529269fb1459", "130", "131", "132", "133" },
- { "3d129134-abb9-11e8-98d0-529269fb1459", "140", "141", "142", "143" },
- }));
- expect_query(mock, "COMMIT");
-
- EXPECT_CALL(
- mock,
- mysql_real_escape_string(reinterpret_cast<MYSQL*>(0x1111), _, _, _))
- .Times(AnyNumber())
- .WillRepeatedly(WithArgs<1, 2, 3>(EscapeString()));
-
- EXPECT_CALL(
- mock,
- mysql_close(
- reinterpret_cast<MYSQL*>(0x1111)));
-
- ::cppmariadb::connection connection(reinterpret_cast<MYSQL*>(0x1111));
- auto context = make_context<mariadb_driver>(test_schema, connection);
-
- derived3 d3;
- d3.derived3_id = uuid("3d12866c-abb9-11e8-98d0-529269fb1459");
-
- context.read(d3);
-
- EXPECT_EQ (d3.id, uuid("3d1288ce-abb9-11e8-98d0-529269fb1459"));
- EXPECT_EQ (d3.name, "derived3");
- EXPECT_EQ (d3.derived2_id, uuid("3d1287a2-abb9-11e8-98d0-529269fb1459"));
- EXPECT_FALSE(static_cast<bool>(d3.test2_nullable));
- EXPECT_FALSE(static_cast<bool>(d3.test2_ptr_u));
- EXPECT_FALSE(static_cast<bool>(d3.test2_ptr_s));
- EXPECT_EQ (d3.derived3_id, uuid("3d12866c-abb9-11e8-98d0-529269fb1459"));
-
- {
- auto it = d3.test3_list.begin();
- ASSERT_NE(it, d3.test3_list.end());
- EXPECT_EQ(it->id, uuid("3d1289f0-abb9-11e8-98d0-529269fb1459"));
- EXPECT_EQ(it->u32_data, 100);
- EXPECT_EQ(it->i32_data, 101);
- EXPECT_EQ(it->u64_data, 102);
- EXPECT_EQ(it->i64_data, 103);
- ++it;
-
- ASSERT_NE(it, d3.test3_list.end());
- EXPECT_EQ(it->id, uuid("3d128b26-abb9-11e8-98d0-529269fb1459"));
- EXPECT_EQ(it->u32_data, 110);
- EXPECT_EQ(it->i32_data, 111);
- EXPECT_EQ(it->u64_data, 112);
- EXPECT_EQ(it->i64_data, 113);
- ++it;
-
- EXPECT_EQ(it, d3.test3_list.end());
- }
-
- {
- auto it = d3.test3_vector.begin();
- ASSERT_NE(it, d3.test3_vector.end());
- EXPECT_EQ(it->id, uuid("3d128eb4-abb9-11e8-98d0-529269fb1459"));
- EXPECT_EQ(it->u32_data, 120);
- EXPECT_EQ(it->i32_data, 121);
- EXPECT_EQ(it->u64_data, 122);
- EXPECT_EQ(it->i64_data, 123);
- ++it;
-
- ASSERT_NE(it, d3.test3_vector.end());
- EXPECT_EQ(it->id, uuid("3d128ffe-abb9-11e8-98d0-529269fb1459"));
- EXPECT_EQ(it->u32_data, 130);
- EXPECT_EQ(it->i32_data, 131);
- EXPECT_EQ(it->u64_data, 132);
- EXPECT_EQ(it->i64_data, 133);
- ++it;
-
- ASSERT_NE(it, d3.test3_vector.end());
- EXPECT_EQ(it->id, uuid("3d129134-abb9-11e8-98d0-529269fb1459"));
- EXPECT_EQ(it->u32_data, 140);
- EXPECT_EQ(it->i32_data, 141);
- EXPECT_EQ(it->u64_data, 142);
- EXPECT_EQ(it->i64_data, 143);
- ++it;
-
- EXPECT_EQ(it, d3.test3_vector.end());
- }
- }
-
- TEST(CppHibernateTests, read_derived2_ptr_dynamic)
- {
- StrictMock<mariadb_mock> mock;
-
- expect_query(mock, "START TRANSACTION");
- expect_query(mock, "SELECT "
- "`tbl_base`.`__type` AS `__type`, "
- "BinToUuid(`tbl_base`.`tbl_base_id`), "
- "`tbl_base`.`name`, "
- "BinToUuid(`tbl_derived2`.`tbl_derived2_id`), "
- "BinToUuid(`T0`.`tbl_test2_id`), "
- "`T0`.`u8_data`, "
- "`T0`.`i8_data`, "
- "`T0`.`u16_data`, "
- "`T0`.`i16_data`, "
- "BinToUuid(`T1`.`tbl_test2_id`), "
- "`T1`.`u8_data`, "
- "`T1`.`i8_data`, "
- "`T1`.`u16_data`, "
- "`T1`.`i16_data`, "
- "BinToUuid(`T2`.`tbl_test2_id`), "
- "`T2`.`u8_data`, "
- "`T2`.`i8_data`, "
- "`T2`.`u16_data`, "
- "`T2`.`i16_data`, "
- "BinToUuid(`tbl_derived3`.`tbl_derived3_id`) "
- "FROM "
- "`tbl_derived2` "
- "JOIN "
- "`tbl_base` ON `tbl_derived2`.`tbl_base_id`=`tbl_base`.`tbl_base_id` "
- "LEFT JOIN "
- "`tbl_test2` AS `T0` ON `tbl_derived2`.`tbl_test2_id_test2_nullable`=`T0`.`tbl_test2_id` "
- "LEFT JOIN "
- "`tbl_test2` AS `T1` ON `tbl_derived2`.`tbl_test2_id_test2_ptr_u`=`T1`.`tbl_test2_id` "
- "LEFT JOIN "
- "`tbl_test2` AS `T2` ON `tbl_derived2`.`tbl_test2_id_test2_ptr_s`=`T2`.`tbl_test2_id` "
- "LEFT JOIN "
- "`tbl_derived3` ON `tbl_derived2`.`tbl_derived2_id`=`tbl_derived3`.`tbl_derived2_id` "
- "WHERE "
- "(`tbl_derived2`.`tbl_derived2_id`=UuidToBin('X3d1287a2-abb9-11e8-98d0-529269fb1459X')) ",
- result_used({
- {
- /* base */ "13", "3d1288ce-abb9-11e8-98d0-529269fb1459", "derived3",
- /* derived2 */ "3d1287a2-abb9-11e8-98d0-529269fb1459",
- /* derived2.test2_nullable */ nullptr, nullptr, nullptr, nullptr, nullptr,
- /* derived2.test2_ptr_u */ nullptr, nullptr, nullptr, nullptr, nullptr,
- /* derived2.test2_ptr_s */ nullptr, nullptr, nullptr, nullptr, nullptr,
- /* derived3 */ "3d12866c-abb9-11e8-98d0-529269fb1459"
- }
- }));
- expect_query(mock, "SELECT "
- "BinToUuid(`tbl_test3`.`tbl_test3_id`), "
- "`tbl_test3`.`u32_data`, "
- "`tbl_test3`.`i32_data`, "
- "`tbl_test3`.`u64_data`, "
- "`tbl_test3`.`i64_data` "
- "FROM "
- "`tbl_test3` "
- "WHERE "
- "(`tbl_test3`.`tbl_derived3_id_test3_list`=UuidToBin('X3d12866c-abb9-11e8-98d0-529269fb1459X')) "
- "ORDER BY "
- "`tbl_test3`.`tbl_derived3_index_test3_list` ASC ",
- result_used({
- { "3d1289f0-abb9-11e8-98d0-529269fb1459", "100", "101", "102", "103" },
- { "3d128b26-abb9-11e8-98d0-529269fb1459", "110", "111", "112", "113" },
- }));
- expect_query(mock, "SELECT "
- "BinToUuid(`tbl_test3`.`tbl_test3_id`), "
- "`tbl_test3`.`u32_data`, "
- "`tbl_test3`.`i32_data`, "
- "`tbl_test3`.`u64_data`, "
- "`tbl_test3`.`i64_data` "
- "FROM "
- "`tbl_test3` "
- "WHERE "
- "(`tbl_test3`.`tbl_derived3_id_test3_vector`=UuidToBin('X3d12866c-abb9-11e8-98d0-529269fb1459X')) "
- "ORDER BY "
- "`tbl_test3`.`tbl_derived3_index_test3_vector` ASC ",
- result_used({
- { "3d128eb4-abb9-11e8-98d0-529269fb1459", "120", "121", "122", "123" },
- { "3d128ffe-abb9-11e8-98d0-529269fb1459", "130", "131", "132", "133" },
- { "3d129134-abb9-11e8-98d0-529269fb1459", "140", "141", "142", "143" },
- }));
- expect_query(mock, "COMMIT");
-
- EXPECT_CALL(
- mock,
- mysql_real_escape_string(reinterpret_cast<MYSQL*>(0x1111), _, _, _))
- .Times(AnyNumber())
- .WillRepeatedly(WithArgs<1, 2, 3>(EscapeString()));
-
- EXPECT_CALL(
- mock,
- mysql_close(
- reinterpret_cast<MYSQL*>(0x1111)));
-
- ::cppmariadb::connection connection(reinterpret_cast<MYSQL*>(0x1111));
- auto context = make_context<mariadb_driver>(test_schema, connection);
-
- constexpr decltype(auto) d2_key_field = test_schema.tables[5_c].fields[0_c];
-
- std::unique_ptr<derived2> d2_ptr;
- context.read(d2_ptr, where(equal(d2_key_field, "3d1287a2-abb9-11e8-98d0-529269fb1459")));
- auto* d3_ptr = dynamic_cast<derived3*>(d2_ptr.get());
- ASSERT_TRUE (d3_ptr);
- auto& d3 = *d3_ptr;
- EXPECT_EQ (d3.id, uuid("3d1288ce-abb9-11e8-98d0-529269fb1459"));
- EXPECT_EQ (d3.name, "derived3");
- EXPECT_EQ (d3.derived2_id, uuid("3d1287a2-abb9-11e8-98d0-529269fb1459"));
- EXPECT_FALSE(static_cast<bool>(d3.test2_nullable));
- EXPECT_FALSE(static_cast<bool>(d3.test2_ptr_u));
- EXPECT_FALSE(static_cast<bool>(d3.test2_ptr_s));
- EXPECT_EQ (d3.derived3_id, uuid("3d12866c-abb9-11e8-98d0-529269fb1459"));
-
- {
- auto it = d3.test3_list.begin();
- ASSERT_NE(it, d3.test3_list.end());
- EXPECT_EQ(it->id, uuid("3d1289f0-abb9-11e8-98d0-529269fb1459"));
- EXPECT_EQ(it->u32_data, 100);
- EXPECT_EQ(it->i32_data, 101);
- EXPECT_EQ(it->u64_data, 102);
- EXPECT_EQ(it->i64_data, 103);
- ++it;
-
- ASSERT_NE(it, d3.test3_list.end());
- EXPECT_EQ(it->id, uuid("3d128b26-abb9-11e8-98d0-529269fb1459"));
- EXPECT_EQ(it->u32_data, 110);
- EXPECT_EQ(it->i32_data, 111);
- EXPECT_EQ(it->u64_data, 112);
- EXPECT_EQ(it->i64_data, 113);
- ++it;
-
- EXPECT_EQ(it, d3.test3_list.end());
- }
-
- {
- auto it = d3.test3_vector.begin();
- ASSERT_NE(it, d3.test3_vector.end());
- EXPECT_EQ(it->id, uuid("3d128eb4-abb9-11e8-98d0-529269fb1459"));
- EXPECT_EQ(it->u32_data, 120);
- EXPECT_EQ(it->i32_data, 121);
- EXPECT_EQ(it->u64_data, 122);
- EXPECT_EQ(it->i64_data, 123);
- ++it;
-
- ASSERT_NE(it, d3.test3_vector.end());
- EXPECT_EQ(it->id, uuid("3d128ffe-abb9-11e8-98d0-529269fb1459"));
- EXPECT_EQ(it->u32_data, 130);
- EXPECT_EQ(it->i32_data, 131);
- EXPECT_EQ(it->u64_data, 132);
- EXPECT_EQ(it->i64_data, 133);
- ++it;
-
- ASSERT_NE(it, d3.test3_vector.end());
- EXPECT_EQ(it->id, uuid("3d129134-abb9-11e8-98d0-529269fb1459"));
- EXPECT_EQ(it->u32_data, 140);
- EXPECT_EQ(it->i32_data, 141);
- EXPECT_EQ(it->u64_data, 142);
- EXPECT_EQ(it->i64_data, 143);
- ++it;
-
- EXPECT_EQ(it, d3.test3_vector.end());
- }
- }
-
- TEST(CppHibernateTests, read_base_ptr_vector_dynamic)
- {
- StrictMock<mariadb_mock> mock;
-
- expect_query(mock, "START TRANSACTION");
- expect_query(mock, "SELECT "
- "`tbl_base`.`__type` AS `__type`, "
- "BinToUuid(`tbl_base`.`tbl_base_id`), "
- "`tbl_base`.`name`, "
- "BinToUuid(`tbl_derived1`.`tbl_derived1_id`), "
- "`tbl_derived1`.`enum_data`, "
- "BinToUuid(`T0`.`tbl_test1_id`), "
- "`T0`.`str_data`, "
- "`T0`.`str64_data`, "
- "`T0`.`u32_nullable`, "
- "`T0`.`u32_ptr_u`, "
- "`T0`.`u32_ptr_s`, "
- "BinToUuid(`tbl_derived2`.`tbl_derived2_id`), "
- "BinToUuid(`T1`.`tbl_test2_id`), "
- "`T1`.`u8_data`, "
- "`T1`.`i8_data`, "
- "`T1`.`u16_data`, "
- "`T1`.`i16_data`, "
- "BinToUuid(`T2`.`tbl_test2_id`), "
- "`T2`.`u8_data`, "
- "`T2`.`i8_data`, "
- "`T2`.`u16_data`, "
- "`T2`.`i16_data`, "
- "BinToUuid(`T3`.`tbl_test2_id`), "
- "`T3`.`u8_data`, "
- "`T3`.`i8_data`, "
- "`T3`.`u16_data`, "
- "`T3`.`i16_data`, "
- "BinToUuid(`tbl_derived3`.`tbl_derived3_id`) "
- "FROM "
- "`tbl_base` "
- "LEFT JOIN "
- "`tbl_derived1` ON `tbl_base`.`tbl_base_id`=`tbl_derived1`.`tbl_base_id` "
- "LEFT JOIN "
- "`tbl_test1` AS `T0` ON `tbl_derived1`.`tbl_test1_id_test1_data`=`T0`.`tbl_test1_id` "
- "LEFT JOIN "
- "`tbl_derived2` ON `tbl_base`.`tbl_base_id`=`tbl_derived2`.`tbl_base_id` "
- "LEFT JOIN "
- "`tbl_test2` AS `T1` ON `tbl_derived2`.`tbl_test2_id_test2_nullable`=`T1`.`tbl_test2_id` "
- "LEFT JOIN "
- "`tbl_test2` AS `T2` ON `tbl_derived2`.`tbl_test2_id_test2_ptr_u`=`T2`.`tbl_test2_id` "
- "LEFT JOIN "
- "`tbl_test2` AS `T3` ON `tbl_derived2`.`tbl_test2_id_test2_ptr_s`=`T3`.`tbl_test2_id` "
- "LEFT JOIN "
- "`tbl_derived3` ON `tbl_derived2`.`tbl_derived2_id`=`tbl_derived3`.`tbl_derived2_id` ",
- result_used({
- {
- /* base */ "11", "3d12778a-abb9-11e8-98d0-529269fb1459", "derived1",
- /* derived1 */ "3d12758c-abb9-11e8-98d0-529269fb1459", "test2",
- /* derived1.test1 */ "3d127988-abb9-11e8-98d0-529269fb1459", "str_data of class `test1` object `d1.test1_data`", "str64_data of class `test1` object `d1.test1_data`", "32", nullptr, "789",
- /* derived2 */ nullptr,
- /* derived2.test2_nullable */ nullptr, nullptr, nullptr, nullptr, nullptr,
- /* derived2.test2_ptr_u */ nullptr, nullptr, nullptr, nullptr, nullptr,
- /* derived2.test2_ptr_s */ nullptr, nullptr, nullptr, nullptr, nullptr,
- /* derived3 */ nullptr
- },
- {
- /* base */ "12", "3d127db6-abb9-11e8-98d0-529269fb1459", "derived2",
- /* derived1 */ nullptr, nullptr,
- /* derived1.test1 */ nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
- /* derived2 */ "3d127bcc-abb9-11e8-98d0-529269fb1459",
- /* derived2.test2_nullable */ "3d1283a6-abb9-11e8-98d0-529269fb1459", "10", "11", "12", "13",
- /* derived2.test2_ptr_u */ "3d128522-abb9-11e8-98d0-529269fb1459", "20", "21", "22", "23",
- /* derived2.test2_ptr_s */ nullptr, nullptr, nullptr, nullptr, nullptr,
- /* derived3 */ nullptr
- },
- {
- /* base */ "13", "3d1288ce-abb9-11e8-98d0-529269fb1459", "derived3",
- /* derived1 */ nullptr, nullptr,
- /* derived1.test1 */ nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
- /* derived2 */ "3d1287a2-abb9-11e8-98d0-529269fb1459",
- /* derived2.test2_nullable */ nullptr, nullptr, nullptr, nullptr, nullptr,
- /* derived2.test2_ptr_u */ nullptr, nullptr, nullptr, nullptr, nullptr,
- /* derived2.test2_ptr_s */ nullptr, nullptr, nullptr, nullptr, nullptr,
- /* derived3 */ "3d12866c-abb9-11e8-98d0-529269fb1459"
- },
- }));
- expect_query(mock, "SELECT "
- "BinToUuid(`tbl_test3`.`tbl_test3_id`), "
- "`tbl_test3`.`u32_data`, "
- "`tbl_test3`.`i32_data`, "
- "`tbl_test3`.`u64_data`, "
- "`tbl_test3`.`i64_data` "
- "FROM "
- "`tbl_test3` "
- "WHERE "
- "(`tbl_test3`.`tbl_derived3_id_test3_list`=UuidToBin('X3d12866c-abb9-11e8-98d0-529269fb1459X')) "
- "ORDER BY "
- "`tbl_test3`.`tbl_derived3_index_test3_list` ASC ",
- result_used({
- { "3d1289f0-abb9-11e8-98d0-529269fb1459", "100", "101", "102", "103" },
- { "3d128b26-abb9-11e8-98d0-529269fb1459", "110", "111", "112", "113" },
- }));
- expect_query(mock, "SELECT "
- "BinToUuid(`tbl_test3`.`tbl_test3_id`), "
- "`tbl_test3`.`u32_data`, "
- "`tbl_test3`.`i32_data`, "
- "`tbl_test3`.`u64_data`, "
- "`tbl_test3`.`i64_data` "
- "FROM "
- "`tbl_test3` "
- "WHERE "
- "(`tbl_test3`.`tbl_derived3_id_test3_vector`=UuidToBin('X3d12866c-abb9-11e8-98d0-529269fb1459X')) "
- "ORDER BY "
- "`tbl_test3`.`tbl_derived3_index_test3_vector` ASC ",
- result_used({
- { "3d128eb4-abb9-11e8-98d0-529269fb1459", "120", "121", "122", "123" },
- { "3d128ffe-abb9-11e8-98d0-529269fb1459", "130", "131", "132", "133" },
- { "3d129134-abb9-11e8-98d0-529269fb1459", "140", "141", "142", "143" },
- }));
- expect_query(mock, "COMMIT");
-
- EXPECT_CALL(
- mock,
- mysql_real_escape_string(reinterpret_cast<MYSQL*>(0x1111), _, _, _))
- .Times(AnyNumber())
- .WillRepeatedly(WithArgs<1, 2, 3>(EscapeString()));
-
- EXPECT_CALL(
- mock,
- mysql_close(
- reinterpret_cast<MYSQL*>(0x1111)));
-
- ::cppmariadb::connection connection(reinterpret_cast<MYSQL*>(0x1111));
- auto context = make_context<mariadb_driver>(test_schema, connection);
-
- using base_ptr_type = std::unique_ptr<base>;
- using base_vec_type = std::vector<base_ptr_type>;
-
- base_vec_type base_vec;
- context.read(base_vec);
-
- auto bIt = base_vec.begin();
- {
- ASSERT_NE (bIt, base_vec.end());
- auto* base_ptr = bIt->get();
- ASSERT_TRUE(static_cast<bool>(base_ptr));
- auto* d1_ptr = dynamic_cast<derived1*>(base_ptr);
- ASSERT_TRUE(static_cast<bool>(d1_ptr));
- auto& d1 = *d1_ptr;
- ++bIt;
-
- EXPECT_EQ (d1.id, uuid("3d12778a-abb9-11e8-98d0-529269fb1459"));
- EXPECT_EQ (d1.derived1_id, uuid("3d12758c-abb9-11e8-98d0-529269fb1459"));
- EXPECT_EQ (d1.name, "derived1");
- EXPECT_EQ (d1.enum_data, test_enum::test2);
- EXPECT_EQ (d1.test1_data.str_data, "str_data of class `test1` object `d1.test1_data`");
- EXPECT_EQ (d1.test1_data.str64_data, "str64_data of class `test1` object `d1.test1_data`");
- ASSERT_TRUE (static_cast<bool>(d1.test1_data.u32_nullable));
- EXPECT_EQ (*d1.test1_data.u32_nullable, 32);
- ASSERT_TRUE (static_cast<bool>(d1.test1_data.u32_ptr_s));
- EXPECT_EQ (*d1.test1_data.u32_ptr_s, 789);
- EXPECT_FALSE(static_cast<bool>(d1.test1_data.u32_ptr_u));
- }
-
- {
- ASSERT_NE (bIt, base_vec.end());
- auto* base_ptr = bIt->get();
- ASSERT_TRUE(static_cast<bool>(base_ptr));
- auto* d2_ptr = dynamic_cast<derived2*>(base_ptr);
- ASSERT_TRUE(static_cast<bool>(d2_ptr));
- auto& d2 = *d2_ptr;
- ++bIt;
-
- EXPECT_EQ (d2.id, uuid("3d127db6-abb9-11e8-98d0-529269fb1459"));
- EXPECT_EQ (d2.derived2_id, uuid("3d127bcc-abb9-11e8-98d0-529269fb1459"));
- EXPECT_EQ (d2.name, "derived2");
- ASSERT_TRUE (static_cast<bool>(d2.test2_nullable));
- EXPECT_EQ (d2.test2_nullable->u8_data, 10);
- EXPECT_EQ (d2.test2_nullable->i8_data, 11);
- EXPECT_EQ (d2.test2_nullable->u16_data, 12);
- EXPECT_EQ (d2.test2_nullable->i16_data, 13);
- ASSERT_TRUE (static_cast<bool>(d2.test2_ptr_u));
- EXPECT_EQ (d2.test2_ptr_u->u8_data, 20);
- EXPECT_EQ (d2.test2_ptr_u->i8_data, 21);
- EXPECT_EQ (d2.test2_ptr_u->u16_data, 22);
- EXPECT_EQ (d2.test2_ptr_u->i16_data, 23);
- EXPECT_FALSE(static_cast<bool>(d2.test2_ptr_s));
- }
-
- {
- ASSERT_NE (bIt, base_vec.end());
- auto* base_ptr = bIt->get();
- ASSERT_TRUE(static_cast<bool>(base_ptr));
- auto* d3_ptr = dynamic_cast<derived3*>(base_ptr);
- ASSERT_TRUE(static_cast<bool>(d3_ptr));
- auto& d3 = *d3_ptr;
- ++bIt;
-
- EXPECT_EQ (d3.id, uuid("3d1288ce-abb9-11e8-98d0-529269fb1459"));
- EXPECT_EQ (d3.name, "derived3");
- EXPECT_EQ (d3.derived2_id, uuid("3d1287a2-abb9-11e8-98d0-529269fb1459"));
- EXPECT_FALSE(static_cast<bool>(d3.test2_nullable));
- EXPECT_FALSE(static_cast<bool>(d3.test2_ptr_u));
- EXPECT_FALSE(static_cast<bool>(d3.test2_ptr_s));
- EXPECT_EQ (d3.derived3_id, uuid("3d12866c-abb9-11e8-98d0-529269fb1459"));
-
- {
- auto it = d3.test3_list.begin();
- ASSERT_NE(it, d3.test3_list.end());
- EXPECT_EQ(it->id, uuid("3d1289f0-abb9-11e8-98d0-529269fb1459"));
- EXPECT_EQ(it->u32_data, 100);
- EXPECT_EQ(it->i32_data, 101);
- EXPECT_EQ(it->u64_data, 102);
- EXPECT_EQ(it->i64_data, 103);
- ++it;
-
- ASSERT_NE(it, d3.test3_list.end());
- EXPECT_EQ(it->id, uuid("3d128b26-abb9-11e8-98d0-529269fb1459"));
- EXPECT_EQ(it->u32_data, 110);
- EXPECT_EQ(it->i32_data, 111);
- EXPECT_EQ(it->u64_data, 112);
- EXPECT_EQ(it->i64_data, 113);
- ++it;
-
- EXPECT_EQ(it, d3.test3_list.end());
- }
-
- {
- auto it = d3.test3_vector.begin();
- ASSERT_NE(it, d3.test3_vector.end());
- EXPECT_EQ(it->id, uuid("3d128eb4-abb9-11e8-98d0-529269fb1459"));
- EXPECT_EQ(it->u32_data, 120);
- EXPECT_EQ(it->i32_data, 121);
- EXPECT_EQ(it->u64_data, 122);
- EXPECT_EQ(it->i64_data, 123);
- ++it;
-
- ASSERT_NE(it, d3.test3_vector.end());
- EXPECT_EQ(it->id, uuid("3d128ffe-abb9-11e8-98d0-529269fb1459"));
- EXPECT_EQ(it->u32_data, 130);
- EXPECT_EQ(it->i32_data, 131);
- EXPECT_EQ(it->u64_data, 132);
- EXPECT_EQ(it->i64_data, 133);
- ++it;
-
- ASSERT_NE(it, d3.test3_vector.end());
- EXPECT_EQ(it->id, uuid("3d129134-abb9-11e8-98d0-529269fb1459"));
- EXPECT_EQ(it->u32_data, 140);
- EXPECT_EQ(it->i32_data, 141);
- EXPECT_EQ(it->u64_data, 142);
- EXPECT_EQ(it->i64_data, 143);
- ++it;
-
- EXPECT_EQ(it, d3.test3_vector.end());
- }
- }
-
- EXPECT_EQ(bIt, base_vec.end());
- }
-
- TEST(CppHibernateTests, read_dummy_owner)
- {
- StrictMock<mariadb_mock> mock;
-
- expect_query(mock, "START TRANSACTION");
- expect_query(mock, "SELECT "
- "BinToUuid(`tbl_dummy_owner`.`tbl_dummy_owner_id`) "
- "FROM "
- "`tbl_dummy_owner` "
- "WHERE "
- "(`tbl_dummy_owner`.`tbl_dummy_owner_id`=UuidToBin('X00000000-0000-0000-0000-000000000001X')) ",
- result_used({
- { "00000000-0000-0000-0000-000000000001" },
- }));
- expect_query(mock, "SELECT "
- "BinToUuid(`tbl_dummy_id`.`tbl_dummy_id_id`), "
- "`tbl_dummy_id`.`data` "
- "FROM "
- "`tbl_dummy_id` WHERE (`tbl_dummy_id`.`tbl_dummy_owner_id_dummies`=UuidToBin('X00000000-0000-0000-0000-000000000001X')) "
- "ORDER BY "
- "`tbl_dummy_id`.`tbl_dummy_owner_index_dummies` ASC ",
- result_used({
- { "00000000-0000-0000-0001-000000000001", "123" },
- { "00000000-0000-0000-0001-000000000002", "456" },
- { "00000000-0000-0000-0001-000000000003", "789" },
- }));
- expect_query(mock, "COMMIT");
-
- EXPECT_CALL(
- mock,
- mysql_close(
- reinterpret_cast<MYSQL*>(0x1111)));
-
- EXPECT_CALL(
- mock,
- mysql_real_escape_string(reinterpret_cast<MYSQL*>(0x1111), _, _, _))
- .Times(AnyNumber())
- .WillRepeatedly(WithArgs<1, 2, 3>(EscapeString()));
-
- dummy_owner d;
- d.id = uuid("00000000-0000-0000-0000-000000000001");
-
- ::cppmariadb::connection connection(reinterpret_cast<MYSQL*>(0x1111));
- auto context = make_context<mariadb_driver>(test_schema, connection);
-
- context.read(d);
-
- EXPECT_EQ(d.id, uuid("00000000-0000-0000-0000-000000000001"));
- ASSERT_EQ(d.dummies.size(), 3);
- EXPECT_EQ(d.dummies[0].data, 123);
- EXPECT_EQ(d.dummies[1].data, 456);
- EXPECT_EQ(d.dummies[2].data, 789);
- }
-
- TEST(CppHibernateTests, read_double_usage)
- {
- StrictMock<mariadb_mock> mock;
-
- expect_query(mock, "START TRANSACTION");
- expect_query(mock, "SELECT "
- "`tbl_double_usage`.`tbl_double_usage_id`, "
- "`T0`.`tbl_double_usage_item_id`, "
- "`T0`.`data` "
- "FROM "
- "`tbl_double_usage` "
- "LEFT JOIN "
- "`tbl_double_usage_item` AS `T0` ON `tbl_double_usage`.`tbl_double_usage_id`=`T0`.`tbl_double_usage_id_single_item` "
- "WHERE "
- "(`tbl_double_usage`.`tbl_double_usage_id`='X1X') ",
- result_used({
- { "1", "1001", "123" }
- }));
- expect_query(mock, "SELECT "
- "`tbl_double_usage_item`.`tbl_double_usage_item_id`, "
- "`tbl_double_usage_item`.`data` "
- "FROM "
- "`tbl_double_usage_item` "
- "WHERE "
- "(`tbl_double_usage_item`.`tbl_double_usage_id_multiple_items`='X1X') "
- "ORDER BY "
- "`tbl_double_usage_item`.`tbl_double_usage_index_multiple_items` ASC ",
- result_used({
- { "1002", "456" },
- { "1003", "789" }
- }));
- expect_query(mock, "COMMIT");
-
- EXPECT_CALL(
- mock,
- mysql_close(
- reinterpret_cast<MYSQL*>(0x1111)));
-
- EXPECT_CALL(
- mock,
- mysql_real_escape_string(reinterpret_cast<MYSQL*>(0x1111), _, _, _))
- .Times(AnyNumber())
- .WillRepeatedly(WithArgs<1, 2, 3>(EscapeString()));
-
- double_usage d;
- d.id = 1;
-
- ::cppmariadb::connection connection(reinterpret_cast<MYSQL*>(0x1111));
- auto context = make_context<mariadb_driver>(test_schema, connection);
-
- context.read(d);
-
- EXPECT_EQ (d.id, 1);
- ASSERT_TRUE(d.single_item);
- ASSERT_EQ (d.multiple_items.size(), 2);
- EXPECT_EQ (d.single_item->id, 1001);
- EXPECT_EQ (d.single_item->data, 123);
- EXPECT_EQ (d.multiple_items[0].id, 1002);
- EXPECT_EQ (d.multiple_items[0].data, 456);
- EXPECT_EQ (d.multiple_items[1].id, 1003);
- EXPECT_EQ (d.multiple_items[1].data, 789);
- }
-
- TEST(CppHibernateTests, read_with_modifiers)
- {
- StrictMock<mariadb_mock> mock;
-
- expect_query(mock, "START TRANSACTION");
- expect_query(mock, "SELECT "
- "BinToUuid(`tbl_test1`.`tbl_test1_id`), "
- "`tbl_test1`.`str_data`, "
- "`tbl_test1`.`str64_data`, "
- "`tbl_test1`.`u32_nullable`, "
- "`tbl_test1`.`u32_ptr_u`, "
- "`tbl_test1`.`u32_ptr_s` "
- "FROM "
- "`tbl_test1` "
- "WHERE ("
- "`tbl_test1`.`tbl_test1_id`=UuidToBin('X3d1270dc-abb9-11e8-98d0-529269fb1459X')) "
- "ORDER_BY "
- "`tbl_test1`.`str_data` ASC, "
- "`tbl_test1`.`str64_data` DESC "
- "LIMIT 1 "
- "OFFSET 4",
- result_used({
- { "3d12697a-abb9-11e8-98d0-529269fb1459", "str_data of class `test1` object `t1`", "str64_data of class `test1` object `t1`", nullptr, "123", "456" }
- }));
- expect_query(mock, "COMMIT");
-
- EXPECT_CALL(
- mock,
- mysql_close(
- reinterpret_cast<MYSQL*>(0x1111)));
-
- EXPECT_CALL(
- mock,
- mysql_real_escape_string(reinterpret_cast<MYSQL*>(0x1111), _, _, _))
- .Times(AnyNumber())
- .WillRepeatedly(WithArgs<1, 2, 3>(EscapeString()));
-
- test1 t1;
- ::cppmariadb::connection connection(reinterpret_cast<MYSQL*>(0x1111));
- auto context = make_context<mariadb_driver>(test_schema, connection);
-
- constexpr decltype(auto) test1_key_field = test_schema.tables[0_c].fields[0_c];
- constexpr decltype(auto) test1_tmp_field_0 = test_schema.tables[0_c].fields[1_c];
- constexpr decltype(auto) test1_tmp_field_1 = test_schema.tables[0_c].fields[2_c];
-
- context.read(t1,
- where(equal(test1_key_field, "3d1270dc-abb9-11e8-98d0-529269fb1459")),
- limit(1_c),
- offset(4_c),
- order_by(
- ascending(test1_tmp_field_0),
- descending(test1_tmp_field_1)));
-
- EXPECT_EQ (t1.id, uuid("3d12697a-abb9-11e8-98d0-529269fb1459"));
- EXPECT_EQ (t1.str_data, "str_data of class `test1` object `t1`");
- EXPECT_EQ (t1.str64_data, "str64_data of class `test1` object `t1`");
- EXPECT_FALSE(static_cast<bool>(t1.u32_nullable));
- ASSERT_TRUE (static_cast<bool>(t1.u32_ptr_u));
- EXPECT_EQ (*t1.u32_ptr_u, 123);
- ASSERT_TRUE (static_cast<bool>(t1.u32_ptr_s));
- EXPECT_EQ (*t1.u32_ptr_s, 456);
- }
|