Skip to content

Commit 6cf22be

Browse files
author
Bharathy Satish
committed
Bug #23072245 MYSQLPUMP OUTPUT FAILS TO LOAD WHEN IT INCLUDES TRIGGERS
Problem: If trigger is defined with multiple statements in trigger body, then during restore we get a sytax error. This patch fixes this issue by enclosing the trigger ddl in a delimiter.
1 parent 895d0ed commit 6cf22be

File tree

3 files changed

+63
-2
lines changed

3 files changed

+63
-2
lines changed

client/dump/mysql_crawler.cc

+2-2
Original file line numberDiff line numberDiff line change
@@ -400,10 +400,10 @@ void Mysql_crawler::enumerate_table_triggers(
400400
const Mysql::Tools::Base::Mysql_query_runner::Row& trigger_row= **it;
401401
Trigger* trigger= new Trigger(this->generate_new_object_id(),
402402
trigger_row[0], table.get_schema(),
403-
this->get_version_specific_statement(
403+
"DELIMITER //\n" + this->get_version_specific_statement(
404404
this->get_create_statement(
405405
runner, table.get_schema(), trigger_row[0], "TRIGGER", 2).value(),
406-
"TRIGGER", "50017", "50003"),
406+
"TRIGGER", "50017", "50003") + "\n//\n" + "DELIMITER ;\n",
407407
&table);
408408

409409
trigger->add_dependency(dependency);

mysql-test/r/mysqlpump_basic.result

+30
Original file line numberDiff line numberDiff line change
@@ -627,3 +627,33 @@ part1_hash
627627
part2_hash
628628
part3_hash
629629
DROP DATABASE bug22726732;
630+
CREATE DATABASE bug23072245;
631+
USE bug23072245;
632+
CREATE TABLE test1(a1 INT);
633+
CREATE TABLE test2(a2 INT);
634+
CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
635+
CREATE TABLE test4(a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b4 INT DEFAULT 0);
636+
CREATE TRIGGER testref BEFORE INSERT ON test1
637+
FOR EACH ROW
638+
BEGIN
639+
INSERT INTO test2 SET a2 = NEW.a1;
640+
DELETE FROM test3 WHERE a3 = NEW.a1;
641+
UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
642+
END ;|
643+
SHOW TRIGGERS;
644+
Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation
645+
testref INSERT test1 BEGIN
646+
INSERT INTO test2 SET a2 = NEW.a1;
647+
DELETE FROM test3 WHERE a3 = NEW.a1;
648+
UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
649+
END BEFORE 0000-00-00 00:00:00 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION root@localhost latin1 latin1_swedish_ci latin1_swedish_ci
650+
DROP DATABASE bug23072245;
651+
USE bug23072245;
652+
SHOW TRIGGERS;
653+
Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation
654+
testref INSERT test1 BEGIN
655+
INSERT INTO test2 SET a2 = NEW.a1;
656+
DELETE FROM test3 WHERE a3 = NEW.a1;
657+
UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
658+
END BEFORE 0000-00-00 00:00:00 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION root@localhost utf8mb4 utf8mb4_general_ci latin1_swedish_ci
659+
DROP DATABASE bug23072245;

mysql-test/t/mysqlpump_basic.test

+31
Original file line numberDiff line numberDiff line change
@@ -536,3 +536,34 @@ DROP DATABASE bug22726732;
536536
USE bug22726732;
537537
SHOW TABLES;
538538
DROP DATABASE bug22726732;
539+
540+
#echo
541+
#echo Bug #23072245 MYSQLPUMP OUTPUT FAILS TO LOAD WHEN IT INCLUDES TRIGGERS
542+
#echo
543+
544+
CREATE DATABASE bug23072245;
545+
USE bug23072245;
546+
CREATE TABLE test1(a1 INT);
547+
CREATE TABLE test2(a2 INT);
548+
CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
549+
CREATE TABLE test4(a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b4 INT DEFAULT 0);
550+
DELIMITER |;
551+
CREATE TRIGGER testref BEFORE INSERT ON test1
552+
FOR EACH ROW
553+
BEGIN
554+
INSERT INTO test2 SET a2 = NEW.a1;
555+
DELETE FROM test3 WHERE a3 = NEW.a1;
556+
UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
557+
END ;|
558+
DELIMITER ;|
559+
--replace_column 6 '0000-00-00 00:00:00'
560+
SHOW TRIGGERS;
561+
562+
--exec $MYSQL_PUMP --databases bug23072245 > $MYSQLTEST_VARDIR/tmp/bug23072245.sql
563+
DROP DATABASE bug23072245;
564+
--exec $MYSQL < $MYSQLTEST_VARDIR/tmp/bug23072245.sql
565+
--remove_file $MYSQLTEST_VARDIR/tmp/bug23072245.sql
566+
USE bug23072245;
567+
--replace_column 6 '0000-00-00 00:00:00'
568+
SHOW TRIGGERS;
569+
DROP DATABASE bug23072245;

0 commit comments

Comments
 (0)