MDEV-8328 Evaluation of two "!" operators depends on space in beetween
fix the lexer to backtrack when parsing "<=", "<>", "!=", ">=", "<<", ">>", "<=>".
This commit is contained in:
parent
c3c272cca4
commit
c73b987e73
@ -643,3 +643,23 @@ CREATE TRIGGER trigger1 BEFORE INSERT ON t1 FOR EACH ROW
|
|||||||
SET default_storage_engine = NEW.INNODB;
|
SET default_storage_engine = NEW.INNODB;
|
||||||
ERROR 42S22: Unknown column 'INNODB' in 'NEW'
|
ERROR 42S22: Unknown column 'INNODB' in 'NEW'
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
select 0==0;
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '=0' at line 1
|
||||||
|
select 1=!0, 1 = ! 0;
|
||||||
|
1=!0 1 = ! 0
|
||||||
|
1 1
|
||||||
|
select !!0, ! ! 0;
|
||||||
|
!!0 ! ! 0
|
||||||
|
0 0
|
||||||
|
select 2>!0, 2 > ! 0;
|
||||||
|
2>!0 2 > ! 0
|
||||||
|
1 1
|
||||||
|
select 0<=!0, 0 <= !0;
|
||||||
|
0<=!0 0 <= !0
|
||||||
|
1 1
|
||||||
|
select 1<<!0, 1 << !0;
|
||||||
|
1<<!0 1 << !0
|
||||||
|
2 2
|
||||||
|
select 0<!0, 0 < ! 0;
|
||||||
|
0<!0 0 < ! 0
|
||||||
|
1 1
|
||||||
|
@ -165,7 +165,7 @@ CREATE USER u1 IDENTIFIED BY 'pwd-123';
|
|||||||
GRANT ALL ON sa_db TO u2 IDENTIFIED BY "pwd-321";
|
GRANT ALL ON sa_db TO u2 IDENTIFIED BY "pwd-321";
|
||||||
SET PASSWORD FOR u1 = PASSWORD('pwd 098');
|
SET PASSWORD FOR u1 = PASSWORD('pwd 098');
|
||||||
SET PASSWORD FOR u1=<secret>;
|
SET PASSWORD FOR u1=<secret>;
|
||||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '=<secret>' at line 1
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '<secret>' at line 1
|
||||||
CREATE USER u3 IDENTIFIED BY '';
|
CREATE USER u3 IDENTIFIED BY '';
|
||||||
drop user u1, u2, u3;
|
drop user u1, u2, u3;
|
||||||
select 2;
|
select 2;
|
||||||
|
@ -165,7 +165,7 @@ CREATE USER u1 IDENTIFIED BY 'pwd-123';
|
|||||||
GRANT ALL ON sa_db TO u2 IDENTIFIED BY "pwd-321";
|
GRANT ALL ON sa_db TO u2 IDENTIFIED BY "pwd-321";
|
||||||
SET PASSWORD FOR u1 = PASSWORD('pwd 098');
|
SET PASSWORD FOR u1 = PASSWORD('pwd 098');
|
||||||
SET PASSWORD FOR u1=<secret>;
|
SET PASSWORD FOR u1=<secret>;
|
||||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '=<secret>' at line 1
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '<secret>' at line 1
|
||||||
CREATE USER u3 IDENTIFIED BY '';
|
CREATE USER u3 IDENTIFIED BY '';
|
||||||
drop user u1, u2, u3;
|
drop user u1, u2, u3;
|
||||||
select 2;
|
select 2;
|
||||||
|
@ -758,3 +758,15 @@ CREATE TABLE t1 (s VARCHAR(100));
|
|||||||
CREATE TRIGGER trigger1 BEFORE INSERT ON t1 FOR EACH ROW
|
CREATE TRIGGER trigger1 BEFORE INSERT ON t1 FOR EACH ROW
|
||||||
SET default_storage_engine = NEW.INNODB;
|
SET default_storage_engine = NEW.INNODB;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# MDEV-8328 Evaluation of two "!" operators depends on space in beetween
|
||||||
|
#
|
||||||
|
--error ER_PARSE_ERROR
|
||||||
|
select 0==0;
|
||||||
|
select 1=!0, 1 = ! 0;
|
||||||
|
select !!0, ! ! 0;
|
||||||
|
select 2>!0, 2 > ! 0;
|
||||||
|
select 0<=!0, 0 <= !0;
|
||||||
|
select 1<<!0, 1 << !0;
|
||||||
|
select 0<!0, 0 < ! 0;
|
||||||
|
@ -46,12 +46,9 @@ SYM_GROUP sym_group_rtree= {"RTree keys", "HAVE_RTREE_KEYS"};
|
|||||||
|
|
||||||
static SYMBOL symbols[] = {
|
static SYMBOL symbols[] = {
|
||||||
{ "&&", SYM(AND_AND_SYM)},
|
{ "&&", SYM(AND_AND_SYM)},
|
||||||
{ "<", SYM(LT)},
|
|
||||||
{ "<=", SYM(LE)},
|
{ "<=", SYM(LE)},
|
||||||
{ "<>", SYM(NE)},
|
{ "<>", SYM(NE)},
|
||||||
{ "!=", SYM(NE)},
|
{ "!=", SYM(NE)},
|
||||||
{ "=", SYM(EQ)},
|
|
||||||
{ ">", SYM(GT_SYM)},
|
|
||||||
{ ">=", SYM(GE)},
|
{ ">=", SYM(GE)},
|
||||||
{ "<<", SYM(SHIFT_LEFT)},
|
{ "<<", SYM(SHIFT_LEFT)},
|
||||||
{ ">>", SYM(SHIFT_RIGHT)},
|
{ ">>", SYM(SHIFT_RIGHT)},
|
||||||
|
@ -1452,32 +1452,35 @@ static int lex_one_token(YYSTYPE *yylval, THD *thd)
|
|||||||
return (BIN_NUM);
|
return (BIN_NUM);
|
||||||
|
|
||||||
case MY_LEX_CMP_OP: // Incomplete comparison operator
|
case MY_LEX_CMP_OP: // Incomplete comparison operator
|
||||||
|
lip->next_state= MY_LEX_START; // Allow signed numbers
|
||||||
if (state_map[(uchar) lip->yyPeek()] == MY_LEX_CMP_OP ||
|
if (state_map[(uchar) lip->yyPeek()] == MY_LEX_CMP_OP ||
|
||||||
state_map[(uchar) lip->yyPeek()] == MY_LEX_LONG_CMP_OP)
|
state_map[(uchar) lip->yyPeek()] == MY_LEX_LONG_CMP_OP)
|
||||||
lip->yySkip();
|
|
||||||
if ((tokval = find_keyword(lip, lip->yyLength() + 1, 0)))
|
|
||||||
{
|
{
|
||||||
lip->next_state= MY_LEX_START; // Allow signed numbers
|
lip->yySkip();
|
||||||
return(tokval);
|
if ((tokval= find_keyword(lip, 2, 0)))
|
||||||
|
return(tokval);
|
||||||
|
lip->yyUnget();
|
||||||
}
|
}
|
||||||
state = MY_LEX_CHAR; // Something fishy found
|
return(c);
|
||||||
break;
|
|
||||||
|
|
||||||
case MY_LEX_LONG_CMP_OP: // Incomplete comparison operator
|
case MY_LEX_LONG_CMP_OP: // Incomplete comparison operator
|
||||||
|
lip->next_state= MY_LEX_START;
|
||||||
if (state_map[(uchar) lip->yyPeek()] == MY_LEX_CMP_OP ||
|
if (state_map[(uchar) lip->yyPeek()] == MY_LEX_CMP_OP ||
|
||||||
state_map[(uchar) lip->yyPeek()] == MY_LEX_LONG_CMP_OP)
|
state_map[(uchar) lip->yyPeek()] == MY_LEX_LONG_CMP_OP)
|
||||||
{
|
{
|
||||||
lip->yySkip();
|
lip->yySkip();
|
||||||
if (state_map[(uchar) lip->yyPeek()] == MY_LEX_CMP_OP)
|
if (state_map[(uchar) lip->yyPeek()] == MY_LEX_CMP_OP)
|
||||||
|
{
|
||||||
lip->yySkip();
|
lip->yySkip();
|
||||||
|
if ((tokval= find_keyword(lip, 3, 0)))
|
||||||
|
return(tokval);
|
||||||
|
lip->yyUnget();
|
||||||
|
}
|
||||||
|
if ((tokval= find_keyword(lip, 2, 0)))
|
||||||
|
return(tokval);
|
||||||
|
lip->yyUnget();
|
||||||
}
|
}
|
||||||
if ((tokval = find_keyword(lip, lip->yyLength() + 1, 0)))
|
return(c);
|
||||||
{
|
|
||||||
lip->next_state= MY_LEX_START; // Found long op
|
|
||||||
return(tokval);
|
|
||||||
}
|
|
||||||
state = MY_LEX_CHAR; // Something fishy found
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MY_LEX_BOOL:
|
case MY_LEX_BOOL:
|
||||||
if (c != lip->yyPeek())
|
if (c != lip->yyPeek())
|
||||||
|
@ -970,7 +970,6 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
|
|||||||
%token ENGINES_SYM
|
%token ENGINES_SYM
|
||||||
%token ENGINE_SYM
|
%token ENGINE_SYM
|
||||||
%token ENUM
|
%token ENUM
|
||||||
%token EQ /* OPERATOR */
|
|
||||||
%token EQUAL_SYM /* OPERATOR */
|
%token EQUAL_SYM /* OPERATOR */
|
||||||
%token ERROR_SYM
|
%token ERROR_SYM
|
||||||
%token ERRORS
|
%token ERRORS
|
||||||
@ -1016,7 +1015,6 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
|
|||||||
%token GRANTS
|
%token GRANTS
|
||||||
%token GROUP_SYM /* SQL-2003-R */
|
%token GROUP_SYM /* SQL-2003-R */
|
||||||
%token GROUP_CONCAT_SYM
|
%token GROUP_CONCAT_SYM
|
||||||
%token GT_SYM /* OPERATOR */
|
|
||||||
%token HANDLER_SYM
|
%token HANDLER_SYM
|
||||||
%token HARD_SYM
|
%token HARD_SYM
|
||||||
%token HASH_SYM
|
%token HASH_SYM
|
||||||
@ -1095,7 +1093,6 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
|
|||||||
%token LONG_SYM
|
%token LONG_SYM
|
||||||
%token LOOP_SYM
|
%token LOOP_SYM
|
||||||
%token LOW_PRIORITY
|
%token LOW_PRIORITY
|
||||||
%token LT /* OPERATOR */
|
|
||||||
%token MASTER_CONNECT_RETRY_SYM
|
%token MASTER_CONNECT_RETRY_SYM
|
||||||
%token MASTER_HOST_SYM
|
%token MASTER_HOST_SYM
|
||||||
%token MASTER_LOG_FILE_SYM
|
%token MASTER_LOG_FILE_SYM
|
||||||
@ -1439,7 +1436,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
|
|||||||
%left XOR
|
%left XOR
|
||||||
%left AND_SYM AND_AND_SYM
|
%left AND_SYM AND_AND_SYM
|
||||||
%left BETWEEN_SYM CASE_SYM WHEN_SYM THEN_SYM ELSE
|
%left BETWEEN_SYM CASE_SYM WHEN_SYM THEN_SYM ELSE
|
||||||
%left EQ EQUAL_SYM GE GT_SYM LE LT NE IS LIKE REGEXP IN_SYM
|
%left '=' EQUAL_SYM GE '>' LE '<' NE IS LIKE REGEXP IN_SYM
|
||||||
%left '|'
|
%left '|'
|
||||||
%left '&'
|
%left '&'
|
||||||
%left SHIFT_LEFT SHIFT_RIGHT
|
%left SHIFT_LEFT SHIFT_RIGHT
|
||||||
@ -1922,58 +1919,58 @@ master_defs:
|
|||||||
;
|
;
|
||||||
|
|
||||||
master_def:
|
master_def:
|
||||||
MASTER_HOST_SYM EQ TEXT_STRING_sys
|
MASTER_HOST_SYM '=' TEXT_STRING_sys
|
||||||
{
|
{
|
||||||
Lex->mi.host = $3.str;
|
Lex->mi.host = $3.str;
|
||||||
}
|
}
|
||||||
| MASTER_USER_SYM EQ TEXT_STRING_sys
|
| MASTER_USER_SYM '=' TEXT_STRING_sys
|
||||||
{
|
{
|
||||||
Lex->mi.user = $3.str;
|
Lex->mi.user = $3.str;
|
||||||
}
|
}
|
||||||
| MASTER_PASSWORD_SYM EQ TEXT_STRING_sys
|
| MASTER_PASSWORD_SYM '=' TEXT_STRING_sys
|
||||||
{
|
{
|
||||||
Lex->mi.password = $3.str;
|
Lex->mi.password = $3.str;
|
||||||
}
|
}
|
||||||
| MASTER_PORT_SYM EQ ulong_num
|
| MASTER_PORT_SYM '=' ulong_num
|
||||||
{
|
{
|
||||||
Lex->mi.port = $3;
|
Lex->mi.port = $3;
|
||||||
}
|
}
|
||||||
| MASTER_CONNECT_RETRY_SYM EQ ulong_num
|
| MASTER_CONNECT_RETRY_SYM '=' ulong_num
|
||||||
{
|
{
|
||||||
Lex->mi.connect_retry = $3;
|
Lex->mi.connect_retry = $3;
|
||||||
}
|
}
|
||||||
| MASTER_SSL_SYM EQ ulong_num
|
| MASTER_SSL_SYM '=' ulong_num
|
||||||
{
|
{
|
||||||
Lex->mi.ssl= $3 ?
|
Lex->mi.ssl= $3 ?
|
||||||
LEX_MASTER_INFO::LEX_MI_ENABLE : LEX_MASTER_INFO::LEX_MI_DISABLE;
|
LEX_MASTER_INFO::LEX_MI_ENABLE : LEX_MASTER_INFO::LEX_MI_DISABLE;
|
||||||
}
|
}
|
||||||
| MASTER_SSL_CA_SYM EQ TEXT_STRING_sys
|
| MASTER_SSL_CA_SYM '=' TEXT_STRING_sys
|
||||||
{
|
{
|
||||||
Lex->mi.ssl_ca= $3.str;
|
Lex->mi.ssl_ca= $3.str;
|
||||||
}
|
}
|
||||||
| MASTER_SSL_CAPATH_SYM EQ TEXT_STRING_sys
|
| MASTER_SSL_CAPATH_SYM '=' TEXT_STRING_sys
|
||||||
{
|
{
|
||||||
Lex->mi.ssl_capath= $3.str;
|
Lex->mi.ssl_capath= $3.str;
|
||||||
}
|
}
|
||||||
| MASTER_SSL_CERT_SYM EQ TEXT_STRING_sys
|
| MASTER_SSL_CERT_SYM '=' TEXT_STRING_sys
|
||||||
{
|
{
|
||||||
Lex->mi.ssl_cert= $3.str;
|
Lex->mi.ssl_cert= $3.str;
|
||||||
}
|
}
|
||||||
| MASTER_SSL_CIPHER_SYM EQ TEXT_STRING_sys
|
| MASTER_SSL_CIPHER_SYM '=' TEXT_STRING_sys
|
||||||
{
|
{
|
||||||
Lex->mi.ssl_cipher= $3.str;
|
Lex->mi.ssl_cipher= $3.str;
|
||||||
}
|
}
|
||||||
| MASTER_SSL_KEY_SYM EQ TEXT_STRING_sys
|
| MASTER_SSL_KEY_SYM '=' TEXT_STRING_sys
|
||||||
{
|
{
|
||||||
Lex->mi.ssl_key= $3.str;
|
Lex->mi.ssl_key= $3.str;
|
||||||
}
|
}
|
||||||
| MASTER_SSL_VERIFY_SERVER_CERT_SYM EQ ulong_num
|
| MASTER_SSL_VERIFY_SERVER_CERT_SYM '=' ulong_num
|
||||||
{
|
{
|
||||||
Lex->mi.ssl_verify_server_cert= $3 ?
|
Lex->mi.ssl_verify_server_cert= $3 ?
|
||||||
LEX_MASTER_INFO::LEX_MI_ENABLE : LEX_MASTER_INFO::LEX_MI_DISABLE;
|
LEX_MASTER_INFO::LEX_MI_ENABLE : LEX_MASTER_INFO::LEX_MI_DISABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
| MASTER_HEARTBEAT_PERIOD_SYM EQ NUM_literal
|
| MASTER_HEARTBEAT_PERIOD_SYM '=' NUM_literal
|
||||||
{
|
{
|
||||||
Lex->mi.heartbeat_period= (float) $3->val_real();
|
Lex->mi.heartbeat_period= (float) $3->val_real();
|
||||||
if (Lex->mi.heartbeat_period > SLAVE_MAX_HEARTBEAT_PERIOD ||
|
if (Lex->mi.heartbeat_period > SLAVE_MAX_HEARTBEAT_PERIOD ||
|
||||||
@ -2004,7 +2001,7 @@ master_def:
|
|||||||
}
|
}
|
||||||
Lex->mi.heartbeat_opt= LEX_MASTER_INFO::LEX_MI_ENABLE;
|
Lex->mi.heartbeat_opt= LEX_MASTER_INFO::LEX_MI_ENABLE;
|
||||||
}
|
}
|
||||||
| IGNORE_SERVER_IDS_SYM EQ '(' ignore_server_id_list ')'
|
| IGNORE_SERVER_IDS_SYM '=' '(' ignore_server_id_list ')'
|
||||||
{
|
{
|
||||||
Lex->mi.repl_ignore_server_ids_opt= LEX_MASTER_INFO::LEX_MI_ENABLE;
|
Lex->mi.repl_ignore_server_ids_opt= LEX_MASTER_INFO::LEX_MI_ENABLE;
|
||||||
}
|
}
|
||||||
@ -2025,11 +2022,11 @@ ignore_server_id:
|
|||||||
}
|
}
|
||||||
|
|
||||||
master_file_def:
|
master_file_def:
|
||||||
MASTER_LOG_FILE_SYM EQ TEXT_STRING_sys
|
MASTER_LOG_FILE_SYM '=' TEXT_STRING_sys
|
||||||
{
|
{
|
||||||
Lex->mi.log_file_name = $3.str;
|
Lex->mi.log_file_name = $3.str;
|
||||||
}
|
}
|
||||||
| MASTER_LOG_POS_SYM EQ ulonglong_num
|
| MASTER_LOG_POS_SYM '=' ulonglong_num
|
||||||
{
|
{
|
||||||
Lex->mi.pos = $3;
|
Lex->mi.pos = $3;
|
||||||
/*
|
/*
|
||||||
@ -2045,11 +2042,11 @@ master_file_def:
|
|||||||
*/
|
*/
|
||||||
Lex->mi.pos = max(BIN_LOG_HEADER_SIZE, Lex->mi.pos);
|
Lex->mi.pos = max(BIN_LOG_HEADER_SIZE, Lex->mi.pos);
|
||||||
}
|
}
|
||||||
| RELAY_LOG_FILE_SYM EQ TEXT_STRING_sys
|
| RELAY_LOG_FILE_SYM '=' TEXT_STRING_sys
|
||||||
{
|
{
|
||||||
Lex->mi.relay_log_name = $3.str;
|
Lex->mi.relay_log_name = $3.str;
|
||||||
}
|
}
|
||||||
| RELAY_LOG_POS_SYM EQ ulong_num
|
| RELAY_LOG_POS_SYM '=' ulong_num
|
||||||
{
|
{
|
||||||
Lex->mi.relay_log_pos = $3;
|
Lex->mi.relay_log_pos = $3;
|
||||||
/* Adjust if < BIN_LOG_HEADER_SIZE (same comment as Lex->mi.pos) */
|
/* Adjust if < BIN_LOG_HEADER_SIZE (same comment as Lex->mi.pos) */
|
||||||
@ -3032,7 +3029,7 @@ opt_set_signal_information:
|
|||||||
;
|
;
|
||||||
|
|
||||||
signal_information_item_list:
|
signal_information_item_list:
|
||||||
signal_condition_information_item_name EQ signal_allowed_expr
|
signal_condition_information_item_name '=' signal_allowed_expr
|
||||||
{
|
{
|
||||||
Set_signal_information *info;
|
Set_signal_information *info;
|
||||||
info= &thd->m_parser_state->m_yacc.m_set_signal_info;
|
info= &thd->m_parser_state->m_yacc.m_set_signal_info;
|
||||||
@ -3041,7 +3038,7 @@ signal_information_item_list:
|
|||||||
info->m_item[index]= $3;
|
info->m_item[index]= $3;
|
||||||
}
|
}
|
||||||
| signal_information_item_list ','
|
| signal_information_item_list ','
|
||||||
signal_condition_information_item_name EQ signal_allowed_expr
|
signal_condition_information_item_name '=' signal_allowed_expr
|
||||||
{
|
{
|
||||||
Set_signal_information *info;
|
Set_signal_information *info;
|
||||||
info= &thd->m_parser_state->m_yacc.m_set_signal_info;
|
info= &thd->m_parser_state->m_yacc.m_set_signal_info;
|
||||||
@ -4439,7 +4436,7 @@ opt_linear:
|
|||||||
opt_key_algo:
|
opt_key_algo:
|
||||||
/* empty */
|
/* empty */
|
||||||
{ Lex->part_info->key_algorithm= partition_info::KEY_ALGORITHM_NONE;}
|
{ Lex->part_info->key_algorithm= partition_info::KEY_ALGORITHM_NONE;}
|
||||||
| ALGORITHM_SYM EQ real_ulong_num
|
| ALGORITHM_SYM '=' real_ulong_num
|
||||||
{
|
{
|
||||||
switch ($3) {
|
switch ($3) {
|
||||||
case 1:
|
case 1:
|
||||||
@ -7076,7 +7073,7 @@ opt_place:
|
|||||||
opt_to:
|
opt_to:
|
||||||
/* empty */ {}
|
/* empty */ {}
|
||||||
| TO_SYM {}
|
| TO_SYM {}
|
||||||
| EQ {}
|
| '=' {}
|
||||||
| AS {}
|
| AS {}
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -7943,13 +7940,13 @@ bool_pri:
|
|||||||
if ($$ == NULL)
|
if ($$ == NULL)
|
||||||
MYSQL_YYABORT;
|
MYSQL_YYABORT;
|
||||||
}
|
}
|
||||||
| bool_pri comp_op predicate %prec EQ
|
| bool_pri comp_op predicate %prec '='
|
||||||
{
|
{
|
||||||
$$= (*$2)(0)->create($1,$3);
|
$$= (*$2)(0)->create($1,$3);
|
||||||
if ($$ == NULL)
|
if ($$ == NULL)
|
||||||
MYSQL_YYABORT;
|
MYSQL_YYABORT;
|
||||||
}
|
}
|
||||||
| bool_pri comp_op all_or_any '(' subselect ')' %prec EQ
|
| bool_pri comp_op all_or_any '(' subselect ')' %prec '='
|
||||||
{
|
{
|
||||||
$$= all_any_subquery_creator($1, $2, $3, $5);
|
$$= all_any_subquery_creator($1, $2, $3, $5);
|
||||||
if ($$ == NULL)
|
if ($$ == NULL)
|
||||||
@ -8172,11 +8169,11 @@ not2:
|
|||||||
;
|
;
|
||||||
|
|
||||||
comp_op:
|
comp_op:
|
||||||
EQ { $$ = &comp_eq_creator; }
|
'=' { $$ = &comp_eq_creator; }
|
||||||
| GE { $$ = &comp_ge_creator; }
|
| GE { $$ = &comp_ge_creator; }
|
||||||
| GT_SYM { $$ = &comp_gt_creator; }
|
| '>' { $$ = &comp_gt_creator; }
|
||||||
| LE { $$ = &comp_le_creator; }
|
| LE { $$ = &comp_le_creator; }
|
||||||
| LT { $$ = &comp_lt_creator; }
|
| '<' { $$ = &comp_lt_creator; }
|
||||||
| NE { $$ = &comp_ne_creator; }
|
| NE { $$ = &comp_ne_creator; }
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -10197,7 +10194,7 @@ date_time_type:
|
|||||||
table_alias:
|
table_alias:
|
||||||
/* empty */
|
/* empty */
|
||||||
| AS
|
| AS
|
||||||
| EQ
|
| '='
|
||||||
;
|
;
|
||||||
|
|
||||||
opt_table_alias:
|
opt_table_alias:
|
||||||
@ -11100,7 +11097,7 @@ ident_eq_value:
|
|||||||
;
|
;
|
||||||
|
|
||||||
equal:
|
equal:
|
||||||
EQ {}
|
'=' {}
|
||||||
| SET_VAR {}
|
| SET_VAR {}
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -13968,11 +13965,11 @@ handler_rkey_function:
|
|||||||
;
|
;
|
||||||
|
|
||||||
handler_rkey_mode:
|
handler_rkey_mode:
|
||||||
EQ { $$=HA_READ_KEY_EXACT; }
|
'=' { $$=HA_READ_KEY_EXACT; }
|
||||||
| GE { $$=HA_READ_KEY_OR_NEXT; }
|
| GE { $$=HA_READ_KEY_OR_NEXT; }
|
||||||
| LE { $$=HA_READ_KEY_OR_PREV; }
|
| LE { $$=HA_READ_KEY_OR_PREV; }
|
||||||
| GT_SYM { $$=HA_READ_AFTER_KEY; }
|
| '>' { $$=HA_READ_AFTER_KEY; }
|
||||||
| LT { $$=HA_READ_BEFORE_KEY; }
|
| '<' { $$=HA_READ_BEFORE_KEY; }
|
||||||
;
|
;
|
||||||
|
|
||||||
/* GRANT / REVOKE */
|
/* GRANT / REVOKE */
|
||||||
@ -14744,7 +14741,7 @@ no_definer:
|
|||||||
;
|
;
|
||||||
|
|
||||||
definer:
|
definer:
|
||||||
DEFINER_SYM EQ user
|
DEFINER_SYM '=' user
|
||||||
{
|
{
|
||||||
thd->lex->definer= get_current_user(thd, $3);
|
thd->lex->definer= get_current_user(thd, $3);
|
||||||
}
|
}
|
||||||
@ -14771,11 +14768,11 @@ view_replace:
|
|||||||
;
|
;
|
||||||
|
|
||||||
view_algorithm:
|
view_algorithm:
|
||||||
ALGORITHM_SYM EQ UNDEFINED_SYM
|
ALGORITHM_SYM '=' UNDEFINED_SYM
|
||||||
{ Lex->create_view_algorithm= DTYPE_ALGORITHM_UNDEFINED; }
|
{ Lex->create_view_algorithm= DTYPE_ALGORITHM_UNDEFINED; }
|
||||||
| ALGORITHM_SYM EQ MERGE_SYM
|
| ALGORITHM_SYM '=' MERGE_SYM
|
||||||
{ Lex->create_view_algorithm= VIEW_ALGORITHM_MERGE; }
|
{ Lex->create_view_algorithm= VIEW_ALGORITHM_MERGE; }
|
||||||
| ALGORITHM_SYM EQ TEMPTABLE_SYM
|
| ALGORITHM_SYM '=' TEMPTABLE_SYM
|
||||||
{ Lex->create_view_algorithm= VIEW_ALGORITHM_TMPTABLE; }
|
{ Lex->create_view_algorithm= VIEW_ALGORITHM_TMPTABLE; }
|
||||||
;
|
;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user