Commit 2398f9d6 authored by unknown's avatar unknown
Browse files

Merge bk-internal.mysql.com:/home/bk/mysql-5.0

into mysql.com:/home/my/mysql-5.0

parents bcdc5b74 c4df3abb
Loading
Loading
Loading
Loading
+22 −40
Original line number Diff line number Diff line
@@ -2024,11 +2024,11 @@ my_bool end_of_query(int c)
int read_line(char* buf, int size)
{
  int c;
  char quote;
  char* p= buf, *buf_end= buf + size - 1;
  int no_save= 0;
  enum {R_NORMAL, R_Q1, R_ESC_Q_Q1, R_ESC_Q_Q2,
	R_ESC_SLASH_Q1, R_ESC_SLASH_Q2,
	R_Q2, R_COMMENT, R_LINE_START} state= R_LINE_START;
  enum {R_NORMAL, R_Q, R_Q_IN_Q, R_SLASH_IN_Q,
	R_COMMENT, R_LINE_START} state= R_LINE_START;
  DBUG_ENTER("read_line");

  start_lineno= *lineno;
@@ -2063,10 +2063,11 @@ int read_line(char* buf, int size)
	*p= 0;
	DBUG_RETURN(0);
      }
      else if (c == '\'')
	state = R_Q1;
      else if (c == '"')
	state = R_Q2;
      else if (c == '\'' || c == '"' || c == '`')
      {
        quote= c;
	state= R_Q;
      }
      else if (c == '\n')
      {
	state = R_LINE_START;
@@ -2101,55 +2102,36 @@ int read_line(char* buf, int size)
	*p= 0;
	DBUG_RETURN(0);
      }
      else if (c == '\'')
	state= R_Q1;
      else if (c == '"')
	state= R_Q2;
      else
	state= R_NORMAL;
      break;

    case R_Q1:
      if (c == '\'')
	state= R_ESC_Q_Q1;
      else if (c == '\\')
	state= R_ESC_SLASH_Q1;
      break;
    case R_ESC_Q_Q1:
      if (end_of_query(c))
      else if (c == '\'' || c == '"' || c == '`')
      {
	*p= 0;
	DBUG_RETURN(0);
        quote= c;
	state= R_Q;
      }
      if (c != '\'')
	state= R_NORMAL;
      else
	state= R_Q1;
      break;
    case R_ESC_SLASH_Q1:
      state= R_Q1;
	state= R_NORMAL;
      break;

    case R_Q2:
      if (c == '"')
	state= R_ESC_Q_Q2;
    case R_Q:
      if (c == quote)
	state= R_Q_IN_Q;
      else if (c == '\\')
	state= R_ESC_SLASH_Q2;
	state= R_SLASH_IN_Q;
      break;
    case R_ESC_Q_Q2:
    case R_Q_IN_Q:
      if (end_of_query(c))
      {
	*p= 0;
	DBUG_RETURN(0);
      }
      if (c != '"')
      if (c != quote)
	state= R_NORMAL;
      else
	state= R_Q2;
	state= R_Q;
      break;
    case R_ESC_SLASH_Q2:
      state= R_Q2;
    case R_SLASH_IN_Q:
      state= R_Q;
      break;

    }

    if (!no_save)
+6 −0
Original line number Diff line number Diff line
@@ -142,3 +142,9 @@ after_--enable_abort_on_error
1064
select 3 from t1 ;
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
+9 −0
Original line number Diff line number Diff line
@@ -286,3 +286,12 @@ 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";