Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 

920 linhas
42 KiB

  1. #include <cpphibernate/driver/mariadb.h>
  2. #include "test_helper.h"
  3. #include "test_schema.h"
  4. #include "mariadb_mock.h"
  5. using namespace ::testing;
  6. using namespace ::cpphibernate;
  7. using namespace ::cpphibernate::modifier;
  8. using namespace ::boost::hana::literals;
  9. TEST(CppHibernateTests, read_test1)
  10. {
  11. StrictMock<mariadb_mock> mock;
  12. expect_query(mock, "START TRANSACTION");
  13. expect_query(mock, "SELECT "
  14. "BinToUuid(`tbl_test1`.`tbl_test1_id`), "
  15. "`tbl_test1`.`str_data`, "
  16. "`tbl_test1`.`str64_data`, "
  17. "`tbl_test1`.`u32_nullable`, "
  18. "`tbl_test1`.`u32_ptr_u`, "
  19. "`tbl_test1`.`u32_ptr_s` "
  20. "FROM "
  21. "`tbl_test1` "
  22. "WHERE "
  23. "(`tbl_test1`.`tbl_test1_id`=UuidToBin('X3d12697a-abb9-11e8-98d0-529269fb1459X')) ",
  24. result_used({
  25. { "3d12697a-abb9-11e8-98d0-529269fb1459", "str_data of class `test1` object `t1`", "str64_data of class `test1` object `t1`", nullptr, "123", "456" }
  26. }));
  27. expect_query(mock, "COMMIT");
  28. EXPECT_CALL(
  29. mock,
  30. mysql_close(
  31. reinterpret_cast<MYSQL*>(0x1111)));
  32. EXPECT_CALL(
  33. mock,
  34. mysql_real_escape_string(reinterpret_cast<MYSQL*>(0x1111), _, _, _))
  35. .Times(AnyNumber())
  36. .WillRepeatedly(WithArgs<1, 2, 3>(EscapeString()));
  37. test1 t1;
  38. t1.id = uuid("3d12697a-abb9-11e8-98d0-529269fb1459");
  39. ::cppmariadb::connection connection(reinterpret_cast<MYSQL*>(0x1111));
  40. auto context = make_context<driver::mariadb>(test_schema, connection);
  41. using namespace modifier;
  42. context.read(t1);
  43. EXPECT_EQ (t1.id, uuid("3d12697a-abb9-11e8-98d0-529269fb1459"));
  44. EXPECT_EQ (t1.str_data, "str_data of class `test1` object `t1`");
  45. EXPECT_EQ (t1.str64_data, "str64_data of class `test1` object `t1`");
  46. EXPECT_FALSE(static_cast<bool>(t1.u32_nullable));
  47. ASSERT_TRUE (static_cast<bool>(t1.u32_ptr_u));
  48. EXPECT_EQ (*t1.u32_ptr_u, 123);
  49. ASSERT_TRUE (static_cast<bool>(t1.u32_ptr_s));
  50. EXPECT_EQ (*t1.u32_ptr_s, 456);
  51. }
  52. TEST(CppHibernateTests, read_test2)
  53. {
  54. StrictMock<mariadb_mock> mock;
  55. expect_query(mock, "START TRANSACTION");
  56. expect_query(mock, "SELECT "
  57. "BinToUuid(`tbl_test2`.`tbl_test2_id`), "
  58. "`tbl_test2`.`u8_data`, "
  59. "`tbl_test2`.`i8_data`, "
  60. "`tbl_test2`.`u16_data`, "
  61. "`tbl_test2`.`i16_data` "
  62. "FROM "
  63. "`tbl_test2` "
  64. "WHERE "
  65. "(`tbl_test2`.`tbl_test2_id`=UuidToBin('X3d1270dc-abb9-11e8-98d0-529269fb1459X')) ",
  66. result_used({
  67. { "3d1270dc-abb9-11e8-98d0-529269fb1459", "1", "2", "3", "4" }
  68. }));
  69. expect_query(mock, "COMMIT");
  70. EXPECT_CALL(
  71. mock,
  72. mysql_real_escape_string(reinterpret_cast<MYSQL*>(0x1111), _, _, _))
  73. .Times(AnyNumber())
  74. .WillRepeatedly(WithArgs<1, 2, 3>(EscapeString()));
  75. EXPECT_CALL(
  76. mock,
  77. mysql_close(
  78. reinterpret_cast<MYSQL*>(0x1111)));
  79. ::cppmariadb::connection connection(reinterpret_cast<MYSQL*>(0x1111));
  80. auto context = make_context<driver::mariadb>(test_schema, connection);
  81. constexpr decltype(auto) test2_key_field = test_schema.tables[1_c].fields[0_c];
  82. test2 t2;
  83. context.read(t2, where(equal(test2_key_field, "3d1270dc-abb9-11e8-98d0-529269fb1459")));
  84. EXPECT_EQ(t2.id, uuid("3d1270dc-abb9-11e8-98d0-529269fb1459"));
  85. EXPECT_EQ(t2.u8_data, 1);
  86. EXPECT_EQ(t2.i8_data, 2);
  87. EXPECT_EQ(t2.u16_data, 3);
  88. EXPECT_EQ(t2.i16_data, 4);
  89. }
  90. TEST(CppHibernateTests, read_test3)
  91. {
  92. StrictMock<mariadb_mock> mock;
  93. expect_query(mock, "START TRANSACTION");
  94. expect_query(mock, "SELECT "
  95. "BinToUuid(`tbl_test3`.`tbl_test3_id`), "
  96. "`tbl_test3`.`u32_data`, "
  97. "`tbl_test3`.`i32_data`, "
  98. "`tbl_test3`.`u64_data`, "
  99. "`tbl_test3`.`i64_data` "
  100. "FROM "
  101. "`tbl_test3` "
  102. "WHERE "
  103. "(`tbl_test3`.`tbl_test3_id`=UuidToBin('X3d12737a-abb9-11e8-98d0-529269fb1459X')) ",
  104. result_used({
  105. { "3d12737a-abb9-11e8-98d0-529269fb1459", "5", "6", "7", "8" }
  106. }));
  107. expect_query(mock, "COMMIT");
  108. EXPECT_CALL(
  109. mock,
  110. mysql_real_escape_string(reinterpret_cast<MYSQL*>(0x1111), _, _, _))
  111. .Times(AnyNumber())
  112. .WillRepeatedly(WithArgs<1, 2, 3>(EscapeString()));
  113. EXPECT_CALL(
  114. mock,
  115. mysql_close(
  116. reinterpret_cast<MYSQL*>(0x1111)));
  117. ::cppmariadb::connection connection(reinterpret_cast<MYSQL*>(0x1111));
  118. auto context = make_context<driver::mariadb>(test_schema, connection);
  119. test3 t3;
  120. t3.id = uuid("3d12737a-abb9-11e8-98d0-529269fb1459");
  121. context.read(t3);
  122. EXPECT_EQ(t3.id, uuid("3d12737a-abb9-11e8-98d0-529269fb1459"));
  123. EXPECT_EQ(t3.u32_data, 5);
  124. EXPECT_EQ(t3.i32_data, 6);
  125. EXPECT_EQ(t3.u64_data, 7);
  126. EXPECT_EQ(t3.i64_data, 8);
  127. }
  128. TEST(CppHibernateTests, read_derived1_static)
  129. {
  130. StrictMock<mariadb_mock> mock;
  131. expect_query(mock, "START TRANSACTION");
  132. expect_query(mock, "SELECT "
  133. "BinToUuid(`tbl_base`.`tbl_base_id`), "
  134. "`tbl_base`.`name`, "
  135. "BinToUuid(`tbl_derived1`.`tbl_derived1_id`), "
  136. "`tbl_derived1`.`enum_data`, "
  137. "BinToUuid(`T0`.`tbl_test1_id`), "
  138. "`T0`.`str_data`, "
  139. "`T0`.`str64_data`, "
  140. "`T0`.`u32_nullable`, "
  141. "`T0`.`u32_ptr_u`, "
  142. "`T0`.`u32_ptr_s` "
  143. "FROM "
  144. "`tbl_derived1` "
  145. "JOIN "
  146. "`tbl_base` ON `tbl_derived1`.`tbl_base_id`=`tbl_base`.`tbl_base_id` "
  147. "LEFT JOIN "
  148. "`tbl_test1` AS `T0` ON `tbl_derived1`.`tbl_test1_id_test1_data`=`T0`.`tbl_test1_id` "
  149. "WHERE "
  150. "(`tbl_derived1`.`tbl_derived1_id`=UuidToBin('X3d12758c-abb9-11e8-98d0-529269fb1459X')) ",
  151. result_used({
  152. { "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" }
  153. }));
  154. expect_query(mock, "COMMIT");
  155. EXPECT_CALL(
  156. mock,
  157. mysql_real_escape_string(reinterpret_cast<MYSQL*>(0x1111), _, _, _))
  158. .Times(AnyNumber())
  159. .WillRepeatedly(WithArgs<1, 2, 3>(EscapeString()));
  160. EXPECT_CALL(
  161. mock,
  162. mysql_close(
  163. reinterpret_cast<MYSQL*>(0x1111)));
  164. ::cppmariadb::connection connection(reinterpret_cast<MYSQL*>(0x1111));
  165. auto context = make_context<driver::mariadb>(test_schema, connection);
  166. derived1 d1;
  167. d1.derived1_id = uuid("3d12758c-abb9-11e8-98d0-529269fb1459");
  168. context.read(d1);
  169. EXPECT_EQ (d1.id, uuid("3d12778a-abb9-11e8-98d0-529269fb1459"));
  170. EXPECT_EQ (d1.derived1_id, uuid("3d12758c-abb9-11e8-98d0-529269fb1459"));
  171. EXPECT_EQ (d1.name, "derived1");
  172. EXPECT_EQ (d1.enum_data, test_enum::test2);
  173. EXPECT_EQ (d1.test1_data.str_data, "str_data of class `test1` object `d1.test1_data`");
  174. EXPECT_EQ (d1.test1_data.str64_data, "str64_data of class `test1` object `d1.test1_data`");
  175. ASSERT_TRUE (static_cast<bool>(d1.test1_data.u32_nullable));
  176. EXPECT_EQ (*d1.test1_data.u32_nullable, 32);
  177. ASSERT_TRUE (static_cast<bool>(d1.test1_data.u32_ptr_s));
  178. EXPECT_EQ (*d1.test1_data.u32_ptr_s, 789);
  179. EXPECT_FALSE(static_cast<bool>(d1.test1_data.u32_ptr_u));
  180. }
  181. TEST(CppHibernateTests, read_derived2_static)
  182. {
  183. StrictMock<mariadb_mock> mock;
  184. expect_query(mock, "START TRANSACTION");
  185. expect_query(mock, "SELECT "
  186. "BinToUuid(`tbl_base`.`tbl_base_id`), "
  187. "`tbl_base`.`name`, "
  188. "BinToUuid(`tbl_derived2`.`tbl_derived2_id`), "
  189. "BinToUuid(`T0`.`tbl_test2_id`), "
  190. "`T0`.`u8_data`, "
  191. "`T0`.`i8_data`, "
  192. "`T0`.`u16_data`, "
  193. "`T0`.`i16_data`, "
  194. "BinToUuid(`T1`.`tbl_test2_id`), "
  195. "`T1`.`u8_data`, "
  196. "`T1`.`i8_data`, "
  197. "`T1`.`u16_data`, "
  198. "`T1`.`i16_data`, "
  199. "BinToUuid(`T2`.`tbl_test2_id`), "
  200. "`T2`.`u8_data`, "
  201. "`T2`.`i8_data`, "
  202. "`T2`.`u16_data`, "
  203. "`T2`.`i16_data` "
  204. "FROM "
  205. "`tbl_derived2` "
  206. "JOIN "
  207. "`tbl_base` ON `tbl_derived2`.`tbl_base_id`=`tbl_base`.`tbl_base_id` "
  208. "LEFT JOIN "
  209. "`tbl_test2` AS `T0` ON `tbl_derived2`.`tbl_test2_id_test2_nullable`=`T0`.`tbl_test2_id` "
  210. "LEFT JOIN "
  211. "`tbl_test2` AS `T1` ON `tbl_derived2`.`tbl_test2_id_test2_ptr_u`=`T1`.`tbl_test2_id` "
  212. "LEFT JOIN "
  213. "`tbl_test2` AS `T2` ON `tbl_derived2`.`tbl_test2_id_test2_ptr_s`=`T2`.`tbl_test2_id` "
  214. "WHERE "
  215. "(`tbl_derived2`.`tbl_derived2_id`=UuidToBin('X3d127bcc-abb9-11e8-98d0-529269fb1459X')) ",
  216. result_used({
  217. { "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 }
  218. }));
  219. expect_query(mock, "COMMIT");
  220. EXPECT_CALL(
  221. mock,
  222. mysql_real_escape_string(reinterpret_cast<MYSQL*>(0x1111), _, _, _))
  223. .Times(AnyNumber())
  224. .WillRepeatedly(WithArgs<1, 2, 3>(EscapeString()));
  225. EXPECT_CALL(
  226. mock,
  227. mysql_close(
  228. reinterpret_cast<MYSQL*>(0x1111)));
  229. ::cppmariadb::connection connection(reinterpret_cast<MYSQL*>(0x1111));
  230. auto context = make_context<driver::mariadb>(test_schema, connection);
  231. derived2 d2;
  232. d2.derived2_id = uuid("3d127bcc-abb9-11e8-98d0-529269fb1459");
  233. context.read(d2);
  234. EXPECT_EQ (d2.id, uuid("3d127db6-abb9-11e8-98d0-529269fb1459"));
  235. EXPECT_EQ (d2.derived2_id, uuid("3d127bcc-abb9-11e8-98d0-529269fb1459"));
  236. EXPECT_EQ (d2.name, "derived2");
  237. ASSERT_TRUE (static_cast<bool>(d2.test2_nullable));
  238. EXPECT_EQ (d2.test2_nullable->u8_data, 10);
  239. EXPECT_EQ (d2.test2_nullable->i8_data, 11);
  240. EXPECT_EQ (d2.test2_nullable->u16_data, 12);
  241. EXPECT_EQ (d2.test2_nullable->i16_data, 13);
  242. ASSERT_TRUE (static_cast<bool>(d2.test2_ptr_u));
  243. EXPECT_EQ (d2.test2_ptr_u->u8_data, 20);
  244. EXPECT_EQ (d2.test2_ptr_u->i8_data, 21);
  245. EXPECT_EQ (d2.test2_ptr_u->u16_data, 22);
  246. EXPECT_EQ (d2.test2_ptr_u->i16_data, 23);
  247. EXPECT_FALSE(static_cast<bool>(d2.test2_ptr_s));
  248. }
  249. TEST(CppHibernateTests, read_derived3_static)
  250. {
  251. StrictMock<mariadb_mock> mock;
  252. expect_query(mock, "START TRANSACTION");
  253. expect_query(mock, "SELECT "
  254. "BinToUuid(`tbl_base`.`tbl_base_id`), "
  255. "`tbl_base`.`name`, "
  256. "BinToUuid(`tbl_derived2`.`tbl_derived2_id`), "
  257. "BinToUuid(`T0`.`tbl_test2_id`), "
  258. "`T0`.`u8_data`, "
  259. "`T0`.`i8_data`, "
  260. "`T0`.`u16_data`, "
  261. "`T0`.`i16_data`, "
  262. "BinToUuid(`T1`.`tbl_test2_id`), "
  263. "`T1`.`u8_data`, "
  264. "`T1`.`i8_data`, "
  265. "`T1`.`u16_data`, "
  266. "`T1`.`i16_data`, "
  267. "BinToUuid(`T2`.`tbl_test2_id`), "
  268. "`T2`.`u8_data`, "
  269. "`T2`.`i8_data`, "
  270. "`T2`.`u16_data`, "
  271. "`T2`.`i16_data`, "
  272. "BinToUuid(`tbl_derived3`.`tbl_derived3_id`) "
  273. "FROM "
  274. "`tbl_derived3` "
  275. "JOIN "
  276. "`tbl_derived2` ON `tbl_derived3`.`tbl_derived2_id`=`tbl_derived2`.`tbl_derived2_id` "
  277. "JOIN "
  278. "`tbl_base` ON `tbl_derived2`.`tbl_base_id`=`tbl_base`.`tbl_base_id` "
  279. "LEFT JOIN "
  280. "`tbl_test2` AS `T0` ON `tbl_derived2`.`tbl_test2_id_test2_nullable`=`T0`.`tbl_test2_id` "
  281. "LEFT JOIN "
  282. "`tbl_test2` AS `T1` ON `tbl_derived2`.`tbl_test2_id_test2_ptr_u`=`T1`.`tbl_test2_id` "
  283. "LEFT JOIN "
  284. "`tbl_test2` AS `T2` ON `tbl_derived2`.`tbl_test2_id_test2_ptr_s`=`T2`.`tbl_test2_id` "
  285. "WHERE "
  286. "(`tbl_derived3`.`tbl_derived3_id`=UuidToBin('X3d12866c-abb9-11e8-98d0-529269fb1459X')) ",
  287. result_used({
  288. { "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" }
  289. }));
  290. expect_query(mock, "SELECT "
  291. "BinToUuid(`tbl_test3`.`tbl_test3_id`), "
  292. "`tbl_test3`.`u32_data`, "
  293. "`tbl_test3`.`i32_data`, "
  294. "`tbl_test3`.`u64_data`, "
  295. "`tbl_test3`.`i64_data` "
  296. "FROM "
  297. "`tbl_test3` "
  298. "WHERE "
  299. "(`tbl_test3`.`tbl_derived3_id_test3_list`=UuidToBin('X3d12866c-abb9-11e8-98d0-529269fb1459X')) "
  300. "ORDER BY "
  301. "`tbl_test3`.`tbl_derived3_index_test3_list` ASC ",
  302. result_used({
  303. { "3d1289f0-abb9-11e8-98d0-529269fb1459", "100", "101", "102", "103" },
  304. { "3d128b26-abb9-11e8-98d0-529269fb1459", "110", "111", "112", "113" },
  305. }));
  306. expect_query(mock, "SELECT "
  307. "BinToUuid(`tbl_test3`.`tbl_test3_id`), "
  308. "`tbl_test3`.`u32_data`, "
  309. "`tbl_test3`.`i32_data`, "
  310. "`tbl_test3`.`u64_data`, "
  311. "`tbl_test3`.`i64_data` "
  312. "FROM "
  313. "`tbl_test3` "
  314. "WHERE "
  315. "(`tbl_test3`.`tbl_derived3_id_test3_vector`=UuidToBin('X3d12866c-abb9-11e8-98d0-529269fb1459X')) "
  316. "ORDER BY "
  317. "`tbl_test3`.`tbl_derived3_index_test3_vector` ASC ",
  318. result_used({
  319. { "3d128eb4-abb9-11e8-98d0-529269fb1459", "120", "121", "122", "123" },
  320. { "3d128ffe-abb9-11e8-98d0-529269fb1459", "130", "131", "132", "133" },
  321. { "3d129134-abb9-11e8-98d0-529269fb1459", "140", "141", "142", "143" },
  322. }));
  323. expect_query(mock, "COMMIT");
  324. EXPECT_CALL(
  325. mock,
  326. mysql_real_escape_string(reinterpret_cast<MYSQL*>(0x1111), _, _, _))
  327. .Times(AnyNumber())
  328. .WillRepeatedly(WithArgs<1, 2, 3>(EscapeString()));
  329. EXPECT_CALL(
  330. mock,
  331. mysql_close(
  332. reinterpret_cast<MYSQL*>(0x1111)));
  333. ::cppmariadb::connection connection(reinterpret_cast<MYSQL*>(0x1111));
  334. auto context = make_context<driver::mariadb>(test_schema, connection);
  335. derived3 d3;
  336. d3.derived3_id = uuid("3d12866c-abb9-11e8-98d0-529269fb1459");
  337. context.read(d3);
  338. EXPECT_EQ (d3.id, uuid("3d1288ce-abb9-11e8-98d0-529269fb1459"));
  339. EXPECT_EQ (d3.name, "derived3");
  340. EXPECT_EQ (d3.derived2_id, uuid("3d1287a2-abb9-11e8-98d0-529269fb1459"));
  341. EXPECT_FALSE(static_cast<bool>(d3.test2_nullable));
  342. EXPECT_FALSE(static_cast<bool>(d3.test2_ptr_u));
  343. EXPECT_FALSE(static_cast<bool>(d3.test2_ptr_s));
  344. EXPECT_EQ (d3.derived3_id, uuid("3d12866c-abb9-11e8-98d0-529269fb1459"));
  345. {
  346. auto it = d3.test3_list.begin();
  347. ASSERT_NE(it, d3.test3_list.end());
  348. EXPECT_EQ(it->id, uuid("3d1289f0-abb9-11e8-98d0-529269fb1459"));
  349. EXPECT_EQ(it->u32_data, 100);
  350. EXPECT_EQ(it->i32_data, 101);
  351. EXPECT_EQ(it->u64_data, 102);
  352. EXPECT_EQ(it->i64_data, 103);
  353. ++it;
  354. ASSERT_NE(it, d3.test3_list.end());
  355. EXPECT_EQ(it->id, uuid("3d128b26-abb9-11e8-98d0-529269fb1459"));
  356. EXPECT_EQ(it->u32_data, 110);
  357. EXPECT_EQ(it->i32_data, 111);
  358. EXPECT_EQ(it->u64_data, 112);
  359. EXPECT_EQ(it->i64_data, 113);
  360. ++it;
  361. EXPECT_EQ(it, d3.test3_list.end());
  362. }
  363. {
  364. auto it = d3.test3_vector.begin();
  365. ASSERT_NE(it, d3.test3_vector.end());
  366. EXPECT_EQ(it->id, uuid("3d128eb4-abb9-11e8-98d0-529269fb1459"));
  367. EXPECT_EQ(it->u32_data, 120);
  368. EXPECT_EQ(it->i32_data, 121);
  369. EXPECT_EQ(it->u64_data, 122);
  370. EXPECT_EQ(it->i64_data, 123);
  371. ++it;
  372. ASSERT_NE(it, d3.test3_vector.end());
  373. EXPECT_EQ(it->id, uuid("3d128ffe-abb9-11e8-98d0-529269fb1459"));
  374. EXPECT_EQ(it->u32_data, 130);
  375. EXPECT_EQ(it->i32_data, 131);
  376. EXPECT_EQ(it->u64_data, 132);
  377. EXPECT_EQ(it->i64_data, 133);
  378. ++it;
  379. ASSERT_NE(it, d3.test3_vector.end());
  380. EXPECT_EQ(it->id, uuid("3d129134-abb9-11e8-98d0-529269fb1459"));
  381. EXPECT_EQ(it->u32_data, 140);
  382. EXPECT_EQ(it->i32_data, 141);
  383. EXPECT_EQ(it->u64_data, 142);
  384. EXPECT_EQ(it->i64_data, 143);
  385. ++it;
  386. EXPECT_EQ(it, d3.test3_vector.end());
  387. }
  388. }
  389. TEST(CppHibernateTests, read_derived2_ptr_dynamic)
  390. {
  391. StrictMock<mariadb_mock> mock;
  392. expect_query(mock, "START TRANSACTION");
  393. expect_query(mock, "SELECT "
  394. "`tbl_base`.`__type` AS `__type`, "
  395. "BinToUuid(`tbl_base`.`tbl_base_id`), "
  396. "`tbl_base`.`name`, "
  397. "BinToUuid(`tbl_derived2`.`tbl_derived2_id`), "
  398. "BinToUuid(`T0`.`tbl_test2_id`), "
  399. "`T0`.`u8_data`, "
  400. "`T0`.`i8_data`, "
  401. "`T0`.`u16_data`, "
  402. "`T0`.`i16_data`, "
  403. "BinToUuid(`T1`.`tbl_test2_id`), "
  404. "`T1`.`u8_data`, "
  405. "`T1`.`i8_data`, "
  406. "`T1`.`u16_data`, "
  407. "`T1`.`i16_data`, "
  408. "BinToUuid(`T2`.`tbl_test2_id`), "
  409. "`T2`.`u8_data`, "
  410. "`T2`.`i8_data`, "
  411. "`T2`.`u16_data`, "
  412. "`T2`.`i16_data`, "
  413. "BinToUuid(`tbl_derived3`.`tbl_derived3_id`) "
  414. "FROM "
  415. "`tbl_derived2` "
  416. "JOIN "
  417. "`tbl_base` ON `tbl_derived2`.`tbl_base_id`=`tbl_base`.`tbl_base_id` "
  418. "LEFT JOIN "
  419. "`tbl_test2` AS `T0` ON `tbl_derived2`.`tbl_test2_id_test2_nullable`=`T0`.`tbl_test2_id` "
  420. "LEFT JOIN "
  421. "`tbl_test2` AS `T1` ON `tbl_derived2`.`tbl_test2_id_test2_ptr_u`=`T1`.`tbl_test2_id` "
  422. "LEFT JOIN "
  423. "`tbl_test2` AS `T2` ON `tbl_derived2`.`tbl_test2_id_test2_ptr_s`=`T2`.`tbl_test2_id` "
  424. "LEFT JOIN "
  425. "`tbl_derived3` ON `tbl_derived2`.`tbl_derived2_id`=`tbl_derived3`.`tbl_derived2_id` "
  426. "WHERE "
  427. "(`tbl_derived2`.`tbl_derived2_id`=UuidToBin('X3d1287a2-abb9-11e8-98d0-529269fb1459X')) ",
  428. result_used({
  429. {
  430. /* base */ "13", "3d1288ce-abb9-11e8-98d0-529269fb1459", "derived3",
  431. /* derived2 */ "3d1287a2-abb9-11e8-98d0-529269fb1459",
  432. /* derived2.test2_nullable */ nullptr, nullptr, nullptr, nullptr, nullptr,
  433. /* derived2.test2_ptr_u */ nullptr, nullptr, nullptr, nullptr, nullptr,
  434. /* derived2.test2_ptr_s */ nullptr, nullptr, nullptr, nullptr, nullptr,
  435. /* derived3 */ "3d12866c-abb9-11e8-98d0-529269fb1459"
  436. }
  437. }));
  438. expect_query(mock, "SELECT "
  439. "BinToUuid(`tbl_test3`.`tbl_test3_id`), "
  440. "`tbl_test3`.`u32_data`, "
  441. "`tbl_test3`.`i32_data`, "
  442. "`tbl_test3`.`u64_data`, "
  443. "`tbl_test3`.`i64_data` "
  444. "FROM "
  445. "`tbl_test3` "
  446. "WHERE "
  447. "(`tbl_test3`.`tbl_derived3_id_test3_list`=UuidToBin('X3d12866c-abb9-11e8-98d0-529269fb1459X')) "
  448. "ORDER BY "
  449. "`tbl_test3`.`tbl_derived3_index_test3_list` ASC ",
  450. result_used({
  451. { "3d1289f0-abb9-11e8-98d0-529269fb1459", "100", "101", "102", "103" },
  452. { "3d128b26-abb9-11e8-98d0-529269fb1459", "110", "111", "112", "113" },
  453. }));
  454. expect_query(mock, "SELECT "
  455. "BinToUuid(`tbl_test3`.`tbl_test3_id`), "
  456. "`tbl_test3`.`u32_data`, "
  457. "`tbl_test3`.`i32_data`, "
  458. "`tbl_test3`.`u64_data`, "
  459. "`tbl_test3`.`i64_data` "
  460. "FROM "
  461. "`tbl_test3` "
  462. "WHERE "
  463. "(`tbl_test3`.`tbl_derived3_id_test3_vector`=UuidToBin('X3d12866c-abb9-11e8-98d0-529269fb1459X')) "
  464. "ORDER BY "
  465. "`tbl_test3`.`tbl_derived3_index_test3_vector` ASC ",
  466. result_used({
  467. { "3d128eb4-abb9-11e8-98d0-529269fb1459", "120", "121", "122", "123" },
  468. { "3d128ffe-abb9-11e8-98d0-529269fb1459", "130", "131", "132", "133" },
  469. { "3d129134-abb9-11e8-98d0-529269fb1459", "140", "141", "142", "143" },
  470. }));
  471. expect_query(mock, "COMMIT");
  472. EXPECT_CALL(
  473. mock,
  474. mysql_real_escape_string(reinterpret_cast<MYSQL*>(0x1111), _, _, _))
  475. .Times(AnyNumber())
  476. .WillRepeatedly(WithArgs<1, 2, 3>(EscapeString()));
  477. EXPECT_CALL(
  478. mock,
  479. mysql_close(
  480. reinterpret_cast<MYSQL*>(0x1111)));
  481. ::cppmariadb::connection connection(reinterpret_cast<MYSQL*>(0x1111));
  482. auto context = make_context<driver::mariadb>(test_schema, connection);
  483. constexpr decltype(auto) d2_key_field = test_schema.tables[5_c].fields[0_c];
  484. std::unique_ptr<derived2> d2_ptr;
  485. context.read(d2_ptr, where(equal(d2_key_field, "3d1287a2-abb9-11e8-98d0-529269fb1459")));
  486. auto* d3_ptr = dynamic_cast<derived3*>(d2_ptr.get());
  487. ASSERT_TRUE (d3_ptr);
  488. auto& d3 = *d3_ptr;
  489. EXPECT_EQ (d3.id, uuid("3d1288ce-abb9-11e8-98d0-529269fb1459"));
  490. EXPECT_EQ (d3.name, "derived3");
  491. EXPECT_EQ (d3.derived2_id, uuid("3d1287a2-abb9-11e8-98d0-529269fb1459"));
  492. EXPECT_FALSE(static_cast<bool>(d3.test2_nullable));
  493. EXPECT_FALSE(static_cast<bool>(d3.test2_ptr_u));
  494. EXPECT_FALSE(static_cast<bool>(d3.test2_ptr_s));
  495. EXPECT_EQ (d3.derived3_id, uuid("3d12866c-abb9-11e8-98d0-529269fb1459"));
  496. {
  497. auto it = d3.test3_list.begin();
  498. ASSERT_NE(it, d3.test3_list.end());
  499. EXPECT_EQ(it->id, uuid("3d1289f0-abb9-11e8-98d0-529269fb1459"));
  500. EXPECT_EQ(it->u32_data, 100);
  501. EXPECT_EQ(it->i32_data, 101);
  502. EXPECT_EQ(it->u64_data, 102);
  503. EXPECT_EQ(it->i64_data, 103);
  504. ++it;
  505. ASSERT_NE(it, d3.test3_list.end());
  506. EXPECT_EQ(it->id, uuid("3d128b26-abb9-11e8-98d0-529269fb1459"));
  507. EXPECT_EQ(it->u32_data, 110);
  508. EXPECT_EQ(it->i32_data, 111);
  509. EXPECT_EQ(it->u64_data, 112);
  510. EXPECT_EQ(it->i64_data, 113);
  511. ++it;
  512. EXPECT_EQ(it, d3.test3_list.end());
  513. }
  514. {
  515. auto it = d3.test3_vector.begin();
  516. ASSERT_NE(it, d3.test3_vector.end());
  517. EXPECT_EQ(it->id, uuid("3d128eb4-abb9-11e8-98d0-529269fb1459"));
  518. EXPECT_EQ(it->u32_data, 120);
  519. EXPECT_EQ(it->i32_data, 121);
  520. EXPECT_EQ(it->u64_data, 122);
  521. EXPECT_EQ(it->i64_data, 123);
  522. ++it;
  523. ASSERT_NE(it, d3.test3_vector.end());
  524. EXPECT_EQ(it->id, uuid("3d128ffe-abb9-11e8-98d0-529269fb1459"));
  525. EXPECT_EQ(it->u32_data, 130);
  526. EXPECT_EQ(it->i32_data, 131);
  527. EXPECT_EQ(it->u64_data, 132);
  528. EXPECT_EQ(it->i64_data, 133);
  529. ++it;
  530. ASSERT_NE(it, d3.test3_vector.end());
  531. EXPECT_EQ(it->id, uuid("3d129134-abb9-11e8-98d0-529269fb1459"));
  532. EXPECT_EQ(it->u32_data, 140);
  533. EXPECT_EQ(it->i32_data, 141);
  534. EXPECT_EQ(it->u64_data, 142);
  535. EXPECT_EQ(it->i64_data, 143);
  536. ++it;
  537. EXPECT_EQ(it, d3.test3_vector.end());
  538. }
  539. }
  540. TEST(CppHibernateTests, read_base_ptr_vector_dynamic)
  541. {
  542. StrictMock<mariadb_mock> mock;
  543. expect_query(mock, "START TRANSACTION");
  544. expect_query(mock, "SELECT "
  545. "`tbl_base`.`__type` AS `__type`, "
  546. "BinToUuid(`tbl_base`.`tbl_base_id`), "
  547. "`tbl_base`.`name`, "
  548. "BinToUuid(`tbl_derived1`.`tbl_derived1_id`), "
  549. "`tbl_derived1`.`enum_data`, "
  550. "BinToUuid(`T0`.`tbl_test1_id`), "
  551. "`T0`.`str_data`, "
  552. "`T0`.`str64_data`, "
  553. "`T0`.`u32_nullable`, "
  554. "`T0`.`u32_ptr_u`, "
  555. "`T0`.`u32_ptr_s`, "
  556. "BinToUuid(`tbl_derived2`.`tbl_derived2_id`), "
  557. "BinToUuid(`T1`.`tbl_test2_id`), "
  558. "`T1`.`u8_data`, "
  559. "`T1`.`i8_data`, "
  560. "`T1`.`u16_data`, "
  561. "`T1`.`i16_data`, "
  562. "BinToUuid(`T2`.`tbl_test2_id`), "
  563. "`T2`.`u8_data`, "
  564. "`T2`.`i8_data`, "
  565. "`T2`.`u16_data`, "
  566. "`T2`.`i16_data`, "
  567. "BinToUuid(`T3`.`tbl_test2_id`), "
  568. "`T3`.`u8_data`, "
  569. "`T3`.`i8_data`, "
  570. "`T3`.`u16_data`, "
  571. "`T3`.`i16_data`, "
  572. "BinToUuid(`tbl_derived3`.`tbl_derived3_id`) "
  573. "FROM "
  574. "`tbl_base` "
  575. "LEFT JOIN "
  576. "`tbl_derived1` ON `tbl_base`.`tbl_base_id`=`tbl_derived1`.`tbl_base_id` "
  577. "LEFT JOIN "
  578. "`tbl_test1` AS `T0` ON `tbl_derived1`.`tbl_test1_id_test1_data`=`T0`.`tbl_test1_id` "
  579. "LEFT JOIN "
  580. "`tbl_derived2` ON `tbl_base`.`tbl_base_id`=`tbl_derived2`.`tbl_base_id` "
  581. "LEFT JOIN "
  582. "`tbl_test2` AS `T1` ON `tbl_derived2`.`tbl_test2_id_test2_nullable`=`T1`.`tbl_test2_id` "
  583. "LEFT JOIN "
  584. "`tbl_test2` AS `T2` ON `tbl_derived2`.`tbl_test2_id_test2_ptr_u`=`T2`.`tbl_test2_id` "
  585. "LEFT JOIN "
  586. "`tbl_test2` AS `T3` ON `tbl_derived2`.`tbl_test2_id_test2_ptr_s`=`T3`.`tbl_test2_id` "
  587. "LEFT JOIN "
  588. "`tbl_derived3` ON `tbl_derived2`.`tbl_derived2_id`=`tbl_derived3`.`tbl_derived2_id` ",
  589. result_used({
  590. {
  591. /* base */ "11", "3d12778a-abb9-11e8-98d0-529269fb1459", "derived1",
  592. /* derived1 */ "3d12758c-abb9-11e8-98d0-529269fb1459", "test2",
  593. /* 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",
  594. /* derived2 */ nullptr,
  595. /* derived2.test2_nullable */ nullptr, nullptr, nullptr, nullptr, nullptr,
  596. /* derived2.test2_ptr_u */ nullptr, nullptr, nullptr, nullptr, nullptr,
  597. /* derived2.test2_ptr_s */ nullptr, nullptr, nullptr, nullptr, nullptr,
  598. /* derived3 */ nullptr
  599. },
  600. {
  601. /* base */ "12", "3d127db6-abb9-11e8-98d0-529269fb1459", "derived2",
  602. /* derived1 */ nullptr, nullptr,
  603. /* derived1.test1 */ nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
  604. /* derived2 */ "3d127bcc-abb9-11e8-98d0-529269fb1459",
  605. /* derived2.test2_nullable */ "3d1283a6-abb9-11e8-98d0-529269fb1459", "10", "11", "12", "13",
  606. /* derived2.test2_ptr_u */ "3d128522-abb9-11e8-98d0-529269fb1459", "20", "21", "22", "23",
  607. /* derived2.test2_ptr_s */ nullptr, nullptr, nullptr, nullptr, nullptr,
  608. /* derived3 */ nullptr
  609. },
  610. {
  611. /* base */ "13", "3d1288ce-abb9-11e8-98d0-529269fb1459", "derived3",
  612. /* derived1 */ nullptr, nullptr,
  613. /* derived1.test1 */ nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
  614. /* derived2 */ "3d1287a2-abb9-11e8-98d0-529269fb1459",
  615. /* derived2.test2_nullable */ nullptr, nullptr, nullptr, nullptr, nullptr,
  616. /* derived2.test2_ptr_u */ nullptr, nullptr, nullptr, nullptr, nullptr,
  617. /* derived2.test2_ptr_s */ nullptr, nullptr, nullptr, nullptr, nullptr,
  618. /* derived3 */ "3d12866c-abb9-11e8-98d0-529269fb1459"
  619. },
  620. }));
  621. expect_query(mock, "SELECT "
  622. "BinToUuid(`tbl_test3`.`tbl_test3_id`), "
  623. "`tbl_test3`.`u32_data`, "
  624. "`tbl_test3`.`i32_data`, "
  625. "`tbl_test3`.`u64_data`, "
  626. "`tbl_test3`.`i64_data` "
  627. "FROM "
  628. "`tbl_test3` "
  629. "WHERE "
  630. "(`tbl_test3`.`tbl_derived3_id_test3_list`=UuidToBin('X3d12866c-abb9-11e8-98d0-529269fb1459X')) "
  631. "ORDER BY "
  632. "`tbl_test3`.`tbl_derived3_index_test3_list` ASC ",
  633. result_used({
  634. { "3d1289f0-abb9-11e8-98d0-529269fb1459", "100", "101", "102", "103" },
  635. { "3d128b26-abb9-11e8-98d0-529269fb1459", "110", "111", "112", "113" },
  636. }));
  637. expect_query(mock, "SELECT "
  638. "BinToUuid(`tbl_test3`.`tbl_test3_id`), "
  639. "`tbl_test3`.`u32_data`, "
  640. "`tbl_test3`.`i32_data`, "
  641. "`tbl_test3`.`u64_data`, "
  642. "`tbl_test3`.`i64_data` "
  643. "FROM "
  644. "`tbl_test3` "
  645. "WHERE "
  646. "(`tbl_test3`.`tbl_derived3_id_test3_vector`=UuidToBin('X3d12866c-abb9-11e8-98d0-529269fb1459X')) "
  647. "ORDER BY "
  648. "`tbl_test3`.`tbl_derived3_index_test3_vector` ASC ",
  649. result_used({
  650. { "3d128eb4-abb9-11e8-98d0-529269fb1459", "120", "121", "122", "123" },
  651. { "3d128ffe-abb9-11e8-98d0-529269fb1459", "130", "131", "132", "133" },
  652. { "3d129134-abb9-11e8-98d0-529269fb1459", "140", "141", "142", "143" },
  653. }));
  654. expect_query(mock, "COMMIT");
  655. EXPECT_CALL(
  656. mock,
  657. mysql_real_escape_string(reinterpret_cast<MYSQL*>(0x1111), _, _, _))
  658. .Times(AnyNumber())
  659. .WillRepeatedly(WithArgs<1, 2, 3>(EscapeString()));
  660. EXPECT_CALL(
  661. mock,
  662. mysql_close(
  663. reinterpret_cast<MYSQL*>(0x1111)));
  664. ::cppmariadb::connection connection(reinterpret_cast<MYSQL*>(0x1111));
  665. auto context = make_context<driver::mariadb>(test_schema, connection);
  666. using base_ptr_type = std::unique_ptr<base>;
  667. using base_vec_type = std::vector<base_ptr_type>;
  668. base_vec_type base_vec;
  669. context.read(base_vec);
  670. auto bIt = base_vec.begin();
  671. {
  672. ASSERT_NE (bIt, base_vec.end());
  673. auto* base_ptr = bIt->get();
  674. ASSERT_TRUE(static_cast<bool>(base_ptr));
  675. auto* d1_ptr = dynamic_cast<derived1*>(base_ptr);
  676. ASSERT_TRUE(static_cast<bool>(d1_ptr));
  677. auto& d1 = *d1_ptr;
  678. ++bIt;
  679. EXPECT_EQ (d1.id, uuid("3d12778a-abb9-11e8-98d0-529269fb1459"));
  680. EXPECT_EQ (d1.derived1_id, uuid("3d12758c-abb9-11e8-98d0-529269fb1459"));
  681. EXPECT_EQ (d1.name, "derived1");
  682. EXPECT_EQ (d1.enum_data, test_enum::test2);
  683. EXPECT_EQ (d1.test1_data.str_data, "str_data of class `test1` object `d1.test1_data`");
  684. EXPECT_EQ (d1.test1_data.str64_data, "str64_data of class `test1` object `d1.test1_data`");
  685. ASSERT_TRUE (static_cast<bool>(d1.test1_data.u32_nullable));
  686. EXPECT_EQ (*d1.test1_data.u32_nullable, 32);
  687. ASSERT_TRUE (static_cast<bool>(d1.test1_data.u32_ptr_s));
  688. EXPECT_EQ (*d1.test1_data.u32_ptr_s, 789);
  689. EXPECT_FALSE(static_cast<bool>(d1.test1_data.u32_ptr_u));
  690. }
  691. {
  692. ASSERT_NE (bIt, base_vec.end());
  693. auto* base_ptr = bIt->get();
  694. ASSERT_TRUE(static_cast<bool>(base_ptr));
  695. auto* d2_ptr = dynamic_cast<derived2*>(base_ptr);
  696. ASSERT_TRUE(static_cast<bool>(d2_ptr));
  697. auto& d2 = *d2_ptr;
  698. ++bIt;
  699. EXPECT_EQ (d2.id, uuid("3d127db6-abb9-11e8-98d0-529269fb1459"));
  700. EXPECT_EQ (d2.derived2_id, uuid("3d127bcc-abb9-11e8-98d0-529269fb1459"));
  701. EXPECT_EQ (d2.name, "derived2");
  702. ASSERT_TRUE (static_cast<bool>(d2.test2_nullable));
  703. EXPECT_EQ (d2.test2_nullable->u8_data, 10);
  704. EXPECT_EQ (d2.test2_nullable->i8_data, 11);
  705. EXPECT_EQ (d2.test2_nullable->u16_data, 12);
  706. EXPECT_EQ (d2.test2_nullable->i16_data, 13);
  707. ASSERT_TRUE (static_cast<bool>(d2.test2_ptr_u));
  708. EXPECT_EQ (d2.test2_ptr_u->u8_data, 20);
  709. EXPECT_EQ (d2.test2_ptr_u->i8_data, 21);
  710. EXPECT_EQ (d2.test2_ptr_u->u16_data, 22);
  711. EXPECT_EQ (d2.test2_ptr_u->i16_data, 23);
  712. EXPECT_FALSE(static_cast<bool>(d2.test2_ptr_s));
  713. }
  714. {
  715. ASSERT_NE (bIt, base_vec.end());
  716. auto* base_ptr = bIt->get();
  717. ASSERT_TRUE(static_cast<bool>(base_ptr));
  718. auto* d3_ptr = dynamic_cast<derived3*>(base_ptr);
  719. ASSERT_TRUE(static_cast<bool>(d3_ptr));
  720. auto& d3 = *d3_ptr;
  721. ++bIt;
  722. EXPECT_EQ (d3.id, uuid("3d1288ce-abb9-11e8-98d0-529269fb1459"));
  723. EXPECT_EQ (d3.name, "derived3");
  724. EXPECT_EQ (d3.derived2_id, uuid("3d1287a2-abb9-11e8-98d0-529269fb1459"));
  725. EXPECT_FALSE(static_cast<bool>(d3.test2_nullable));
  726. EXPECT_FALSE(static_cast<bool>(d3.test2_ptr_u));
  727. EXPECT_FALSE(static_cast<bool>(d3.test2_ptr_s));
  728. EXPECT_EQ (d3.derived3_id, uuid("3d12866c-abb9-11e8-98d0-529269fb1459"));
  729. {
  730. auto it = d3.test3_list.begin();
  731. ASSERT_NE(it, d3.test3_list.end());
  732. EXPECT_EQ(it->id, uuid("3d1289f0-abb9-11e8-98d0-529269fb1459"));
  733. EXPECT_EQ(it->u32_data, 100);
  734. EXPECT_EQ(it->i32_data, 101);
  735. EXPECT_EQ(it->u64_data, 102);
  736. EXPECT_EQ(it->i64_data, 103);
  737. ++it;
  738. ASSERT_NE(it, d3.test3_list.end());
  739. EXPECT_EQ(it->id, uuid("3d128b26-abb9-11e8-98d0-529269fb1459"));
  740. EXPECT_EQ(it->u32_data, 110);
  741. EXPECT_EQ(it->i32_data, 111);
  742. EXPECT_EQ(it->u64_data, 112);
  743. EXPECT_EQ(it->i64_data, 113);
  744. ++it;
  745. EXPECT_EQ(it, d3.test3_list.end());
  746. }
  747. {
  748. auto it = d3.test3_vector.begin();
  749. ASSERT_NE(it, d3.test3_vector.end());
  750. EXPECT_EQ(it->id, uuid("3d128eb4-abb9-11e8-98d0-529269fb1459"));
  751. EXPECT_EQ(it->u32_data, 120);
  752. EXPECT_EQ(it->i32_data, 121);
  753. EXPECT_EQ(it->u64_data, 122);
  754. EXPECT_EQ(it->i64_data, 123);
  755. ++it;
  756. ASSERT_NE(it, d3.test3_vector.end());
  757. EXPECT_EQ(it->id, uuid("3d128ffe-abb9-11e8-98d0-529269fb1459"));
  758. EXPECT_EQ(it->u32_data, 130);
  759. EXPECT_EQ(it->i32_data, 131);
  760. EXPECT_EQ(it->u64_data, 132);
  761. EXPECT_EQ(it->i64_data, 133);
  762. ++it;
  763. ASSERT_NE(it, d3.test3_vector.end());
  764. EXPECT_EQ(it->id, uuid("3d129134-abb9-11e8-98d0-529269fb1459"));
  765. EXPECT_EQ(it->u32_data, 140);
  766. EXPECT_EQ(it->i32_data, 141);
  767. EXPECT_EQ(it->u64_data, 142);
  768. EXPECT_EQ(it->i64_data, 143);
  769. ++it;
  770. EXPECT_EQ(it, d3.test3_vector.end());
  771. }
  772. }
  773. EXPECT_EQ(bIt, base_vec.end());
  774. }
  775. TEST(CppHibernateTests, read_dummy_owner)
  776. {
  777. StrictMock<mariadb_mock> mock;
  778. expect_query(mock, "START TRANSACTION");
  779. expect_query(mock, "SELECT "
  780. "BinToUuid(`tbl_dummy_owner`.`tbl_dummy_owner_id`) "
  781. "FROM "
  782. "`tbl_dummy_owner` "
  783. "WHERE "
  784. "(`tbl_dummy_owner`.`tbl_dummy_owner_id`=UuidToBin('X00000000-0000-0000-0000-000000000001X')) ",
  785. result_used({
  786. { "00000000-0000-0000-0000-000000000001" },
  787. }));
  788. expect_query(mock, "SELECT "
  789. "BinToUuid(`tbl_dummy_id`.`tbl_dummy_id_id`), "
  790. "`tbl_dummy_id`.`data` "
  791. "FROM "
  792. "`tbl_dummy_id` WHERE (`tbl_dummy_id`.`tbl_dummy_owner_id_dummies`=UuidToBin('X00000000-0000-0000-0000-000000000001X')) "
  793. "ORDER BY "
  794. "`tbl_dummy_id`.`tbl_dummy_owner_index_dummies` ASC ",
  795. result_used({
  796. { "00000000-0000-0000-0001-000000000001", "123" },
  797. { "00000000-0000-0000-0001-000000000002", "456" },
  798. { "00000000-0000-0000-0001-000000000003", "789" },
  799. }));
  800. expect_query(mock, "COMMIT");
  801. EXPECT_CALL(
  802. mock,
  803. mysql_close(
  804. reinterpret_cast<MYSQL*>(0x1111)));
  805. EXPECT_CALL(
  806. mock,
  807. mysql_real_escape_string(reinterpret_cast<MYSQL*>(0x1111), _, _, _))
  808. .Times(AnyNumber())
  809. .WillRepeatedly(WithArgs<1, 2, 3>(EscapeString()));
  810. dummy_owner d;
  811. d.id = uuid("00000000-0000-0000-0000-000000000001");
  812. ::cppmariadb::connection connection(reinterpret_cast<MYSQL*>(0x1111));
  813. auto context = make_context<driver::mariadb>(test_schema, connection);
  814. context.read(d);
  815. EXPECT_EQ(d.id, uuid("00000000-0000-0000-0000-000000000001"));
  816. ASSERT_EQ(d.dummies.size(), 3);
  817. EXPECT_EQ(d.dummies[0].data, 123);
  818. EXPECT_EQ(d.dummies[1].data, 456);
  819. EXPECT_EQ(d.dummies[2].data, 789);
  820. }