Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 

440 wiersze
18 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, create_test1)
  8. {
  9. StrictMock<mariadb_mock> mock;
  10. expect_query(mock, "START TRANSACTION");
  11. expect_query(mock, "SELECT Uuid()", result_used({
  12. { "3d12697a-abb9-11e8-98d0-529269fb1459" }
  13. }));
  14. expect_query(mock, "INSERT INTO "
  15. "`tbl_test1` "
  16. "SET "
  17. "`tbl_test1_id`=UuidToBin('X3d12697a-abb9-11e8-98d0-529269fb1459X'), "
  18. "`str_data`='Xstr_data of class `test1` object `t1`X', "
  19. "`str64_data`='Xstr64_data of class `test1` object `t1`X', "
  20. "`u32_nullable`=null, "
  21. "`u32_ptr_u`='X456X', "
  22. "`u32_ptr_s`='X789X'",
  23. result_affected_rows(1));
  24. expect_query(mock, "COMMIT");
  25. EXPECT_CALL(
  26. mock,
  27. mysql_real_escape_string(reinterpret_cast<MYSQL*>(0x1111), _, _, _))
  28. .Times(AnyNumber())
  29. .WillRepeatedly(WithArgs<1, 2, 3>(EscapeString()));
  30. EXPECT_CALL(
  31. mock,
  32. mysql_close(
  33. reinterpret_cast<MYSQL*>(0x1111)));
  34. test1 t1;
  35. t1.str_data = "str_data of class `test1` object `t1`";
  36. t1.str64_data = "str64_data of class `test1` object `t1`";
  37. t1.u32_ptr_u = std::make_unique<uint32_t>(456);
  38. t1.u32_ptr_s = std::make_shared<uint32_t>(789);
  39. ::cppmariadb::connection connection(reinterpret_cast<MYSQL*>(0x1111));
  40. auto context = make_context<driver::mariadb>(test_schema, connection);
  41. context.create(t1);
  42. }
  43. TEST(CppHibernateTests, create_test2)
  44. {
  45. StrictMock<mariadb_mock> mock;
  46. expect_query(mock, "START TRANSACTION");
  47. expect_query(mock, "SELECT Uuid()", result_used({
  48. { "3d1270dc-abb9-11e8-98d0-529269fb1459" }
  49. }));
  50. expect_query(mock, "INSERT INTO "
  51. "`tbl_test2` "
  52. "SET "
  53. "`tbl_test2_id`=UuidToBin('X3d1270dc-abb9-11e8-98d0-529269fb1459X'), "
  54. "`u8_data`='X1X', "
  55. "`i8_data`='X2X', "
  56. "`u16_data`='X3X', "
  57. "`i16_data`='X4X'",
  58. result_affected_rows(1));
  59. expect_query(mock, "COMMIT");
  60. EXPECT_CALL(
  61. mock,
  62. mysql_real_escape_string(reinterpret_cast<MYSQL*>(0x1111), _, _, _))
  63. .Times(AnyNumber())
  64. .WillRepeatedly(WithArgs<1, 2, 3>(EscapeString()));
  65. EXPECT_CALL(
  66. mock,
  67. mysql_close(
  68. reinterpret_cast<MYSQL*>(0x1111)));
  69. test2 t2;
  70. t2.u8_data = 1;
  71. t2.i8_data = 2;
  72. t2.u16_data = 3;
  73. t2.i16_data = 4;
  74. ::cppmariadb::connection connection(reinterpret_cast<MYSQL*>(0x1111));
  75. auto context = make_context<driver::mariadb>(test_schema, connection);
  76. context.create(t2);
  77. }
  78. TEST(CppHibernateTests, create_test3)
  79. {
  80. StrictMock<mariadb_mock> mock;
  81. expect_query(mock, "START TRANSACTION");
  82. expect_query(mock, "SELECT Uuid()", result_used({
  83. { "3d12737a-abb9-11e8-98d0-529269fb1459" }
  84. }));
  85. expect_query(mock, "INSERT INTO "
  86. "`tbl_test3` "
  87. "SET "
  88. "`tbl_test3_id`=UuidToBin('X3d12737a-abb9-11e8-98d0-529269fb1459X'), "
  89. "`tbl_derived3_id_test3_list`=UuidToBin(null), "
  90. "`tbl_derived3_id_test3_vector`=UuidToBin(null), "
  91. "`u32_data`='X5X', "
  92. "`i32_data`='X6X', "
  93. "`u64_data`='X7X', "
  94. "`i64_data`='X8X'",
  95. result_affected_rows(1));
  96. expect_query(mock, "COMMIT");
  97. EXPECT_CALL(
  98. mock,
  99. mysql_real_escape_string(reinterpret_cast<MYSQL*>(0x1111), _, _, _))
  100. .Times(AnyNumber())
  101. .WillRepeatedly(WithArgs<1, 2, 3>(EscapeString()));
  102. EXPECT_CALL(
  103. mock,
  104. mysql_close(
  105. reinterpret_cast<MYSQL*>(0x1111)));
  106. test3 t3;
  107. t3.u32_data = 5;
  108. t3.i32_data = 6;
  109. t3.u64_data = 7;
  110. t3.i64_data = 8;
  111. ::cppmariadb::connection connection(reinterpret_cast<MYSQL*>(0x1111));
  112. auto context = make_context<driver::mariadb>(test_schema, connection);
  113. context.create(t3);
  114. }
  115. TEST(CppHibernateTests, create_derived1)
  116. {
  117. StrictMock<mariadb_mock> mock;
  118. expect_query(mock, "START TRANSACTION");
  119. expect_query(mock, "SELECT Uuid()", result_used({
  120. { "3d12758c-abb9-11e8-98d0-529269fb1459" }
  121. }));
  122. expect_query(mock, "SELECT Uuid()", result_used({
  123. { "3d12778a-abb9-11e8-98d0-529269fb1459" }
  124. }));
  125. expect_query(mock, "INSERT INTO "
  126. "`tbl_base` "
  127. "SET "
  128. "`tbl_base_id`=UuidToBin('X3d12778a-abb9-11e8-98d0-529269fb1459X'), "
  129. "`name`='Xderived1X', "
  130. "`__type`='X11X'",
  131. result_affected_rows(1));
  132. expect_query(mock, "SELECT Uuid()", result_used({
  133. { "3d127988-abb9-11e8-98d0-529269fb1459" }
  134. }));
  135. expect_query(mock, "INSERT INTO "
  136. "`tbl_test1` "
  137. "SET "
  138. "`tbl_test1_id`=UuidToBin('X3d127988-abb9-11e8-98d0-529269fb1459X'), "
  139. "`str_data`='Xstr_data of class `test1` object `d1.test1_data`X', "
  140. "`str64_data`='Xstr64_data of class `test1` object `d1.test1_data`X', "
  141. "`u32_nullable`='X32X', "
  142. "`u32_ptr_u`=null, "
  143. "`u32_ptr_s`='X789X'",
  144. result_affected_rows(1));
  145. expect_query(mock, "INSERT INTO "
  146. "`tbl_derived1` "
  147. "SET "
  148. "`tbl_derived1_id`=UuidToBin('X3d12758c-abb9-11e8-98d0-529269fb1459X'), "
  149. "`tbl_base_id`=UuidToBin('X3d12778a-abb9-11e8-98d0-529269fb1459X'), "
  150. "`tbl_test1_id_test1_data`=UuidToBin('X3d127988-abb9-11e8-98d0-529269fb1459X'), "
  151. "`enum_data`='Xtest2X'",
  152. result_affected_rows(1));
  153. expect_query(mock, "COMMIT");
  154. EXPECT_CALL(
  155. mock,
  156. mysql_real_escape_string(reinterpret_cast<MYSQL*>(0x1111), _, _, _))
  157. .Times(AnyNumber())
  158. .WillRepeatedly(WithArgs<1, 2, 3>(EscapeString()));
  159. EXPECT_CALL(
  160. mock,
  161. mysql_close(
  162. reinterpret_cast<MYSQL*>(0x1111)));
  163. derived1 d1;
  164. d1.name = "derived1";
  165. d1.enum_data = test_enum::test2;
  166. d1.test1_data.str_data = "str_data of class `test1` object `d1.test1_data`";
  167. d1.test1_data.str64_data = "str64_data of class `test1` object `d1.test1_data`";
  168. d1.test1_data.u32_nullable = 32;
  169. d1.test1_data.u32_ptr_s = std::make_shared<uint32_t>(789);
  170. ::cppmariadb::connection connection(reinterpret_cast<MYSQL*>(0x1111));
  171. auto context = make_context<driver::mariadb>(test_schema, connection);
  172. context.create(static_cast<base&>(d1));
  173. }
  174. TEST(CppHibernateTests, create_derived2)
  175. {
  176. StrictMock<mariadb_mock> mock;
  177. expect_query(mock, "START TRANSACTION");
  178. expect_query(mock, "SELECT Uuid()", result_used({
  179. { "3d127bcc-abb9-11e8-98d0-529269fb1459" }
  180. }));
  181. expect_query(mock, "SELECT Uuid()", result_used({
  182. { "3d127db6-abb9-11e8-98d0-529269fb1459" }
  183. }));
  184. expect_query(mock, "INSERT INTO "
  185. "`tbl_base` "
  186. "SET "
  187. "`tbl_base_id`=UuidToBin('X3d127db6-abb9-11e8-98d0-529269fb1459X'), "
  188. "`name`='Xderived2X', "
  189. "`__type`='X12X'",
  190. result_affected_rows(1));
  191. expect_query(mock, "SELECT Uuid()", result_used({
  192. { "3d1283a6-abb9-11e8-98d0-529269fb1459" }
  193. }));
  194. expect_query(mock, "INSERT INTO "
  195. "`tbl_test2` "
  196. "SET "
  197. "`tbl_test2_id`=UuidToBin('X3d1283a6-abb9-11e8-98d0-529269fb1459X'), "
  198. "`u8_data`='X10X', "
  199. "`i8_data`='X11X', "
  200. "`u16_data`='X12X', "
  201. "`i16_data`='X13X'",
  202. result_affected_rows(1));
  203. expect_query(mock, "SELECT Uuid()", result_used({
  204. { "3d128522-abb9-11e8-98d0-529269fb1459" }
  205. }));
  206. expect_query(mock, "INSERT INTO "
  207. "`tbl_test2` "
  208. "SET "
  209. "`tbl_test2_id`=UuidToBin('X3d128522-abb9-11e8-98d0-529269fb1459X'), "
  210. "`u8_data`='X20X', "
  211. "`i8_data`='X21X', "
  212. "`u16_data`='X22X', "
  213. "`i16_data`='X23X'",
  214. result_affected_rows(1));
  215. expect_query(mock, "INSERT INTO "
  216. "`tbl_derived2` "
  217. "SET "
  218. "`tbl_derived2_id`=UuidToBin('X3d127bcc-abb9-11e8-98d0-529269fb1459X'), "
  219. "`tbl_base_id`=UuidToBin('X3d127db6-abb9-11e8-98d0-529269fb1459X'), "
  220. "`tbl_test2_id_test2_nullable`=UuidToBin('X3d1283a6-abb9-11e8-98d0-529269fb1459X'), "
  221. "`tbl_test2_id_test2_ptr_u`=UuidToBin('X3d128522-abb9-11e8-98d0-529269fb1459X'), "
  222. "`tbl_test2_id_test2_ptr_s`=UuidToBin(null)",
  223. result_affected_rows(1));
  224. expect_query(mock, "COMMIT");
  225. EXPECT_CALL(
  226. mock,
  227. mysql_real_escape_string(reinterpret_cast<MYSQL*>(0x1111), _, _, _))
  228. .Times(AnyNumber())
  229. .WillRepeatedly(WithArgs<1, 2, 3>(EscapeString()));
  230. EXPECT_CALL(
  231. mock,
  232. mysql_close(
  233. reinterpret_cast<MYSQL*>(0x1111)));
  234. derived2 d2;
  235. d2.name = "derived2";
  236. d2.test2_nullable = test2 { };
  237. d2.test2_nullable->u8_data = 10;
  238. d2.test2_nullable->i8_data = 11;
  239. d2.test2_nullable->u16_data = 12;
  240. d2.test2_nullable->i16_data = 13;
  241. d2.test2_ptr_u = std::make_unique<test2>();
  242. d2.test2_ptr_u->u8_data = 20;
  243. d2.test2_ptr_u->i8_data = 21;
  244. d2.test2_ptr_u->u16_data = 22;
  245. d2.test2_ptr_u->i16_data = 23;
  246. ::cppmariadb::connection connection(reinterpret_cast<MYSQL*>(0x1111));
  247. auto context = make_context<driver::mariadb>(test_schema, connection);
  248. context.create(static_cast<base&>(d2));
  249. }
  250. TEST(CppHibernateTests, create_derived3)
  251. {
  252. StrictMock<mariadb_mock> mock;
  253. expect_query(mock, "START TRANSACTION");
  254. expect_query(mock, "SELECT Uuid()", result_used({
  255. { "3d12866c-abb9-11e8-98d0-529269fb1459" }
  256. }));
  257. expect_query(mock, "SELECT Uuid()", result_used({
  258. { "3d1287a2-abb9-11e8-98d0-529269fb1459" }
  259. }));
  260. expect_query(mock, "SELECT Uuid()", result_used({
  261. { "3d1288ce-abb9-11e8-98d0-529269fb1459" }
  262. }));
  263. expect_query(mock, "INSERT INTO "
  264. "`tbl_base` "
  265. "SET "
  266. "`tbl_base_id`=UuidToBin('X3d1288ce-abb9-11e8-98d0-529269fb1459X'), "
  267. "`name`='Xderived3X', "
  268. "`__type`='X13X'",
  269. result_affected_rows(1));
  270. expect_query(mock, "INSERT INTO "
  271. "`tbl_derived2` "
  272. "SET "
  273. "`tbl_derived2_id`=UuidToBin('X3d1287a2-abb9-11e8-98d0-529269fb1459X'), "
  274. "`tbl_base_id`=UuidToBin('X3d1288ce-abb9-11e8-98d0-529269fb1459X'), "
  275. "`tbl_test2_id_test2_nullable`=UuidToBin(null), "
  276. "`tbl_test2_id_test2_ptr_u`=UuidToBin(null), "
  277. "`tbl_test2_id_test2_ptr_s`=UuidToBin(null)",
  278. result_affected_rows(1));
  279. expect_query(mock, "INSERT INTO "
  280. "`tbl_derived3` "
  281. "SET "
  282. "`tbl_derived3_id`=UuidToBin('X3d12866c-abb9-11e8-98d0-529269fb1459X'), "
  283. "`tbl_derived2_id`=UuidToBin('X3d1287a2-abb9-11e8-98d0-529269fb1459X')",
  284. result_affected_rows(1));
  285. expect_query(mock, "SELECT Uuid()", result_used({
  286. { "3d1289f0-abb9-11e8-98d0-529269fb1459" }
  287. }));
  288. expect_query(mock, "INSERT INTO "
  289. "`tbl_test3` "
  290. "SET "
  291. "`tbl_test3_id`=UuidToBin('X3d1289f0-abb9-11e8-98d0-529269fb1459X'), "
  292. "`tbl_derived3_id_test3_list`=UuidToBin('X3d12866c-abb9-11e8-98d0-529269fb1459X'), "
  293. "`tbl_derived3_id_test3_vector`=UuidToBin(null), "
  294. "`u32_data`='X100X', "
  295. "`i32_data`='X101X', "
  296. "`u64_data`='X102X', "
  297. "`i64_data`='X103X'",
  298. result_affected_rows(1));
  299. expect_query(mock, "SELECT Uuid()", result_used({
  300. { "3d128b26-abb9-11e8-98d0-529269fb1459" }
  301. }));
  302. expect_query(mock, "INSERT INTO "
  303. "`tbl_test3` "
  304. "SET "
  305. "`tbl_test3_id`=UuidToBin('X3d128b26-abb9-11e8-98d0-529269fb1459X'), "
  306. "`tbl_derived3_id_test3_list`=UuidToBin('X3d12866c-abb9-11e8-98d0-529269fb1459X'), "
  307. "`tbl_derived3_id_test3_vector`=UuidToBin(null), "
  308. "`u32_data`='X110X', "
  309. "`i32_data`='X111X', "
  310. "`u64_data`='X112X', "
  311. "`i64_data`='X113X'",
  312. result_affected_rows(1));
  313. expect_query(mock, "SELECT Uuid()", result_used({
  314. { "3d128eb4-abb9-11e8-98d0-529269fb1459" }
  315. }));
  316. expect_query(mock, "INSERT INTO "
  317. "`tbl_test3` "
  318. "SET "
  319. "`tbl_test3_id`=UuidToBin('X3d128eb4-abb9-11e8-98d0-529269fb1459X'), "
  320. "`tbl_derived3_id_test3_list`=UuidToBin(null), "
  321. "`tbl_derived3_id_test3_vector`=UuidToBin('X3d12866c-abb9-11e8-98d0-529269fb1459X'), "
  322. "`u32_data`='X120X', "
  323. "`i32_data`='X121X', "
  324. "`u64_data`='X122X', "
  325. "`i64_data`='X123X'",
  326. result_affected_rows(1));
  327. expect_query(mock, "SELECT Uuid()", result_used({
  328. { "3d128ffe-abb9-11e8-98d0-529269fb1459" }
  329. }));
  330. expect_query(mock, "INSERT INTO "
  331. "`tbl_test3` "
  332. "SET "
  333. "`tbl_test3_id`=UuidToBin('X3d128ffe-abb9-11e8-98d0-529269fb1459X'), "
  334. "`tbl_derived3_id_test3_list`=UuidToBin(null), "
  335. "`tbl_derived3_id_test3_vector`=UuidToBin('X3d12866c-abb9-11e8-98d0-529269fb1459X'), "
  336. "`u32_data`='X130X', "
  337. "`i32_data`='X131X', "
  338. "`u64_data`='X132X', "
  339. "`i64_data`='X133X'",
  340. result_affected_rows(1));
  341. expect_query(mock, "SELECT Uuid()", result_used({
  342. { "3d129134-abb9-11e8-98d0-529269fb1459" }
  343. }));
  344. expect_query(mock, "INSERT INTO "
  345. "`tbl_test3` "
  346. "SET "
  347. "`tbl_test3_id`=UuidToBin('X3d129134-abb9-11e8-98d0-529269fb1459X'), "
  348. "`tbl_derived3_id_test3_list`=UuidToBin(null), "
  349. "`tbl_derived3_id_test3_vector`=UuidToBin('X3d12866c-abb9-11e8-98d0-529269fb1459X'), "
  350. "`u32_data`='X140X', "
  351. "`i32_data`='X141X', "
  352. "`u64_data`='X142X', "
  353. "`i64_data`='X143X'",
  354. result_affected_rows(1));
  355. expect_query(mock, "COMMIT");
  356. EXPECT_CALL(
  357. mock,
  358. mysql_real_escape_string(reinterpret_cast<MYSQL*>(0x1111), _, _, _))
  359. .Times(AnyNumber())
  360. .WillRepeatedly(WithArgs<1, 2, 3>(EscapeString()));
  361. EXPECT_CALL(
  362. mock,
  363. mysql_close(
  364. reinterpret_cast<MYSQL*>(0x1111)));
  365. derived3 d3;
  366. d3.name = "derived3";
  367. d3.test3_list.emplace_back();
  368. d3.test3_list.back().u32_data = 100;
  369. d3.test3_list.back().i32_data = 101;
  370. d3.test3_list.back().u64_data = 102;
  371. d3.test3_list.back().i64_data = 103;
  372. d3.test3_list.emplace_back();
  373. d3.test3_list.back().u32_data = 110;
  374. d3.test3_list.back().i32_data = 111;
  375. d3.test3_list.back().u64_data = 112;
  376. d3.test3_list.back().i64_data = 113;
  377. d3.test3_vector.emplace_back();
  378. d3.test3_vector.back().u32_data = 120;
  379. d3.test3_vector.back().i32_data = 121;
  380. d3.test3_vector.back().u64_data = 122;
  381. d3.test3_vector.back().i64_data = 123;
  382. d3.test3_vector.emplace_back();
  383. d3.test3_vector.back().u32_data = 130;
  384. d3.test3_vector.back().i32_data = 131;
  385. d3.test3_vector.back().u64_data = 132;
  386. d3.test3_vector.back().i64_data = 133;
  387. d3.test3_vector.emplace_back();
  388. d3.test3_vector.back().u32_data = 140;
  389. d3.test3_vector.back().i32_data = 141;
  390. d3.test3_vector.back().u64_data = 142;
  391. d3.test3_vector.back().i64_data = 143;
  392. ::cppmariadb::connection connection(reinterpret_cast<MYSQL*>(0x1111));
  393. auto context = make_context<driver::mariadb>(test_schema, connection);
  394. context.create(static_cast<derived2&>(d3));
  395. }