mirror of
https://github.com/MariaDB/server.git
synced 2025-01-31 19:11:46 +01:00
6660c072ad
as well as
MDEV-19500 Update with join stopped worked if there is a call to a procedure in a trigger
MDEV-19521 Update Table Fails with Trigger and Stored Function
MDEV-19497 Replication stops because table not found
MDEV-19527 UPDATE + JOIN + TRIGGERS = table doesn't exists error
Reimplement the fix for (5d510fdbf0
)
MDEV-18507 can't update temporary table when joined with table with triggers on read-only
instead of calling open_tables() twice, put multi-update
prepare code inside open_tables() loop.
Add a test for a MDL backoff-and-retry loop inside open_tables()
across multi-update prepare code.
99 lines
2.5 KiB
Text
99 lines
2.5 KiB
Text
--source include/have_innodb.inc
|
|
|
|
--echo #
|
|
--echo # BUG#57373: Multi update+InnoDB reports ER_KEY_NOT_FOUND if a
|
|
--echo # table is updated twice
|
|
--echo #
|
|
|
|
# Results differ between storage engines.
|
|
# See multi_update.test for the MyISAM variant of this test
|
|
CREATE TABLE t1(
|
|
pk INT,
|
|
a INT,
|
|
b INT,
|
|
PRIMARY KEY (pk)
|
|
) ENGINE=InnoDB;
|
|
|
|
INSERT INTO t1 VALUES (0,0,0);
|
|
--error ER_MULTI_UPDATE_KEY_CONFLICT
|
|
UPDATE t1 AS A, t1 AS B SET A.pk = 1, B.a = 2;
|
|
SELECT * FROM t1;
|
|
|
|
CREATE VIEW v1 AS SELECT * FROM t1;
|
|
--error ER_MULTI_UPDATE_KEY_CONFLICT
|
|
UPDATE v1 AS A, t1 AS B SET A.pk = 1, B.a = 2;
|
|
SELECT * FROM t1;
|
|
|
|
UPDATE t1 AS A, t1 AS B SET A.a = 1, B.b = 2;
|
|
--echo # Should be (0,1,2)
|
|
SELECT * FROM t1;
|
|
|
|
DROP VIEW v1;
|
|
DROP TABLE t1;
|
|
|
|
--echo #
|
|
--echo # BUG#11882110: UPDATE REPORTS ER_KEY_NOT_FOUND IF TABLE IS
|
|
--echo # UPDATED TWICE
|
|
--echo #
|
|
|
|
# Results differ between storage engines.
|
|
# See multi_update.test for the MyISAM variant of this test
|
|
CREATE TABLE t1 (
|
|
col_int_key int,
|
|
pk int,
|
|
col_int int,
|
|
key(col_int_key),
|
|
primary key (pk)
|
|
) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (1,2,3);
|
|
|
|
--echo
|
|
CREATE TABLE t2 (
|
|
col_int_key int,
|
|
pk_1 int,
|
|
pk_2 int,
|
|
col_int int,
|
|
key(col_int_key),
|
|
primary key (pk_1,pk_2)
|
|
) ENGINE=InnoDB;
|
|
INSERT INTO t2 VALUES (1,2,3,4);
|
|
|
|
--echo
|
|
--error ER_MULTI_UPDATE_KEY_CONFLICT
|
|
UPDATE t1 AS A NATURAL JOIN t1 B SET A.pk=5,B.pk=7;
|
|
--echo
|
|
SELECT * FROM t1;
|
|
|
|
--echo
|
|
--error ER_MULTI_UPDATE_KEY_CONFLICT
|
|
UPDATE t2 AS A NATURAL JOIN t2 B SET A.pk_1=5,B.pk_1=7;
|
|
--echo
|
|
--error ER_MULTI_UPDATE_KEY_CONFLICT
|
|
UPDATE t2 AS A NATURAL JOIN t2 B SET A.pk_2=10,B.pk_2=11;
|
|
|
|
--echo
|
|
SELECT * FROM t2;
|
|
|
|
DROP TABLE t1,t2;
|
|
|
|
#
|
|
# MDEV-19491 update query stopped working after mariadb upgrade 10.2.23 -> 10.2.24
|
|
#
|
|
create table t1 (id serial, size int(11)) engine=innodb;
|
|
create table t2 (id serial, size int, account_id int) engine=innodb;
|
|
create table t3 (id serial, size int, article_id int) engine=innodb;
|
|
create table t4 (id serial, file_id int, article_id int) engine=innodb;
|
|
insert t1 values(null, 400);
|
|
insert t2 values(null, 0, 1), (null, 1, 1);
|
|
insert t3 values(null, 100, 1);
|
|
insert t4 values(null, 1, 2);
|
|
create trigger file_update_article before update on t3 for each row
|
|
update t2 set t2.size = new.size where t2.id = new.article_id;
|
|
create trigger article_update_account before update on t2 for each row
|
|
update t1 set t1.size = t1.size + new.size where t1.id = new.account_id;
|
|
update t3 join t4 on t4.file_id =t3.id and t4.article_id=2 set t3.size=t3.size + 2;
|
|
drop table t1, t2, t3, t4;
|
|
|
|
--echo #
|
|
--echo # end of 5.5 tests
|
|
--echo #
|