summaryrefslogtreecommitdiff
path: root/sql/sql_class.cc
diff options
context:
space:
mode:
authorSergei Golubchik <serg@mariadb.org>2019-03-22 19:28:59 +0100
committerSergei Golubchik <serg@mariadb.org>2019-03-27 22:51:37 +0100
commitdeff3f757289bd5b98b1b44d857e7508c4be07eb (patch)
treee67bbdfa81ee11b205610c3b038e864f3206a0a6 /sql/sql_class.cc
parentd8084116b54d3d3f1d655a4e051a58ebdfb82570 (diff)
downloadmariadb-git-deff3f757289bd5b98b1b44d857e7508c4be07eb.tar.gz
MDEV-18466 Unsafe to log updates on tables referenced by foreign keys with triggers in statement format
ignore FK-prelocked tables when looking for write-prelocked tables with auto-increment to complain about "Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column"
Diffstat (limited to 'sql/sql_class.cc')
-rw-r--r--sql/sql_class.cc4
1 files changed, 4 insertions, 0 deletions
diff --git a/sql/sql_class.cc b/sql/sql_class.cc
index 02e76520cb4..639c7c1784a 100644
--- a/sql/sql_class.cc
+++ b/sql/sql_class.cc
@@ -5542,6 +5542,9 @@ int xid_cache_iterate(THD *thd, my_hash_walk_action action, void *arg)
Call this function only when you have established the list of all tables
which you'll want to update (including stored functions, triggers, views
inside your statement).
+
+ Ignore tables prelocked for foreign key cascading actions, as these
+ actions cannot generate new auto_increment values.
*/
static bool
@@ -5551,6 +5554,7 @@ has_write_table_with_auto_increment(TABLE_LIST *tables)
{
/* we must do preliminary checks as table->table may be NULL */
if (!table->placeholder() &&
+ table->prelocking_placeholder != TABLE_LIST::FK &&
table->table->found_next_number_field &&
(table->lock_type >= TL_WRITE_ALLOW_WRITE))
return 1;