diff options
author | Nikita Malyavin <nikitamalyavin@gmail.com> | 2022-07-22 02:18:21 +0300 |
---|---|---|
committer | Nikita Malyavin <nikitamalyavin@gmail.com> | 2022-08-23 16:36:28 +0300 |
commit | ca4f84b95b42a87ca9f828ec2b963c91a1e308d6 (patch) | |
tree | 875013c3a692273971ea12c396311ff7edcf73ab /sql/sql_class.cc | |
parent | 955fceb53fdc98996b087ff901bae70031543ed2 (diff) | |
download | mariadb-git-bb-10.10-MDEV-29181.tar.gz |
MDEV-29068 Cascade foreign key updates do not apply in online alterbb-10.10-MDEV-29181
Foreign key cascade operations are still implemented through innodb.
Add support for online logging in row_ins_foreign_check_on_constraint.
upd_node_t::sql_is_online_alter is added to reuse cascade->row and
cascade->upd_row.
Diffstat (limited to 'sql/sql_class.cc')
-rw-r--r-- | sql/sql_class.cc | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/sql/sql_class.cc b/sql/sql_class.cc index 351d0d3ad13..7bc048b3634 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -8180,3 +8180,32 @@ void Charset_loader_server::raise_not_applicable_error(const char *cs, { my_error(ER_COLLATION_CHARSET_MISMATCH, MYF(0), cl, cs); } + + +int sql_log_cascade_update(TABLE *table) +{ +#ifdef HAVE_REPLICATION + DBUG_ASSERT(table->s->online_alter_binlog); + Log_func *log_func= Update_rows_log_event::binlog_row_logging_function; + bitmap_set_all(&table->def_read_set); + return binlog_log_row_online_alter(table, table->record[0], table->record[1], + log_func); +#else + DBUG_ASSERT(0); + return 1; // Will report corruption in innodb +#endif +} + + +int sql_log_cascade_delete(TABLE *table) +{ +#ifdef HAVE_REPLICATION + DBUG_ASSERT(table->s->online_alter_binlog); + Log_func *log_func= Delete_rows_log_event::binlog_row_logging_function; + bitmap_set_all(&table->def_read_set); + return binlog_log_row_online_alter(table, table->record[0], NULL, log_func); +#else + DBUG_ASSERT(0); + return 1; // Will report corruption in innodb +#endif +} |