From 2caa5608c6c3f5eba5974a69b1d29b25d4eda280 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 9 Feb 2006 11:05:28 +0100 Subject: [PATCH] Bug#16878 dump of trigger - Pass "in_comment" variable on to new lex in sp_head::reset_lex - Add testcases for dumping and reloading trigger without BEGIN/END mysql-test/r/mysqldump.result: Update test result mysql-test/t/mysqldump.test: Add test for dumping trigger without begin/end, and test that the output from mysqldump can be reloaded. sql/sp_head.cc: If already in a comment before parsing a substatement, set in_comment in the new lex as well. This will handle cases where the comment starts before the substatement, which is common in output from mysqldump to mask away syntax not supported by earlier versions of MySQL. Ex: /*!50003 CREATE TRIGGER `tr1` BEFORE INSERT ON `t1` FOR EACH ROW set new.created=now() */; ^=== sp_head::reset_lex is called when already in comment --- mysql-test/r/mysqldump.result | 22 ++++++++++++++++++++++ mysql-test/t/mysqldump.test | 30 ++++++++++++++++++++++++++++++ sql/sp_head.cc | 2 ++ 3 files changed, 54 insertions(+) diff --git a/mysql-test/r/mysqldump.result b/mysql-test/r/mysqldump.result index 717d9f67774..46056edcd5e 100644 --- a/mysql-test/r/mysqldump.result +++ b/mysql-test/r/mysqldump.result @@ -2611,3 +2611,25 @@ UNLOCK TABLES; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; drop table t1; +create table t1 (a int, created datetime); +create table t2 (b int, created datetime); +create trigger tr1 before insert on t1 for each row set +new.created=now(); +create trigger tr2 after insert on t1 +for each row +begin +insert into t2 set b=new.a and created=new.created; +end| +drop trigger tr1; +drop trigger tr2; +drop table t1, t2; +show triggers; +Trigger Event Table Statement Timing Created sql_mode Definer +tr1 INSERT t1 set +new.created=now() BEFORE # root@localhost +tr2 INSERT t1 begin +insert into t2 set b=new.a and created=new.created; +end AFTER # root@localhost +drop trigger tr1; +drop trigger tr2; +drop table t1, t2; diff --git a/mysql-test/t/mysqldump.test b/mysql-test/t/mysqldump.test index e54bf6386c5..caa1ae0d837 100644 --- a/mysql-test/t/mysqldump.test +++ b/mysql-test/t/mysqldump.test @@ -1036,3 +1036,33 @@ insert into t1 values ('',''); drop table t1; # End of 4.1 tests + +# +# Bug #16878 dump of trigger +# + +create table t1 (a int, created datetime); +create table t2 (b int, created datetime); +create trigger tr1 before insert on t1 for each row set +new.created=now(); +delimiter |; +create trigger tr2 after insert on t1 +for each row +begin + insert into t2 set b=new.a and created=new.created; +end| +delimiter ;| + +# dump table and trigger +--exec $MYSQL_DUMP test > var/tmp/bug16878.sql +drop trigger tr1; +drop trigger tr2; +drop table t1, t2; + +# reload dump +--exec $MYSQL test < var/tmp/bug16878.sql +--replace_column 6 # +show triggers; +drop trigger tr1; +drop trigger tr2; +drop table t1, t2; diff --git a/sql/sp_head.cc b/sql/sp_head.cc index 96bf2c51b02..df993d304b1 100644 --- a/sql/sp_head.cc +++ b/sql/sp_head.cc @@ -1584,6 +1584,8 @@ sp_head::reset_lex(THD *thd) sublex->trg_table_fields.empty(); sublex->sp_lex_in_use= FALSE; + sublex->in_comment= oldlex->in_comment; + /* Reset type info. */ sublex->charset= NULL;