summaryrefslogtreecommitdiff
path: root/sql
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 /sql
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
Diffstat (limited to 'sql')
-rw-r--r--sql/event_timed.cc46
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))