Browse Source

* fixed mariadb driver SQL queries

master
bergmann 5 years ago
parent
commit
c6421d40f7
6 changed files with 185 additions and 128 deletions
  1. +10
    -4
      include/cpphibernate/driver/mariadb/schema/table.h
  2. +6
    -1
      src/driver/mariadb/schema/schema.cpp
  3. +67
    -29
      src/driver/mariadb/schema/table.cpp
  4. +50
    -50
      test/cpphibernate_create.cpp
  5. +51
    -43
      test/cpphibernate_init.cpp
  6. +1
    -1
      test/mariadb_mock.cpp

+ 10
- 4
include/cpphibernate/driver/mariadb/schema/table.h View File

@@ -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;


+ 6
- 1
src/driver/mariadb/schema/schema.cpp View File

@@ -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);
}
}


+ 67
- 29
src/driver/mariadb/schema/table.cpp View File

@@ -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

+ 50
- 50
test/cpphibernate_create.cpp View File

@@ -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', "


+ 51
- 43
test/cpphibernate_init.cpp View File

@@ -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");



+ 1
- 1
test/mariadb_mock.cpp View File

@@ -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); }


Loading…
Cancel
Save