diff options
author | unknown <cmiller@zippy.(none)> | 2006-05-03 18:58:13 -0400 |
---|---|---|
committer | unknown <cmiller@zippy.(none)> | 2006-05-03 18:58:13 -0400 |
commit | 2f8b344b06ea646f9304e239b06237877628253f (patch) | |
tree | 7018e1ee6c210550a74bb11ad2b39ef5ec9f10f8 /sql | |
parent | fff659234f45c1c56e3ddc4c914bea669e9e6eb4 (diff) | |
parent | 10db4d76862e47f2ae14264cbbc7f5fa1bd06885 (diff) | |
download | mariadb-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
Diffstat (limited to 'sql')
-rw-r--r-- | sql/event_timed.cc | 46 |
1 files changed, 43 insertions, 3 deletions
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)) |