mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge mysql.com:/home/jimw/my/mysql-5.0-10251
into mysql.com:/home/jimw/my/mysql-5.0-clean client/mysqltest.c: Auto merged
This commit is contained in:
@ -2024,11 +2024,11 @@ my_bool end_of_query(int c)
|
|||||||
int read_line(char* buf, int size)
|
int read_line(char* buf, int size)
|
||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
|
char quote;
|
||||||
char* p= buf, *buf_end= buf + size - 1;
|
char* p= buf, *buf_end= buf + size - 1;
|
||||||
int no_save= 0;
|
int no_save= 0;
|
||||||
enum {R_NORMAL, R_Q1, R_ESC_Q_Q1, R_ESC_Q_Q2,
|
enum {R_NORMAL, R_Q, R_Q_IN_Q, R_SLASH_IN_Q,
|
||||||
R_ESC_SLASH_Q1, R_ESC_SLASH_Q2,
|
R_COMMENT, R_LINE_START} state= R_LINE_START;
|
||||||
R_Q2, R_COMMENT, R_LINE_START} state= R_LINE_START;
|
|
||||||
DBUG_ENTER("read_line");
|
DBUG_ENTER("read_line");
|
||||||
|
|
||||||
start_lineno= *lineno;
|
start_lineno= *lineno;
|
||||||
@ -2063,10 +2063,11 @@ int read_line(char* buf, int size)
|
|||||||
*p= 0;
|
*p= 0;
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
else if (c == '\'')
|
else if (c == '\'' || c == '"' || c == '`')
|
||||||
state = R_Q1;
|
{
|
||||||
else if (c == '"')
|
quote= c;
|
||||||
state = R_Q2;
|
state= R_Q;
|
||||||
|
}
|
||||||
else if (c == '\n')
|
else if (c == '\n')
|
||||||
{
|
{
|
||||||
state = R_LINE_START;
|
state = R_LINE_START;
|
||||||
@ -2101,55 +2102,36 @@ int read_line(char* buf, int size)
|
|||||||
*p= 0;
|
*p= 0;
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
else if (c == '\'')
|
else if (c == '\'' || c == '"' || c == '`')
|
||||||
state= R_Q1;
|
{
|
||||||
else if (c == '"')
|
quote= c;
|
||||||
state= R_Q2;
|
state= R_Q;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
state= R_NORMAL;
|
state= R_NORMAL;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case R_Q1:
|
case R_Q:
|
||||||
if (c == '\'')
|
if (c == quote)
|
||||||
state= R_ESC_Q_Q1;
|
state= R_Q_IN_Q;
|
||||||
else if (c == '\\')
|
else if (c == '\\')
|
||||||
state= R_ESC_SLASH_Q1;
|
state= R_SLASH_IN_Q;
|
||||||
break;
|
break;
|
||||||
case R_ESC_Q_Q1:
|
case R_Q_IN_Q:
|
||||||
if (end_of_query(c))
|
if (end_of_query(c))
|
||||||
{
|
{
|
||||||
*p= 0;
|
*p= 0;
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
if (c != '\'')
|
if (c != quote)
|
||||||
state= R_NORMAL;
|
state= R_NORMAL;
|
||||||
else
|
else
|
||||||
state= R_Q1;
|
state= R_Q;
|
||||||
break;
|
break;
|
||||||
case R_ESC_SLASH_Q1:
|
case R_SLASH_IN_Q:
|
||||||
state= R_Q1;
|
state= R_Q;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case R_Q2:
|
|
||||||
if (c == '"')
|
|
||||||
state= R_ESC_Q_Q2;
|
|
||||||
else if (c == '\\')
|
|
||||||
state= R_ESC_SLASH_Q2;
|
|
||||||
break;
|
|
||||||
case R_ESC_Q_Q2:
|
|
||||||
if (end_of_query(c))
|
|
||||||
{
|
|
||||||
*p= 0;
|
|
||||||
DBUG_RETURN(0);
|
|
||||||
}
|
|
||||||
if (c != '"')
|
|
||||||
state= R_NORMAL;
|
|
||||||
else
|
|
||||||
state= R_Q2;
|
|
||||||
break;
|
|
||||||
case R_ESC_SLASH_Q2:
|
|
||||||
state= R_Q2;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!no_save)
|
if (!no_save)
|
||||||
|
@ -142,3 +142,9 @@ after_--enable_abort_on_error
|
|||||||
1064
|
1064
|
||||||
select 3 from t1 ;
|
select 3 from t1 ;
|
||||||
ERROR 42S02: Table 'test.t1' doesn't exist
|
ERROR 42S02: Table 'test.t1' doesn't exist
|
||||||
|
select 1 as `a'b`, 2 as `a"b`;
|
||||||
|
a'b a"b
|
||||||
|
1 2
|
||||||
|
select 'aaa\\','aa''a',"aa""a";
|
||||||
|
aaa\ aa'a aa"a
|
||||||
|
aaa\ aa'a aa"a
|
||||||
|
@ -286,3 +286,12 @@ select 3 from t1 ;
|
|||||||
#select 3 from t1 ;
|
#select 3 from t1 ;
|
||||||
#
|
#
|
||||||
#select 3 from t1 ;
|
#select 3 from t1 ;
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #10251: Identifiers containing quotes not handled correctly
|
||||||
|
#
|
||||||
|
select 1 as `a'b`, 2 as `a"b`;
|
||||||
|
|
||||||
|
# Test escaping of quotes
|
||||||
|
select 'aaa\\','aa''a',"aa""a";
|
||||||
|
Reference in New Issue
Block a user