Bug #31060: MySQL CLI parser bug 2
There was a problem when a DELIMITER COMMAND is not the first command on the line. I this case an extra line feed was added to the glob buffer and this was causing subsequent attempts to enter this delimiter to fail. Fixed by not adding a new line to the glob buffer if the command being added is a DELIMITER client/mysql.cc: Bug #31060: Don't add a new line if DELIMTER is added to the glob buffer mysql-test/r/mysql.result: Bug #31060: test case mysql-test/t/mysql.test: Bug #31060: test case
This commit is contained in:
parent
315748a41d
commit
4b05db5cfd
@ -2222,8 +2222,22 @@ static bool add_line(String &buffer,char *line,char *in_string,
|
||||
}
|
||||
if (out != line || !buffer.is_empty())
|
||||
{
|
||||
*out++='\n';
|
||||
uint length=(uint) (out-line);
|
||||
|
||||
if (length < 9 ||
|
||||
my_strnncoll (charset_info,
|
||||
(uchar *)line, 9, (const uchar *) "delimiter", 9))
|
||||
{
|
||||
/*
|
||||
Don't add a new line in case there's a DELIMITER command to be
|
||||
added to the glob buffer (e.g. on processing a line like
|
||||
"<command>;DELIMITER <non-eof>") : similar to how a new line is
|
||||
not added in the case when the DELIMITER is the first command
|
||||
entered with an empty glob buffer.
|
||||
*/
|
||||
*out++='\n';
|
||||
length++;
|
||||
}
|
||||
if (buffer.length() + length >= buffer.alloced_length())
|
||||
buffer.realloc(buffer.length()+length+IO_SIZE);
|
||||
if ((!*ml_comment || preserve_comments) && buffer.append(line, length))
|
||||
|
@ -188,4 +188,8 @@ delimiter
|
||||
2
|
||||
@z:='1' @z=database()
|
||||
1 NULL
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
End of 5.0 tests
|
||||
|
@ -314,4 +314,21 @@ remove_file $MYSQLTEST_VARDIR/tmp/bug38158.sql;
|
||||
#
|
||||
--exec $MYSQL -e "select @z:='1',@z=database()"
|
||||
|
||||
|
||||
#
|
||||
# Bug #31060: MySQL CLI parser bug 2
|
||||
#
|
||||
|
||||
--write_file $MYSQLTEST_VARDIR/tmp/bug31060.sql
|
||||
;DELIMITER DELIMITER
|
||||
;
|
||||
SELECT 1DELIMITER
|
||||
DELIMITER ;
|
||||
SELECT 1;
|
||||
EOF
|
||||
|
||||
--exec $MYSQL < $MYSQLTEST_VARDIR/tmp/bug31060.sql 2>&1
|
||||
|
||||
remove_file $MYSQLTEST_VARDIR/tmp/bug31060.sql;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
Loading…
x
Reference in New Issue
Block a user