Commit 2f8b344b authored by unknown's avatar unknown
Browse files

Merge bk-internal.mysql.com:/home/bk/mysql-5.1-new

into  zippy.(none):/home/cmiller/work/mysql/mysql-5.1-new__bug18078

parents fff65923 10db4d76
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -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
+5 −5
Original line number Diff line number Diff line
@@ -1174,7 +1174,7 @@ create database first;
use first;
set time_zone = 'UTC';

## prove one works
## 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;
@@ -1187,7 +1187,7 @@ 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;    		
+43 −3
Original line number Diff line number Diff line
@@ -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))