Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 

226 řádky
12 KiB

  1. #include <gtest/gtest.h>
  2. #include <cpphibernate/driver/mariadb.h>
  3. #include "test_schema.h"
  4. #include "mariadb_mock.h"
  5. using namespace ::testing;
  6. using namespace ::cpphibernate;
  7. template<typename T_mock>
  8. inline void expect_query(T_mock& mock, const std::string& query)
  9. {
  10. EXPECT_CALL(
  11. mock,
  12. mysql_real_query(
  13. reinterpret_cast<MYSQL*>(0x1111),
  14. StrEq(query),
  15. query.size()));
  16. EXPECT_CALL(
  17. mock,
  18. mysql_store_result(
  19. reinterpret_cast<MYSQL*>(0x1111)))
  20. .WillOnce(Return(reinterpret_cast<MYSQL_RES*>(0x2222)));
  21. EXPECT_CALL(
  22. mock,
  23. mysql_free_result(
  24. reinterpret_cast<MYSQL_RES*>(0x2222)));
  25. }
  26. TEST(CppHibernateTests, init)
  27. {
  28. StrictMock<MariaDbMock> mock;
  29. InSequence seq;
  30. expect_query(mock, "START TRANSACTION");
  31. expect_query(mock, "DROP DATABASE IF EXISTS `test`");
  32. expect_query(mock, "CREATE SCHEMA IF NOT EXISTS `test` DEFAULT CHARACTER SET utf8");
  33. expect_query(mock, "USE `test`");
  34. expect_query(mock, "CREATE FUNCTION IF NOT EXISTS UuidToBin(_uuid CHAR(36))\n"
  35. " RETURNS BINARY(16)\n"
  36. " LANGUAGE SQL\n"
  37. " DETERMINISTIC\n"
  38. " CONTAINS SQL\n"
  39. " SQL SECURITY INVOKER\n"
  40. "RETURN\n"
  41. " UNHEX(CONCAT(\n"
  42. " SUBSTR(_uuid, 25, 12),\n"
  43. " SUBSTR(_uuid, 20, 4),\n"
  44. " SUBSTR(_uuid, 15, 4),\n"
  45. " SUBSTR(_uuid, 10, 4),\n"
  46. " SUBSTR(_uuid, 1, 8)\n"
  47. " )\n"
  48. ")");
  49. expect_query(mock, "CREATE FUNCTION IF NOT EXISTS BinToUuid(_bin BINARY(16))\n"
  50. " RETURNS CHAR(36)\n"
  51. " LANGUAGE SQL\n"
  52. " DETERMINISTIC\n"
  53. " CONTAINS SQL\n"
  54. " SQL SECURITY INVOKER\n"
  55. "RETURN\n"
  56. " LCASE(CONCAT_WS('-',\n"
  57. " HEX(SUBSTR(_bin, 13, 4)),\n"
  58. " HEX(SUBSTR(_bin, 11, 2)),\n"
  59. " HEX(SUBSTR(_bin, 9, 2)),\n"
  60. " HEX(SUBSTR(_bin, 7, 2)),\n"
  61. " HEX(SUBSTR(_bin, 1, 6))\n"
  62. " )\n"
  63. ")");
  64. expect_query(mock, "CREATE TABLE IF NOT EXISTS `tbl_test1`\n"
  65. "(\n"
  66. " `tbl_test1_id` BINARY(16) NOT NULL,\n"
  67. " `str_data` VARCHAR(100) NOT NULL,\n"
  68. " `str64_data` VARCHAR(64) NOT NULL,\n"
  69. " `u32_nullable` INT UNSIGNED NULL DEFAULT NULL,\n"
  70. " `u32_ptr_u` INT UNSIGNED NULL DEFAULT NULL,\n"
  71. " `u32_ptr_s` INT UNSIGNED NULL DEFAULT NULL,\n"
  72. " PRIMARY KEY ( `tbl_test1_id` ),\n"
  73. " UNIQUE INDEX `index_tbl_test1_id` ( `tbl_test1_id` ASC )\n"
  74. ")\n"
  75. "ENGINE = InnoDB\n"
  76. "DEFAULT CHARACTER SET = utf8");
  77. expect_query(mock, "CREATE TABLE IF NOT EXISTS `tbl_test2`\n"
  78. "(\n"
  79. " `tbl_test2_id` BINARY(16) NOT NULL,\n"
  80. " `u8_data` TINYINT UNSIGNED NOT NULL,\n"
  81. " `i8_data` TINYINT NOT NULL,\n"
  82. " `u16_data` SMALLINT UNSIGNED NOT NULL,\n"
  83. " `i16_data` SMALLINT NOT NULL,\n"
  84. " PRIMARY KEY ( `tbl_test2_id` ),\n"
  85. " UNIQUE INDEX `index_tbl_test2_id` ( `tbl_test2_id` ASC )\n"
  86. ")\n"
  87. "ENGINE = InnoDB\n"
  88. "DEFAULT CHARACTER SET = utf8");
  89. expect_query(mock, "CREATE TABLE IF NOT EXISTS `tbl_test3`\n"
  90. "(\n"
  91. " `tbl_test3_id` BINARY(16) NOT NULL,\n"
  92. " `tbl_derived3_id_test3_list` BINARY(16) NULL DEFAULT NULL,\n"
  93. " `tbl_derived3_id_test3_vector` BINARY(16) NULL DEFAULT NULL,\n"
  94. " `u32_data` INT UNSIGNED NOT NULL,\n"
  95. " `i32_data` INT NOT NULL,\n"
  96. " `u64_data` BIGINT UNSIGNED NOT NULL,\n"
  97. " `i64_data` BIGINT NOT NULL,\n"
  98. " PRIMARY KEY ( `tbl_test3_id` ),\n"
  99. " UNIQUE INDEX `index_tbl_test3_id` ( `tbl_test3_id` ASC ),\n"
  100. " INDEX `index_tbl_derived3_id_test3_list` ( `tbl_derived3_id_test3_list` ASC ),\n"
  101. " INDEX `index_tbl_derived3_id_test3_vector` ( `tbl_derived3_id_test3_vector` ASC ),\n"
  102. " CONSTRAINT `fk_tbl_test3_tbl_derived3_id_test3_list`\n"
  103. " FOREIGN KEY (`tbl_derived3_id_test3_list`)\n"
  104. " REFERENCES `test`.`tbl_derived3` (`tbl_derived3_id`)\n"
  105. " ON DELETE SET NULL\n"
  106. " ON UPDATE NO ACTION,\n"
  107. " CONSTRAINT `fk_tbl_test3_tbl_derived3_id_test3_vector`\n"
  108. " FOREIGN KEY (`tbl_derived3_id_test3_vector`)\n"
  109. " REFERENCES `test`.`tbl_derived3` (`tbl_derived3_id`)\n"
  110. " ON DELETE SET NULL\n"
  111. " ON UPDATE NO ACTION\n"
  112. ")\n"
  113. "ENGINE = InnoDB\n"
  114. "DEFAULT CHARACTER SET = utf8");
  115. expect_query(mock, "CREATE TABLE IF NOT EXISTS `tbl_base`\n"
  116. "(\n"
  117. " `tbl_base_id` BINARY(16) NOT NULL,\n"
  118. " `name` VARCHAR(100) NOT NULL,\n"
  119. " `__type` INT UNSIGNED NOT NULL,\n"
  120. " PRIMARY KEY ( `tbl_base_id` ),\n"
  121. " UNIQUE INDEX `index_tbl_base_id` ( `tbl_base_id` ASC )\n"
  122. ")\n"
  123. "ENGINE = InnoDB\n"
  124. "DEFAULT CHARACTER SET = utf8");
  125. expect_query(mock, "CREATE TABLE IF NOT EXISTS `tbl_derived1`\n"
  126. "(\n"
  127. " `tbl_derived1_id` BINARY(16) NOT NULL,\n"
  128. " `tbl_base_id` BINARY(16) NOT NULL,\n"
  129. " `tbl_test1_id_test1_data` BINARY(16) NOT NULL,\n"
  130. " `enum_data` ENUM ( 'test0', 'test1', 'test2', 'test3' ) NOT NULL,\n"
  131. " PRIMARY KEY ( `tbl_derived1_id` ),\n"
  132. " UNIQUE INDEX `index_tbl_derived1_id` ( `tbl_derived1_id` ASC ),\n"
  133. " UNIQUE INDEX `index_tbl_base_id` ( `tbl_base_id` ASC ),\n"
  134. " INDEX `index_tbl_test1_id_test1_data` ( `tbl_test1_id_test1_data` ASC ),\n"
  135. " CONSTRAINT `fk_tbl_derived1_to_tbl_base_id`\n"
  136. " FOREIGN KEY (`tbl_base_id`)\n"
  137. " REFERENCES `test`.`tbl_base` (`tbl_base_id`)\n"
  138. " ON DELETE CASCADE\n"
  139. " ON UPDATE NO ACTION,\n"
  140. " CONSTRAINT `fk_tbl_derived1_to_tbl_test1_id_test1_data`\n"
  141. " FOREIGN KEY (`tbl_test1_id_test1_data`)\n"
  142. " REFERENCES `test`.`tbl_test1` (`tbl_test1_id`)\n"
  143. " ON DELETE CASCADE\n"
  144. " ON UPDATE NO ACTION\n"
  145. ")\n"
  146. "ENGINE = InnoDB\n"
  147. "DEFAULT CHARACTER SET = utf8");
  148. expect_query(mock, "CREATE TABLE IF NOT EXISTS `tbl_derived2`\n"
  149. "(\n"
  150. " `tbl_derived2_id` BINARY(16) NOT NULL,\n"
  151. " `tbl_base_id` BINARY(16) NOT NULL,\n"
  152. " `tbl_test2_id_test2_nullable` BINARY(16) NULL DEFAULT NULL,\n"
  153. " `tbl_test2_id_test2_ptr_u` BINARY(16) NULL DEFAULT NULL,\n"
  154. " `tbl_test2_id_test2_ptr_s` BINARY(16) NULL DEFAULT NULL,\n"
  155. " PRIMARY KEY ( `tbl_derived2_id` ),\n"
  156. " UNIQUE INDEX `index_tbl_derived2_id` ( `tbl_derived2_id` ASC ),\n"
  157. " UNIQUE INDEX `index_tbl_base_id` ( `tbl_base_id` ASC ),\n"
  158. " INDEX `index_tbl_test2_id_test2_nullable` ( `tbl_test2_id_test2_nullable` ASC ),\n"
  159. " INDEX `index_tbl_test2_id_test2_ptr_u` ( `tbl_test2_id_test2_ptr_u` ASC ),\n"
  160. " INDEX `index_tbl_test2_id_test2_ptr_s` ( `tbl_test2_id_test2_ptr_s` ASC ),\n"
  161. " CONSTRAINT `fk_tbl_derived2_to_tbl_base_id`\n"
  162. " FOREIGN KEY (`tbl_base_id`)\n"
  163. " REFERENCES `test`.`tbl_base` (`tbl_base_id`)\n"
  164. " ON DELETE CASCADE\n"
  165. " ON UPDATE NO ACTION,\n"
  166. " CONSTRAINT `fk_tbl_derived2_to_tbl_test2_id_test2_nullable`\n"
  167. " FOREIGN KEY (`tbl_test2_id_test2_nullable`)\n"
  168. " REFERENCES `test`.`tbl_test2` (`tbl_test2_id`)\n"
  169. " ON DELETE CASCADE\n"
  170. " ON UPDATE NO ACTION,\n"
  171. " CONSTRAINT `fk_tbl_derived2_to_tbl_test2_id_test2_ptr_u`\n"
  172. " FOREIGN KEY (`tbl_test2_id_test2_ptr_u`)\n"
  173. " REFERENCES `test`.`tbl_test2` (`tbl_test2_id`)\n"
  174. " ON DELETE CASCADE\n"
  175. " ON UPDATE NO ACTION,\n"
  176. " CONSTRAINT `fk_tbl_derived2_to_tbl_test2_id_test2_ptr_s`\n"
  177. " FOREIGN KEY (`tbl_test2_id_test2_ptr_s`)\n"
  178. " REFERENCES `test`.`tbl_test2` (`tbl_test2_id`)\n"
  179. " ON DELETE CASCADE\n"
  180. " ON UPDATE NO ACTION\n"
  181. ")\n"
  182. "ENGINE = InnoDB\n"
  183. "DEFAULT CHARACTER SET = utf8");
  184. expect_query(mock, "CREATE TABLE IF NOT EXISTS `tbl_derived3`\n"
  185. "(\n"
  186. " `tbl_derived3_id` BINARY(16) NOT NULL,\n"
  187. " `tbl_derived1_id` BINARY(16) NOT NULL,\n"
  188. " PRIMARY KEY ( `tbl_derived3_id` ),\n"
  189. " UNIQUE INDEX `index_tbl_derived3_id` ( `tbl_derived3_id` ASC ),\n"
  190. " UNIQUE INDEX `index_tbl_derived1_id` ( `tbl_derived1_id` ASC ),\n"
  191. " CONSTRAINT `fk_tbl_derived3_to_tbl_derived1_id`\n"
  192. " FOREIGN KEY (`tbl_derived1_id`)\n"
  193. " REFERENCES `test`.`tbl_derived1` (`tbl_derived1_id`)\n"
  194. " ON DELETE CASCADE\n"
  195. " ON UPDATE NO ACTION\n"
  196. ")\n"
  197. "ENGINE = InnoDB\n"
  198. "DEFAULT CHARACTER SET = utf8");
  199. expect_query(mock, "COMMIT");
  200. EXPECT_CALL(
  201. mock,
  202. mysql_close(
  203. reinterpret_cast<MYSQL*>(0x1111)));
  204. ::cppmariadb::connection connection(reinterpret_cast<MYSQL*>(0x1111));
  205. auto context = make_context<driver::mariadb>(test_schema, connection);
  206. context.init(true);
  207. }