[MDEV-19527] UPDATE + JOIN + TRIGGERS = table doesn't exists error Created: 2019-05-20  Updated: 2019-06-01  Resolved: 2019-05-20

Status: Closed
Project: MariaDB Server
Component/s: N/A
Affects Version/s: 10.3.15
Fix Version/s: 10.2.25, 5.5.65, 10.1.41, 10.3.16, 10.4.6

Type: Bug Priority: Major
Reporter: Pavel Cibulka Assignee: Unassigned
Resolution: Duplicate Votes: 0
Labels: None

Issue Links:
Duplicate
duplicates MDEV-19491 update query stopped working after ma... Closed

 Description   

After upgrading from 10.3.14 to 10.3.15 we are getting errors "Table xy doesn't exists".

Test case:

CREATE TABLE `a` (`id` INT NOT NULL, `x` INT NOT NULL DEFAULT 1, PRIMARY KEY (`id`));
CREATE TABLE `b` (`id` INT NOT NULL, `x` INT NOT NULL DEFAULT 1, PRIMARY KEY (`id`));
CREATE TABLE `c` (`id` INT NOT NULL, `x` INT NOT NULL DEFAULT 1, PRIMARY KEY (`id`));
CREATE TABLE `d` (`id` INT NOT NULL, `x` INT NOT NULL DEFAULT 1, PRIMARY KEY (`id`));
INSERT INTO `a` (`id`, `x`) VALUES ('1', '1');
INSERT INTO `b` (`id`, `x`) VALUES ('1', '1');
INSERT INTO `c` (`id`, `x`) VALUES ('1', '1');
INSERT INTO `d` (`id`, `x`) VALUES ('1', '1');
 
DELIMITER $$
CREATE DEFINER = CURRENT_USER TRIGGER `a_AFTER_UPDATE` AFTER UPDATE ON `a` FOR EACH ROW
BEGIN
    UPDATE c SET c.x = c.x + NEW.x-OLD.x WHERE c.id=NEW.id;
END$$
 
CREATE DEFINER = CURRENT_USER TRIGGER `c_BEFORE_UPDATE` BEFORE UPDATE ON `c` FOR EACH ROW
BEGIN
DECLARE y INT;
    SET y = (SELECT x FROM d WHERE d.id=NEW.id);
    SET NEW.x = NEW.x + y;
END$$
DELIMITER ;
 
UPDATE a JOIN b ON a.id=b.id SET a.x=a.x+b.x WHERE a.id=1;

  • 10.3.14 works
  • 10.3.15 doesn't work
  • UPDATE a JOIN b ON a.id=b.id SET a.x=a.x+b.x WHERE a.id=1; ERROR
  • UPDATE a SET a.x=a.x+(SELECT b.x FROM b WHERE b.id=1) WHERE a.id=1; WORKS

Generated at Thu Feb 08 08:52:22 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.