You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

286 lines
10 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. TEST(CppHibernateTests, destroy_test1)
  8. {
  9. StrictMock<mariadb_mock> mock;
  10. expect_query(mock, "START TRANSACTION");
  11. expect_query(mock, "DELETE "
  12. "`tbl_test1` "
  13. "FROM "
  14. "`tbl_test1` "
  15. "WHERE "
  16. "`tbl_test1`.`tbl_test1_id`=UuidToBin('X3d12697a-abb9-11e8-98d0-529269fb1459X')");
  17. expect_query(mock, "COMMIT");
  18. EXPECT_CALL(
  19. mock,
  20. mysql_real_escape_string(reinterpret_cast<MYSQL*>(0x1111), _, _, _))
  21. .Times(AnyNumber())
  22. .WillRepeatedly(WithArgs<1, 2, 3>(EscapeString()));
  23. EXPECT_CALL(
  24. mock,
  25. mysql_close(
  26. reinterpret_cast<MYSQL*>(0x1111)));
  27. test1 t1;
  28. t1.id = uuid("3d12697a-abb9-11e8-98d0-529269fb1459");
  29. ::cppmariadb::connection connection(reinterpret_cast<MYSQL*>(0x1111));
  30. auto context = make_context<mariadb_driver>(test_schema, connection);
  31. context.destroy(t1);
  32. }
  33. TEST(CppHibernateTests, destroy_test2)
  34. {
  35. StrictMock<mariadb_mock> mock;
  36. expect_query(mock, "START TRANSACTION");
  37. expect_query(mock, "DELETE "
  38. "`tbl_test2` "
  39. "FROM "
  40. "`tbl_test2` "
  41. "WHERE "
  42. "`tbl_test2`.`tbl_test2_id`=UuidToBin('X3d1270dc-abb9-11e8-98d0-529269fb1459X')");
  43. expect_query(mock, "COMMIT");
  44. EXPECT_CALL(
  45. mock,
  46. mysql_real_escape_string(reinterpret_cast<MYSQL*>(0x1111), _, _, _))
  47. .Times(AnyNumber())
  48. .WillRepeatedly(WithArgs<1, 2, 3>(EscapeString()));
  49. EXPECT_CALL(
  50. mock,
  51. mysql_close(
  52. reinterpret_cast<MYSQL*>(0x1111)));
  53. test2 t2;
  54. t2.id = uuid("3d1270dc-abb9-11e8-98d0-529269fb1459");
  55. ::cppmariadb::connection connection(reinterpret_cast<MYSQL*>(0x1111));
  56. auto context = make_context<mariadb_driver>(test_schema, connection);
  57. context.destroy(t2);
  58. }
  59. TEST(CppHibernateTests, destroy_test3)
  60. {
  61. StrictMock<mariadb_mock> mock;
  62. expect_query(mock, "START TRANSACTION");
  63. expect_query(mock, "DELETE "
  64. "`tbl_test3` "
  65. "FROM "
  66. "`tbl_test3` "
  67. "WHERE "
  68. "`tbl_test3`.`tbl_test3_id`=UuidToBin('X3d12737a-abb9-11e8-98d0-529269fb1459X')");
  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. test3 t3;
  80. t3.id = uuid("3d12737a-abb9-11e8-98d0-529269fb1459");
  81. ::cppmariadb::connection connection(reinterpret_cast<MYSQL*>(0x1111));
  82. auto context = make_context<mariadb_driver>(test_schema, connection);
  83. context.destroy(t3);
  84. }
  85. TEST(CppHibernateTests, destroy_derived1)
  86. {
  87. StrictMock<mariadb_mock> mock;
  88. expect_query(mock, "START TRANSACTION");
  89. expect_query(mock, "DELETE "
  90. "`tbl_base`, "
  91. "`tbl_derived1`, "
  92. "`T0` "
  93. "FROM "
  94. "`tbl_derived1` "
  95. "LEFT JOIN "
  96. "`tbl_base` ON `tbl_derived1`.`tbl_base_id`=`tbl_base`.`tbl_base_id` "
  97. "LEFT JOIN "
  98. "`tbl_test1` AS `T0` ON `tbl_derived1`.`tbl_test1_id_test1_data`=`T0`.`tbl_test1_id` "
  99. "WHERE "
  100. "`tbl_base`.`tbl_base_id`=UuidToBin('X3d12778a-abb9-11e8-98d0-529269fb1459X')");
  101. expect_query(mock, "COMMIT");
  102. EXPECT_CALL(
  103. mock,
  104. mysql_real_escape_string(reinterpret_cast<MYSQL*>(0x1111), _, _, _))
  105. .Times(AnyNumber())
  106. .WillRepeatedly(WithArgs<1, 2, 3>(EscapeString()));
  107. EXPECT_CALL(
  108. mock,
  109. mysql_close(
  110. reinterpret_cast<MYSQL*>(0x1111)));
  111. derived1 d1;
  112. d1.id = uuid("3d12778a-abb9-11e8-98d0-529269fb1459");
  113. ::cppmariadb::connection connection(reinterpret_cast<MYSQL*>(0x1111));
  114. auto context = make_context<mariadb_driver>(test_schema, connection);
  115. context.destroy(static_cast<base&>(d1));
  116. }
  117. TEST(CppHibernateTests, destroy_derived2)
  118. {
  119. StrictMock<mariadb_mock> mock;
  120. expect_query(mock, "START TRANSACTION");
  121. expect_query(mock, "DELETE "
  122. "`tbl_base`, "
  123. "`tbl_derived2`, "
  124. "`T0`, "
  125. "`T1`, "
  126. "`T2`, "
  127. "`tbl_derived3` "
  128. "FROM "
  129. "`tbl_derived2` "
  130. "LEFT JOIN "
  131. "`tbl_base` ON `tbl_derived2`.`tbl_base_id`=`tbl_base`.`tbl_base_id` "
  132. "LEFT JOIN "
  133. "`tbl_test2` AS `T0` ON `tbl_derived2`.`tbl_test2_id_test2_nullable`=`T0`.`tbl_test2_id` "
  134. "LEFT JOIN "
  135. "`tbl_test2` AS `T1` ON `tbl_derived2`.`tbl_test2_id_test2_ptr_u`=`T1`.`tbl_test2_id` "
  136. "LEFT JOIN "
  137. "`tbl_test2` AS `T2` ON `tbl_derived2`.`tbl_test2_id_test2_ptr_s`=`T2`.`tbl_test2_id` "
  138. "LEFT JOIN "
  139. "`tbl_derived3` ON `tbl_derived2`.`tbl_derived2_id`=`tbl_derived3`.`tbl_derived2_id` "
  140. "WHERE "
  141. "`tbl_base`.`tbl_base_id`=UuidToBin('X3d127db6-abb9-11e8-98d0-529269fb1459X')");
  142. expect_query(mock, "COMMIT");
  143. EXPECT_CALL(
  144. mock,
  145. mysql_real_escape_string(reinterpret_cast<MYSQL*>(0x1111), _, _, _))
  146. .Times(AnyNumber())
  147. .WillRepeatedly(WithArgs<1, 2, 3>(EscapeString()));
  148. EXPECT_CALL(
  149. mock,
  150. mysql_close(
  151. reinterpret_cast<MYSQL*>(0x1111)));
  152. derived2 d2;
  153. d2.id = uuid("3d127db6-abb9-11e8-98d0-529269fb1459");
  154. ::cppmariadb::connection connection(reinterpret_cast<MYSQL*>(0x1111));
  155. auto context = make_context<mariadb_driver>(test_schema, connection);
  156. context.destroy(static_cast<base&>(d2));
  157. }
  158. TEST(CppHibernateTests, destroy_derived3)
  159. {
  160. StrictMock<mariadb_mock> mock;
  161. expect_query(mock, "START TRANSACTION");
  162. expect_query(mock, "DELETE "
  163. "`tbl_base`, "
  164. "`tbl_derived2`, "
  165. "`T0`, "
  166. "`T1`, "
  167. "`T2`, "
  168. "`tbl_derived3` "
  169. "FROM "
  170. "`tbl_derived3` "
  171. "LEFT JOIN "
  172. "`tbl_derived2` ON `tbl_derived3`.`tbl_derived2_id`=`tbl_derived2`.`tbl_derived2_id` "
  173. "LEFT JOIN "
  174. "`tbl_base` ON `tbl_derived2`.`tbl_base_id`=`tbl_base`.`tbl_base_id` "
  175. "LEFT JOIN "
  176. "`tbl_test2` AS `T0` ON `tbl_derived2`.`tbl_test2_id_test2_nullable`=`T0`.`tbl_test2_id` "
  177. "LEFT JOIN "
  178. "`tbl_test2` AS `T1` ON `tbl_derived2`.`tbl_test2_id_test2_ptr_u`=`T1`.`tbl_test2_id` "
  179. "LEFT JOIN "
  180. "`tbl_test2` AS `T2` ON `tbl_derived2`.`tbl_test2_id_test2_ptr_s`=`T2`.`tbl_test2_id` "
  181. "WHERE "
  182. "`tbl_derived2`.`tbl_derived2_id`=UuidToBin('X3d1287a2-abb9-11e8-98d0-529269fb1459X')");
  183. expect_query(mock, "DELETE "
  184. "`tbl_test3` "
  185. "FROM "
  186. "`tbl_test3` "
  187. "WHERE "
  188. "(`tbl_derived3_id_test3_list` IS NULL) AND "
  189. "(`tbl_derived3_id_test3_vector` IS NULL)");
  190. expect_query(mock, "COMMIT");
  191. EXPECT_CALL(
  192. mock,
  193. mysql_real_escape_string(reinterpret_cast<MYSQL*>(0x1111), _, _, _))
  194. .Times(AnyNumber())
  195. .WillRepeatedly(WithArgs<1, 2, 3>(EscapeString()));
  196. EXPECT_CALL(
  197. mock,
  198. mysql_close(
  199. reinterpret_cast<MYSQL*>(0x1111)));
  200. derived3 d3;
  201. d3.derived2_id = uuid("3d1287a2-abb9-11e8-98d0-529269fb1459");
  202. ::cppmariadb::connection connection(reinterpret_cast<MYSQL*>(0x1111));
  203. auto context = make_context<mariadb_driver>(test_schema, connection);
  204. context.destroy(static_cast<derived2&>(d3));
  205. }
  206. TEST(CppHibernateTests, destroy_double_usage)
  207. {
  208. StrictMock<mariadb_mock> mock;
  209. expect_query(mock, "START TRANSACTION");
  210. expect_query(mock, "DELETE "
  211. "`tbl_double_usage`, "
  212. "`T0` "
  213. "FROM "
  214. "`tbl_double_usage` "
  215. "LEFT JOIN "
  216. "`tbl_double_usage_item` AS `T0` ON `tbl_double_usage`.`tbl_double_usage_id`=`T0`.`tbl_double_usage_id_single_item` "
  217. "WHERE "
  218. "`tbl_double_usage`.`tbl_double_usage_id`='X1X'");
  219. expect_query(mock, "DELETE "
  220. "`tbl_double_usage_item` "
  221. "FROM "
  222. "`tbl_double_usage_item` "
  223. "WHERE "
  224. "(`tbl_double_usage_id_single_item` IS NULL) "
  225. "AND (`tbl_double_usage_id_multiple_items` IS NULL)");
  226. expect_query(mock, "COMMIT");
  227. EXPECT_CALL(
  228. mock,
  229. mysql_real_escape_string(reinterpret_cast<MYSQL*>(0x1111), _, _, _))
  230. .Times(AnyNumber())
  231. .WillRepeatedly(WithArgs<1, 2, 3>(EscapeString()));
  232. EXPECT_CALL(
  233. mock,
  234. mysql_close(
  235. reinterpret_cast<MYSQL*>(0x1111)));
  236. double_usage d;
  237. d.id = 1;
  238. ::cppmariadb::connection connection(reinterpret_cast<MYSQL*>(0x1111));
  239. auto context = make_context<mariadb_driver>(test_schema, connection);
  240. context.destroy(d);
  241. }