Bug#13639125 DELIMITER STRIPS THE NEXT NEW LINE

IN A SQL STATEMENT

While processing each lines entered at the prompt,
mysql client appends a '\n' to all the lines except
for delimiter commands. However the same logic must
not apply if 'delimiter' is part of a string or a
comment, for which a '\n' should be added.

Fixed by adding appropriate checks.

Added a test case.
This commit is contained in:
Nirbhay Choubey 2012-12-12 22:31:03 +05:30
parent e10d25ef8f
commit fc311cc623

View file

@ -2283,17 +2283,19 @@ static bool add_line(String &buffer,char *line,char *in_string,
{
uint length=(uint) (out-line);
if (!truncated &&
(length < 9 ||
my_strnncoll (charset_info,
(uchar *)line, 9, (const uchar *) "delimiter", 9)))
if (!truncated && (length < 9 ||
my_strnncoll (charset_info, (uchar *)line, 9,
(const uchar *) "delimiter", 9) ||
(*in_string || *ml_comment)))
{
/*
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.
entered with an empty glob buffer. However, if the delimiter is
part of a string or a comment, the new line should be added. (e.g.
SELECT '\ndelimiter\n';\n)
*/
*out++='\n';
length++;