SELECT N'string'
This commit is contained in:
parent
d0ae2c126e
commit
9e5a1ba67e
@ -85,7 +85,8 @@ enum my_lex_states
|
||||
MY_LEX_LONG_COMMENT, MY_LEX_END_LONG_COMMENT, MY_LEX_COLON,
|
||||
MY_LEX_SET_VAR, MY_LEX_USER_END, MY_LEX_HOSTNAME, MY_LEX_SKIP,
|
||||
MY_LEX_USER_VARIABLE_DELIMITER, MY_LEX_SYSTEM_VAR,
|
||||
MY_LEX_IDENT_OR_KEYWORD, MY_LEX_IDENT_OR_HEX, MY_LEX_IDENT_OR_BIN,
|
||||
MY_LEX_IDENT_OR_KEYWORD,
|
||||
MY_LEX_IDENT_OR_HEX, MY_LEX_IDENT_OR_BIN, MY_LEX_IDENT_OR_NCHAR,
|
||||
MY_LEX_STRING_OR_DELIMITER
|
||||
};
|
||||
|
||||
|
@ -110,6 +110,7 @@ static void init_state_maps(CHARSET_INFO *cs)
|
||||
/* Special handling of hex and binary strings */
|
||||
state_map[(uchar)'x']= state_map[(uchar)'X']= (uchar) MY_LEX_IDENT_OR_HEX;
|
||||
state_map[(uchar)'b']= state_map[(uchar)'b']= (uchar) MY_LEX_IDENT_OR_BIN;
|
||||
state_map[(uchar)'n']= state_map[(uchar)'N']= (uchar) MY_LEX_IDENT_OR_NCHAR;
|
||||
|
||||
|
||||
}
|
||||
|
@ -463,6 +463,26 @@ int yylex(void *arg, void *yythd)
|
||||
lex->tok_start=lex->ptr; // Let tok_start point at next item
|
||||
return((int) c);
|
||||
|
||||
case MY_LEX_IDENT_OR_NCHAR:
|
||||
if (yyPeek() != '\'')
|
||||
{ // Found x'hex-number'
|
||||
state= MY_LEX_IDENT;
|
||||
break;
|
||||
}
|
||||
yyGet(); // Skip '
|
||||
while ((c = yyGet()) && (c !='\'')) ;
|
||||
length=(lex->ptr - lex->tok_start); // Length of hexnum+3
|
||||
if (c != '\'')
|
||||
{
|
||||
return(ABORT_SYM); // Illegal hex constant
|
||||
}
|
||||
yyGet(); // get_token makes an unget
|
||||
yylval->lex_str=get_token(lex,length);
|
||||
yylval->lex_str.str+=2; // Skip x'
|
||||
yylval->lex_str.length-=3; // Don't count x' and last '
|
||||
lex->yytoklen-=3;
|
||||
return (NCHAR_STRING);
|
||||
|
||||
case MY_LEX_IDENT_OR_HEX:
|
||||
if (yyPeek() == '\'')
|
||||
{ // Found x'hex-number'
|
||||
|
@ -291,6 +291,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
|
||||
%token NATURAL
|
||||
%token NEW_SYM
|
||||
%token NCHAR_SYM
|
||||
%token NCHAR_STRING
|
||||
%token NOT
|
||||
%token NO_SYM
|
||||
%token NULL_SYM
|
||||
@ -561,6 +562,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
|
||||
IDENT TEXT_STRING REAL_NUM FLOAT_NUM NUM LONG_NUM HEX_NUM LEX_HOSTNAME
|
||||
ULONGLONG_NUM field_ident select_alias ident ident_or_text
|
||||
UNDERSCORE_CHARSET IDENT_sys TEXT_STRING_sys TEXT_STRING_db
|
||||
NCHAR_STRING
|
||||
|
||||
%type <lex_str_ptr>
|
||||
opt_table_alias
|
||||
@ -3862,10 +3864,13 @@ text_literal:
|
||||
thd->charset() : thd->db_charset;
|
||||
$$ = new Item_string($1.str,$1.length,cs);
|
||||
}
|
||||
| NCHAR_STRING
|
||||
{ $$= new Item_string($1.str,$1.length,&my_charset_utf8); }
|
||||
| UNDERSCORE_CHARSET TEXT_STRING
|
||||
{ $$ = new Item_string($2.str,$2.length,Lex->charset,Item::COER_IMPLICIT); }
|
||||
| text_literal TEXT_STRING_db
|
||||
{ ((Item_string*) $1)->append($2.str,$2.length); };
|
||||
{ ((Item_string*) $1)->append($2.str,$2.length); }
|
||||
;
|
||||
|
||||
text_string:
|
||||
TEXT_STRING_db
|
||||
|
Loading…
x
Reference in New Issue
Block a user