summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <cmiller@zippy.(none)>2006-05-03 18:58:13 -0400
committerunknown <cmiller@zippy.(none)>2006-05-03 18:58:13 -0400
commit2f8b344b06ea646f9304e239b06237877628253f (patch)
tree7018e1ee6c210550a74bb11ad2b39ef5ec9f10f8
parentfff659234f45c1c56e3ddc4c914bea669e9e6eb4 (diff)
parent10db4d76862e47f2ae14264cbbc7f5fa1bd06885 (diff)
downloadmariadb-git-2f8b344b06ea646f9304e239b06237877628253f.tar.gz
Merge bk-internal.mysql.com:/home/bk/mysql-5.1-new
into zippy.(none):/home/cmiller/work/mysql/mysql-5.1-new__bug18078
-rw-r--r--mysql-test/t/disabled.def1
-rw-r--r--mysql-test/t/mysqldump.test10
-rw-r--r--sql/event_timed.cc46
3 files changed, 48 insertions, 9 deletions
diff --git a/mysql-test/t/disabled.def b/mysql-test/t/disabled.def
index d92aed1d1a2..2d7d1b1ca8d 100644
--- a/mysql-test/t/disabled.def
+++ b/mysql-test/t/disabled.def
@@ -33,7 +33,6 @@ rpl_row_blob_innodb : BUG#18980 2006-04-10 kent Test fails randomly
rpl_row_func003 : BUG#19074 2006-13-04 andrei test failed
rpl_row_inexist_tbl : BUG#18948 2006-03-09 mats Disabled since patch makes this test wait forever
rpl_sp : BUG#16456 2006-02-16 jmiller
-mysqldump : BUG#18078 2006-03-10 lars
udf : BUG#18564 2006-03-27 ian (Permission by Brian)
# the below testcase have been reworked to avoid the bug, test contains comment, keep bug open
diff --git a/mysql-test/t/mysqldump.test b/mysql-test/t/mysqldump.test
index 5ba7838bb81..59e09a6407a 100644
--- a/mysql-test/t/mysqldump.test
+++ b/mysql-test/t/mysqldump.test
@@ -1174,8 +1174,8 @@ create database first;
use first;
set time_zone = 'UTC';
-## prove one works
-create event ee1 on schedule at '2035-12-31 20:01:23' do set @a=5;
+## prove one works (with spaces and tabs on the end)
+create event ee1 on schedule at '2035-12-31 20:01:23' do set @a=5;
show events;
show create event ee1;
--exec $MYSQL_DUMP --events first > $MYSQLTEST_VARDIR/tmp/bug16853-1.sql
@@ -1187,10 +1187,10 @@ use second;
show events;
show create event ee1;
-## prove three works
+## prove three works (with spaces and tabs on the end)
# start with one from the previous restore
-create event ee2 on schedule at '2018-12-31 21:01:23' do set @a=5;
-create event ee3 on schedule at '2030-12-31 22:01:23' do set @a=5;
+create event ee2 on schedule at '2018-12-31 21:01:23' do set @a=5;
+create event ee3 on schedule at '2030-12-31 22:01:23' do set @a=5;
show events;
--exec $MYSQL_DUMP --events second > $MYSQLTEST_VARDIR/tmp/bug16853-2.sql
drop database second;
diff --git a/sql/event_timed.cc b/sql/event_timed.cc
index adf28b8877c..ed012ecd399 100644
--- a/sql/event_timed.cc
+++ b/sql/event_timed.cc
@@ -106,6 +106,9 @@ Event_timed::init_name(THD *thd, sp_name *spn)
NOTE
The body is extracted by copying all data between the
start of the body set by another method and the current pointer in Lex.
+
+ Some questionable removal of characters is done in here, and that part
+ should be refactored when the parser is smarter.
*/
void
@@ -116,9 +119,46 @@ Event_timed::init_body(THD *thd)
body_begin, thd->lex->ptr));
body.length= thd->lex->ptr - body_begin;
- /* Trim nuls at the end */
- while (body.length && body_begin[body.length-1] == '\0')
- body.length--;
+ const uchar *body_end= body_begin + body.length - 1;
+
+ /* Trim nuls or close-comments ('*'+'/') or spaces at the end */
+ while (body_begin < body_end)
+ {
+
+ if ((*body_end == '\0') ||
+ (my_isspace(thd->variables.character_set_client, *body_end)))
+ { /* consume NULs and meaningless whitespace */
+ --body.length;
+ --body_end;
+ continue;
+ }
+
+ /*
+ consume closing comments
+
+ This is arguably wrong, but it's the best we have until the parser is
+ changed to be smarter. FIXME PARSER
+
+ See also the sp_head code, where something like this is done also.
+
+ One idea is to keep in the lexer structure the count of the number of
+ open-comments we've entered, and scan left-to-right looking for a
+ closing comment IFF the count is greater than zero.
+
+ Another idea is to remove the closing comment-characters wholly in the
+ parser, since that's where it "removes" the opening characters.
+ */
+ if ((*(body_end - 1) == '*') && (*body_end == '/'))
+ {
+ DBUG_PRINT("info", ("consumend one '*" "/' comment in the query '%s'",
+ body_begin));
+ body.length-= 2;
+ body_end-= 2;
+ continue;
+ }
+
+ break; /* none were found, so we have excised all we can. */
+ }
/* the first is always whitespace which I cannot skip in the parser */
while (my_isspace(thd->variables.character_set_client, *body_begin))