@@ -67,8 +67,11 @@ beg_namespace_cpphibernate_driver_mariadb | |||
const table_t* get_derived(size_t id) const; | |||
/* 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 | |||
{ return create_update_intern(context); } | |||
@@ -86,12 +89,14 @@ beg_namespace_cpphibernate_driver_mariadb | |||
using statement_ptr = std::unique_ptr<::cppmariadb::statement>; | |||
mutable statement_ptr _statement_create_table; | |||
mutable statement_ptr _statement_alter_table; | |||
mutable statement_ptr _statement_insert_into; | |||
::cppmariadb::statement& get_statement_create_table() const; | |||
::cppmariadb::statement* get_statement_alter_table() const; | |||
::cppmariadb::statement& get_statement_insert_into() const; | |||
std::string execute_insert_update( | |||
std::string execute_create_update( | |||
const create_update_context& context, | |||
::cppmariadb::statement& statement, | |||
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; | |||
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; | |||
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) | |||
{ | |||
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 */ | |||
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 */ | |||
os << "CREATE TABLE IF NOT EXISTS `" | |||
@@ -194,14 +194,38 @@ std::ostringstream os; | |||
<< "` 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 */ | |||
if (table.base_table) | |||
{ | |||
assert(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 | |||
<< "_to_" | |||
<< ref_key_info.field_name | |||
@@ -234,9 +258,9 @@ std::ostringstream os; | |||
assert(field_info.referenced_table); | |||
assert(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 | |||
<< "_to_" | |||
<< ref_key_info.table_name | |||
@@ -273,11 +297,11 @@ std::ostringstream os; | |||
assert(field_info.table); | |||
assert(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 | |||
<< "_" | |||
<< "_to_" | |||
<< field_info.table_name | |||
<< "_id_" | |||
<< field_info.field_name | |||
@@ -304,19 +328,12 @@ std::ostringstream os; | |||
<< 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; | |||
@@ -469,9 +486,9 @@ std::string build_insert_update_query(const table_t& table, const filter_t* filt | |||
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, | |||
::cppmariadb::statement& statement, | |||
const filter_t* filter) const | |||
@@ -672,16 +689,28 @@ const table_t* table_t::get_derived(size_t id) const | |||
{ | |||
if (_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)); | |||
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 | |||
{ | |||
if (_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)); | |||
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()); | |||
} | |||
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& connection = context.connection; | |||
@@ -700,10 +729,19 @@ void table_t::init_exec(const init_context& context) const | |||
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 | |||
{ | |||
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 |
@@ -6,19 +6,19 @@ | |||
using namespace ::testing; | |||
using namespace ::cpphibernate; | |||
/* | |||
TEST(CppHibernateTests, create_test1) | |||
{ | |||
StrictMock<mariadb_mock> mock; | |||
expect_query(mock, "START TRANSACTION"); | |||
expect_query(mock, "SELECT Uuid()", result_used({ | |||
{ "02689aa7-aa28-11e8-bf41-0242ac110002" } | |||
{ "3d12697a-abb9-11e8-98d0-529269fb1459" } | |||
})); | |||
expect_query(mock, "INSERT INTO " | |||
"`tbl_test1` " | |||
"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', " | |||
"`str64_data`='Xstr64_data of class `test1` object `t1`X', " | |||
"`u32_nullable`=null, " | |||
@@ -55,12 +55,12 @@ TEST(CppHibernateTests, create_test2) | |||
expect_query(mock, "START TRANSACTION"); | |||
expect_query(mock, "SELECT Uuid()", result_used({ | |||
{ "02689aa7-aa28-11e8-bf41-0242ac110002" } | |||
{ "3d1270dc-abb9-11e8-98d0-529269fb1459" } | |||
})); | |||
expect_query(mock, "INSERT INTO " | |||
"`tbl_test2` " | |||
"SET " | |||
"`tbl_test2_id`=UuidToBin('X02689aa7-aa28-11e8-bf41-0242ac110002X'), " | |||
"`tbl_test2_id`=UuidToBin('X3d1270dc-abb9-11e8-98d0-529269fb1459X'), " | |||
"`u8_data`='X1X', " | |||
"`i8_data`='X2X', " | |||
"`u16_data`='X3X', " | |||
@@ -96,12 +96,12 @@ TEST(CppHibernateTests, create_test3) | |||
expect_query(mock, "START TRANSACTION"); | |||
expect_query(mock, "SELECT Uuid()", result_used({ | |||
{ "02689aa7-aa28-11e8-bf41-0242ac110002" } | |||
{ "3d12737a-abb9-11e8-98d0-529269fb1459" } | |||
})); | |||
expect_query(mock, "INSERT INTO " | |||
"`tbl_test3` " | |||
"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_vector`=UuidToBin(null), " | |||
"`u32_data`='X5X', " | |||
@@ -139,25 +139,25 @@ TEST(CppHibernateTests, create_derived1) | |||
expect_query(mock, "START TRANSACTION"); | |||
expect_query(mock, "SELECT Uuid()", result_used({ | |||
{ "02689aa7-aa28-11e8-bf41-0242ac110002" } | |||
{ "3d12758c-abb9-11e8-98d0-529269fb1459" } | |||
})); | |||
expect_query(mock, "SELECT Uuid()", result_used({ | |||
{ "a572edde-aadb-11e8-98d0-529269fb1459" } | |||
{ "3d12778a-abb9-11e8-98d0-529269fb1459" } | |||
})); | |||
expect_query(mock, "INSERT INTO " | |||
"`tbl_base` " | |||
"SET " | |||
"`tbl_base_id`=UuidToBin('Xa572edde-aadb-11e8-98d0-529269fb1459X'), " | |||
"`tbl_base_id`=UuidToBin('X3d12778a-abb9-11e8-98d0-529269fb1459X'), " | |||
"`name`='Xderived1X', " | |||
"`__type`='X11X'", | |||
result_affected_rows(1)); | |||
expect_query(mock, "SELECT Uuid()", result_used({ | |||
{ "b80ffb20-aae6-11e8-98d0-529269fb1459" } | |||
{ "3d127988-abb9-11e8-98d0-529269fb1459" } | |||
})); | |||
expect_query(mock, "INSERT INTO " | |||
"`tbl_test1` " | |||
"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', " | |||
"`str64_data`='Xstr64_data of class `test1` object `d1.test1_data`X', " | |||
"`u32_nullable`='X32X', " | |||
@@ -167,9 +167,9 @@ TEST(CppHibernateTests, create_derived1) | |||
expect_query(mock, "INSERT INTO " | |||
"`tbl_derived1` " | |||
"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'", | |||
result_affected_rows(1)); | |||
expect_query(mock, "COMMIT"); | |||
@@ -204,37 +204,37 @@ TEST(CppHibernateTests, create_derived2) | |||
expect_query(mock, "START TRANSACTION"); | |||
expect_query(mock, "SELECT Uuid()", result_used({ | |||
{ "02689aa7-aa28-11e8-bf41-0242ac110002" } | |||
{ "3d127bcc-abb9-11e8-98d0-529269fb1459" } | |||
})); | |||
expect_query(mock, "SELECT Uuid()", result_used({ | |||
{ "a572edde-aadb-11e8-98d0-529269fb1459" } | |||
{ "3d127db6-abb9-11e8-98d0-529269fb1459" } | |||
})); | |||
expect_query(mock, "INSERT INTO " | |||
"`tbl_base` " | |||
"SET " | |||
"`tbl_base_id`=UuidToBin('Xa572edde-aadb-11e8-98d0-529269fb1459X'), " | |||
"`tbl_base_id`=UuidToBin('X3d127db6-abb9-11e8-98d0-529269fb1459X'), " | |||
"`name`='Xderived2X', " | |||
"`__type`='X12X'", | |||
result_affected_rows(1)); | |||
expect_query(mock, "SELECT Uuid()", result_used({ | |||
{ "b80ffb20-aae6-11e8-98d0-529269fb1459" } | |||
{ "3d1283a6-abb9-11e8-98d0-529269fb1459" } | |||
})); | |||
expect_query(mock, "INSERT INTO " | |||
"`tbl_test2` " | |||
"SET " | |||
"`tbl_test2_id`=UuidToBin('Xb80ffb20-aae6-11e8-98d0-529269fb1459X'), " | |||
"`tbl_test2_id`=UuidToBin('X3d1283a6-abb9-11e8-98d0-529269fb1459X'), " | |||
"`u8_data`='X10X', " | |||
"`i8_data`='X11X', " | |||
"`u16_data`='X12X', " | |||
"`i16_data`='X13X'", | |||
result_affected_rows(1)); | |||
expect_query(mock, "SELECT Uuid()", result_used({ | |||
{ "9470a0be-aae8-11e8-a137-529269fb1459" } | |||
{ "3d128522-abb9-11e8-98d0-529269fb1459" } | |||
})); | |||
expect_query(mock, "INSERT INTO " | |||
"`tbl_test2` " | |||
"SET " | |||
"`tbl_test2_id`=UuidToBin('X9470a0be-aae8-11e8-a137-529269fb1459X'), " | |||
"`tbl_test2_id`=UuidToBin('X3d128522-abb9-11e8-98d0-529269fb1459X'), " | |||
"`u8_data`='X20X', " | |||
"`i8_data`='X21X', " | |||
"`u16_data`='X22X', " | |||
@@ -243,10 +243,10 @@ TEST(CppHibernateTests, create_derived2) | |||
expect_query(mock, "INSERT INTO " | |||
"`tbl_derived2` " | |||
"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)", | |||
result_affected_rows(1)); | |||
expect_query(mock, "COMMIT"); | |||
@@ -279,33 +279,33 @@ TEST(CppHibernateTests, create_derived2) | |||
auto context = make_context<driver::mariadb>(test_schema, connection); | |||
context.create(static_cast<base&>(d2)); | |||
} | |||
*/ | |||
TEST(CppHibernateTests, create_derived3) | |||
{ | |||
StrictMock<mariadb_mock> mock; | |||
expect_query(mock, "START TRANSACTION"); | |||
expect_query(mock, "SELECT Uuid()", result_used({ | |||
{ "02689aa7-aa28-11e8-bf41-0242ac110002" } | |||
{ "3d12866c-abb9-11e8-98d0-529269fb1459" } | |||
})); | |||
expect_query(mock, "SELECT Uuid()", result_used({ | |||
{ "df032510-aae9-11e8-98d0-529269fb1459" } | |||
{ "3d1287a2-abb9-11e8-98d0-529269fb1459" } | |||
})); | |||
expect_query(mock, "SELECT Uuid()", result_used({ | |||
{ "a572edde-aadb-11e8-98d0-529269fb1459" } | |||
{ "3d1288ce-abb9-11e8-98d0-529269fb1459" } | |||
})); | |||
expect_query(mock, "INSERT INTO " | |||
"`tbl_base` " | |||
"SET " | |||
"`tbl_base_id`=UuidToBin('Xa572edde-aadb-11e8-98d0-529269fb1459X'), " | |||
"`tbl_base_id`=UuidToBin('X3d1288ce-abb9-11e8-98d0-529269fb1459X'), " | |||
"`name`='Xderived3X', " | |||
"`__type`='X13X'", | |||
result_affected_rows(1)); | |||
expect_query(mock, "INSERT INTO " | |||
"`tbl_derived2` " | |||
"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_ptr_u`=UuidToBin(null), " | |||
"`tbl_test2_id_test2_ptr_s`=UuidToBin(null)", | |||
@@ -313,18 +313,18 @@ TEST(CppHibernateTests, create_derived3) | |||
expect_query(mock, "INSERT INTO " | |||
"`tbl_derived3` " | |||
"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)); | |||
expect_query(mock, "SELECT Uuid()", result_used({ | |||
{ "be0baad8-aaeb-11e8-a137-529269fb1459" } | |||
{ "3d1289f0-abb9-11e8-98d0-529269fb1459" } | |||
})); | |||
expect_query(mock, "INSERT INTO " | |||
"`tbl_test3` " | |||
"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), " | |||
"`u32_data`='X100X', " | |||
"`i32_data`='X101X', " | |||
@@ -333,13 +333,13 @@ TEST(CppHibernateTests, create_derived3) | |||
result_affected_rows(1)); | |||
expect_query(mock, "SELECT Uuid()", result_used({ | |||
{ "be0bb3e8-aaeb-11e8-a137-529269fb1459" } | |||
{ "3d128b26-abb9-11e8-98d0-529269fb1459" } | |||
})); | |||
expect_query(mock, "INSERT INTO " | |||
"`tbl_test3` " | |||
"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), " | |||
"`u32_data`='X110X', " | |||
"`i32_data`='X111X', " | |||
@@ -348,14 +348,14 @@ TEST(CppHibernateTests, create_derived3) | |||
result_affected_rows(1)); | |||
expect_query(mock, "SELECT Uuid()", result_used({ | |||
{ "be0bb974-aaeb-11e8-a137-529269fb1459" } | |||
{ "3d128eb4-abb9-11e8-98d0-529269fb1459" } | |||
})); | |||
expect_query(mock, "INSERT INTO " | |||
"`tbl_test3` " | |||
"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_vector`=UuidToBin('X02689aa7-aa28-11e8-bf41-0242ac110002X'), " | |||
"`tbl_derived3_id_test3_vector`=UuidToBin('X3d12866c-abb9-11e8-98d0-529269fb1459X'), " | |||
"`u32_data`='X120X', " | |||
"`i32_data`='X121X', " | |||
"`u64_data`='X122X', " | |||
@@ -363,14 +363,14 @@ TEST(CppHibernateTests, create_derived3) | |||
result_affected_rows(1)); | |||
expect_query(mock, "SELECT Uuid()", result_used({ | |||
{ "be0bbbc2-aaeb-11e8-a137-529269fb1459" } | |||
{ "3d128ffe-abb9-11e8-98d0-529269fb1459" } | |||
})); | |||
expect_query(mock, "INSERT INTO " | |||
"`tbl_test3` " | |||
"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_vector`=UuidToBin('X02689aa7-aa28-11e8-bf41-0242ac110002X'), " | |||
"`tbl_derived3_id_test3_vector`=UuidToBin('X3d12866c-abb9-11e8-98d0-529269fb1459X'), " | |||
"`u32_data`='X130X', " | |||
"`i32_data`='X131X', " | |||
"`u64_data`='X132X', " | |||
@@ -378,14 +378,14 @@ TEST(CppHibernateTests, create_derived3) | |||
result_affected_rows(1)); | |||
expect_query(mock, "SELECT Uuid()", result_used({ | |||
{ "78ee918a-aaec-11e8-98d0-529269fb1459" } | |||
{ "3d129134-abb9-11e8-98d0-529269fb1459" } | |||
})); | |||
expect_query(mock, "INSERT INTO " | |||
"`tbl_test3` " | |||
"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_vector`=UuidToBin('X02689aa7-aa28-11e8-bf41-0242ac110002X'), " | |||
"`tbl_derived3_id_test3_vector`=UuidToBin('X3d12866c-abb9-11e8-98d0-529269fb1459X'), " | |||
"`u32_data`='X140X', " | |||
"`i32_data`='X141X', " | |||
"`u64_data`='X142X', " | |||
@@ -87,17 +87,7 @@ TEST(CppHibernateTests, init) | |||
" PRIMARY KEY ( `tbl_test3_id` ),\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_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" | |||
"ENGINE = InnoDB\n" | |||
"DEFAULT CHARACTER SET = utf8"); | |||
@@ -122,17 +112,7 @@ TEST(CppHibernateTests, init) | |||
" PRIMARY KEY ( `tbl_derived1_id` ),\n" | |||
" UNIQUE INDEX `index_tbl_derived1_id` ( `tbl_derived1_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" | |||
"ENGINE = InnoDB\n" | |||
"DEFAULT CHARACTER SET = utf8"); | |||
@@ -149,46 +129,74 @@ TEST(CppHibernateTests, init) | |||
" 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_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" | |||
" REFERENCES `test`.`tbl_base` (`tbl_base_id`)\n" | |||
" ON DELETE CASCADE\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" | |||
" REFERENCES `test`.`tbl_test2` (`tbl_test2_id`)\n" | |||
" ON DELETE CASCADE\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" | |||
" REFERENCES `test`.`tbl_test2` (`tbl_test2_id`)\n" | |||
" ON DELETE CASCADE\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" | |||
" REFERENCES `test`.`tbl_test2` (`tbl_test2_id`)\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" | |||
" REFERENCES `test`.`tbl_derived2` (`tbl_derived2_id`)\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"); | |||
@@ -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); } | |||
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) | |||
{ return (mariadb_mock_instance ? mariadb_mock_instance->mysql_errno(mysql) : 0); } | |||