diff options
author | Anel Husakovic <anel@mariadb.org> | 2020-11-16 20:42:38 +0100 |
---|---|---|
committer | Anel Husakovic <anel@mariadb.org> | 2020-11-17 15:11:14 +0100 |
commit | 33787ea47a37372f168fa152e83151a2ceda5af5 (patch) | |
tree | e7f6f41492ef874425ba7c4fd4071e90ddd8422b | |
parent | ceef26cf86689f3dd1db010dc6ca1b065e32e6a4 (diff) | |
download | mariadb-git-33787ea47a37372f168fa152e83151a2ceda5af5.tar.gz |
MDEV-6899: Database Dump has Syntax Error When Importing
-rw-r--r-- | mysql-test/r/mysqldump.result | 32 | ||||
-rw-r--r-- | mysql-test/t/mysqldump.test | 26 | ||||
-rw-r--r-- | sql/events.cc | 10 | ||||
-rw-r--r-- | sql/sql_show.cc | 4 |
4 files changed, 69 insertions, 3 deletions
diff --git a/mysql-test/r/mysqldump.result b/mysql-test/r/mysqldump.result index 974ff200e68..1d4083ab8b3 100644 --- a/mysql-test/r/mysqldump.result +++ b/mysql-test/r/mysqldump.result @@ -5714,4 +5714,36 @@ DELIMITER ; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; DROP TABLE t1; +# +# MDEV-6899:Database Dump has Syntax Error When Importing +# +create database td; +CREATE EVENT td.fooEvent +ON SCHEDULE EVERY 1 DAY +DO +DELETE FROM Token WHERE DATE(time_end) < CURRENT_DATE ; +SELECT 1 // +1 +1 +# SHOW CREATE EVENTS before upgrade +SHOW CREATE EVENT td.fooEvent; +Event fooEvent +sql_mode +time_zone SYSTEM +Create Event CREATE DEFINER=`root`@`localhost` EVENT `fooEvent` ON SCHEDULE EVERY 1 DAY STARTS '#' ON COMPLETION NOT PRESERVE ENABLE DO DELETE FROM Token WHERE DATE(time_end) < CURRENT_DATE +character_set_client utf8 +collation_connection utf8_general_ci +Database Collation latin1_swedish_ci +SELECT EVENT_DEFINITION FROM information_schema.events; +EVENT_DEFINITION DELETE FROM Token WHERE DATE(time_end) < CURRENT_DATE ; +# SHOW CREATE EVENTS after upgrade +SHOW CREATE EVENT td.fooEvent; +Event fooEvent +sql_mode +time_zone SYSTEM +Create Event CREATE DEFINER=`root`@`localhost` EVENT `fooEvent` ON SCHEDULE EVERY 1 DAY STARTS '#' ON COMPLETION NOT PRESERVE ENABLE DO DELETE FROM Token WHERE DATE(time_end) < CURRENT_DATE +character_set_client utf8 +collation_connection utf8_general_ci +Database Collation latin1_swedish_ci +DROP DATABASE td; # End of 10.2 tests diff --git a/mysql-test/t/mysqldump.test b/mysql-test/t/mysqldump.test index 4478406b395..202547bf002 100644 --- a/mysql-test/t/mysqldump.test +++ b/mysql-test/t/mysqldump.test @@ -2735,4 +2735,30 @@ INSERT INTO t1 (a) VALUES (1),(2),(3); --exec $MYSQL_DUMP --default-character-set=utf8mb4 --triggers --no-data --no-create-info --add-drop-trigger --skip-comments --databases test DROP TABLE t1; +--echo # +--echo # MDEV-6899:Database Dump has Syntax Error When Importing +--echo # +create database td; + +DELIMITER //; +CREATE EVENT td.fooEvent +ON SCHEDULE EVERY 1 DAY +DO + DELETE FROM Token WHERE DATE(time_end) < CURRENT_DATE ; +SELECT 1 // +DELIMITER ;// +--echo # SHOW CREATE EVENTS before upgrade +--vertical_results +--replace_regex /STARTS '[^']+'/STARTS '#'/ +SHOW CREATE EVENT td.fooEvent; +# Note that `event_definition` column still holds semi-colon at the end +SELECT EVENT_DEFINITION FROM information_schema.events; +--exec $MYSQL_DUMP td>$MYSQLTEST_VARDIR/tmp/MDEV-6899.sql +--exec $MYSQL<$MYSQLTEST_VARDIR/tmp/MDEV-6899.sql +--echo # SHOW CREATE EVENTS after upgrade +--vertical_results +--replace_regex /STARTS '[^']+'/STARTS '#'/ +SHOW CREATE EVENT td.fooEvent; +DROP DATABASE td; + --echo # End of 10.2 tests diff --git a/sql/events.cc b/sql/events.cc index abac2833833..2880113bc75 100644 --- a/sql/events.cc +++ b/sql/events.cc @@ -668,7 +668,7 @@ Events::drop_schema_events(THD *thd, char *db) static bool send_show_create_event(THD *thd, Event_timed *et, Protocol *protocol) { - char show_str_buf[10 * STRING_BUFFER_USUAL_SIZE]; + char show_str_buf[USER_HOST_BUFF_SIZE]; String show_str(show_str_buf, sizeof(show_str_buf), system_charset_info); List<Item> field_list; LEX_STRING sql_mode; @@ -680,6 +680,12 @@ send_show_create_event(THD *thd, Event_timed *et, Protocol *protocol) if (et->get_create_event(thd, &show_str)) DBUG_RETURN(TRUE); + LEX_STRING def_show_str= show_str.lex_string(); + if (!strcmp(&def_show_str.str[def_show_str.length -1], ";")) + { + --def_show_str.length; + def_show_str.str[def_show_str.length]='\0'; + } field_list.push_back(new (mem_root) Item_empty_string(thd, "Event", NAME_CHAR_LEN), mem_root); @@ -722,7 +728,7 @@ send_show_create_event(THD *thd, Event_timed *et, Protocol *protocol) protocol->store(et->name.str, et->name.length, system_charset_info); protocol->store(sql_mode.str, sql_mode.length, system_charset_info); protocol->store(tz_name->ptr(), tz_name->length(), system_charset_info); - protocol->store(show_str.ptr(), show_str.length(), + protocol->store(def_show_str.str, def_show_str.length, et->creation_ctx->get_client_cs()); protocol->store(et->creation_ctx->get_client_cs()->csname, strlen(et->creation_ctx->get_client_cs()->csname), diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 5544c765775..80d084c62f7 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -9632,7 +9632,9 @@ static bool show_create_trigger_impl(THD *thd, Trigger *trigger) /* Prepare trigger "object". */ - trigger->get_trigger_info(&trg_sql_original_stmt, &trg_body, &trg_definer); + trigger->get_trigger_info(&trg_sql_original_stmt, + &trg_body, &trg_definer); + sql_mode_string_representation(thd, trigger->sql_mode, &trg_sql_mode_str); /* Resolve trigger client character set. */ |