summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnel Husakovic <anel@mariadb.org>2020-11-16 20:42:38 +0100
committerAnel Husakovic <anel@mariadb.org>2020-11-17 15:11:14 +0100
commit33787ea47a37372f168fa152e83151a2ceda5af5 (patch)
treee7f6f41492ef874425ba7c4fd4071e90ddd8422b
parentceef26cf86689f3dd1db010dc6ca1b065e32e6a4 (diff)
downloadmariadb-git-33787ea47a37372f168fa152e83151a2ceda5af5.tar.gz
MDEV-6899: Database Dump has Syntax Error When Importing
-rw-r--r--mysql-test/r/mysqldump.result32
-rw-r--r--mysql-test/t/mysqldump.test26
-rw-r--r--sql/events.cc10
-rw-r--r--sql/sql_show.cc4
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. */