| @@ -67,8 +67,11 @@ beg_namespace_cpphibernate_driver_mariadb | |||||
| const table_t* get_derived(size_t id) const; | const table_t* get_derived(size_t id) const; | ||||
| /* CRUD */ | /* CRUD */ | ||||
| inline void init(const init_context& context) const | |||||
| { return init_exec(context); } | |||||
| inline void init_stage1(const init_context& context) const | |||||
| { return init_stage1_exec(context); } | |||||
| inline void init_stage2(const init_context& context) const | |||||
| { return init_stage2_exec(context); } | |||||
| inline decltype(auto) create_update(const create_update_context& context) const | inline decltype(auto) create_update(const create_update_context& context) const | ||||
| { return create_update_intern(context); } | { return create_update_intern(context); } | ||||
| @@ -86,12 +89,14 @@ beg_namespace_cpphibernate_driver_mariadb | |||||
| using statement_ptr = std::unique_ptr<::cppmariadb::statement>; | using statement_ptr = std::unique_ptr<::cppmariadb::statement>; | ||||
| mutable statement_ptr _statement_create_table; | mutable statement_ptr _statement_create_table; | ||||
| mutable statement_ptr _statement_alter_table; | |||||
| mutable statement_ptr _statement_insert_into; | mutable statement_ptr _statement_insert_into; | ||||
| ::cppmariadb::statement& get_statement_create_table() const; | ::cppmariadb::statement& get_statement_create_table() const; | ||||
| ::cppmariadb::statement* get_statement_alter_table() const; | |||||
| ::cppmariadb::statement& get_statement_insert_into() const; | ::cppmariadb::statement& get_statement_insert_into() const; | ||||
| std::string execute_insert_update( | |||||
| std::string execute_create_update( | |||||
| const create_update_context& context, | const create_update_context& context, | ||||
| ::cppmariadb::statement& statement, | ::cppmariadb::statement& statement, | ||||
| const filter_t* filter) const; | const filter_t* filter) const; | ||||
| @@ -99,7 +104,8 @@ beg_namespace_cpphibernate_driver_mariadb | |||||
| virtual std::string create_update_base(const create_update_context& context) const; | virtual std::string create_update_base(const create_update_context& context) const; | ||||
| protected: | protected: | ||||
| void init_exec (const init_context& context) const; | |||||
| void init_stage1_exec (const init_context& context) const; | |||||
| void init_stage2_exec (const init_context& context) const; | |||||
| virtual std::string create_update_intern(const create_update_context& context) const; | virtual std::string create_update_intern(const create_update_context& context) const; | ||||
| std::string create_update_exec (const create_update_context& context) const; | std::string create_update_exec (const create_update_context& context) const; | ||||
| @@ -193,7 +193,12 @@ void schema_t::init(const init_context& context) const | |||||
| for (auto& kvp : tables) | for (auto& kvp : tables) | ||||
| { | { | ||||
| assert(kvp.second); | assert(kvp.second); | ||||
| kvp.second->init(context); | |||||
| kvp.second->init_stage1(context); | |||||
| } | |||||
| for (auto& kvp : tables) | |||||
| { | |||||
| assert(kvp.second); | |||||
| kvp.second->init_stage2(context); | |||||
| } | } | ||||
| } | } | ||||
| @@ -14,9 +14,9 @@ using namespace ::cpphibernate::driver::mariadb_impl; | |||||
| /* build queries */ | /* build queries */ | ||||
| std::string build_create_table_query(const table_t& table) | |||||
| std::string build_init_stage1_query(const table_t& table) | |||||
| { | { | ||||
| std::ostringstream os; | |||||
| std::ostringstream os; | |||||
| /* CREATE TABLE */ | /* CREATE TABLE */ | ||||
| os << "CREATE TABLE IF NOT EXISTS `" | os << "CREATE TABLE IF NOT EXISTS `" | ||||
| @@ -194,14 +194,38 @@ std::ostringstream os; | |||||
| << "` ASC )"; | << "` ASC )"; | ||||
| } | } | ||||
| /* CREATE TABLE end */ | |||||
| os << decindent | |||||
| << indent | |||||
| << ")" | |||||
| << indent | |||||
| << "ENGINE = InnoDB" | |||||
| << indent | |||||
| << "DEFAULT CHARACTER SET = utf8"; | |||||
| return os.str(); | |||||
| } | |||||
| std::string build_init_stage2_query(const table_t& table) | |||||
| { | |||||
| std::ostringstream os; | |||||
| /* ALTER TABLE */ | |||||
| os << "ALTER TABLE `" | |||||
| << table.table_name | |||||
| << "`" | |||||
| << incindent; | |||||
| size_t index = 0; | |||||
| /* CONSTRAINT base table */ | /* CONSTRAINT base table */ | ||||
| if (table.base_table) | if (table.base_table) | ||||
| { | { | ||||
| assert(table.base_table->primary_key_field); | assert(table.base_table->primary_key_field); | ||||
| auto& ref_key_info = *table.base_table->primary_key_field; | auto& ref_key_info = *table.base_table->primary_key_field; | ||||
| os << "," | |||||
| << indent | |||||
| << "CONSTRAINT `fk_" | |||||
| if (index++) os << ","; | |||||
| os << indent | |||||
| << "ADD CONSTRAINT `fk_" | |||||
| << table.table_name | << table.table_name | ||||
| << "_to_" | << "_to_" | ||||
| << ref_key_info.field_name | << ref_key_info.field_name | ||||
| @@ -234,9 +258,9 @@ std::ostringstream os; | |||||
| assert(field_info.referenced_table); | assert(field_info.referenced_table); | ||||
| assert(field_info.referenced_table->primary_key_field); | assert(field_info.referenced_table->primary_key_field); | ||||
| auto& ref_key_info = *field_info.referenced_table->primary_key_field; | auto& ref_key_info = *field_info.referenced_table->primary_key_field; | ||||
| os << "," | |||||
| << indent | |||||
| << "CONSTRAINT `fk_" | |||||
| if (index++) os << ","; | |||||
| os << indent | |||||
| << "ADD CONSTRAINT `fk_" | |||||
| << table.table_name | << table.table_name | ||||
| << "_to_" | << "_to_" | ||||
| << ref_key_info.table_name | << ref_key_info.table_name | ||||
| @@ -273,11 +297,11 @@ std::ostringstream os; | |||||
| assert(field_info.table); | assert(field_info.table); | ||||
| assert(field_info.table->primary_key_field); | assert(field_info.table->primary_key_field); | ||||
| auto& ref_key_info = *field_info.table->primary_key_field; | auto& ref_key_info = *field_info.table->primary_key_field; | ||||
| os << "," | |||||
| << indent | |||||
| << "CONSTRAINT `fk_" | |||||
| if (index++) os << ","; | |||||
| os << indent | |||||
| << "ADD CONSTRAINT `fk_" | |||||
| << table.table_name | << table.table_name | ||||
| << "_" | |||||
| << "_to_" | |||||
| << field_info.table_name | << field_info.table_name | ||||
| << "_id_" | << "_id_" | ||||
| << field_info.field_name | << field_info.field_name | ||||
| @@ -304,19 +328,12 @@ std::ostringstream os; | |||||
| << decindent; | << decindent; | ||||
| } | } | ||||
| /* CREATE TABLE end */ | |||||
| os << decindent | |||||
| << indent | |||||
| << ")" | |||||
| << indent | |||||
| << "ENGINE = InnoDB" | |||||
| << indent | |||||
| << "DEFAULT CHARACTER SET = utf8"; | |||||
| return os.str(); | |||||
| return index == 0 | |||||
| ? std::string { } | |||||
| : os.str(); | |||||
| } | } | ||||
| std::string build_insert_update_query(const table_t& table, const filter_t* filter, const field_t* owner) | |||||
| std::string build_create_update_query(const table_t& table, const filter_t* filter, const field_t* owner) | |||||
| { | { | ||||
| std::ostringstream os; | std::ostringstream os; | ||||
| @@ -469,9 +486,9 @@ std::string build_insert_update_query(const table_t& table, const filter_t* filt | |||||
| return os.str(); | return os.str(); | ||||
| } | } | ||||
| /* execute_insert_update */ | |||||
| /* execute_create_update */ | |||||
| std::string table_t::execute_insert_update( | |||||
| std::string table_t::execute_create_update( | |||||
| const create_update_context& context, | const create_update_context& context, | ||||
| ::cppmariadb::statement& statement, | ::cppmariadb::statement& statement, | ||||
| const filter_t* filter) const | const filter_t* filter) const | ||||
| @@ -672,16 +689,28 @@ const table_t* table_t::get_derived(size_t id) const | |||||
| { | { | ||||
| if (_statement_create_table) | if (_statement_create_table) | ||||
| return *_statement_create_table; | return *_statement_create_table; | ||||
| auto query = build_create_table_query(*this); | |||||
| auto query = build_init_stage1_query(*this); | |||||
| _statement_create_table.reset(new ::cppmariadb::statement(query)); | _statement_create_table.reset(new ::cppmariadb::statement(query)); | ||||
| return *_statement_create_table; | return *_statement_create_table; | ||||
| } | } | ||||
| ::cppmariadb::statement* table_t::get_statement_alter_table() const | |||||
| { | |||||
| if (!_statement_alter_table) | |||||
| { | |||||
| auto query = build_init_stage2_query(*this); | |||||
| _statement_alter_table.reset(new ::cppmariadb::statement(query)); | |||||
| } | |||||
| if (_statement_alter_table->empty()) | |||||
| return nullptr; | |||||
| return _statement_alter_table.get(); | |||||
| } | |||||
| ::cppmariadb::statement& table_t::get_statement_insert_into() const | ::cppmariadb::statement& table_t::get_statement_insert_into() const | ||||
| { | { | ||||
| if (_statement_insert_into) | if (_statement_insert_into) | ||||
| return *_statement_insert_into; | return *_statement_insert_into; | ||||
| auto query = build_insert_update_query(*this, nullptr, nullptr); | |||||
| auto query = build_create_update_query(*this, nullptr, nullptr); | |||||
| _statement_create_table.reset(new ::cppmariadb::statement(query)); | _statement_create_table.reset(new ::cppmariadb::statement(query)); | ||||
| return *_statement_create_table; | return *_statement_create_table; | ||||
| } | } | ||||
| @@ -692,7 +721,7 @@ std::string table_t::create_update_base(const create_update_context& context) co | |||||
| << "'" << this->table_name << "' does not implement create_update_base!").str()); | << "'" << this->table_name << "' does not implement create_update_base!").str()); | ||||
| } | } | ||||
| void table_t::init_exec(const init_context& context) const | |||||
| void table_t::init_stage1_exec(const init_context& context) const | |||||
| { | { | ||||
| auto& statement = get_statement_create_table(); | auto& statement = get_statement_create_table(); | ||||
| auto& connection = context.connection; | auto& connection = context.connection; | ||||
| @@ -700,10 +729,19 @@ void table_t::init_exec(const init_context& context) const | |||||
| connection.execute(statement); | connection.execute(statement); | ||||
| } | } | ||||
| void table_t::init_stage2_exec(const init_context& context) const | |||||
| { | |||||
| auto* statement = get_statement_alter_table(); | |||||
| auto& connection = context.connection; | |||||
| if (!statement) return; | |||||
| cpphibernate_debug_log("execute ALTER TABLE query: " << statement->query(connection)); | |||||
| connection.execute(*statement); | |||||
| } | |||||
| std::string table_t::create_update_exec(const create_update_context& context) const | std::string table_t::create_update_exec(const create_update_context& context) const | ||||
| { | { | ||||
| auto& statement = get_statement_insert_into(); | auto& statement = get_statement_insert_into(); | ||||
| return execute_insert_update(context, statement, nullptr); | |||||
| return execute_create_update(context, statement, nullptr); | |||||
| } | } | ||||
| std::string table_t::create_update_intern(const create_update_context& context) const | std::string table_t::create_update_intern(const create_update_context& context) const | ||||
| @@ -6,19 +6,19 @@ | |||||
| using namespace ::testing; | using namespace ::testing; | ||||
| using namespace ::cpphibernate; | using namespace ::cpphibernate; | ||||
| /* | |||||
| TEST(CppHibernateTests, create_test1) | TEST(CppHibernateTests, create_test1) | ||||
| { | { | ||||
| StrictMock<mariadb_mock> mock; | StrictMock<mariadb_mock> mock; | ||||
| expect_query(mock, "START TRANSACTION"); | expect_query(mock, "START TRANSACTION"); | ||||
| expect_query(mock, "SELECT Uuid()", result_used({ | expect_query(mock, "SELECT Uuid()", result_used({ | ||||
| { "02689aa7-aa28-11e8-bf41-0242ac110002" } | |||||
| { "3d12697a-abb9-11e8-98d0-529269fb1459" } | |||||
| })); | })); | ||||
| expect_query(mock, "INSERT INTO " | expect_query(mock, "INSERT INTO " | ||||
| "`tbl_test1` " | "`tbl_test1` " | ||||
| "SET " | "SET " | ||||
| "`tbl_test1_id`=UuidToBin('X02689aa7-aa28-11e8-bf41-0242ac110002X'), " | |||||
| "`tbl_test1_id`=UuidToBin('X3d12697a-abb9-11e8-98d0-529269fb1459X'), " | |||||
| "`str_data`='Xstr_data of class `test1` object `t1`X', " | "`str_data`='Xstr_data of class `test1` object `t1`X', " | ||||
| "`str64_data`='Xstr64_data of class `test1` object `t1`X', " | "`str64_data`='Xstr64_data of class `test1` object `t1`X', " | ||||
| "`u32_nullable`=null, " | "`u32_nullable`=null, " | ||||
| @@ -55,12 +55,12 @@ TEST(CppHibernateTests, create_test2) | |||||
| expect_query(mock, "START TRANSACTION"); | expect_query(mock, "START TRANSACTION"); | ||||
| expect_query(mock, "SELECT Uuid()", result_used({ | expect_query(mock, "SELECT Uuid()", result_used({ | ||||
| { "02689aa7-aa28-11e8-bf41-0242ac110002" } | |||||
| { "3d1270dc-abb9-11e8-98d0-529269fb1459" } | |||||
| })); | })); | ||||
| expect_query(mock, "INSERT INTO " | expect_query(mock, "INSERT INTO " | ||||
| "`tbl_test2` " | "`tbl_test2` " | ||||
| "SET " | "SET " | ||||
| "`tbl_test2_id`=UuidToBin('X02689aa7-aa28-11e8-bf41-0242ac110002X'), " | |||||
| "`tbl_test2_id`=UuidToBin('X3d1270dc-abb9-11e8-98d0-529269fb1459X'), " | |||||
| "`u8_data`='X1X', " | "`u8_data`='X1X', " | ||||
| "`i8_data`='X2X', " | "`i8_data`='X2X', " | ||||
| "`u16_data`='X3X', " | "`u16_data`='X3X', " | ||||
| @@ -96,12 +96,12 @@ TEST(CppHibernateTests, create_test3) | |||||
| expect_query(mock, "START TRANSACTION"); | expect_query(mock, "START TRANSACTION"); | ||||
| expect_query(mock, "SELECT Uuid()", result_used({ | expect_query(mock, "SELECT Uuid()", result_used({ | ||||
| { "02689aa7-aa28-11e8-bf41-0242ac110002" } | |||||
| { "3d12737a-abb9-11e8-98d0-529269fb1459" } | |||||
| })); | })); | ||||
| expect_query(mock, "INSERT INTO " | expect_query(mock, "INSERT INTO " | ||||
| "`tbl_test3` " | "`tbl_test3` " | ||||
| "SET " | "SET " | ||||
| "`tbl_test3_id`=UuidToBin('X02689aa7-aa28-11e8-bf41-0242ac110002X'), " | |||||
| "`tbl_test3_id`=UuidToBin('X3d12737a-abb9-11e8-98d0-529269fb1459X'), " | |||||
| "`tbl_derived3_id_test3_list`=UuidToBin(null), " | "`tbl_derived3_id_test3_list`=UuidToBin(null), " | ||||
| "`tbl_derived3_id_test3_vector`=UuidToBin(null), " | "`tbl_derived3_id_test3_vector`=UuidToBin(null), " | ||||
| "`u32_data`='X5X', " | "`u32_data`='X5X', " | ||||
| @@ -139,25 +139,25 @@ TEST(CppHibernateTests, create_derived1) | |||||
| expect_query(mock, "START TRANSACTION"); | expect_query(mock, "START TRANSACTION"); | ||||
| expect_query(mock, "SELECT Uuid()", result_used({ | expect_query(mock, "SELECT Uuid()", result_used({ | ||||
| { "02689aa7-aa28-11e8-bf41-0242ac110002" } | |||||
| { "3d12758c-abb9-11e8-98d0-529269fb1459" } | |||||
| })); | })); | ||||
| expect_query(mock, "SELECT Uuid()", result_used({ | expect_query(mock, "SELECT Uuid()", result_used({ | ||||
| { "a572edde-aadb-11e8-98d0-529269fb1459" } | |||||
| { "3d12778a-abb9-11e8-98d0-529269fb1459" } | |||||
| })); | })); | ||||
| expect_query(mock, "INSERT INTO " | expect_query(mock, "INSERT INTO " | ||||
| "`tbl_base` " | "`tbl_base` " | ||||
| "SET " | "SET " | ||||
| "`tbl_base_id`=UuidToBin('Xa572edde-aadb-11e8-98d0-529269fb1459X'), " | |||||
| "`tbl_base_id`=UuidToBin('X3d12778a-abb9-11e8-98d0-529269fb1459X'), " | |||||
| "`name`='Xderived1X', " | "`name`='Xderived1X', " | ||||
| "`__type`='X11X'", | "`__type`='X11X'", | ||||
| result_affected_rows(1)); | result_affected_rows(1)); | ||||
| expect_query(mock, "SELECT Uuid()", result_used({ | expect_query(mock, "SELECT Uuid()", result_used({ | ||||
| { "b80ffb20-aae6-11e8-98d0-529269fb1459" } | |||||
| { "3d127988-abb9-11e8-98d0-529269fb1459" } | |||||
| })); | })); | ||||
| expect_query(mock, "INSERT INTO " | expect_query(mock, "INSERT INTO " | ||||
| "`tbl_test1` " | "`tbl_test1` " | ||||
| "SET " | "SET " | ||||
| "`tbl_test1_id`=UuidToBin('Xb80ffb20-aae6-11e8-98d0-529269fb1459X'), " | |||||
| "`tbl_test1_id`=UuidToBin('X3d127988-abb9-11e8-98d0-529269fb1459X'), " | |||||
| "`str_data`='Xstr_data of class `test1` object `d1.test1_data`X', " | "`str_data`='Xstr_data of class `test1` object `d1.test1_data`X', " | ||||
| "`str64_data`='Xstr64_data of class `test1` object `d1.test1_data`X', " | "`str64_data`='Xstr64_data of class `test1` object `d1.test1_data`X', " | ||||
| "`u32_nullable`='X32X', " | "`u32_nullable`='X32X', " | ||||
| @@ -167,9 +167,9 @@ TEST(CppHibernateTests, create_derived1) | |||||
| expect_query(mock, "INSERT INTO " | expect_query(mock, "INSERT INTO " | ||||
| "`tbl_derived1` " | "`tbl_derived1` " | ||||
| "SET " | "SET " | ||||
| "`tbl_derived1_id`=UuidToBin('X02689aa7-aa28-11e8-bf41-0242ac110002X'), " | |||||
| "`tbl_base_id`=UuidToBin('Xa572edde-aadb-11e8-98d0-529269fb1459X'), " | |||||
| "`tbl_test1_id_test1_data`=UuidToBin('Xb80ffb20-aae6-11e8-98d0-529269fb1459X'), " | |||||
| "`tbl_derived1_id`=UuidToBin('X3d12758c-abb9-11e8-98d0-529269fb1459X'), " | |||||
| "`tbl_base_id`=UuidToBin('X3d12778a-abb9-11e8-98d0-529269fb1459X'), " | |||||
| "`tbl_test1_id_test1_data`=UuidToBin('X3d127988-abb9-11e8-98d0-529269fb1459X'), " | |||||
| "`enum_data`='Xtest2X'", | "`enum_data`='Xtest2X'", | ||||
| result_affected_rows(1)); | result_affected_rows(1)); | ||||
| expect_query(mock, "COMMIT"); | expect_query(mock, "COMMIT"); | ||||
| @@ -204,37 +204,37 @@ TEST(CppHibernateTests, create_derived2) | |||||
| expect_query(mock, "START TRANSACTION"); | expect_query(mock, "START TRANSACTION"); | ||||
| expect_query(mock, "SELECT Uuid()", result_used({ | expect_query(mock, "SELECT Uuid()", result_used({ | ||||
| { "02689aa7-aa28-11e8-bf41-0242ac110002" } | |||||
| { "3d127bcc-abb9-11e8-98d0-529269fb1459" } | |||||
| })); | })); | ||||
| expect_query(mock, "SELECT Uuid()", result_used({ | expect_query(mock, "SELECT Uuid()", result_used({ | ||||
| { "a572edde-aadb-11e8-98d0-529269fb1459" } | |||||
| { "3d127db6-abb9-11e8-98d0-529269fb1459" } | |||||
| })); | })); | ||||
| expect_query(mock, "INSERT INTO " | expect_query(mock, "INSERT INTO " | ||||
| "`tbl_base` " | "`tbl_base` " | ||||
| "SET " | "SET " | ||||
| "`tbl_base_id`=UuidToBin('Xa572edde-aadb-11e8-98d0-529269fb1459X'), " | |||||
| "`tbl_base_id`=UuidToBin('X3d127db6-abb9-11e8-98d0-529269fb1459X'), " | |||||
| "`name`='Xderived2X', " | "`name`='Xderived2X', " | ||||
| "`__type`='X12X'", | "`__type`='X12X'", | ||||
| result_affected_rows(1)); | result_affected_rows(1)); | ||||
| expect_query(mock, "SELECT Uuid()", result_used({ | expect_query(mock, "SELECT Uuid()", result_used({ | ||||
| { "b80ffb20-aae6-11e8-98d0-529269fb1459" } | |||||
| { "3d1283a6-abb9-11e8-98d0-529269fb1459" } | |||||
| })); | })); | ||||
| expect_query(mock, "INSERT INTO " | expect_query(mock, "INSERT INTO " | ||||
| "`tbl_test2` " | "`tbl_test2` " | ||||
| "SET " | "SET " | ||||
| "`tbl_test2_id`=UuidToBin('Xb80ffb20-aae6-11e8-98d0-529269fb1459X'), " | |||||
| "`tbl_test2_id`=UuidToBin('X3d1283a6-abb9-11e8-98d0-529269fb1459X'), " | |||||
| "`u8_data`='X10X', " | "`u8_data`='X10X', " | ||||
| "`i8_data`='X11X', " | "`i8_data`='X11X', " | ||||
| "`u16_data`='X12X', " | "`u16_data`='X12X', " | ||||
| "`i16_data`='X13X'", | "`i16_data`='X13X'", | ||||
| result_affected_rows(1)); | result_affected_rows(1)); | ||||
| expect_query(mock, "SELECT Uuid()", result_used({ | expect_query(mock, "SELECT Uuid()", result_used({ | ||||
| { "9470a0be-aae8-11e8-a137-529269fb1459" } | |||||
| { "3d128522-abb9-11e8-98d0-529269fb1459" } | |||||
| })); | })); | ||||
| expect_query(mock, "INSERT INTO " | expect_query(mock, "INSERT INTO " | ||||
| "`tbl_test2` " | "`tbl_test2` " | ||||
| "SET " | "SET " | ||||
| "`tbl_test2_id`=UuidToBin('X9470a0be-aae8-11e8-a137-529269fb1459X'), " | |||||
| "`tbl_test2_id`=UuidToBin('X3d128522-abb9-11e8-98d0-529269fb1459X'), " | |||||
| "`u8_data`='X20X', " | "`u8_data`='X20X', " | ||||
| "`i8_data`='X21X', " | "`i8_data`='X21X', " | ||||
| "`u16_data`='X22X', " | "`u16_data`='X22X', " | ||||
| @@ -243,10 +243,10 @@ TEST(CppHibernateTests, create_derived2) | |||||
| expect_query(mock, "INSERT INTO " | expect_query(mock, "INSERT INTO " | ||||
| "`tbl_derived2` " | "`tbl_derived2` " | ||||
| "SET " | "SET " | ||||
| "`tbl_derived2_id`=UuidToBin('X02689aa7-aa28-11e8-bf41-0242ac110002X'), " | |||||
| "`tbl_base_id`=UuidToBin('Xa572edde-aadb-11e8-98d0-529269fb1459X'), " | |||||
| "`tbl_test2_id_test2_nullable`=UuidToBin('Xb80ffb20-aae6-11e8-98d0-529269fb1459X'), " | |||||
| "`tbl_test2_id_test2_ptr_u`=UuidToBin('X9470a0be-aae8-11e8-a137-529269fb1459X'), " | |||||
| "`tbl_derived2_id`=UuidToBin('X3d127bcc-abb9-11e8-98d0-529269fb1459X'), " | |||||
| "`tbl_base_id`=UuidToBin('X3d127db6-abb9-11e8-98d0-529269fb1459X'), " | |||||
| "`tbl_test2_id_test2_nullable`=UuidToBin('X3d1283a6-abb9-11e8-98d0-529269fb1459X'), " | |||||
| "`tbl_test2_id_test2_ptr_u`=UuidToBin('X3d128522-abb9-11e8-98d0-529269fb1459X'), " | |||||
| "`tbl_test2_id_test2_ptr_s`=UuidToBin(null)", | "`tbl_test2_id_test2_ptr_s`=UuidToBin(null)", | ||||
| result_affected_rows(1)); | result_affected_rows(1)); | ||||
| expect_query(mock, "COMMIT"); | expect_query(mock, "COMMIT"); | ||||
| @@ -279,33 +279,33 @@ TEST(CppHibernateTests, create_derived2) | |||||
| auto context = make_context<driver::mariadb>(test_schema, connection); | auto context = make_context<driver::mariadb>(test_schema, connection); | ||||
| context.create(static_cast<base&>(d2)); | context.create(static_cast<base&>(d2)); | ||||
| } | } | ||||
| */ | |||||
| TEST(CppHibernateTests, create_derived3) | TEST(CppHibernateTests, create_derived3) | ||||
| { | { | ||||
| StrictMock<mariadb_mock> mock; | StrictMock<mariadb_mock> mock; | ||||
| expect_query(mock, "START TRANSACTION"); | expect_query(mock, "START TRANSACTION"); | ||||
| expect_query(mock, "SELECT Uuid()", result_used({ | expect_query(mock, "SELECT Uuid()", result_used({ | ||||
| { "02689aa7-aa28-11e8-bf41-0242ac110002" } | |||||
| { "3d12866c-abb9-11e8-98d0-529269fb1459" } | |||||
| })); | })); | ||||
| expect_query(mock, "SELECT Uuid()", result_used({ | expect_query(mock, "SELECT Uuid()", result_used({ | ||||
| { "df032510-aae9-11e8-98d0-529269fb1459" } | |||||
| { "3d1287a2-abb9-11e8-98d0-529269fb1459" } | |||||
| })); | })); | ||||
| expect_query(mock, "SELECT Uuid()", result_used({ | expect_query(mock, "SELECT Uuid()", result_used({ | ||||
| { "a572edde-aadb-11e8-98d0-529269fb1459" } | |||||
| { "3d1288ce-abb9-11e8-98d0-529269fb1459" } | |||||
| })); | })); | ||||
| expect_query(mock, "INSERT INTO " | expect_query(mock, "INSERT INTO " | ||||
| "`tbl_base` " | "`tbl_base` " | ||||
| "SET " | "SET " | ||||
| "`tbl_base_id`=UuidToBin('Xa572edde-aadb-11e8-98d0-529269fb1459X'), " | |||||
| "`tbl_base_id`=UuidToBin('X3d1288ce-abb9-11e8-98d0-529269fb1459X'), " | |||||
| "`name`='Xderived3X', " | "`name`='Xderived3X', " | ||||
| "`__type`='X13X'", | "`__type`='X13X'", | ||||
| result_affected_rows(1)); | result_affected_rows(1)); | ||||
| expect_query(mock, "INSERT INTO " | expect_query(mock, "INSERT INTO " | ||||
| "`tbl_derived2` " | "`tbl_derived2` " | ||||
| "SET " | "SET " | ||||
| "`tbl_derived2_id`=UuidToBin('Xdf032510-aae9-11e8-98d0-529269fb1459X'), " | |||||
| "`tbl_base_id`=UuidToBin('Xa572edde-aadb-11e8-98d0-529269fb1459X'), " | |||||
| "`tbl_derived2_id`=UuidToBin('X3d1287a2-abb9-11e8-98d0-529269fb1459X'), " | |||||
| "`tbl_base_id`=UuidToBin('X3d1288ce-abb9-11e8-98d0-529269fb1459X'), " | |||||
| "`tbl_test2_id_test2_nullable`=UuidToBin(null), " | "`tbl_test2_id_test2_nullable`=UuidToBin(null), " | ||||
| "`tbl_test2_id_test2_ptr_u`=UuidToBin(null), " | "`tbl_test2_id_test2_ptr_u`=UuidToBin(null), " | ||||
| "`tbl_test2_id_test2_ptr_s`=UuidToBin(null)", | "`tbl_test2_id_test2_ptr_s`=UuidToBin(null)", | ||||
| @@ -313,18 +313,18 @@ TEST(CppHibernateTests, create_derived3) | |||||
| expect_query(mock, "INSERT INTO " | expect_query(mock, "INSERT INTO " | ||||
| "`tbl_derived3` " | "`tbl_derived3` " | ||||
| "SET " | "SET " | ||||
| "`tbl_derived3_id`=UuidToBin('X02689aa7-aa28-11e8-bf41-0242ac110002X'), " | |||||
| "`tbl_derived2_id`=UuidToBin('Xdf032510-aae9-11e8-98d0-529269fb1459X')", | |||||
| "`tbl_derived3_id`=UuidToBin('X3d12866c-abb9-11e8-98d0-529269fb1459X'), " | |||||
| "`tbl_derived2_id`=UuidToBin('X3d1287a2-abb9-11e8-98d0-529269fb1459X')", | |||||
| result_affected_rows(1)); | result_affected_rows(1)); | ||||
| expect_query(mock, "SELECT Uuid()", result_used({ | expect_query(mock, "SELECT Uuid()", result_used({ | ||||
| { "be0baad8-aaeb-11e8-a137-529269fb1459" } | |||||
| { "3d1289f0-abb9-11e8-98d0-529269fb1459" } | |||||
| })); | })); | ||||
| expect_query(mock, "INSERT INTO " | expect_query(mock, "INSERT INTO " | ||||
| "`tbl_test3` " | "`tbl_test3` " | ||||
| "SET " | "SET " | ||||
| "`tbl_test3_id`=UuidToBin('Xbe0baad8-aaeb-11e8-a137-529269fb1459X'), " | |||||
| "`tbl_derived3_id_test3_list`=UuidToBin('X02689aa7-aa28-11e8-bf41-0242ac110002X'), " | |||||
| "`tbl_test3_id`=UuidToBin('X3d1289f0-abb9-11e8-98d0-529269fb1459X'), " | |||||
| "`tbl_derived3_id_test3_list`=UuidToBin('X3d12866c-abb9-11e8-98d0-529269fb1459X'), " | |||||
| "`tbl_derived3_id_test3_vector`=UuidToBin(null), " | "`tbl_derived3_id_test3_vector`=UuidToBin(null), " | ||||
| "`u32_data`='X100X', " | "`u32_data`='X100X', " | ||||
| "`i32_data`='X101X', " | "`i32_data`='X101X', " | ||||
| @@ -333,13 +333,13 @@ TEST(CppHibernateTests, create_derived3) | |||||
| result_affected_rows(1)); | result_affected_rows(1)); | ||||
| expect_query(mock, "SELECT Uuid()", result_used({ | expect_query(mock, "SELECT Uuid()", result_used({ | ||||
| { "be0bb3e8-aaeb-11e8-a137-529269fb1459" } | |||||
| { "3d128b26-abb9-11e8-98d0-529269fb1459" } | |||||
| })); | })); | ||||
| expect_query(mock, "INSERT INTO " | expect_query(mock, "INSERT INTO " | ||||
| "`tbl_test3` " | "`tbl_test3` " | ||||
| "SET " | "SET " | ||||
| "`tbl_test3_id`=UuidToBin('Xbe0bb3e8-aaeb-11e8-a137-529269fb1459X'), " | |||||
| "`tbl_derived3_id_test3_list`=UuidToBin('X02689aa7-aa28-11e8-bf41-0242ac110002X'), " | |||||
| "`tbl_test3_id`=UuidToBin('X3d128b26-abb9-11e8-98d0-529269fb1459X'), " | |||||
| "`tbl_derived3_id_test3_list`=UuidToBin('X3d12866c-abb9-11e8-98d0-529269fb1459X'), " | |||||
| "`tbl_derived3_id_test3_vector`=UuidToBin(null), " | "`tbl_derived3_id_test3_vector`=UuidToBin(null), " | ||||
| "`u32_data`='X110X', " | "`u32_data`='X110X', " | ||||
| "`i32_data`='X111X', " | "`i32_data`='X111X', " | ||||
| @@ -348,14 +348,14 @@ TEST(CppHibernateTests, create_derived3) | |||||
| result_affected_rows(1)); | result_affected_rows(1)); | ||||
| expect_query(mock, "SELECT Uuid()", result_used({ | expect_query(mock, "SELECT Uuid()", result_used({ | ||||
| { "be0bb974-aaeb-11e8-a137-529269fb1459" } | |||||
| { "3d128eb4-abb9-11e8-98d0-529269fb1459" } | |||||
| })); | })); | ||||
| expect_query(mock, "INSERT INTO " | expect_query(mock, "INSERT INTO " | ||||
| "`tbl_test3` " | "`tbl_test3` " | ||||
| "SET " | "SET " | ||||
| "`tbl_test3_id`=UuidToBin('Xbe0bb974-aaeb-11e8-a137-529269fb1459X'), " | |||||
| "`tbl_test3_id`=UuidToBin('X3d128eb4-abb9-11e8-98d0-529269fb1459X'), " | |||||
| "`tbl_derived3_id_test3_list`=UuidToBin(null), " | "`tbl_derived3_id_test3_list`=UuidToBin(null), " | ||||
| "`tbl_derived3_id_test3_vector`=UuidToBin('X02689aa7-aa28-11e8-bf41-0242ac110002X'), " | |||||
| "`tbl_derived3_id_test3_vector`=UuidToBin('X3d12866c-abb9-11e8-98d0-529269fb1459X'), " | |||||
| "`u32_data`='X120X', " | "`u32_data`='X120X', " | ||||
| "`i32_data`='X121X', " | "`i32_data`='X121X', " | ||||
| "`u64_data`='X122X', " | "`u64_data`='X122X', " | ||||
| @@ -363,14 +363,14 @@ TEST(CppHibernateTests, create_derived3) | |||||
| result_affected_rows(1)); | result_affected_rows(1)); | ||||
| expect_query(mock, "SELECT Uuid()", result_used({ | expect_query(mock, "SELECT Uuid()", result_used({ | ||||
| { "be0bbbc2-aaeb-11e8-a137-529269fb1459" } | |||||
| { "3d128ffe-abb9-11e8-98d0-529269fb1459" } | |||||
| })); | })); | ||||
| expect_query(mock, "INSERT INTO " | expect_query(mock, "INSERT INTO " | ||||
| "`tbl_test3` " | "`tbl_test3` " | ||||
| "SET " | "SET " | ||||
| "`tbl_test3_id`=UuidToBin('Xbe0bbbc2-aaeb-11e8-a137-529269fb1459X'), " | |||||
| "`tbl_test3_id`=UuidToBin('X3d128ffe-abb9-11e8-98d0-529269fb1459X'), " | |||||
| "`tbl_derived3_id_test3_list`=UuidToBin(null), " | "`tbl_derived3_id_test3_list`=UuidToBin(null), " | ||||
| "`tbl_derived3_id_test3_vector`=UuidToBin('X02689aa7-aa28-11e8-bf41-0242ac110002X'), " | |||||
| "`tbl_derived3_id_test3_vector`=UuidToBin('X3d12866c-abb9-11e8-98d0-529269fb1459X'), " | |||||
| "`u32_data`='X130X', " | "`u32_data`='X130X', " | ||||
| "`i32_data`='X131X', " | "`i32_data`='X131X', " | ||||
| "`u64_data`='X132X', " | "`u64_data`='X132X', " | ||||
| @@ -378,14 +378,14 @@ TEST(CppHibernateTests, create_derived3) | |||||
| result_affected_rows(1)); | result_affected_rows(1)); | ||||
| expect_query(mock, "SELECT Uuid()", result_used({ | expect_query(mock, "SELECT Uuid()", result_used({ | ||||
| { "78ee918a-aaec-11e8-98d0-529269fb1459" } | |||||
| { "3d129134-abb9-11e8-98d0-529269fb1459" } | |||||
| })); | })); | ||||
| expect_query(mock, "INSERT INTO " | expect_query(mock, "INSERT INTO " | ||||
| "`tbl_test3` " | "`tbl_test3` " | ||||
| "SET " | "SET " | ||||
| "`tbl_test3_id`=UuidToBin('X78ee918a-aaec-11e8-98d0-529269fb1459X'), " | |||||
| "`tbl_test3_id`=UuidToBin('X3d129134-abb9-11e8-98d0-529269fb1459X'), " | |||||
| "`tbl_derived3_id_test3_list`=UuidToBin(null), " | "`tbl_derived3_id_test3_list`=UuidToBin(null), " | ||||
| "`tbl_derived3_id_test3_vector`=UuidToBin('X02689aa7-aa28-11e8-bf41-0242ac110002X'), " | |||||
| "`tbl_derived3_id_test3_vector`=UuidToBin('X3d12866c-abb9-11e8-98d0-529269fb1459X'), " | |||||
| "`u32_data`='X140X', " | "`u32_data`='X140X', " | ||||
| "`i32_data`='X141X', " | "`i32_data`='X141X', " | ||||
| "`u64_data`='X142X', " | "`u64_data`='X142X', " | ||||
| @@ -87,17 +87,7 @@ TEST(CppHibernateTests, init) | |||||
| " PRIMARY KEY ( `tbl_test3_id` ),\n" | " PRIMARY KEY ( `tbl_test3_id` ),\n" | ||||
| " UNIQUE INDEX `index_tbl_test3_id` ( `tbl_test3_id` ASC ),\n" | " UNIQUE INDEX `index_tbl_test3_id` ( `tbl_test3_id` ASC ),\n" | ||||
| " INDEX `index_tbl_derived3_id_test3_list` ( `tbl_derived3_id_test3_list` ASC ),\n" | " INDEX `index_tbl_derived3_id_test3_list` ( `tbl_derived3_id_test3_list` ASC ),\n" | ||||
| " INDEX `index_tbl_derived3_id_test3_vector` ( `tbl_derived3_id_test3_vector` ASC ),\n" | |||||
| " CONSTRAINT `fk_tbl_test3_tbl_derived3_id_test3_list`\n" | |||||
| " FOREIGN KEY (`tbl_derived3_id_test3_list`)\n" | |||||
| " REFERENCES `test`.`tbl_derived3` (`tbl_derived3_id`)\n" | |||||
| " ON DELETE SET NULL\n" | |||||
| " ON UPDATE NO ACTION,\n" | |||||
| " CONSTRAINT `fk_tbl_test3_tbl_derived3_id_test3_vector`\n" | |||||
| " FOREIGN KEY (`tbl_derived3_id_test3_vector`)\n" | |||||
| " REFERENCES `test`.`tbl_derived3` (`tbl_derived3_id`)\n" | |||||
| " ON DELETE SET NULL\n" | |||||
| " ON UPDATE NO ACTION\n" | |||||
| " INDEX `index_tbl_derived3_id_test3_vector` ( `tbl_derived3_id_test3_vector` ASC )\n" | |||||
| ")\n" | ")\n" | ||||
| "ENGINE = InnoDB\n" | "ENGINE = InnoDB\n" | ||||
| "DEFAULT CHARACTER SET = utf8"); | "DEFAULT CHARACTER SET = utf8"); | ||||
| @@ -122,17 +112,7 @@ TEST(CppHibernateTests, init) | |||||
| " PRIMARY KEY ( `tbl_derived1_id` ),\n" | " PRIMARY KEY ( `tbl_derived1_id` ),\n" | ||||
| " UNIQUE INDEX `index_tbl_derived1_id` ( `tbl_derived1_id` ASC ),\n" | " UNIQUE INDEX `index_tbl_derived1_id` ( `tbl_derived1_id` ASC ),\n" | ||||
| " UNIQUE INDEX `index_tbl_base_id` ( `tbl_base_id` ASC ),\n" | " UNIQUE INDEX `index_tbl_base_id` ( `tbl_base_id` ASC ),\n" | ||||
| " INDEX `index_tbl_test1_id_test1_data` ( `tbl_test1_id_test1_data` ASC ),\n" | |||||
| " CONSTRAINT `fk_tbl_derived1_to_tbl_base_id`\n" | |||||
| " FOREIGN KEY (`tbl_base_id`)\n" | |||||
| " REFERENCES `test`.`tbl_base` (`tbl_base_id`)\n" | |||||
| " ON DELETE CASCADE\n" | |||||
| " ON UPDATE NO ACTION,\n" | |||||
| " CONSTRAINT `fk_tbl_derived1_to_tbl_test1_id_test1_data`\n" | |||||
| " FOREIGN KEY (`tbl_test1_id_test1_data`)\n" | |||||
| " REFERENCES `test`.`tbl_test1` (`tbl_test1_id`)\n" | |||||
| " ON DELETE CASCADE\n" | |||||
| " ON UPDATE NO ACTION\n" | |||||
| " INDEX `index_tbl_test1_id_test1_data` ( `tbl_test1_id_test1_data` ASC )\n" | |||||
| ")\n" | ")\n" | ||||
| "ENGINE = InnoDB\n" | "ENGINE = InnoDB\n" | ||||
| "DEFAULT CHARACTER SET = utf8"); | "DEFAULT CHARACTER SET = utf8"); | ||||
| @@ -149,46 +129,74 @@ TEST(CppHibernateTests, init) | |||||
| " UNIQUE INDEX `index_tbl_base_id` ( `tbl_base_id` ASC ),\n" | " UNIQUE INDEX `index_tbl_base_id` ( `tbl_base_id` ASC ),\n" | ||||
| " INDEX `index_tbl_test2_id_test2_nullable` ( `tbl_test2_id_test2_nullable` ASC ),\n" | " INDEX `index_tbl_test2_id_test2_nullable` ( `tbl_test2_id_test2_nullable` ASC ),\n" | ||||
| " INDEX `index_tbl_test2_id_test2_ptr_u` ( `tbl_test2_id_test2_ptr_u` ASC ),\n" | " INDEX `index_tbl_test2_id_test2_ptr_u` ( `tbl_test2_id_test2_ptr_u` ASC ),\n" | ||||
| " INDEX `index_tbl_test2_id_test2_ptr_s` ( `tbl_test2_id_test2_ptr_s` ASC ),\n" | |||||
| " CONSTRAINT `fk_tbl_derived2_to_tbl_base_id`\n" | |||||
| " INDEX `index_tbl_test2_id_test2_ptr_s` ( `tbl_test2_id_test2_ptr_s` ASC )\n" | |||||
| ")\n" | |||||
| "ENGINE = InnoDB\n" | |||||
| "DEFAULT CHARACTER SET = utf8"); | |||||
| expect_query(mock, "CREATE TABLE IF NOT EXISTS `tbl_derived3`\n" | |||||
| "(\n" | |||||
| " `tbl_derived3_id` BINARY(16) NOT NULL,\n" | |||||
| " `tbl_derived2_id` BINARY(16) NOT NULL,\n" | |||||
| " PRIMARY KEY ( `tbl_derived3_id` ),\n" | |||||
| " UNIQUE INDEX `index_tbl_derived3_id` ( `tbl_derived3_id` ASC ),\n" | |||||
| " UNIQUE INDEX `index_tbl_derived2_id` ( `tbl_derived2_id` ASC )\n" | |||||
| ")\n" | |||||
| "ENGINE = InnoDB\n" | |||||
| "DEFAULT CHARACTER SET = utf8"); | |||||
| expect_query(mock, "ALTER TABLE `tbl_test3`\n" | |||||
| " ADD CONSTRAINT `fk_tbl_test3_to_tbl_derived3_id_test3_list`\n" | |||||
| " FOREIGN KEY (`tbl_derived3_id_test3_list`)\n" | |||||
| " REFERENCES `test`.`tbl_derived3` (`tbl_derived3_id`)\n" | |||||
| " ON DELETE SET NULL\n" | |||||
| " ON UPDATE NO ACTION,\n" | |||||
| " ADD CONSTRAINT `fk_tbl_test3_to_tbl_derived3_id_test3_vector`\n" | |||||
| " FOREIGN KEY (`tbl_derived3_id_test3_vector`)\n" | |||||
| " REFERENCES `test`.`tbl_derived3` (`tbl_derived3_id`)\n" | |||||
| " ON DELETE SET NULL\n" | |||||
| " ON UPDATE NO ACTION"); | |||||
| expect_query(mock, "ALTER TABLE `tbl_derived1`\n" | |||||
| " ADD CONSTRAINT `fk_tbl_derived1_to_tbl_base_id`\n" | |||||
| " FOREIGN KEY (`tbl_base_id`)\n" | |||||
| " REFERENCES `test`.`tbl_base` (`tbl_base_id`)\n" | |||||
| " ON DELETE CASCADE\n" | |||||
| " ON UPDATE NO ACTION,\n" | |||||
| " ADD CONSTRAINT `fk_tbl_derived1_to_tbl_test1_id_test1_data`\n" | |||||
| " FOREIGN KEY (`tbl_test1_id_test1_data`)\n" | |||||
| " REFERENCES `test`.`tbl_test1` (`tbl_test1_id`)\n" | |||||
| " ON DELETE CASCADE\n" | |||||
| " ON UPDATE NO ACTION"); | |||||
| expect_query(mock, "ALTER TABLE `tbl_derived2`\n" | |||||
| " ADD CONSTRAINT `fk_tbl_derived2_to_tbl_base_id`\n" | |||||
| " FOREIGN KEY (`tbl_base_id`)\n" | " FOREIGN KEY (`tbl_base_id`)\n" | ||||
| " REFERENCES `test`.`tbl_base` (`tbl_base_id`)\n" | " REFERENCES `test`.`tbl_base` (`tbl_base_id`)\n" | ||||
| " ON DELETE CASCADE\n" | " ON DELETE CASCADE\n" | ||||
| " ON UPDATE NO ACTION,\n" | " ON UPDATE NO ACTION,\n" | ||||
| " CONSTRAINT `fk_tbl_derived2_to_tbl_test2_id_test2_nullable`\n" | |||||
| " ADD CONSTRAINT `fk_tbl_derived2_to_tbl_test2_id_test2_nullable`\n" | |||||
| " FOREIGN KEY (`tbl_test2_id_test2_nullable`)\n" | " FOREIGN KEY (`tbl_test2_id_test2_nullable`)\n" | ||||
| " REFERENCES `test`.`tbl_test2` (`tbl_test2_id`)\n" | " REFERENCES `test`.`tbl_test2` (`tbl_test2_id`)\n" | ||||
| " ON DELETE CASCADE\n" | " ON DELETE CASCADE\n" | ||||
| " ON UPDATE NO ACTION,\n" | " ON UPDATE NO ACTION,\n" | ||||
| " CONSTRAINT `fk_tbl_derived2_to_tbl_test2_id_test2_ptr_u`\n" | |||||
| " ADD CONSTRAINT `fk_tbl_derived2_to_tbl_test2_id_test2_ptr_u`\n" | |||||
| " FOREIGN KEY (`tbl_test2_id_test2_ptr_u`)\n" | " FOREIGN KEY (`tbl_test2_id_test2_ptr_u`)\n" | ||||
| " REFERENCES `test`.`tbl_test2` (`tbl_test2_id`)\n" | " REFERENCES `test`.`tbl_test2` (`tbl_test2_id`)\n" | ||||
| " ON DELETE CASCADE\n" | " ON DELETE CASCADE\n" | ||||
| " ON UPDATE NO ACTION,\n" | " ON UPDATE NO ACTION,\n" | ||||
| " CONSTRAINT `fk_tbl_derived2_to_tbl_test2_id_test2_ptr_s`\n" | |||||
| " ADD CONSTRAINT `fk_tbl_derived2_to_tbl_test2_id_test2_ptr_s`\n" | |||||
| " FOREIGN KEY (`tbl_test2_id_test2_ptr_s`)\n" | " FOREIGN KEY (`tbl_test2_id_test2_ptr_s`)\n" | ||||
| " REFERENCES `test`.`tbl_test2` (`tbl_test2_id`)\n" | " REFERENCES `test`.`tbl_test2` (`tbl_test2_id`)\n" | ||||
| " ON DELETE CASCADE\n" | " ON DELETE CASCADE\n" | ||||
| " ON UPDATE NO ACTION\n" | |||||
| ")\n" | |||||
| "ENGINE = InnoDB\n" | |||||
| "DEFAULT CHARACTER SET = utf8"); | |||||
| " ON UPDATE NO ACTION"); | |||||
| expect_query(mock, "CREATE TABLE IF NOT EXISTS `tbl_derived3`\n" | |||||
| "(\n" | |||||
| " `tbl_derived3_id` BINARY(16) NOT NULL,\n" | |||||
| " `tbl_derived2_id` BINARY(16) NOT NULL,\n" | |||||
| " PRIMARY KEY ( `tbl_derived3_id` ),\n" | |||||
| " UNIQUE INDEX `index_tbl_derived3_id` ( `tbl_derived3_id` ASC ),\n" | |||||
| " UNIQUE INDEX `index_tbl_derived2_id` ( `tbl_derived2_id` ASC ),\n" | |||||
| " CONSTRAINT `fk_tbl_derived3_to_tbl_derived2_id`\n" | |||||
| expect_query(mock, "ALTER TABLE `tbl_derived3`\n" | |||||
| " ADD CONSTRAINT `fk_tbl_derived3_to_tbl_derived2_id`\n" | |||||
| " FOREIGN KEY (`tbl_derived2_id`)\n" | " FOREIGN KEY (`tbl_derived2_id`)\n" | ||||
| " REFERENCES `test`.`tbl_derived2` (`tbl_derived2_id`)\n" | " REFERENCES `test`.`tbl_derived2` (`tbl_derived2_id`)\n" | ||||
| " ON DELETE CASCADE\n" | " ON DELETE CASCADE\n" | ||||
| " ON UPDATE NO ACTION\n" | |||||
| ")\n" | |||||
| "ENGINE = InnoDB\n" | |||||
| "DEFAULT CHARACTER SET = utf8"); | |||||
| " ON UPDATE NO ACTION"); | |||||
| expect_query(mock, "COMMIT"); | expect_query(mock, "COMMIT"); | ||||
| @@ -41,7 +41,7 @@ MYSQL_FIELD* STDCALL mysql_fetch_fields (MYSQL_RES *res) | |||||
| { return (mariadb_mock_instance ? mariadb_mock_instance->mysql_fetch_fields(res) : nullptr); } | { return (mariadb_mock_instance ? mariadb_mock_instance->mysql_fetch_fields(res) : nullptr); } | ||||
| int STDCALL mysql_real_query (MYSQL *mysql, const char *q, unsigned long length) | int STDCALL mysql_real_query (MYSQL *mysql, const char *q, unsigned long length) | ||||
| { return (mariadb_mock_instance ? mariadb_mock_instance->mysql_real_query(mysql, q, length) : 0); } | |||||
| { std::cout << std::string(q, length) << ";" << std::endl; return (mariadb_mock_instance ? mariadb_mock_instance->mysql_real_query(mysql, q, length) : 0); } | |||||
| unsigned int STDCALL mysql_errno (MYSQL *mysql) | unsigned int STDCALL mysql_errno (MYSQL *mysql) | ||||
| { return (mariadb_mock_instance ? mariadb_mock_instance->mysql_errno(mysql) : 0); } | { return (mariadb_mock_instance ? mariadb_mock_instance->mysql_errno(mysql) : 0); } | ||||