mirror of
https://github.com/MariaDB/server.git
synced 2026-05-16 03:47:17 +02:00
MDEV-15199 Referential integrity broken in ON DELETE CASCADE
MDEV-14222 Unnecessary 'cascade' memory allocation for every updated row when there is no FOREIGN KEY This reverts the MySQL 5.7.2 change377774689bwhich introduced these problems. MariaDB 10.2.2 inherited these problems in commit2e814d4702. The FOREIGN KEY CASCADE and SET NULL operations implemented as procedural recursion are consuming more than 8 kilobytes of stack (9 stack frames) per iteration in a non-debug GNU/Linux AMD64 build. This is why we need to limit the maximum recursion depth to 15 steps instead of the 255 that it used to be in MySQL 5.7 and MariaDB 10.2. A corresponding change was made in MySQL 5.7.21 in7b26dc98a6
This commit is contained in:
parent
5d7e9fd46c
commit
10590dd39c
13 changed files with 281 additions and 509 deletions
|
|
@ -297,6 +297,18 @@ row_create_update_node_for_mysql(
|
|||
/*=============================*/
|
||||
dict_table_t* table, /*!< in: table to update */
|
||||
mem_heap_t* heap); /*!< in: mem heap from which allocated */
|
||||
|
||||
/**********************************************************************//**
|
||||
Does a cascaded delete or set null in a foreign key operation.
|
||||
@return error code or DB_SUCCESS */
|
||||
dberr_t
|
||||
row_update_cascade_for_mysql(
|
||||
/*=========================*/
|
||||
que_thr_t* thr, /*!< in: query thread */
|
||||
upd_node_t* node, /*!< in: update node used in the cascade
|
||||
or set null operation */
|
||||
dict_table_t* table) /*!< in: table where we do the operation */
|
||||
MY_ATTRIBUTE((nonnull, warn_unused_result));
|
||||
/*********************************************************************//**
|
||||
Locks the data dictionary exclusively for performing a table create or other
|
||||
data dictionary modification operation. */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue