summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
Diffstat (limited to 'sql')
-rw-r--r--sql/sql_class.cc33
-rw-r--r--sql/sql_class.h34
-rw-r--r--sql/sql_lex.cc706
-rw-r--r--sql/sql_lex.h211
-rw-r--r--sql/sql_parse.cc26
-rw-r--r--sql/sql_parse.h1
-rw-r--r--sql/sql_yacc.yy2017
-rw-r--r--sql/sql_yacc_ora.yy2028
-rw-r--r--sql/structs.h6
9 files changed, 2672 insertions, 2390 deletions
diff --git a/sql/sql_class.cc b/sql/sql_class.cc
index 09a2d205d85..5d129abd8b0 100644
--- a/sql/sql_class.cc
+++ b/sql/sql_class.cc
@@ -2498,6 +2498,39 @@ bool THD::convert_string(String *s, CHARSET_INFO *from_cs, CHARSET_INFO *to_cs)
}
+bool THD::check_string_for_wellformedness(const char *str,
+ size_t length,
+ CHARSET_INFO *cs) const
+{
+ DBUG_ASSERT(charset_is_system_charset);
+ size_t wlen= Well_formed_prefix(cs, str, length).length();
+ if (wlen < length)
+ {
+ ErrConvString err(str, length, &my_charset_bin);
+ my_error(ER_INVALID_CHARACTER_STRING, MYF(0), cs->csname, err.ptr());
+ return true;
+ }
+ return false;
+}
+
+
+bool THD::to_ident_sys_alloc(Lex_ident_sys_st *to, const Lex_ident_cli_st *ident)
+{
+ if (ident->is_quoted())
+ {
+ LEX_CSTRING unquoted;
+ if (quote_unescape(&unquoted, ident, ident->quote()))
+ return true;
+ return charset_is_system_charset ?
+ to->copy_sys(this, &unquoted) :
+ to->convert(this, &unquoted, charset());
+ }
+ return charset_is_system_charset ?
+ to->copy_sys(this, ident) :
+ to->copy_or_convert(this, ident, charset());
+}
+
+
Item_basic_constant *
THD::make_string_literal(const char *str, size_t length, uint repertoire)
{
diff --git a/sql/sql_class.h b/sql/sql_class.h
index 75e3f99ea98..2d5ff8c4590 100644
--- a/sql/sql_class.h
+++ b/sql/sql_class.h
@@ -3658,6 +3658,26 @@ public:
lex_str->length= length;
return lex_str;
}
+ // Remove double quotes: aaa""bbb -> aaa"bbb
+ bool quote_unescape(LEX_CSTRING *dst, const LEX_CSTRING *src, char quote)
+ {
+ const char *tmp= src->str;
+ const char *tmpend= src->str + src->length;
+ char *to;
+ if (!(dst->str= to= (char *) alloc(src->length + 1)))
+ {
+ dst->length= 0; // Safety
+ return true;
+ }
+ for ( ; tmp < tmpend; )
+ {
+ if ((*to++= *tmp++) == quote)
+ tmp++; // Skip double quotes
+ }
+ *to= 0; // End null for safety
+ dst->length= to - dst->str;
+ return false;
+ }
LEX_CSTRING *make_clex_string(const char* str, size_t length)
{
@@ -3701,7 +3721,6 @@ public:
bool convert_with_error(CHARSET_INFO *dstcs, LEX_STRING *dst,
CHARSET_INFO *srccs,
const char *src, size_t src_length);
-
/*
If either "dstcs" or "srccs" is &my_charset_bin,
then performs native copying using cs->cset->copy_fix().
@@ -3721,6 +3740,17 @@ public:
bool convert_string(String *s, CHARSET_INFO *from_cs, CHARSET_INFO *to_cs);
/*
+ Check if the string is wellformed, raise an error if not wellformed.
+ @param str - The string to check.
+ @param length - the string length.
+ */
+ bool check_string_for_wellformedness(const char *str,
+ size_t length,
+ CHARSET_INFO *cs) const;
+
+ bool to_ident_sys_alloc(Lex_ident_sys_st *to, const Lex_ident_cli_st *from);
+
+ /*
Create a string literal with optional client->connection conversion.
@param str - the string in the client character set
@param length - length of the string
@@ -3827,7 +3857,7 @@ public:
void set_stmt_da(Diagnostics_area *da)
{ m_stmt_da= da; }
- inline CHARSET_INFO *charset() { return variables.character_set_client; }
+ inline CHARSET_INFO *charset() const { return variables.character_set_client; }
void update_charset();
void update_charset(CHARSET_INFO *character_set_client,
CHARSET_INFO *collation_connection)
diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc
index 35e84effd09..dd15f69e619 100644
--- a/sql/sql_lex.cc
+++ b/sql/sql_lex.cc
@@ -849,9 +849,9 @@ static int find_keyword(Lex_input_stream *lip, uint len, bool function)
SYMBOL *symbol= get_hash_symbol(tok, len, function);
if (symbol)
{
- lip->yylval->symbol.symbol=symbol;
- lip->yylval->symbol.str= (char*) tok;
- lip->yylval->symbol.length=len;
+ lip->yylval->kwd.set_keyword(tok, len);
+ DBUG_ASSERT(tok >= lip->get_buf());
+ DBUG_ASSERT(tok < lip->get_end_of_query());
if ((symbol->tok == NOT_SYM) &&
(lip->m_thd->variables.sql_mode & MODE_HIGH_NOT_PRECEDENCE))
@@ -968,41 +968,6 @@ static LEX_CSTRING get_token(Lex_input_stream *lip, uint skip, uint length)
return tmp;
}
-/*
- todo:
- There are no dangerous charsets in mysql for function
- get_quoted_token yet. But it should be fixed in the
- future to operate multichar strings (like ucs2)
-*/
-
-static LEX_CSTRING get_quoted_token(Lex_input_stream *lip,
- uint skip,
- uint length, char quote)
-{
- LEX_CSTRING tmp;
- const char *from, *end;
- char *to;
- lip->yyUnget(); // ptr points now after last token char
- tmp.length= length;
- tmp.str= to= (char*) lip->m_thd->alloc(tmp.length+1);
- from= lip->get_tok_start() + skip;
- end= to+length;
-
- lip->m_cpp_text_start= lip->get_cpp_tok_start() + skip;
- lip->m_cpp_text_end= lip->m_cpp_text_start + length;
-
- for ( ; to != end; )
- {
- if ((*to++= *from++) == quote)
- {
- from++; // Skip double quotes
- lip->m_cpp_text_start++;
- }
- }
- *to= 0; // End null for safety
- return tmp;
-}
-
static size_t
my_unescape(CHARSET_INFO *cs, char *to, const char *str, const char *end,
@@ -1407,7 +1372,7 @@ static int lex_one_token(YYSTYPE *yylval, THD *thd)
{
uchar UNINIT_VAR(c);
bool comment_closed;
- int tokval, result_state;
+ int tokval;
uint length;
enum my_lex_states state;
Lex_input_stream *lip= & thd->m_parser_state->m_lip;
@@ -1529,95 +1494,15 @@ static int lex_one_token(YYSTYPE *yylval, THD *thd)
}
/* fall through */
case MY_LEX_IDENT:
- const char *start;
-#if defined(USE_MB) && defined(USE_MB_IDENT)
- if (use_mb(cs))
- {
- result_state= IDENT_QUOTED;
- int char_length= my_charlen(cs, lip->get_ptr() - 1,
- lip->get_end_of_query());
- if (char_length <= 0)
- {
- state= MY_LEX_CHAR;
- continue;
- }
- lip->skip_binary(char_length - 1);
-
- while (ident_map[c=lip->yyGet()])
- {
- char_length= my_charlen(cs, lip->get_ptr() - 1,
- lip->get_end_of_query());
- if (char_length <= 0)
- break;
- lip->skip_binary(char_length - 1);
- }
- }
- else
-#endif
- {
- for (result_state= c;
- ident_map[(uchar) (c= lip->yyGet())];
- result_state|= c)
- ;
- /* If there were non-ASCII characters, mark that we must convert */
- result_state= result_state & 0x80 ? IDENT_QUOTED : IDENT;
- }
- length= lip->yyLength();
- start= lip->get_ptr();
- if (lip->ignore_space)
- {
- /*
- If we find a space then this can't be an identifier. We notice this
- below by checking start != lex->ptr.
- */
- for (; state_map[(uchar) c] == MY_LEX_SKIP ; c= lip->yyGet())
- {
- if (c == '\n')
- lip->yylineno++;
- }
- }
- if (start == lip->get_ptr() && c == '.' &&
- ident_map[(uchar) lip->yyPeek()])
- lip->next_state=MY_LEX_IDENT_SEP;
- else
- { // '(' must follow directly if function
- lip->yyUnget();
- if ((tokval = find_keyword(lip, length, c == '(')))
- {
- lip->next_state= MY_LEX_START; // Allow signed numbers
- return(tokval); // Was keyword
- }
- lip->yySkip(); // next state does a unget
- }
- yylval->lex_str=get_token(lip, 0, length);
-
- /*
- Note: "SELECT _bla AS 'alias'"
- _bla should be considered as a IDENT if charset haven't been found.
- So we don't use MYF(MY_WME) with get_charset_by_csname to avoid
- producing an error.
- */
-
- if (yylval->lex_str.str[0] == '_')
- {
- CHARSET_INFO *cs= get_charset_by_csname(yylval->lex_str.str + 1,
- MY_CS_PRIMARY, MYF(0));
- if (cs)
- {
- yylval->charset= cs;
- lip->m_underscore_cs= cs;
-
- lip->body_utf8_append(lip->m_cpp_text_start,
- lip->get_cpp_tok_start() + length);
- return(UNDERSCORE_CHARSET);
- }
- }
-
- lip->body_utf8_append(lip->m_cpp_text_start);
-
- lip->body_utf8_append_ident(thd, &yylval->lex_str, lip->m_cpp_text_end);
-
- return(result_state); // IDENT or IDENT_QUOTED
+ {
+ tokval= lip->scan_ident_middle(thd, &yylval->ident_cli,
+ &yylval->charset, &state);
+ if (!tokval)
+ continue;
+ if (tokval == UNDERSCORE_CHARSET)
+ lip->m_underscore_cs= yylval->charset;
+ return tokval;
+ }
case MY_LEX_IDENT_SEP: // Found ident and now '.'
yylval->lex_str.str= (char*) lip->get_ptr();
@@ -1686,81 +1571,11 @@ static int lex_one_token(YYSTYPE *yylval, THD *thd)
}
// fall through
case MY_LEX_IDENT_START: // We come here after '.'
- result_state= IDENT;
-#if defined(USE_MB) && defined(USE_MB_IDENT)
- if (use_mb(cs))
- {
- result_state= IDENT_QUOTED;
- while (ident_map[c=lip->yyGet()])
- {
- int char_length= my_charlen(cs, lip->get_ptr() - 1,
- lip->get_end_of_query());
- if (char_length <= 0)
- break;
- lip->skip_binary(char_length - 1);
- }
- }
- else
-#endif
- {
- for (result_state=0; ident_map[c= lip->yyGet()]; result_state|= c)
- ;
- /* If there were non-ASCII characters, mark that we must convert */
- result_state= result_state & 0x80 ? IDENT_QUOTED : IDENT;
- }
- if (c == '.' && ident_map[(uchar) lip->yyPeek()])
- lip->next_state=MY_LEX_IDENT_SEP;// Next is '.'
-
- yylval->lex_str= get_token(lip, 0, lip->yyLength());
-
- lip->body_utf8_append(lip->m_cpp_text_start);
-
- lip->body_utf8_append_ident(thd, &yylval->lex_str, lip->m_cpp_text_end);
-
- return(result_state);
+ return lip->scan_ident_start(thd, &yylval->ident_cli);
case MY_LEX_USER_VARIABLE_DELIMITER: // Found quote char
- {
- uint double_quotes= 0;
- char quote_char= c; // Used char
- while ((c=lip->yyGet()))
- {
- int var_length= my_charlen(cs, lip->get_ptr() - 1,
- lip->get_end_of_query());
- if (var_length == 1)
- {
- if (c == quote_char)
- {
- if (lip->yyPeek() != quote_char)
- break;
- c=lip->yyGet();
- double_quotes++;
- continue;
- }
- }
-#ifdef USE_MB
- else if (var_length > 1)
- {
- lip->skip_binary(var_length - 1);
- }
-#endif
- }
- if (double_quotes)
- yylval->lex_str=get_quoted_token(lip, 1,
- lip->yyLength() - double_quotes -1,
- quote_char);
- else
- yylval->lex_str=get_token(lip, 1, lip->yyLength() -1);
- if (c == quote_char)
- lip->yySkip(); // Skip end `
- lip->next_state= MY_LEX_START;
-
- lip->body_utf8_append(lip->m_cpp_text_start);
-
- lip->body_utf8_append_ident(thd, &yylval->lex_str, lip->m_cpp_text_end);
+ return lip->scan_ident_delimited(thd, &yylval->ident_cli);
- return(IDENT_QUOTED);
- }
case MY_LEX_INT_OR_REAL: // Complete int or incomplete real
if (c != '.' || lip->yyPeek() == '.')
{
@@ -2120,31 +1935,255 @@ static int lex_one_token(YYSTYPE *yylval, THD *thd)
We should now be able to handle:
[(global | local | session) .]variable_name
*/
+ return lip->scan_ident_sysvar(thd, &yylval->ident_cli);
+ }
+ }
+}
- for (result_state= 0; ident_map[c= lip->yyGet()]; result_state|= c)
- ;
- /* If there were non-ASCII characters, mark that we must convert */
- result_state= result_state & 0x80 ? IDENT_QUOTED : IDENT;
-
- if (c == '.')
- lip->next_state=MY_LEX_IDENT_SEP;
- length= lip->yyLength();
- if (length == 0)
- return(ABORT_SYM); // Names must be nonempty.
- if ((tokval= find_keyword(lip, length,0)))
- {
- lip->yyUnget(); // Put back 'c'
- return(tokval); // Was keyword
- }
- yylval->lex_str=get_token(lip, 0, length);
- lip->body_utf8_append(lip->m_cpp_text_start);
+bool Lex_input_stream::get_7bit_or_8bit_ident(THD *thd, uchar *last_char)
+{
+ uchar c;
+ CHARSET_INFO *const cs= thd->charset();
+ const uchar *const ident_map= cs->ident_map;
+ bool is_8bit= false;
+ for ( ; ident_map[c= yyGet()]; )
+ {
+ if (c & 0x80)
+ is_8bit= true; // will convert
+ }
+ *last_char= c;
+ return is_8bit;
+}
+
+
+int Lex_input_stream::scan_ident_sysvar(THD *thd, Lex_ident_cli_st *str)
+{
+ uchar last_char;
+ uint length;
+ int tokval;
+ bool is_8bit;
+ DBUG_ASSERT(m_tok_start == m_ptr);
+
+ is_8bit= get_7bit_or_8bit_ident(thd, &last_char);
+
+ if (last_char == '.')
+ next_state= MY_LEX_IDENT_SEP;
+ if (!(length= yyLength()))
+ return ABORT_SYM; // Names must be nonempty.
+ if ((tokval= find_keyword(this, length, 0)))
+ {
+ yyUnget(); // Put back 'c'
+ return tokval; // Was keyword
+ }
+
+ yyUnget(); // ptr points now after last token char
+ str->set_ident(get_tok_start(), length, is_8bit);
+
+ m_cpp_text_start= get_cpp_tok_start();
+ m_cpp_text_end= m_cpp_text_start + length;
+ body_utf8_append(m_cpp_text_start);
+ body_utf8_append_ident(thd, str, m_cpp_text_end);
+
+ return is_8bit ? IDENT_QUOTED : IDENT;
+}
- lip->body_utf8_append_ident(thd, &yylval->lex_str, lip->m_cpp_text_end);
- return(result_state);
+/*
+ We can come here if different parsing stages:
+ - In an identifier chain:
+ SELECT t1.cccc FROM t1;
+ (when the "cccc" part starts)
+ In this case both m_tok_start and m_ptr point to "cccc".
+ - When a sequence of digits has changed to something else,
+ therefore the token becomes an identifier rather than a number:
+ SELECT 12345_6 FROM t1;
+ In this case m_tok_start points to the entire "12345_678",
+ while m_ptr points to "678".
+*/
+int Lex_input_stream::scan_ident_start(THD *thd, Lex_ident_cli_st *str)
+{
+ uchar c;
+ bool is_8bit;
+ CHARSET_INFO *const cs= thd->charset();
+ const uchar *const ident_map= cs->ident_map;
+ DBUG_ASSERT(m_tok_start <= m_ptr);
+
+ if (use_mb(cs))
+ {
+ is_8bit= true;
+ while (ident_map[c= yyGet()])
+ {
+ int char_length= my_charlen(cs, get_ptr() - 1, get_end_of_query());
+ if (char_length <= 0)
+ break;
+ skip_binary(char_length - 1);
}
}
+ else
+ {
+ is_8bit= get_7bit_or_8bit_ident(thd, &c);
+ }
+ if (c == '.' && ident_map[(uchar) yyPeek()])
+ next_state= MY_LEX_IDENT_SEP;// Next is '.'
+
+ uint length= yyLength();
+ yyUnget(); // ptr points now after last token char
+ str->set_ident(get_tok_start(), length, is_8bit);
+ m_cpp_text_start= get_cpp_tok_start();
+ m_cpp_text_end= m_cpp_text_start + length;
+ body_utf8_append(m_cpp_text_start);
+ body_utf8_append_ident(thd, str, m_cpp_text_end);
+ return is_8bit ? IDENT_QUOTED : IDENT;
+}
+
+
+int Lex_input_stream::scan_ident_middle(THD *thd, Lex_ident_cli_st *str,
+ CHARSET_INFO **introducer,
+ my_lex_states *st)
+{
+ CHARSET_INFO *const cs= thd->charset();
+ const uchar *const ident_map= cs->ident_map;
+ const uchar *const state_map= cs->state_map;
+ const char *start;
+ uint length;
+ uchar c;
+ bool is_8bit;
+ bool resolve_introducer= true;
+ DBUG_ASSERT(m_ptr == m_tok_start + 1); // m_ptr points to the second byte
+
+ if (use_mb(cs))
+ {
+ is_8bit= true;
+ int char_length= my_charlen(cs, get_ptr() - 1, get_end_of_query());
+ if (char_length <= 0)
+ {
+ *st= MY_LEX_CHAR;
+ return 0;
+ }
+ skip_binary(char_length - 1);
+
+ while (ident_map[c= yyGet()])
+ {
+ char_length= my_charlen(cs, get_ptr() - 1, get_end_of_query());
+ if (char_length <= 0)
+ break;
+ if (char_length > 1 || (c & 0x80))
+ resolve_introducer= false;
+ skip_binary(char_length - 1);
+ }
+ }
+ else
+ {
+ is_8bit= (m_tok_start[0] & 0x80) | get_7bit_or_8bit_ident(thd, &c);
+ resolve_introducer= !is_8bit;
+ }
+ length= yyLength();
+ start= get_ptr();
+ if (ignore_space)
+ {
+ /*
+ If we find a space then this can't be an identifier. We notice this
+ below by checking start != lex->ptr.
+ */
+ for (; state_map[(uchar) c] == MY_LEX_SKIP ; c= yyGet())
+ {
+ if (c == '\n')
+ yylineno++;
+ }
+ }
+ if (start == get_ptr() && c == '.' && ident_map[(uchar) yyPeek()])
+ next_state= MY_LEX_IDENT_SEP;
+ else
+ { // '(' must follow directly if function
+ int tokval;
+ yyUnget();
+ if ((tokval= find_keyword(this, length, c == '(')))
+ {
+ next_state= MY_LEX_START; // Allow signed numbers
+ return(tokval); // Was keyword
+ }
+ yySkip(); // next state does a unget
+ }
+
+ /*
+ Note: "SELECT _bla AS 'alias'"
+ _bla should be considered as a IDENT if charset haven't been found.
+ So we don't use MYF(MY_WME) with get_charset_by_csname to avoid
+ producing an error.
+ */
+ DBUG_ASSERT(length > 0);
+ if (resolve_introducer && get_tok_start()[0] == '_')
+ {
+
+ yyUnget(); // ptr points now after last token char
+ str->set_ident(get_tok_start(), length, false);
+
+ m_cpp_text_start= get_cpp_tok_start();
+ m_cpp_text_end= m_cpp_text_start + length;
+ body_utf8_append(m_cpp_text_start, get_cpp_tok_start() + length);
+ ErrConvString csname(str->str + 1, str->length - 1, &my_charset_bin);
+ CHARSET_INFO *cs= get_charset_by_csname(csname.ptr(),
+ MY_CS_PRIMARY, MYF(0));
+ if (cs)
+ {
+ *introducer= cs;
+ return UNDERSCORE_CHARSET;
+ }
+ return IDENT;
+ }
+
+ yyUnget(); // ptr points now after last token char
+ str->set_ident(get_tok_start(), length, is_8bit);
+ m_cpp_text_start= get_cpp_tok_start();
+ m_cpp_text_end= m_cpp_text_start + length;
+ body_utf8_append(m_cpp_text_start);
+ body_utf8_append_ident(thd, str, m_cpp_text_end);
+ return is_8bit ? IDENT_QUOTED : IDENT;
+}
+
+
+int Lex_input_stream::scan_ident_delimited(THD *thd,
+ Lex_ident_cli_st *str)
+{
+ CHARSET_INFO *const cs= thd->charset();
+ uint double_quotes= 0;
+ uchar c, quote_char= m_tok_start[0];
+ DBUG_ASSERT(m_ptr == m_tok_start + 1);
+
+ while ((c= yyGet()))
+ {
+ int var_length= my_charlen(cs, get_ptr() - 1, get_end_of_query());
+ if (var_length == 1)
+ {
+ if (c == quote_char)
+ {
+ if (yyPeek() != quote_char)
+ break;
+ c= yyGet();
+ double_quotes++;
+ continue;
+ }
+ }
+ else if (var_length > 1)
+ {
+ skip_binary(var_length - 1);
+ }
+ }
+
+ str->set_ident_quoted(get_tok_start() + 1, yyLength() - 1, true, quote_char);
+ yyUnget(); // ptr points now after last token char
+
+ m_cpp_text_start= get_cpp_tok_start() + 1;
+ m_cpp_text_end= m_cpp_text_start + str->length;
+
+ if (c == quote_char)
+ yySkip(); // Skip end `
+ next_state= MY_LEX_START;
+ body_utf8_append(m_cpp_text_start);
+ // QQQ: shouldn't it add unescaped version ????
+ body_utf8_append_ident(thd, str, m_cpp_text_end);
+ return IDENT_QUOTED;
}
@@ -5249,12 +5288,26 @@ LEX::find_variable(const LEX_CSTRING *name,
}
+static bool is_new(const char *str)
+{
+ return (str[0] == 'n' || str[0] == 'N') &&
+ (str[1] == 'e' || str[1] == 'E') &&
+ (str[2] == 'w' || str[2] == 'W');
+}
+
+static bool is_old(const char *str)
+{
+ return (str[0] == 'o' || str[0] == 'O') &&
+ (str[1] == 'l' || str[1] == 'L') &&
+ (str[2] == 'd' || str[2] == 'D');
+}
+
+
bool LEX::is_trigger_new_or_old_reference(const LEX_CSTRING *name) const
{
+ // "name" is not necessarily NULL-terminated!
return sphead && sphead->m_handler->type() == TYPE_ENUM_TRIGGER &&
- name->length == 3 &&
- (!my_strcasecmp(system_charset_info, name->str, "NEW") ||
- !my_strcasecmp(system_charset_info, name->str, "OLD"));
+ name->length == 3 && (is_new(name->str) || is_old(name->str));
}
@@ -6546,6 +6599,20 @@ Item *LEX::create_and_link_Item_trigger_field(THD *thd,
}
+Item *LEX::make_item_colon_ident_ident(THD *thd,
+ const Lex_ident_sys_st *a,
+ const Lex_ident_sys_st *b)
+{
+ if (!is_trigger_new_or_old_reference(a))
+ {
+ thd->parse_error();
+ return NULL;
+ }
+ bool new_row= (a->str[0] == 'N' || a->str[0] == 'n');
+ return create_and_link_Item_trigger_field(thd, b, new_row);
+}
+
+
Item_param *LEX::add_placeholder(THD *thd, const LEX_CSTRING *name,
const char *start, const char *end)
{
@@ -6591,8 +6658,8 @@ bool LEX::add_resignal_statement(THD *thd, const sp_condition_value *v)
Item *LEX::create_item_ident_nospvar(THD *thd,
- const LEX_CSTRING *a,
- const LEX_CSTRING *b)
+ const Lex_ident_sys_st *a,
+ const Lex_ident_sys_st *b)
{
DBUG_ASSERT(this == thd->lex);
/*
@@ -6623,8 +6690,8 @@ Item *LEX::create_item_ident_nospvar(THD *thd,
Item_splocal *LEX::create_item_spvar_row_field(THD *thd,
const Sp_rcontext_handler *rh,
- const LEX_CSTRING *a,
- const LEX_CSTRING *b,
+ const Lex_ident_sys *a,
+ const Lex_ident_sys *b,
sp_variable *spv,
const char *start,
const char *end)
@@ -6765,38 +6832,45 @@ Item *LEX::create_item_func_setval(THD *thd, Table_ident *table_ident,
Item *LEX::create_item_ident(THD *thd,
- const LEX_CSTRING *a,
- const LEX_CSTRING *b,
- const char *start, const char *end)
+ const Lex_ident_cli_st *ca,
+ const Lex_ident_cli_st *cb)
{
+ const char *start= ca->pos();
+ const char *end= cb->end();
const Sp_rcontext_handler *rh;
sp_variable *spv;
- if ((spv= find_variable(a, &rh)) &&
+ DBUG_ASSERT(thd->m_parser_state->m_lip.get_buf() <= start);
+ DBUG_ASSERT(start <= end);
+ DBUG_ASSERT(end <= thd->m_parser_state->m_lip.get_end_of_query());
+ Lex_ident_sys a(thd, ca), b(thd, cb);
+ if (a.is_null() || b.is_null())
+ return NULL; // OEM
+ if ((spv= find_variable(&a, &rh)) &&
(spv->field_def.is_row() ||
spv->field_def.is_table_rowtype_ref() ||
spv->field_def.is_cursor_rowtype_ref()))
- return create_item_spvar_row_field(thd, rh, a, b, spv, start, end);
+ return create_item_spvar_row_field(thd, rh, &a, &b, spv, start, end);
- if ((thd->variables.sql_mode & MODE_ORACLE) && b->length == 7)
+ if ((thd->variables.sql_mode & MODE_ORACLE) && b.length == 7)
{
if (!my_strnncoll(system_charset_info,
- (const uchar *) b->str, 7,
+ (const uchar *) b.str, 7,
(const uchar *) "NEXTVAL", 7))
- return create_item_func_nextval(thd, &null_clex_str, a);
+ return create_item_func_nextval(thd, &null_clex_str, &a);
else if (!my_strnncoll(system_charset_info,
- (const uchar *) b->str, 7,
+ (const uchar *) b.str, 7,
(const uchar *) "CURRVAL", 7))
- return create_item_func_lastval(thd, &null_clex_str, a);
+ return create_item_func_lastval(thd, &null_clex_str, &a);
}
- return create_item_ident_nospvar(thd, a, b);
+ return create_item_ident_nospvar(thd, &a, &b);
}
Item *LEX::create_item_ident(THD *thd,
- const LEX_CSTRING *a,
- const LEX_CSTRING *b,
- const LEX_CSTRING *c)
+ const Lex_ident_sys_st *a,
+ const Lex_ident_sys_st *b,
+ const Lex_ident_sys_st *c)
{
const char *schema= (thd->client_capabilities & CLIENT_NO_SCHEMA ?
NullS : a->str);
@@ -6827,21 +6901,26 @@ Item *LEX::create_item_ident(THD *thd,
}
-Item *LEX::create_item_limit(THD *thd,
- const LEX_CSTRING *a,
- const char *start, const char *end)
+Item *LEX::create_item_limit(THD *thd, const Lex_ident_cli_st *ca)
{
+ DBUG_ASSERT(thd->m_parser_state->m_lip.get_buf() <= ca->pos());
+ DBUG_ASSERT(ca->pos() <= ca->end());
+ DBUG_ASSERT(ca->end() <= thd->m_parser_state->m_lip.get_end_of_query());
+
const Sp_rcontext_handler *rh;
sp_variable *spv;
- if (!(spv= find_variable(a, &rh)))
+ Lex_ident_sys sa(thd, ca);
+ if (sa.is_null())
+ return NULL; // EOM
+ if (!(spv= find_variable(&sa, &rh)))
{
- my_error(ER_SP_UNDECLARED_VAR, MYF(0), a->str);
+ my_error(ER_SP_UNDECLARED_VAR, MYF(0), sa.str);
return NULL;
}
- Query_fragment pos(thd, sphead, start, end);
+ Query_fragment pos(thd, sphead, ca->pos(), ca->end());
Item_splocal *item;
- if (!(item= new (thd->mem_root) Item_splocal(thd, rh, a,
+ if (!(item= new (thd->mem_root) Item_splocal(thd, rh, &sa,
spv->offset, spv->type_handler(),
pos.pos(), pos.length())))
return NULL;
@@ -6861,21 +6940,28 @@ Item *LEX::create_item_limit(THD *thd,
Item *LEX::create_item_limit(THD *thd,
- const LEX_CSTRING *a,
- const LEX_CSTRING *b,
- const char *start, const char *end)
+ const Lex_ident_cli_st *ca,
+ const Lex_ident_cli_st *cb)
{
+ DBUG_ASSERT(thd->m_parser_state->m_lip.get_buf() <= ca->pos());
+ DBUG_ASSERT(ca->pos() <= cb->end());
+ DBUG_ASSERT(cb->end() <= thd->m_parser_state->m_lip.get_end_of_query());
+
const Sp_rcontext_handler *rh;
sp_variable *spv;
- if (!(spv= find_variable(a, &rh)))
+ Lex_ident_sys sa(thd, ca), sb(thd, cb);
+ if (sa.is_null() || sb.is_null())
+ return NULL; // EOM
+ if (!(spv= find_variable(&sa, &rh)))
{
- my_error(ER_SP_UNDECLARED_VAR, MYF(0), a->str);
+ my_error(ER_SP_UNDECLARED_VAR, MYF(0), sa.str);
return NULL;
}
// Qualified %TYPE variables are not possible
DBUG_ASSERT(!spv->field_def.column_type_ref());
Item_splocal *item;
- if (!(item= create_item_spvar_row_field(thd, rh, a, b, spv, start, end)))
+ if (!(item= create_item_spvar_row_field(thd, rh, &sa, &sb, spv,
+ ca->pos(), cb->end())))
return NULL;
if (item->type() != Item::INT_ITEM)
{
@@ -6899,7 +6985,7 @@ bool LEX::set_user_variable(THD *thd, const LEX_CSTRING *name, Item *val)
}
-Item *LEX::create_item_ident_nosp(THD *thd, LEX_CSTRING *name)
+Item *LEX::create_item_ident_nosp(THD *thd, Lex_ident_sys_st *name)
{
if (current_select->parsing_place != IN_HAVING ||
current_select->get_in_sum_expr() > 0)
@@ -6911,10 +6997,14 @@ Item *LEX::create_item_ident_nosp(THD *thd, LEX_CSTRING *name)
}
-Item *LEX::create_item_ident_sp(THD *thd, LEX_CSTRING *name,
+Item *LEX::create_item_ident_sp(THD *thd, Lex_ident_sys_st *name,
const char *start,
const char *end)
{
+ DBUG_ASSERT(thd->m_parser_state->m_lip.get_buf() <= start);
+ DBUG_ASSERT(start <= end);
+ DBUG_ASSERT(end <= thd->m_parser_state->m_lip.get_end_of_query());
+
const Sp_rcontext_handler *rh;
sp_variable *spv;
DBUG_ASSERT(spcont);
@@ -7757,3 +7847,109 @@ Item *Lex_trim_st::make_item_func_trim(THD *thd) const
make_item_func_trim_oracle(thd) :
make_item_func_trim_std(thd);
}
+
+
+Item *LEX::make_item_func_call_generic(THD *thd, Lex_ident_cli_st *cdb,
+ Lex_ident_cli_st *cname, List<Item> *args)
+{
+ Lex_ident_sys db(thd, cdb), name(thd, cname);
+ if (db.is_null() || name.is_null())
+ return NULL; // EOM
+ /*
+ The following in practice calls:
+ <code>Create_sp_func::create()</code>
+ and builds a stored function.
+
+ However, it's important to maintain the interface between the
+ parser and the implementation in item_create.cc clean,
+ since this will change with WL#2128 (SQL PATH):
+ - INFORMATION_SCHEMA.version() is the SQL 99 syntax for the native
+ function version(),
+ - MySQL.version() is the SQL 2003 syntax for the native function
+ version() (a vendor can specify any schema).
+ */
+
+ if (!name.str || check_db_name((LEX_STRING*) static_cast<LEX_CSTRING*>(&db)))
+ {
+ my_error(ER_WRONG_DB_NAME, MYF(0), db.str);
+ return NULL;
+ }
+ if (check_routine_name(&name))
+ return NULL;
+
+ Create_qfunc *builder= find_qualified_function_builder(thd);
+ DBUG_ASSERT(builder);
+ return builder->create_with_db(thd, &db, &name, true, args);
+}
+
+
+Item *LEX::create_item_qualified_asterisk(THD *thd,
+ const Lex_ident_sys_st *name)
+{
+ Item *item;
+ if (!(item= new (thd->mem_root) Item_field(thd, current_context(),
+ NullS, name->str,
+ &star_clex_str)))
+ return NULL;
+ current_select->with_wild++;
+ return item;
+}
+
+
+Item *LEX::create_item_qualified_asterisk(THD *thd,
+ const Lex_ident_sys_st *a,
+ const Lex_ident_sys_st *b)
+{
+ Item *item;
+ const char* schema= thd->client_capabilities & CLIENT_NO_SCHEMA ?
+ NullS : a->str;
+ if (!(item= new (thd->mem_root) Item_field(thd, current_context(),
+ schema, b->str,
+ &star_clex_str)))
+ return NULL;
+ current_select->with_wild++;
+ return item;
+}
+
+
+bool Lex_ident_sys_st::copy_ident_cli(THD *thd, const Lex_ident_cli_st *str)
+{
+ return thd->to_ident_sys_alloc(this, str);
+}
+
+bool Lex_ident_sys_st::copy_keyword(THD *thd, const Lex_ident_cli_st *str)
+{
+ return thd->make_lex_string(static_cast<LEX_CSTRING*>(this),
+ str->str, str->length) == NULL;
+}
+
+bool Lex_ident_sys_st::copy_or_convert(THD *thd,
+ const Lex_ident_cli_st *src,
+ CHARSET_INFO *cs)
+{
+ if (!src->is_8bit())
+ return copy_keyword(thd, src); // 7bit string makes a wellformed identifier
+ return convert(thd, src, cs);
+}
+
+
+bool Lex_ident_sys_st::copy_sys(THD *thd, const LEX_CSTRING *src)
+{
+ if (thd->check_string_for_wellformedness(src->str, src->length,
+ system_charset_info))
+ return true;
+ return thd->make_lex_string(this, src->str, src->length) == NULL;
+}
+
+
+bool Lex_ident_sys_st::convert(THD *thd,
+ const LEX_CSTRING *src, CHARSET_INFO *cs)
+{
+ LEX_STRING tmp;
+ if (thd->convert_with_error(system_charset_info, &tmp, cs,
+ src->str, src->length))
+ return true;
+ str= tmp.str;
+ length= tmp.length;
+ return false;
+}
diff --git a/sql/sql_lex.h b/sql/sql_lex.h
index 610d9de364d..3fc6798e3ff 100644
--- a/sql/sql_lex.h
+++ b/sql/sql_lex.h
@@ -67,6 +67,92 @@ public:
};
+/*
+ Used to store identifiers in the client character set.
+ Points to a query fragment.
+*/
+struct Lex_ident_cli_st: public LEX_CSTRING
+{
+private:
+ bool m_is_8bit;
+ char m_quote;
+public:
+ void set_keyword(const char *s, size_t len)
+ {
+ str= s;
+ length= len;
+ m_is_8bit= false;
+ m_quote= '\0';
+ }
+ void set_ident(const char *s, size_t len, bool is_8bit)
+ {
+ str= s;
+ length= len;
+ m_is_8bit= is_8bit;
+ m_quote= '\0';
+ }
+ void set_ident_quoted(const char *s, size_t len, bool is_8bit, char quote)
+ {
+ str= s;
+ length= len;
+ m_is_8bit= is_8bit;
+ m_quote= quote;
+ }
+ void set_unquoted(const LEX_CSTRING *s, bool is_8bit)
+ {
+ ((LEX_CSTRING &)*this)= *s;
+ m_is_8bit= is_8bit;
+ m_quote= '\0';
+ }
+ const char *pos() const { return str - is_quoted(); }
+ const char *end() const { return str + length + is_quoted(); }
+ bool is_quoted() const { return m_quote != '\0'; }
+ bool is_8bit() const { return m_is_8bit; }
+ char quote() const { return m_quote; }
+};
+
+
+class Lex_ident_cli: public Lex_ident_cli_st
+{
+public:
+ Lex_ident_cli(const LEX_CSTRING *s, bool is_8bit)
+ {
+ set_unquoted(s, is_8bit);
+ }
+ Lex_ident_cli(const char *s, size_t len)
+ {
+ set_ident(s, len, false);
+ }
+};
+
+
+struct Lex_ident_sys_st: public LEX_CSTRING
+{
+public:
+ bool copy_ident_cli(THD *thd, const Lex_ident_cli_st *str);
+ bool copy_keyword(THD *thd, const Lex_ident_cli_st *str);
+ bool copy_sys(THD *thd, const LEX_CSTRING *str);
+ bool convert(THD *thd, const LEX_CSTRING *str, CHARSET_INFO *cs);
+ bool copy_or_convert(THD *thd, const Lex_ident_cli_st *str, CHARSET_INFO *cs);
+ bool is_null() const { return str == NULL; }
+};
+
+
+class Lex_ident_sys: public Lex_ident_sys_st
+{
+public:
+ Lex_ident_sys(THD *thd, const Lex_ident_cli_st *str)
+ {
+ if (copy_ident_cli(thd, str))
+ ((LEX_CSTRING &) *this)= null_clex_str;
+ }
+ Lex_ident_sys()
+ {
+ ((LEX_CSTRING &) *this)= null_clex_str;
+ }
+};
+
+
enum sub_select_type
{
UNSPECIFIED_TYPE,
@@ -2392,6 +2478,12 @@ public:
void reduce_digest_token(uint token_left, uint token_right);
+ int scan_ident_sysvar(THD *thd, Lex_ident_cli_st *str);
+ int scan_ident_start(THD *thd, Lex_ident_cli_st *str);
+ int scan_ident_middle(THD *thd, Lex_ident_cli_st *str,
+ CHARSET_INFO **cs, my_lex_states *);
+ int scan_ident_delimited(THD *thd, Lex_ident_cli_st *str);
+ bool get_7bit_or_8bit_ident(THD *thd, uchar *last_char);
private:
/** Pointer to the current position in the raw input stream. */
char *m_ptr;
@@ -3299,20 +3391,42 @@ public:
bool sp_open_cursor(THD *thd, const LEX_CSTRING *name,
List<sp_assignment_lex> *parameters);
- Item_splocal *create_item_for_sp_var(LEX_CSTRING *name, sp_variable *spvar,
- const char *start, const char *end);
+ Item_splocal *create_item_for_sp_var(const Lex_ident_cli_st *name,
+ sp_variable *spvar);
+
+ Item *create_item_qualified_asterisk(THD *thd, const Lex_ident_sys_st *name);
+ Item *create_item_qualified_asterisk(THD *thd,
+ const Lex_ident_sys_st *a,
+ const Lex_ident_sys_st *b);
+ Item *create_item_qualified_asterisk(THD *thd, const Lex_ident_cli_st *cname)
+ {
+ Lex_ident_sys name(thd, cname);
+ if (name.is_null())
+ return NULL; // EOM
+ return create_item_qualified_asterisk(thd, &name);
+ }
+ Item *create_item_qualified_asterisk(THD *thd,
+ const Lex_ident_cli_st *ca,
+ const Lex_ident_cli_st *cb)
+ {
+ Lex_ident_sys a(thd, ca), b(thd, cb);
+ if (a.is_null() || b.is_null())
+ return NULL; // EOM
+ return create_item_qualified_asterisk(thd, &a, &b);
+ }
- Item *create_item_ident_nosp(THD *thd, LEX_CSTRING *name);
- Item *create_item_ident_sp(THD *thd, LEX_CSTRING *name,
+ Item *create_item_ident_nosp(THD *thd, Lex_ident_sys_st *name);
+ Item *create_item_ident_sp(THD *thd, Lex_ident_sys_st *name,
const char *start, const char *end);
- Item *create_item_ident(THD *thd, LEX_CSTRING *name,
- const char *start, const char *end)
+ Item *create_item_ident(THD *thd, Lex_ident_cli_st *cname)
{
+ Lex_ident_sys name(thd, cname);
+ if (name.is_null())
+ return NULL; // EOM
return sphead ?
- create_item_ident_sp(thd, name, start, end) :
- create_item_ident_nosp(thd, name);
+ create_item_ident_sp(thd, &name, cname->pos(), cname->end()) :
+ create_item_ident_nosp(thd, &name);
}
-
/*
Create an Item corresponding to a qualified name: a.b
when the parser is out of an SP context.
@@ -3327,8 +3441,8 @@ public:
- Item_ref
*/
Item *create_item_ident_nospvar(THD *thd,
- const LEX_CSTRING *a,
- const LEX_CSTRING *b);
+ const Lex_ident_sys_st *a,
+ const Lex_ident_sys_st *b);
/*
Create an Item corresponding to a ROW field valiable: var.field
@param THD - THD, for mem_root
@@ -3342,8 +3456,8 @@ public:
*/
Item_splocal *create_item_spvar_row_field(THD *thd,
const Sp_rcontext_handler *rh,
- const LEX_CSTRING *var,
- const LEX_CSTRING *field,
+ const Lex_ident_sys *var,
+ const Lex_ident_sys *field,
sp_variable *spvar,
const char *start,
const char *end);
@@ -3356,15 +3470,11 @@ public:
@param thd - THD, for mem_root
@param a - the first name
@param b - the second name
- @param start - position in the query (for binary log)
- @param end - end in the query (for binary log)
@retval - NULL on error, or a pointer to a new Item.
*/
Item *create_item_ident(THD *thd,
- const LEX_CSTRING *a,
- const LEX_CSTRING *b,
- const char *start,
- const char *end);
+ const Lex_ident_cli_st *a,
+ const Lex_ident_cli_st *b);
/*
Create an item from its qualified name.
Depending on context, it can be a table field, a table field reference,
@@ -3376,9 +3486,27 @@ public:
@retval - NULL on error, or a pointer to a new Item.
*/
Item *create_item_ident(THD *thd,
- const LEX_CSTRING *a,
- const LEX_CSTRING *b,
- const LEX_CSTRING *c);
+ const Lex_ident_sys_st *a,
+ const Lex_ident_sys_st *b,
+ const Lex_ident_sys_st *c);
+
+ Item *create_item_ident(THD *thd,
+ const Lex_ident_cli_st *ca,
+ const Lex_ident_cli_st *cb,
+ const Lex_ident_cli_st *cc)
+ {
+ Lex_ident_sys b(thd, cb), c(thd, cc);
+ if (b.is_null() || c.is_null())
+ return NULL;
+ if (ca->pos() == cb->pos()) // SELECT .t1.col1
+ {
+ DBUG_ASSERT(ca->length == 0);
+ Lex_ident_sys none;
+ return create_item_ident(thd, &none, &b, &c);
+ }
+ Lex_ident_sys a(thd, ca);
+ return a.is_null() ? NULL : create_item_ident(thd, &a, &b, &c);
+ }
/*
Create an item for "NEXT VALUE FOR sequence_name"
@@ -3403,16 +3531,11 @@ public:
Create an item for a name in LIMIT clause: LIMIT var
@param THD - THD, for mem_root
@param var_name - the variable name
- @param start - position in the query (for binary log)
- @param end - end in the query (for binary log)
@retval - a new Item corresponding to the SP variable,
or NULL on error
(non in SP, unknown variable, wrong data type).
*/
- Item *create_item_limit(THD *thd,
- const LEX_CSTRING *var_name,
- const char *start,
- const char *end);
+ Item *create_item_limit(THD *thd, const Lex_ident_cli_st *var_name);
/*
Create an item for a qualified name in LIMIT clause: LIMIT var.field
@@ -3427,14 +3550,14 @@ public:
wrong data type).
*/
Item *create_item_limit(THD *thd,
- const LEX_CSTRING *var_name,
- const LEX_CSTRING *field_name,
- const char *start,
- const char *end);
+ const Lex_ident_cli_st *var_name,
+ const Lex_ident_cli_st *field_name);
Item *make_item_func_replace(THD *thd, Item *org, Item *find, Item *replace);
Item *make_item_func_substr(THD *thd, Item *a, Item *b, Item *c);
Item *make_item_func_substr(THD *thd, Item *a, Item *b);
+ Item *make_item_func_call_generic(THD *thd, Lex_ident_cli_st *db,
+ Lex_ident_cli_st *name, List<Item> *args);
my_var *create_outvar(THD *thd, const LEX_CSTRING *name);
/*
@@ -3452,7 +3575,10 @@ public:
Item *create_and_link_Item_trigger_field(THD *thd, const LEX_CSTRING *name,
bool new_row);
-
+ // For syntax with colon, e.g. :NEW.a or :OLD.a
+ Item *make_item_colon_ident_ident(THD *thd,
+ const Lex_ident_sys_st *a,
+ const Lex_ident_sys_st *b);
void sp_block_init(THD *thd, const LEX_CSTRING *label);
void sp_block_init(THD *thd)
{
@@ -3748,6 +3874,25 @@ public:
return create_info.vers_info;
}
sp_package *get_sp_package() const;
+
+ /**
+ Check if the select is a simple select (not an union).
+ @retval
+ 0 ok
+ @retval
+ 1 error ; In this case the error messege is sent to the client
+ */
+ bool check_simple_select(const LEX_CSTRING *option)
+ {
+ if (current_select != &select_lex)
+ {
+ char command[80];
+ strmake(command, option->str, MY_MIN(option->length, sizeof(command)-1));
+ my_error(ER_CANT_USE_OPTION_HERE, MYF(0), command);
+ return true;
+ }
+ return false;
+ }
};
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 6e0d2b0ba0a..4b9c00168af 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -9059,32 +9059,6 @@ bool append_file_to_dir(THD *thd, const char **filename_ptr,
}
-/**
- Check if the select is a simple select (not an union).
-
- @retval
- 0 ok
- @retval
- 1 error ; In this case the error messege is sent to the client
-*/
-
-bool check_simple_select()
-{
- THD *thd= current_thd;
- LEX *lex= thd->lex;
- if (lex->current_select != &lex->select_lex)
- {
- char command[80];
- Lex_input_stream *lip= & thd->m_parser_state->m_lip;
- strmake(command, lip->yylval->symbol.str,
- MY_MIN(lip->yylval->symbol.length, sizeof(command)-1));
- my_error(ER_CANT_USE_OPTION_HERE, MYF(0), command);
- return 1;
- }
- return 0;
-}
-
-
Comp_creator *comp_eq_creator(bool invert)
{
return invert?(Comp_creator *)&ne_creator:(Comp_creator *)&eq_creator;
diff --git a/sql/sql_parse.h b/sql/sql_parse.h
index d23da6f1b68..5e5f7b50ba3 100644
--- a/sql/sql_parse.h
+++ b/sql/sql_parse.h
@@ -119,7 +119,6 @@ bool push_new_name_resolution_context(THD *thd,
TABLE_LIST *left_op,
TABLE_LIST *right_op);
void init_update_queries(void);
-bool check_simple_select();
Item *normalize_cond(THD *thd, Item *cond);
Item *negate_expression(THD *thd, Item *expr);
bool check_stack_overrun(THD *thd, long margin, uchar *dummy);
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index e1f3d15e514..1ff86c777b5 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -377,20 +377,25 @@ bool LEX::set_trigger_new_row(const LEX_CSTRING *name, Item *val)
@return An Item_splocal object representing the SP variable, or NULL on error.
*/
Item_splocal*
-LEX::create_item_for_sp_var(LEX_CSTRING *name, sp_variable *spvar,
- const char *start_in_q, const char *end_in_q)
+LEX::create_item_for_sp_var(const Lex_ident_cli_st *cname, sp_variable *spvar)
{
const Sp_rcontext_handler *rh;
Item_splocal *item;
+ const char *start_in_q= cname->pos();
+ const char *end_in_q= cname->end();
uint pos_in_q, len_in_q;
+ Lex_ident_sys name(thd, cname);
+
+ if (name.is_null())
+ return NULL; // EOM
/* If necessary, look for the variable. */
if (spcont && !spvar)
- spvar= find_variable(name, &rh);
+ spvar= find_variable(&name, &rh);
if (!spvar)
{
- my_error(ER_SP_UNDECLARED_VAR, MYF(0), name->str);
+ my_error(ER_SP_UNDECLARED_VAR, MYF(0), name.str);
return NULL;
}
@@ -401,7 +406,7 @@ LEX::create_item_for_sp_var(LEX_CSTRING *name, sp_variable *spvar,
len_in_q= (uint)(end_in_q - start_in_q);
item= new (thd->mem_root)
- Item_splocal(thd, rh, name, spvar->offset, spvar->type_handler(),
+ Item_splocal(thd, rh, &name, spvar->offset, spvar->type_handler(),
pos_in_q, len_in_q);
#ifdef DBUG_ASSERT_EXISTS
@@ -779,9 +784,10 @@ Virtual_column_info *add_virtual_expression(THD *thd, Item *expr)
/* structs */
LEX_CSTRING lex_str;
- LEX_SYMBOL symbol;
+ Lex_ident_cli_st kwd;
+ Lex_ident_cli_st ident_cli;
+ Lex_ident_sys_st ident_sys;
Lex_string_with_metadata_st lex_string_with_metadata;
- Lex_string_with_pos_st lex_string_with_pos;
Lex_spblock_st spblock;
Lex_spblock_handlers_st spblock_handlers;
Lex_length_and_dec_st Lex_length_and_dec;
@@ -912,679 +918,276 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize);
This makes the code grep-able, and helps maintenance.
*/
-
+
+
+/*
+ Reserved keywords and operators
+*/
%token ABORT_SYM /* INTERNAL (used in lex) */
%token ACCESSIBLE_SYM
-%token ACTION /* SQL-2003-N */
%token ADD /* SQL-2003-R */
-%token ADMIN_SYM /* SQL-2003-N */
-%token ADDDATE_SYM /* MYSQL-FUNC */
-%token AFTER_SYM /* SQL-2003-N */
-%token AGAINST
-%token AGGREGATE_SYM
-%token ALGORITHM_SYM
%token ALL /* SQL-2003-R */
%token ALTER /* SQL-2003-R */
-%token ALWAYS_SYM
%token ANALYZE_SYM
%token AND_AND_SYM /* OPERATOR */
%token AND_SYM /* SQL-2003-R */
-%token ANY_SYM /* SQL-2003-R */
%token AS /* SQL-2003-R */
%token ASC /* SQL-2003-N */
-%token ASCII_SYM /* MYSQL-FUNC */
%token ASENSITIVE_SYM /* FUTURE-USE */
-%token AT_SYM /* SQL-2003-R */
-%token ATOMIC_SYM /* SQL-2003-R */
-%token AUTHORS_SYM
-%token AUTOEXTEND_SIZE_SYM
-%token AUTO_INC
-%token AUTO_SYM
-%token AVG_ROW_LENGTH
-%token AVG_SYM /* SQL-2003-N */
-%token BACKUP_SYM
%token BEFORE_SYM /* SQL-2003-N */
-%token BEGIN_SYM /* SQL-2003-R */
%token BETWEEN_SYM /* SQL-2003-R */
%token BIGINT /* SQL-2003-R */
%token BINARY /* SQL-2003-R */
-%token BINLOG_SYM
%token BIN_NUM
%token BIT_AND /* MYSQL-FUNC */
%token BIT_OR /* MYSQL-FUNC */
-%token BIT_SYM /* MYSQL-FUNC */
%token BIT_XOR /* MYSQL-FUNC */
%token BLOB_SYM /* SQL-2003-R */
-%token BLOCK_SYM
-%token BODY_SYM /* Oracle-R */
-%token BOOLEAN_SYM /* SQL-2003-R */
-%token BOOL_SYM
%token BOTH /* SQL-2003-R */
-%token BTREE_SYM
%token BY /* SQL-2003-R */
-%token BYTE_SYM
-%token CACHE_SYM
%token CALL_SYM /* SQL-2003-R */
%token CASCADE /* SQL-2003-N */
-%token CASCADED /* SQL-2003-R */
%token CASE_SYM /* SQL-2003-R */
%token CAST_SYM /* SQL-2003-R */
-%token CATALOG_NAME_SYM /* SQL-2003-N */
-%token CHAIN_SYM /* SQL-2003-N */
%token CHANGE
-%token CHANGED
-%token CHARSET
%token CHAR_SYM /* SQL-2003-R */
-%token CHECKPOINT_SYM
-%token CHECKSUM_SYM
%token CHECK_SYM /* SQL-2003-R */
-%token CIPHER_SYM
-%token CLASS_ORIGIN_SYM /* SQL-2003-N */
-%token CLIENT_SYM
-%token CLOSE_SYM /* SQL-2003-R */
-%token CLOB /* SQL-2003-R */
-%token COALESCE /* SQL-2003-N */
-%token CODE_SYM
%token COLLATE_SYM /* SQL-2003-R */
-%token COLLATION_SYM /* SQL-2003-N */
-%token COLUMNS
-%token COLUMN_ADD_SYM
-%token COLUMN_CHECK_SYM
-%token COLUMN_CREATE_SYM
-%token COLUMN_DELETE_SYM
-%token COLUMN_GET_SYM
-%token COLUMN_SYM /* SQL-2003-R */
-%token COLUMN_NAME_SYM /* SQL-2003-N */
-%token COMMENT_SYM
-%token COMMITTED_SYM /* SQL-2003-N */
-%token COMMIT_SYM /* SQL-2003-R */
-%token COMPACT_SYM
-%token COMPLETION_SYM
-%token COMPRESSED_SYM
-%token CONCURRENT
%token CONDITION_SYM /* SQL-2003-R, SQL-2008-R */
-%token CONNECTION_SYM
-%token CONSISTENT_SYM
%token CONSTRAINT /* SQL-2003-R */
-%token CONSTRAINT_CATALOG_SYM /* SQL-2003-N */
-%token CONSTRAINT_NAME_SYM /* SQL-2003-N */
-%token CONSTRAINT_SCHEMA_SYM /* SQL-2003-N */
-%token CONTAINS_SYM /* SQL-2003-N */
-%token CONTEXT_SYM
%token CONTINUE_SYM /* SQL-2003-R */
-%token CONTRIBUTORS_SYM
%token CONVERT_SYM /* SQL-2003-N */
%token COUNT_SYM /* SQL-2003-N */
-%token CPU_SYM
%token CREATE /* SQL-2003-R */
%token CROSS /* SQL-2003-R */
-%token CUBE_SYM /* SQL-2003-R */
%token CUME_DIST_SYM
%token CURDATE /* MYSQL-FUNC */
-%token CURRENT_SYM /* SQL-2003-R */
%token CURRENT_USER /* SQL-2003-R */
%token CURRENT_ROLE /* SQL-2003-R */
-%token CURRENT_POS_SYM
%token CURSOR_SYM /* SQL-2003-R */
-%token CURSOR_NAME_SYM /* SQL-2003-N */
%token CURTIME /* MYSQL-FUNC */
-%token CYCLE_SYM
%token DATABASE
%token DATABASES
-%token DATAFILE_SYM
-%token DATA_SYM /* SQL-2003-N */
-%token DATETIME
%token DATE_ADD_INTERVAL /* MYSQL-FUNC */
-%token DATE_FORMAT_SYM /* MYSQL-FUNC */
%token DATE_SUB_INTERVAL /* MYSQL-FUNC */
-%token DATE_SYM /* SQL-2003-R */
%token DAY_HOUR_SYM
%token DAY_MICROSECOND_SYM
%token DAY_MINUTE_SYM
%token DAY_SECOND_SYM
-%token DAY_SYM /* SQL-2003-R */
-%token DEALLOCATE_SYM /* SQL-2003-R */
%token DECIMAL_NUM
%token DECIMAL_SYM /* SQL-2003-R */
%token DECLARE_SYM /* SQL-2003-R */
-%token DECODE_SYM /* Oracle function, non-reserved */
%token DEFAULT /* SQL-2003-R */
-%token DEFINER_SYM
-%token DELAYED_SYM
-%token DELAY_KEY_WRITE_SYM
%token DELETE_DOMAIN_ID_SYM
%token DELETE_SYM /* SQL-2003-R */
%token DENSE_RANK_SYM
%token DESC /* SQL-2003-N */
%token DESCRIBE /* SQL-2003-R */
-%token DES_KEY_FILE
%token DETERMINISTIC_SYM /* SQL-2003-R */
-%token DIAGNOSTICS_SYM /* SQL-2003-N */
-%token DIRECTORY_SYM
-%token DISABLE_SYM
-%token DISCARD
-%token DISK_SYM
%token DISTINCT /* SQL-2003-R */
%token DIV_SYM
%token DOUBLE_SYM /* SQL-2003-R */
%token DO_DOMAIN_IDS_SYM
-%token DO_SYM
%token DOT_DOT_SYM
%token DROP /* SQL-2003-R */
%token DUAL_SYM
-%token DUMPFILE
-%token DUPLICATE_SYM
-%token DYNAMIC_SYM /* SQL-2003-R */
%token EACH_SYM /* SQL-2003-R */
%token ELSE /* SQL-2003-R */
%token ELSEIF_SYM
-%token ELSIF_SYM /* Oracle, reserved in PL/SQL*/
-%token ENABLE_SYM
%token ENCLOSED
-%token END /* SQL-2003-R */
-%token ENDS_SYM
%token END_OF_INPUT /* INTERNAL */
-%token ENGINES_SYM
-%token ENGINE_SYM
-%token ENUM
%token EQUAL_SYM /* OPERATOR */
-%token ERROR_SYM
-%token ERRORS
%token ESCAPED
-%token ESCAPE_SYM /* SQL-2003-R */
-%token EVENTS_SYM
-%token EVENT_SYM
-%token EVERY_SYM /* SQL-2003-N */
-%token EXCHANGE_SYM
-%token EXAMINED_SYM
%token EXCEPT_SYM /* SQL-2003-R */
-%token EXCLUDE_SYM /* SQL-2011-N */
-%token EXECUTE_SYM /* SQL-2003-R */
-%token EXCEPTION_SYM /* SQL-2003-N, Oracle-PLSQL-R */
%token EXISTS /* SQL-2003-R */
-%token EXIT_SYM
-%token EXPANSION_SYM
-%token EXPORT_SYM
-%token EXTENDED_SYM
-%token EXTENT_SIZE_SYM
%token EXTRACT_SYM /* SQL-2003-N */
%token FALSE_SYM /* SQL-2003-R */
-%token FAST_SYM
-%token FAULTS_SYM
%token FETCH_SYM /* SQL-2003-R */
-%token FILE_SYM
%token FIRST_VALUE_SYM /* SQL-2011 */
-%token FIRST_SYM /* SQL-2003-N */
-%token FIXED_SYM
%token FLOAT_NUM
%token FLOAT_SYM /* SQL-2003-R */
-%token FLUSH_SYM
-%token FOLLOWS_SYM /* MYSQL trigger*/
-%token FOLLOWING_SYM /* SQL-2011-N */
-%token FORCE_SYM
%token FOREIGN /* SQL-2003-R */
%token FOR_SYM /* SQL-2003-R */
%token FOR_SYSTEM_TIME_SYM /* INTERNAL */
-%token FORMAT_SYM
-%token FOUND_SYM /* SQL-2003-R */
%token FROM
-%token FULL /* SQL-2003-R */
%token FULLTEXT_SYM
-%token FUNCTION_SYM /* SQL-2003-R */
%token GE
-%token GENERAL
-%token GENERATED_SYM
-%token GEOMETRYCOLLECTION
-%token GEOMETRY_SYM
-%token GET_FORMAT /* MYSQL-FUNC */
-%token GET_SYM /* SQL-2003-R */
-%token GLOBAL_SYM /* SQL-2003-R */
-%token GOTO_SYM /* Oracle, reserved in PL/SQL*/
%token GRANT /* SQL-2003-R */
-%token GRANTS
%token GROUP_SYM /* SQL-2003-R */
%token GROUP_CONCAT_SYM
%token LAG_SYM /* SQL-2011 */
%token LEAD_SYM /* SQL-2011 */
-%token HANDLER_SYM
-%token HARD_SYM
-%token HASH_SYM
%token HAVING /* SQL-2003-R */
-%token HELP_SYM
%token HEX_NUM
%token HEX_STRING
-%token HIGH_PRIORITY
-%token HISTORY_SYM /* MYSQL */
-%token HOST_SYM
-%token HOSTS_SYM
%token HOUR_MICROSECOND_SYM
%token HOUR_MINUTE_SYM
%token HOUR_SECOND_SYM
-%token HOUR_SYM /* SQL-2003-R */
-%token ID_SYM /* MYSQL */
%token IDENT
-%token IDENTIFIED_SYM
%token IDENT_QUOTED
%token IF_SYM
%token IGNORE_DOMAIN_IDS_SYM
%token IGNORE_SYM
-%token IGNORE_SERVER_IDS_SYM
-%token IMMEDIATE_SYM /* SQL-2003-R */
-%token IMPORT
-%token INCREMENT_SYM
-%token INDEXES
%token INDEX_SYM
%token INFILE
-%token INITIAL_SIZE_SYM
%token INNER_SYM /* SQL-2003-R */
%token INOUT_SYM /* SQL-2003-R */
%token INSENSITIVE_SYM /* SQL-2003-R */
%token INSERT /* SQL-2003-R */
-%token INSERT_METHOD
-%token INSTALL_SYM
%token INTERSECT_SYM /* SQL-2003-R */
%token INTERVAL_SYM /* SQL-2003-R */
%token INTO /* SQL-2003-R */
%token INT_SYM /* SQL-2003-R */
-%token INVOKER_SYM
%token IN_SYM /* SQL-2003-R */
-%token IO_SYM
-%token IPC_SYM
%token IS /* SQL-2003-R */
-%token ISOLATION /* SQL-2003-R */
-%token ISOPEN_SYM /* Oracle-N */
-%token ISSUER_SYM
%token ITERATE_SYM
-%token INVISIBLE_SYM
%token JOIN_SYM /* SQL-2003-R */
-%token JSON_SYM
%token KEYS
-%token KEY_BLOCK_SIZE
%token KEY_SYM /* SQL-2003-N */
%token KILL_SYM
-%token LANGUAGE_SYM /* SQL-2003-R */
-%token LAST_SYM /* SQL-2003-N */
-%token LAST_VALUE
-%token LASTVAL_SYM /* PostgreSQL sequence function */
%token LE /* OPERATOR */
%token LEADING /* SQL-2003-R */
-%token LEAVES
%token LEAVE_SYM
%token LEFT /* SQL-2003-R */
-%token LESS_SYM
-%token LEVEL_SYM
%token LEX_HOSTNAME
%token LIKE /* SQL-2003-R */
%token LIMIT
%token LINEAR_SYM
%token LINES
-%token LINESTRING
-%token LIST_SYM
%token LOAD
-%token LOCAL_SYM /* SQL-2003-R */
%token LOCATOR_SYM /* SQL-2003-N */
-%token LOCKS_SYM
%token LOCK_SYM
-%token LOGFILE_SYM
-%token LOGS_SYM
%token LONGBLOB
%token LONGTEXT
%token LONG_NUM
%token LONG_SYM
%token LOOP_SYM
%token LOW_PRIORITY
-%token MASTER_CONNECT_RETRY_SYM
-%token MASTER_DELAY_SYM
-%token MASTER_GTID_POS_SYM
-%token MASTER_HOST_SYM
-%token MASTER_LOG_FILE_SYM
-%token MASTER_LOG_POS_SYM
-%token MASTER_PASSWORD_SYM
-%token MASTER_PORT_SYM
-%token MASTER_SERVER_ID_SYM
-%token MASTER_SSL_CAPATH_SYM
-%token MASTER_SSL_CA_SYM
-%token MASTER_SSL_CERT_SYM
-%token MASTER_SSL_CIPHER_SYM
-%token MASTER_SSL_CRL_SYM
-%token MASTER_SSL_CRLPATH_SYM
-%token MASTER_SSL_KEY_SYM
-%token MASTER_SSL_SYM
%token MASTER_SSL_VERIFY_SERVER_CERT_SYM
-%token MASTER_SYM
-%token MASTER_USER_SYM
-%token MASTER_USE_GTID_SYM
-%token MASTER_HEARTBEAT_PERIOD_SYM
%token MATCH /* SQL-2003-R */
-%token MAX_CONNECTIONS_PER_HOUR
-%token MAX_QUERIES_PER_HOUR
-%token MAX_ROWS
-%token MAX_SIZE_SYM
%token MAX_SYM /* SQL-2003-N */
-%token MAX_UPDATES_PER_HOUR
-%token MAX_STATEMENT_TIME_SYM
-%token MAX_USER_CONNECTIONS_SYM
%token MAXVALUE_SYM /* SQL-2003-N */
%token MEDIAN_SYM
%token MEDIUMBLOB
%token MEDIUMINT
%token MEDIUMTEXT
-%token MEDIUM_SYM
-%token MEMORY_SYM
-%token MERGE_SYM /* SQL-2003-R */
-%token MESSAGE_TEXT_SYM /* SQL-2003-N */
-%token MICROSECOND_SYM /* MYSQL-FUNC */
-%token MIGRATE_SYM
%token MINUTE_MICROSECOND_SYM
%token MINUTE_SECOND_SYM
-%token MINUTE_SYM /* SQL-2003-R */
-%token MINVALUE_SYM
-%token MIN_ROWS
%token MIN_SYM /* SQL-2003-N */
-%token MODE_SYM
%token MODIFIES_SYM /* SQL-2003-R */
-%token MODIFY_SYM
%token MOD_SYM /* SQL-2003-N */
-%token MONTH_SYM /* SQL-2003-R */
-%token MULTILINESTRING
-%token MULTIPOINT
-%token MULTIPOLYGON
-%token MUTEX_SYM
-%token MYSQL_SYM
-%token MYSQL_ERRNO_SYM
-%token NAMES_SYM /* SQL-2003-N */
-%token NAME_SYM /* SQL-2003-N */
-%token NATIONAL_SYM /* SQL-2003-R */
%token NATURAL /* SQL-2003-R */
%token NCHAR_STRING
-%token NCHAR_SYM /* SQL-2003-R */
%token NE /* OPERATOR */
%token NEG
-%token NEW_SYM /* SQL-2003-R */
-%token NEXT_SYM /* SQL-2003-N */
-%token NEXTVAL_SYM /* PostgreSQL sequence function */
-%token NOCACHE_SYM
-%token NOCYCLE_SYM
-%token NODEGROUP_SYM
-%token NONE_SYM /* SQL-2003-R */
%token NOT2_SYM
%token NOT_SYM /* SQL-2003-R */
-%token NOTFOUND_SYM /* Oracle-R */
%token NOW_SYM
-%token NO_SYM /* SQL-2003-R */
-%token NOMAXVALUE_SYM
-%token NOMINVALUE_SYM
-%token NO_WAIT_SYM
-%token NOWAIT_SYM
%token NO_WRITE_TO_BINLOG
%token NTILE_SYM
%token NULL_SYM /* SQL-2003-R */
%token NUM
-%token NUMBER_SYM /* SQL-2003-N */
%token NUMERIC_SYM /* SQL-2003-R */
%token NTH_VALUE_SYM /* SQL-2011 */
-%token NVARCHAR_SYM
-%token OF_SYM /* SQL-1992-R, Oracle-R */
-%token OFFSET_SYM
-%token OLD_PASSWORD_SYM
%token ON /* SQL-2003-R */
-%token ONE_SYM
-%token ONLY_SYM /* SQL-2003-R */
-%token ONLINE_SYM
-%token OPEN_SYM /* SQL-2003-R */
%token OPTIMIZE
-%token OPTIONS_SYM
-%token OPTION /* SQL-2003-N */
%token OPTIONALLY
%token OR2_SYM
%token ORDER_SYM /* SQL-2003-R */
%token OR_OR_SYM /* OPERATOR */
%token OR_SYM /* SQL-2003-R */
-%token OTHERS_SYM /* SQL-2011-N */
%token OUTER
%token OUTFILE
%token OUT_SYM /* SQL-2003-R */
%token OVER_SYM
-%token OWNER_SYM
-%token PACKAGE_SYM /* Oracle-R */
-%token PACK_KEYS_SYM
-%token PAGE_SYM
%token PAGE_CHECKSUM_SYM
%token PARAM_MARKER
-%token PARSER_SYM
%token PARSE_VCOL_EXPR_SYM
-%token PARTIAL /* SQL-2003-N */
%token PARTITION_SYM /* SQL-2003-R */
-%token PARTITIONS_SYM
-%token PARTITIONING_SYM
-%token PASSWORD_SYM
%token PERCENT_RANK_SYM
%token PERCENTILE_CONT_SYM
%token PERCENTILE_DISC_SYM
-%token PERIOD_SYM /* SQL-2011-R */
-%token PERSISTENT_SYM
-%token PHASE_SYM
-%token PLUGINS_SYM
-%token PLUGIN_SYM
-%token POINT_SYM
-%token POLYGON
-%token PORT_SYM
%token POSITION_SYM /* SQL-2003-N */
-%token PRECEDES_SYM /* MYSQL */
-%token PRECEDING_SYM /* SQL-2011-N */
%token PRECISION /* SQL-2003-R */
-%token PREPARE_SYM /* SQL-2003-R */
-%token PRESERVE_SYM
-%token PREV_SYM
-%token PREVIOUS_SYM
%token PRIMARY_SYM /* SQL-2003-R */
-%token PRIVILEGES /* SQL-2003-N */
%token PROCEDURE_SYM /* SQL-2003-R */
-%token PROCESS
-%token PROCESSLIST_SYM
-%token PROFILE_SYM
-%token PROFILES_SYM
-%token PROXY_SYM
%token PURGE
-%token QUARTER_SYM
-%token QUERY_SYM
-%token QUICK
-%token RAISE_SYM /* Oracle-PLSQL-R */
%token RANGE_SYM /* SQL-2003-R */
%token RANK_SYM
-%token RAW /* Oracle */
%token READS_SYM /* SQL-2003-R */
-%token READ_ONLY_SYM
%token READ_SYM /* SQL-2003-N */
%token READ_WRITE_SYM
%token REAL /* SQL-2003-R */
-%token REBUILD_SYM
-%token RECOVER_SYM
%token RECURSIVE_SYM
-%token REDOFILE_SYM
-%token REDO_BUFFER_SIZE_SYM
-%token REDUNDANT_SYM
+%token REF_SYSTEM_ID_SYM
%token REFERENCES /* SQL-2003-R */
%token REGEXP
-%token RELAY
-%token RELAYLOG_SYM
-%token RELAY_LOG_FILE_SYM
-%token RELAY_LOG_POS_SYM
-%token RELAY_THREAD
%token RELEASE_SYM /* SQL-2003-R */
-%token RELOAD
-%token REMOVE_SYM
%token RENAME
-%token REORGANIZE_SYM
-%token REPAIR
-%token REPEATABLE_SYM /* SQL-2003-N */
%token REPEAT_SYM /* MYSQL-FUNC */
%token REPLACE /* MYSQL-FUNC */
-%token REPLICATION
%token REQUIRE_SYM
-%token RESET_SYM
-%token RESTART_SYM
%token RESIGNAL_SYM /* SQL-2003-R */
-%token RESOURCES
-%token RESTORE_SYM
%token RESTRICT
-%token RESUME_SYM
-%token RETURNED_SQLSTATE_SYM /* SQL-2003-N */
%token RETURNING_SYM
-%token RETURNS_SYM /* SQL-2003-R */
%token RETURN_SYM /* SQL-2003-R */
-%token REUSE_SYM /* Oracle-R */
-%token REVERSE_SYM
%token REVOKE /* SQL-2003-R */
%token RIGHT /* SQL-2003-R */
-%token ROLE_SYM
-%token ROLLBACK_SYM /* SQL-2003-R */
-%token ROLLUP_SYM /* SQL-2003-R */
-%token ROUTINE_SYM /* SQL-2003-N */
-%token ROWCOUNT_SYM /* Oracle-N */
-%token ROW_SYM /* SQL-2003-R */
%token ROWS_SYM /* SQL-2003-R */
-%token ROWTYPE_SYM /* Oracle-PLSQL-R */
-%token ROW_COUNT_SYM /* SQL-2003-N */
-%token ROW_FORMAT_SYM
%token ROW_NUMBER_SYM
-%token RTREE_SYM
-%token SAVEPOINT_SYM /* SQL-2003-R */
-%token SCHEDULE_SYM
-%token SCHEMA_NAME_SYM /* SQL-2003-N */
%token SECOND_MICROSECOND_SYM
-%token SECOND_SYM /* SQL-2003-R */
-%token SECURITY_SYM /* SQL-2003-N */
%token SELECT_SYM /* SQL-2003-R */
%token SENSITIVE_SYM /* FUTURE-USE */
%token SEPARATOR_SYM
-%token SEQUENCE_SYM
-%token SERIALIZABLE_SYM /* SQL-2003-N */
-%token SERIAL_SYM
-%token SESSION_SYM /* SQL-2003-N */
-%token SERVER_SYM
%token SERVER_OPTIONS
%token SET /* SQL-2003-R */
-%token SETVAL_SYM /* PostgreSQL sequence function */
%token SET_VAR
-%token SHARE_SYM
%token SHIFT_LEFT /* OPERATOR */
%token SHIFT_RIGHT /* OPERATOR */
%token SHOW
-%token SHUTDOWN
%token SIGNAL_SYM /* SQL-2003-R */
-%token SIGNED_SYM
-%token SIMPLE_SYM /* SQL-2003-N */
-%token SLAVE
-%token SLAVES
-%token SLAVE_POS_SYM
-%token SLOW
%token SMALLINT /* SQL-2003-R */
-%token SNAPSHOT_SYM
-%token SOCKET_SYM
-%token SOFT_SYM
-%token SONAME_SYM
-%token SOUNDS_SYM
-%token SOURCE_SYM
%token SPATIAL_SYM
%token SPECIFIC_SYM /* SQL-2003-R */
%token SQLEXCEPTION_SYM /* SQL-2003-R */
%token SQLSTATE_SYM /* SQL-2003-R */
%token SQLWARNING_SYM /* SQL-2003-R */
%token SQL_BIG_RESULT
-%token SQL_BUFFER_RESULT
-%token SQL_CACHE_SYM
-%token SQL_CALC_FOUND_ROWS
-%token SQL_NO_CACHE_SYM
%token SQL_SMALL_RESULT
%token SQL_SYM /* SQL-2003-R */
-%token SQL_THREAD
-%token REF_SYSTEM_ID_SYM
%token SSL_SYM
%token STARTING
-%token STARTS_SYM
-%token START_SYM /* SQL-2003-R */
-%token STATEMENT_SYM
%token STATS_AUTO_RECALC_SYM
%token STATS_PERSISTENT_SYM
%token STATS_SAMPLE_PAGES_SYM
-%token STATUS_SYM
%token STDDEV_SAMP_SYM /* SQL-2003-N */
%token STD_SYM
-%token STOP_SYM
-%token STORAGE_SYM
-%token STORED_SYM
%token STRAIGHT_JOIN
-%token STRING_SYM
-%token SUBCLASS_ORIGIN_SYM /* SQL-2003-N */
-%token SUBDATE_SYM
-%token SUBJECT_SYM
-%token SUBPARTITIONS_SYM
-%token SUBPARTITION_SYM
%token SUBSTRING /* SQL-2003-N */
%token SUM_SYM /* SQL-2003-N */
-%token SUPER_SYM
-%token SUSPEND_SYM
-%token SWAPS_SYM
-%token SWITCHES_SYM
%token SYSDATE
-%token SYSTEM /* SQL-2011-R */
-%token SYSTEM_TIME_SYM /* SQL-2011-R */
-%token TABLES
-%token TABLESPACE
%token TABLE_REF_PRIORITY
%token TABLE_SYM /* SQL-2003-R */
-%token TABLE_CHECKSUM_SYM
-%token TABLE_NAME_SYM /* SQL-2003-N */
-%token TEMPORARY /* SQL-2003-N */
-%token TEMPTABLE_SYM
%token TERMINATED
%token TEXT_STRING
-%token TEXT_SYM
-%token THAN_SYM
%token THEN_SYM /* SQL-2003-R */
-%token TIES_SYM /* SQL-2011-N */
-%token TIMESTAMP /* SQL-2003-R */
-%token TIMESTAMP_ADD
-%token TIMESTAMP_DIFF
-%token TIME_SYM /* SQL-2003-R */
%token TINYBLOB
%token TINYINT
%token TINYTEXT
%token TO_SYM /* SQL-2003-R */
%token TRAILING /* SQL-2003-R */
-%token TRANSACTION_SYM
-%token TRANSACTIONAL_SYM
-%token TRIGGERS_SYM
%token TRIGGER_SYM /* SQL-2003-R */
%token TRIM /* SQL-2003-N */
-%token TRIM_ORACLE
%token TRUE_SYM /* SQL-2003-R */
-%token TRUNCATE_SYM
-%token TYPES_SYM
-%token TYPE_SYM /* SQL-2003-N */
-%token UDF_RETURNS_SYM
%token ULONGLONG_NUM
-%token UNBOUNDED_SYM /* SQL-2011-N */
-%token UNCOMMITTED_SYM /* SQL-2003-N */
-%token UNDEFINED_SYM
%token UNDERSCORE_CHARSET
-%token UNDOFILE_SYM
-%token UNDO_BUFFER_SIZE_SYM
%token UNDO_SYM /* FUTURE-USE */
-%token UNICODE_SYM
-%token UNINSTALL_SYM
%token UNION_SYM /* SQL-2003-R */
%token UNIQUE_SYM
-%token UNKNOWN_SYM /* SQL-2003-R */
%token UNLOCK_SYM
%token UNSIGNED
-%token UNTIL_SYM
%token UPDATE_SYM /* SQL-2003-R */
-%token UPGRADE_SYM
%token USAGE /* SQL-2003-N */
-%token USER_SYM /* SQL-2003-R */
-%token USE_FRM
%token USE_SYM
%token USING /* SQL-2003-R */
%token UTC_DATE_SYM
@@ -1593,44 +1196,462 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize);
%token VALUES /* SQL-2003-R */
%token VALUES_IN_SYM
%token VALUES_LESS_SYM
-%token VALUE_SYM /* SQL-2003-R */
%token VARBINARY
%token VARCHAR /* SQL-2003-R */
-%token VARCHAR2 /* Oracle */
-%token VARIABLES
%token VARIANCE_SYM
%token VARYING /* SQL-2003-R */
%token VAR_SAMP_SYM
-%token VERSIONING_SYM /* SQL-2011-R */
-%token VIA_SYM
-%token VIEW_SYM /* SQL-2003-N */
-%token VIRTUAL_SYM
-%token WAIT_SYM
-%token WARNINGS
-%token WEEK_SYM
-%token WEIGHT_STRING_SYM
%token WHEN_SYM /* SQL-2003-R */
%token WHERE /* SQL-2003-R */
-%token WINDOW_SYM
%token WHILE_SYM
%token WITH /* SQL-2003-R */
-%token WITHIN
-%token WITHOUT /* SQL-2003-R */
%token WITH_CUBE_SYM /* INTERNAL */
%token WITH_ROLLUP_SYM /* INTERNAL */
%token WITH_SYSTEM_SYM /* INTERNAL */
-%token WORK_SYM /* SQL-2003-N */
-%token WRAPPER_SYM
-%token WRITE_SYM /* SQL-2003-N */
-%token X509_SYM
-%token XA_SYM
-%token XML_SYM
%token XOR
%token YEAR_MONTH_SYM
-%token YEAR_SYM /* SQL-2003-R */
%token ZEROFILL
-%token IMPOSSIBLE_ACTION /* To avoid warning for yyerrlab1 */
+%token IMPOSSIBLE_ACTION /* To avoid warning for yyerrlab1 */
+
+
+/*
+ Keywords that have different reserved status in std/oracle modes.
+*/
+%token <kwd> BODY_SYM /* Oracle-R */
+%token <kwd> COMMENT_SYM
+%token <kwd> ELSIF_SYM /* Oracle, reserved in PL/SQL*/
+%token <kwd> GOTO_SYM /* Oracle, reserved in PL/SQL*/
+%token <kwd> HISTORY_SYM /* MYSQL */
+%token <kwd> OTHERS_SYM /* SQL-2011-N */
+%token <kwd> PACKAGE_SYM /* Oracle-R */
+%token <kwd> PERIOD_SYM /* SQL-2011-R */
+%token <kwd> RAISE_SYM /* Oracle-PLSQL-R */
+%token <kwd> ROWTYPE_SYM /* Oracle-PLSQL-R */
+%token <kwd> SYSTEM /* SQL-2011-R */
+%token <kwd> SYSTEM_TIME_SYM /* SQL-2011-R */
+%token <kwd> VERSIONING_SYM /* SQL-2011-R */
+%token <kwd> WINDOW_SYM
+%token <kwd> WITHOUT /* SQL-2003-R */
+
+/*
+ Non-reserved keywords
+*/
+
+%token <kwd> ACTION /* SQL-2003-N */
+%token <kwd> ADMIN_SYM /* SQL-2003-N */
+%token <kwd> ADDDATE_SYM /* MYSQL-FUNC */
+%token <kwd> AFTER_SYM /* SQL-2003-N */
+%token <kwd> AGAINST
+%token <kwd> AGGREGATE_SYM
+%token <kwd> ALGORITHM_SYM
+%token <kwd> ALWAYS_SYM
+%token <kwd> ANY_SYM /* SQL-2003-R */
+%token <kwd> ASCII_SYM /* MYSQL-FUNC */
+%token <kwd> AT_SYM /* SQL-2003-R */
+%token <kwd> ATOMIC_SYM /* SQL-2003-R */
+%token <kwd> AUTHORS_SYM
+%token <kwd> AUTOEXTEND_SIZE_SYM
+%token <kwd> AUTO_INC
+%token <kwd> AUTO_SYM
+%token <kwd> AVG_ROW_LENGTH
+%token <kwd> AVG_SYM /* SQL-2003-N */
+%token <kwd> BACKUP_SYM
+%token <kwd> BEGIN_SYM /* SQL-2003-R */
+%token <kwd> BINLOG_SYM
+%token <kwd> BIT_SYM /* MYSQL-FUNC */
+%token <kwd> BLOCK_SYM
+%token <kwd> BOOL_SYM
+%token <kwd> BOOLEAN_SYM /* SQL-2003-R */
+%token <kwd> BTREE_SYM
+%token <kwd> BYTE_SYM
+%token <kwd> CACHE_SYM
+%token <kwd> CASCADED /* SQL-2003-R */
+%token <kwd> CATALOG_NAME_SYM /* SQL-2003-N */
+%token <kwd> CHAIN_SYM /* SQL-2003-N */
+%token <kwd> CHANGED
+%token <kwd> CHARSET
+%token <kwd> CHECKPOINT_SYM
+%token <kwd> CHECKSUM_SYM
+%token <kwd> CIPHER_SYM
+%token <kwd> CLASS_ORIGIN_SYM /* SQL-2003-N */
+%token <kwd> CLIENT_SYM
+%token <kwd> CLOB /* SQL-2003-R */
+%token <kwd> CLOSE_SYM /* SQL-2003-R */
+%token <kwd> COALESCE /* SQL-2003-N */
+%token <kwd> CODE_SYM
+%token <kwd> COLLATION_SYM /* SQL-2003-N */
+%token <kwd> COLUMNS
+%token <kwd> COLUMN_ADD_SYM
+%token <kwd> COLUMN_CHECK_SYM
+%token <kwd> COLUMN_CREATE_SYM
+%token <kwd> COLUMN_DELETE_SYM
+%token <kwd> COLUMN_GET_SYM
+%token <kwd> COLUMN_SYM /* SQL-2003-R */
+%token <kwd> COLUMN_NAME_SYM /* SQL-2003-N */
+%token <kwd> COMMITTED_SYM /* SQL-2003-N */
+%token <kwd> COMMIT_SYM /* SQL-2003-R */
+%token <kwd> COMPACT_SYM
+%token <kwd> COMPLETION_SYM
+%token <kwd> COMPRESSED_SYM
+%token <kwd> CONCURRENT
+%token <kwd> CONNECTION_SYM
+%token <kwd> CONSISTENT_SYM
+%token <kwd> CONSTRAINT_CATALOG_SYM /* SQL-2003-N */
+%token <kwd> CONSTRAINT_NAME_SYM /* SQL-2003-N */
+%token <kwd> CONSTRAINT_SCHEMA_SYM /* SQL-2003-N */
+%token <kwd> CONTAINS_SYM /* SQL-2003-N */
+%token <kwd> CONTEXT_SYM
+%token <kwd> CONTRIBUTORS_SYM
+%token <kwd> CPU_SYM
+%token <kwd> CUBE_SYM /* SQL-2003-R */
+%token <kwd> CURRENT_SYM /* SQL-2003-R */
+%token <kwd> CURRENT_POS_SYM
+%token <kwd> CURSOR_NAME_SYM /* SQL-2003-N */
+%token <kwd> CYCLE_SYM
+%token <kwd> DATAFILE_SYM
+%token <kwd> DATA_SYM /* SQL-2003-N */
+%token <kwd> DATETIME
+%token <kwd> DATE_FORMAT_SYM /* MYSQL-FUNC */
+%token <kwd> DATE_SYM /* SQL-2003-R */
+%token <kwd> DAY_SYM /* SQL-2003-R */
+%token <kwd> DEALLOCATE_SYM /* SQL-2003-R */
+%token <kwd> DECODE_SYM /* Oracle function, non-reserved */
+%token <kwd> DEFINER_SYM
+%token <kwd> DELAYED_SYM
+%token <kwd> DELAY_KEY_WRITE_SYM
+%token <kwd> DES_KEY_FILE
+%token <kwd> DIAGNOSTICS_SYM /* SQL-2003-N */
+%token <kwd> DIRECTORY_SYM
+%token <kwd> DISABLE_SYM
+%token <kwd> DISCARD
+%token <kwd> DISK_SYM
+%token <kwd> DO_SYM
+%token <kwd> DUMPFILE
+%token <kwd> DUPLICATE_SYM
+%token <kwd> DYNAMIC_SYM /* SQL-2003-R */
+%token <kwd> ENABLE_SYM
+%token <kwd> END /* SQL-2003-R */
+%token <kwd> ENDS_SYM
+%token <kwd> ENGINES_SYM
+%token <kwd> ENGINE_SYM
+%token <kwd> ENUM
+%token <kwd> ERROR_SYM
+%token <kwd> ERRORS
+%token <kwd> ESCAPE_SYM /* SQL-2003-R */
+%token <kwd> EVENTS_SYM
+%token <kwd> EVENT_SYM
+%token <kwd> EVERY_SYM /* SQL-2003-N */
+%token <kwd> EXCHANGE_SYM
+%token <kwd> EXAMINED_SYM
+%token <kwd> EXCLUDE_SYM /* SQL-2011-N */
+%token <kwd> EXECUTE_SYM /* SQL-2003-R */
+%token <kwd> EXCEPTION_SYM /* SQL-2003-N, Oracle-PLSQL-R */
+%token <kwd> EXIT_SYM
+%token <kwd> EXPANSION_SYM
+%token <kwd> EXPORT_SYM
+%token <kwd> EXTENDED_SYM
+%token <kwd> EXTENT_SIZE_SYM
+%token <kwd> FAST_SYM
+%token <kwd> FAULTS_SYM
+%token <kwd> FILE_SYM
+%token <kwd> FIRST_SYM /* SQL-2003-N */
+%token <kwd> FIXED_SYM
+%token <kwd> FLUSH_SYM
+%token <kwd> FOLLOWS_SYM /* MYSQL trigger*/
+%token <kwd> FOLLOWING_SYM /* SQL-2011-N */
+%token <kwd> FORCE_SYM
+%token <kwd> FORMAT_SYM
+%token <kwd> FOUND_SYM /* SQL-2003-R */
+%token <kwd> FULL /* SQL-2003-R */
+%token <kwd> FUNCTION_SYM /* SQL-2003-R */
+%token <kwd> GENERAL
+%token <kwd> GENERATED_SYM
+%token <kwd> GEOMETRYCOLLECTION
+%token <kwd> GEOMETRY_SYM
+%token <kwd> GET_FORMAT /* MYSQL-FUNC */
+%token <kwd> GET_SYM /* SQL-2003-R */
+%token <kwd> GLOBAL_SYM /* SQL-2003-R */
+%token <kwd> GRANTS
+%token <kwd> HANDLER_SYM
+%token <kwd> HARD_SYM
+%token <kwd> HASH_SYM
+%token <kwd> HELP_SYM
+%token <kwd> HIGH_PRIORITY
+%token <kwd> HOST_SYM
+%token <kwd> HOSTS_SYM
+%token <kwd> HOUR_SYM /* SQL-2003-R */
+%token <kwd> ID_SYM /* MYSQL */
+%token <kwd> IDENTIFIED_SYM
+%token <kwd> IGNORE_SERVER_IDS_SYM
+%token <kwd> IMMEDIATE_SYM /* SQL-2003-R */
+%token <kwd> IMPORT
+%token <kwd> INCREMENT_SYM
+%token <kwd> INDEXES
+%token <kwd> INITIAL_SIZE_SYM
+%token <kwd> INSERT_METHOD
+%token <kwd> INSTALL_SYM
+%token <kwd> INVOKER_SYM
+%token <kwd> IO_SYM
+%token <kwd> IPC_SYM
+%token <kwd> ISOLATION /* SQL-2003-R */
+%token <kwd> ISOPEN_SYM /* Oracle-N */
+%token <kwd> ISSUER_SYM
+%token <kwd> INVISIBLE_SYM
+%token <kwd> JSON_SYM
+%token <kwd> KEY_BLOCK_SIZE
+%token <kwd> LANGUAGE_SYM /* SQL-2003-R */
+%token <kwd> LAST_SYM /* SQL-2003-N */
+%token <kwd> LAST_VALUE
+%token <kwd> LASTVAL_SYM /* PostgreSQL sequence function */
+%token <kwd> LEAVES
+%token <kwd> LESS_SYM
+%token <kwd> LEVEL_SYM
+%token <kwd> LINESTRING
+%token <kwd> LIST_SYM
+%token <kwd> LOCAL_SYM /* SQL-2003-R */
+%token <kwd> LOCKS_SYM
+%token <kwd> LOGFILE_SYM
+%token <kwd> LOGS_SYM
+%token <kwd> MASTER_CONNECT_RETRY_SYM
+%token <kwd> MASTER_DELAY_SYM
+%token <kwd> MASTER_GTID_POS_SYM
+%token <kwd> MASTER_HOST_SYM
+%token <kwd> MASTER_LOG_FILE_SYM
+%token <kwd> MASTER_LOG_POS_SYM
+%token <kwd> MASTER_PASSWORD_SYM
+%token <kwd> MASTER_PORT_SYM
+%token <kwd> MASTER_SERVER_ID_SYM
+%token <kwd> MASTER_SSL_CAPATH_SYM
+%token <kwd> MASTER_SSL_CA_SYM
+%token <kwd> MASTER_SSL_CERT_SYM
+%token <kwd> MASTER_SSL_CIPHER_SYM
+%token <kwd> MASTER_SSL_CRL_SYM
+%token <kwd> MASTER_SSL_CRLPATH_SYM
+%token <kwd> MASTER_SSL_KEY_SYM
+%token <kwd> MASTER_SSL_SYM
+%token <kwd> MASTER_SYM
+%token <kwd> MASTER_USER_SYM
+%token <kwd> MASTER_USE_GTID_SYM
+%token <kwd> MASTER_HEARTBEAT_PERIOD_SYM
+%token <kwd> MAX_CONNECTIONS_PER_HOUR
+%token <kwd> MAX_QUERIES_PER_HOUR
+%token <kwd> MAX_ROWS
+%token <kwd> MAX_SIZE_SYM
+%token <kwd> MAX_UPDATES_PER_HOUR
+%token <kwd> MAX_STATEMENT_TIME_SYM
+%token <kwd> MAX_USER_CONNECTIONS_SYM
+%token <kwd> MEDIUM_SYM
+%token <kwd> MEMORY_SYM
+%token <kwd> MERGE_SYM /* SQL-2003-R */
+%token <kwd> MESSAGE_TEXT_SYM /* SQL-2003-N */
+%token <kwd> MICROSECOND_SYM /* MYSQL-FUNC */
+%token <kwd> MIGRATE_SYM
+%token <kwd> MINUTE_SYM /* SQL-2003-R */
+%token <kwd> MINVALUE_SYM
+%token <kwd> MIN_ROWS
+%token <kwd> MODE_SYM
+%token <kwd> MODIFY_SYM
+%token <kwd> MONTH_SYM /* SQL-2003-R */
+%token <kwd> MULTILINESTRING
+%token <kwd> MULTIPOINT
+%token <kwd> MULTIPOLYGON
+%token <kwd> MUTEX_SYM
+%token <kwd> MYSQL_SYM
+%token <kwd> MYSQL_ERRNO_SYM
+%token <kwd> NAMES_SYM /* SQL-2003-N */
+%token <kwd> NAME_SYM /* SQL-2003-N */
+%token <kwd> NATIONAL_SYM /* SQL-2003-R */
+%token <kwd> NCHAR_SYM /* SQL-2003-R */
+%token <kwd> NEW_SYM /* SQL-2003-R */
+%token <kwd> NEXT_SYM /* SQL-2003-N */
+%token <kwd> NEXTVAL_SYM /* PostgreSQL sequence function */
+%token <kwd> NOCACHE_SYM
+%token <kwd> NOCYCLE_SYM
+%token <kwd> NODEGROUP_SYM
+%token <kwd> NONE_SYM /* SQL-2003-R */
+%token <kwd> NOTFOUND_SYM /* Oracle-R */
+%token <kwd> NO_SYM /* SQL-2003-R */
+%token <kwd> NOMAXVALUE_SYM
+%token <kwd> NOMINVALUE_SYM
+%token <kwd> NO_WAIT_SYM
+%token <kwd> NOWAIT_SYM
+%token <kwd> NUMBER_SYM /* SQL-2003-N */
+%token <kwd> NVARCHAR_SYM
+%token <kwd> OF_SYM /* SQL-1992-R, Oracle-R */
+%token <kwd> OFFSET_SYM
+%token <kwd> OLD_PASSWORD_SYM
+%token <kwd> ONE_SYM
+%token <kwd> ONLY_SYM /* SQL-2003-R */
+%token <kwd> ONLINE_SYM
+%token <kwd> OPEN_SYM /* SQL-2003-R */
+%token <kwd> OPTIONS_SYM
+%token <kwd> OPTION /* SQL-2003-N */
+%token <kwd> OWNER_SYM
+%token <kwd> PACK_KEYS_SYM
+%token <kwd> PAGE_SYM
+%token <kwd> PARSER_SYM
+%token <kwd> PARTIAL /* SQL-2003-N */
+%token <kwd> PARTITIONS_SYM
+%token <kwd> PARTITIONING_SYM
+%token <kwd> PASSWORD_SYM
+%token <kwd> PERSISTENT_SYM
+%token <kwd> PHASE_SYM
+%token <kwd> PLUGINS_SYM
+%token <kwd> PLUGIN_SYM
+%token <kwd> POINT_SYM
+%token <kwd> POLYGON
+%token <kwd> PORT_SYM
+%token <kwd> PRECEDES_SYM /* MYSQL */
+%token <kwd> PRECEDING_SYM /* SQL-2011-N */
+%token <kwd> PREPARE_SYM /* SQL-2003-R */
+%token <kwd> PRESERVE_SYM
+%token <kwd> PREV_SYM
+%token <kwd> PREVIOUS_SYM
+%token <kwd> PRIVILEGES /* SQL-2003-N */
+%token <kwd> PROCESS
+%token <kwd> PROCESSLIST_SYM
+%token <kwd> PROFILE_SYM
+%token <kwd> PROFILES_SYM
+%token <kwd> PROXY_SYM
+%token <kwd> QUARTER_SYM
+%token <kwd> QUERY_SYM
+%token <kwd> QUICK
+%token <kwd> RAW /* Oracle */
+%token <kwd> READ_ONLY_SYM
+%token <kwd> REBUILD_SYM
+%token <kwd> RECOVER_SYM
+%token <kwd> REDOFILE_SYM
+%token <kwd> REDO_BUFFER_SIZE_SYM
+%token <kwd> REDUNDANT_SYM
+%token <kwd> RELAY
+%token <kwd> RELAYLOG_SYM
+%token <kwd> RELAY_LOG_FILE_SYM
+%token <kwd> RELAY_LOG_POS_SYM
+%token <kwd> RELAY_THREAD
+%token <kwd> RELOAD
+%token <kwd> REMOVE_SYM
+%token <kwd> REORGANIZE_SYM
+%token <kwd> REPAIR
+%token <kwd> REPEATABLE_SYM /* SQL-2003-N */
+%token <kwd> REPLICATION
+%token <kwd> RESET_SYM
+%token <kwd> RESTART_SYM
+%token <kwd> RESOURCES
+%token <kwd> RESTORE_SYM
+%token <kwd> RESUME_SYM
+%token <kwd> RETURNED_SQLSTATE_SYM /* SQL-2003-N */
+%token <kwd> RETURNS_SYM /* SQL-2003-R */
+%token <kwd> REUSE_SYM /* Oracle-R */
+%token <kwd> REVERSE_SYM
+%token <kwd> ROLE_SYM
+%token <kwd> ROLLBACK_SYM /* SQL-2003-R */
+%token <kwd> ROLLUP_SYM /* SQL-2003-R */
+%token <kwd> ROUTINE_SYM /* SQL-2003-N */
+%token <kwd> ROWCOUNT_SYM /* Oracle-N */
+%token <kwd> ROW_SYM /* SQL-2003-R */
+%token <kwd> ROW_COUNT_SYM /* SQL-2003-N */
+%token <kwd> ROW_FORMAT_SYM
+%token <kwd> RTREE_SYM
+%token <kwd> SAVEPOINT_SYM /* SQL-2003-R */
+%token <kwd> SCHEDULE_SYM
+%token <kwd> SCHEMA_NAME_SYM /* SQL-2003-N */
+%token <kwd> SECOND_SYM /* SQL-2003-R */
+%token <kwd> SECURITY_SYM /* SQL-2003-N */
+%token <kwd> SEQUENCE_SYM
+%token <kwd> SERIALIZABLE_SYM /* SQL-2003-N */
+%token <kwd> SERIAL_SYM
+%token <kwd> SESSION_SYM /* SQL-2003-N */
+%token <kwd> SERVER_SYM
+%token <kwd> SETVAL_SYM /* PostgreSQL sequence function */
+%token <kwd> SHARE_SYM
+%token <kwd> SHUTDOWN
+%token <kwd> SIGNED_SYM
+%token <kwd> SIMPLE_SYM /* SQL-2003-N */
+%token <kwd> SLAVE
+%token <kwd> SLAVES
+%token <kwd> SLAVE_POS_SYM
+%token <kwd> SLOW
+%token <kwd> SNAPSHOT_SYM
+%token <kwd> SOCKET_SYM
+%token <kwd> SOFT_SYM
+%token <kwd> SONAME_SYM
+%token <kwd> SOUNDS_SYM
+%token <kwd> SOURCE_SYM
+%token <kwd> SQL_BUFFER_RESULT
+%token <kwd> SQL_CACHE_SYM
+%token <kwd> SQL_CALC_FOUND_ROWS
+%token <kwd> SQL_NO_CACHE_SYM
+%token <kwd> SQL_THREAD
+%token <kwd> STARTS_SYM
+%token <kwd> START_SYM /* SQL-2003-R */
+%token <kwd> STATEMENT_SYM
+%token <kwd> STATUS_SYM
+%token <kwd> STOP_SYM
+%token <kwd> STORAGE_SYM
+%token <kwd> STORED_SYM
+%token <kwd> STRING_SYM
+%token <kwd> SUBCLASS_ORIGIN_SYM /* SQL-2003-N */
+%token <kwd> SUBDATE_SYM
+%token <kwd> SUBJECT_SYM
+%token <kwd> SUBPARTITIONS_SYM
+%token <kwd> SUBPARTITION_SYM
+%token <kwd> SUPER_SYM
+%token <kwd> SUSPEND_SYM
+%token <kwd> SWAPS_SYM
+%token <kwd> SWITCHES_SYM
+%token <kwd> TABLES
+%token <kwd> TABLESPACE
+%token <kwd> TABLE_CHECKSUM_SYM
+%token <kwd> TABLE_NAME_SYM /* SQL-2003-N */
+%token <kwd> TEMPORARY /* SQL-2003-N */
+%token <kwd> TEMPTABLE_SYM
+%token <kwd> TEXT_SYM
+%token <kwd> THAN_SYM
+%token <kwd> TIES_SYM /* SQL-2011-N */
+%token <kwd> TIMESTAMP /* SQL-2003-R */
+%token <kwd> TIMESTAMP_ADD
+%token <kwd> TIMESTAMP_DIFF
+%token <kwd> TIME_SYM /* SQL-2003-R */
+%token <kwd> TRANSACTION_SYM
+%token <kwd> TRANSACTIONAL_SYM
+%token <kwd> TRIGGERS_SYM
+%token <kwd> TRIM_ORACLE
+%token <kwd> TRUNCATE_SYM
+%token <kwd> TYPES_SYM
+%token <kwd> TYPE_SYM /* SQL-2003-N */
+%token <kwd> UDF_RETURNS_SYM
+%token <kwd> UNBOUNDED_SYM /* SQL-2011-N */
+%token <kwd> UNCOMMITTED_SYM /* SQL-2003-N */
+%token <kwd> UNDEFINED_SYM
+%token <kwd> UNDOFILE_SYM
+%token <kwd> UNDO_BUFFER_SIZE_SYM
+%token <kwd> UNICODE_SYM
+%token <kwd> UNINSTALL_SYM
+%token <kwd> UNKNOWN_SYM /* SQL-2003-R */
+%token <kwd> UNTIL_SYM
+%token <kwd> UPGRADE_SYM
+%token <kwd> USER_SYM /* SQL-2003-R */
+%token <kwd> USE_FRM
+%token <kwd> VALUE_SYM /* SQL-2003-R */
+%token <kwd> VARCHAR2 /* Oracle */
+%token <kwd> VARIABLES
+%token <kwd> VIA_SYM
+%token <kwd> VIEW_SYM /* SQL-2003-N */
+%token <kwd> VIRTUAL_SYM
+%token <kwd> WAIT_SYM
+%token <kwd> WARNINGS
+%token <kwd> WEEK_SYM
+%token <kwd> WEIGHT_STRING_SYM
+%token <kwd> WITHIN
+%token <kwd> WORK_SYM /* SQL-2003-N */
+%token <kwd> WRAPPER_SYM
+%token <kwd> WRITE_SYM /* SQL-2003-N */
+%token <kwd> X509_SYM
+%token <kwd> XA_SYM
+%token <kwd> XML_SYM
+%token <kwd> YEAR_SYM /* SQL-2003-R */
+
%left JOIN_SYM INNER_SYM STRAIGHT_JOIN CROSS LEFT RIGHT
/* A dummy token to force the priority of table_ref production in a join. */
@@ -1653,20 +1674,26 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize);
%left INTERVAL_SYM
%type <lex_str>
- IDENT IDENT_QUOTED DECIMAL_NUM FLOAT_NUM NUM LONG_NUM
+ DECIMAL_NUM FLOAT_NUM NUM LONG_NUM
HEX_NUM HEX_STRING
LEX_HOSTNAME ULONGLONG_NUM field_ident select_alias ident_or_text
- IDENT_sys TEXT_STRING_sys TEXT_STRING_literal
+ TEXT_STRING_sys TEXT_STRING_literal
opt_component key_cache_name
- sp_opt_label BIN_NUM TEXT_STRING_filesystem ident_or_empty
- opt_constraint constraint opt_ident ident_table_alias
- sp_decl_ident
+ sp_opt_label BIN_NUM TEXT_STRING_filesystem
+ opt_constraint constraint opt_ident
sp_block_label opt_place opt_db
%type <lex_str>
- label_ident
sp_label
+%type <ident_sys>
+ IDENT_sys
+ ident
+ label_ident
+ sp_decl_ident
+ ident_or_empty
+ ident_table_alias
+
%type <lex_string_with_metadata>
TEXT_STRING
NCHAR_STRING
@@ -1674,8 +1701,18 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize);
%type <lex_str_ptr>
opt_table_alias
-%type <lex_string_with_pos>
- ident ident_with_tok_start
+%type <ident_cli>
+ IDENT
+ IDENT_QUOTED
+ IDENT_cli
+ ident_cli
+
+%type <kwd>
+ keyword keyword_sp
+ keyword_alias
+ keyword_sp_data_type
+ keyword_sp_not_data_type
+ keyword_sp_verb_clause
%type <table>
table_ident table_ident_nodb references xid
@@ -1770,6 +1807,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize);
variable variable_aux bool_pri
predicate bit_expr parenthesized_expr
table_wild simple_expr column_default_non_parenthesized_expr udf_expr
+ select_sublist_qualified_asterisk
expr_or_default set_expr_or_default
geometry_function signed_literal expr_or_literal
opt_escape
@@ -1857,10 +1895,6 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize);
%type <Lex_length_and_dec> precision opt_precision float_options
-%type <symbol> keyword keyword_sp keyword_alias
- keyword_sp_data_type
- keyword_sp_not_data_type
-
%type <lex_user> user grant_user grant_role user_or_role current_role
admin_option_for_role user_maybe_role
@@ -2028,7 +2062,6 @@ END_OF_INPUT
'-' '+' '*' '/' '%' '(' ')'
',' '!' '{' '}' '&' '|' AND_SYM OR_SYM OR_OR_SYM BETWEEN_SYM CASE_SYM
THEN_SYM WHEN_SYM DIV_SYM MOD_SYM OR2_SYM AND_AND_SYM DELETE_SYM
- ROLE_SYM
%type <with_clause> opt_with_clause with_clause
@@ -3776,13 +3809,9 @@ statement_information_item:
}
simple_target_specification:
- ident
+ ident_cli
{
- Lex_input_stream *lip= &thd->m_parser_state->m_lip;
- $$= thd->lex->create_item_for_sp_var(&$1, NULL,
- lip->get_tok_start(),
- lip->get_ptr());
- if ($$ == NULL)
+ if (!($$= thd->lex->create_item_for_sp_var(&$1, NULL)))
MYSQL_YYABORT;
}
| '@' ident_or_text
@@ -3862,7 +3891,7 @@ condition_information_item_name:
;
sp_decl_ident:
- ident { $$= $1; }
+ ident
;
sp_decl_idents:
@@ -5883,15 +5912,15 @@ opt_versioning_interval_start:
{
$$= thd->systime();
}
- | remember_tok_start STARTS_SYM ulong_num
+ | STARTS_SYM ulong_num
{
/* only allowed from mysql_unpack_partition() */
if (!Lex->part_info->table)
{
- thd->parse_error(ER_SYNTAX_ERROR, $1);
+ thd->parse_error(ER_SYNTAX_ERROR, $1.pos());
MYSQL_YYABORT;
}
- $$= (ulong)$3;
+ $$= (ulong)$2;
}
;
@@ -7858,8 +7887,8 @@ opt_ev_sql_stmt:
;
ident_or_empty:
- /* empty */ { $$= null_clex_str; }
- | ident { $$= $1; }
+ /* empty */ { $$= Lex_ident_sys(); }
+ | ident
;
alter_commands:
@@ -9345,7 +9374,7 @@ select_item_list:
;
select_item:
- remember_name table_wild remember_end
+ remember_name select_sublist_qualified_asterisk remember_end
{
if (add_item_to_list(thd, $2))
MYSQL_YYABORT;
@@ -10843,40 +10872,10 @@ function_call_generic:
MYSQL_YYABORT;
}
}
- | ident '.' ident '(' opt_expr_list ')'
+ | ident_cli '.' ident_cli '(' opt_expr_list ')'
{
- Create_qfunc *builder;
- Item *item= NULL;
-
- /*
- The following in practice calls:
- <code>Create_sp_func::create()</code>
- and builds a stored function.
-
- However, it's important to maintain the interface between the
- parser and the implementation in item_create.cc clean,
- since this will change with WL#2128 (SQL PATH):
- - INFORMATION_SCHEMA.version() is the SQL 99 syntax for the native
- function version(),
- - MySQL.version() is the SQL 2003 syntax for the native function
- version() (a vendor can specify any schema).
- */
-
- if (!$1.str || check_db_name((LEX_STRING*) &$1))
- my_yyabort_error((ER_WRONG_DB_NAME, MYF(0), $1.str));
- if (check_routine_name(&$3))
- {
+ if (!($$= Lex->make_item_func_call_generic(thd, &$1, &$3, $5)))
MYSQL_YYABORT;
- }
-
- builder= find_qualified_function_builder(thd);
- DBUG_ASSERT(builder);
- item= builder->create_with_db(thd, &$1, &$3, true, $5);
-
- if (! ($$= item))
- {
- MYSQL_YYABORT;
- }
}
;
@@ -12613,26 +12612,20 @@ limit_options:
;
limit_option:
- ident_with_tok_start
- {
- LEX *lex= thd->lex;
- Lex_input_stream *lip= & thd->m_parser_state->m_lip;
- if (!($$= lex->create_item_limit(thd, &$1,
- $1.m_pos, lip->get_tok_end())))
- MYSQL_YYABORT;
- }
- | ident_with_tok_start '.' ident
- {
- LEX *lex= thd->lex;
- Lex_input_stream *lip= & thd->m_parser_state->m_lip;
- if (!($$= lex->create_item_limit(thd, &$1, &$3,
- $1.m_pos, lip->get_ptr())))
- MYSQL_YYABORT;
- }
+ ident_cli
+ {
+ if (!($$= Lex->create_item_limit(thd, &$1)))
+ MYSQL_YYABORT;
+ }
+ | ident_cli '.' ident_cli
+ {
+ if (!($$= Lex->create_item_limit(thd, &$1, &$3)))
+ MYSQL_YYABORT;
+ }
| param_marker
- {
- $1->limit_clause_param= TRUE;
- }
+ {
+ $1->limit_clause_param= TRUE;
+ }
| ULONGLONG_NUM
{
$$= new (thd->mem_root) Item_uint(thd, $1.str, $1.length);
@@ -13162,10 +13155,9 @@ insert_lock_option:
| LOW_PRIORITY { $$= TL_WRITE_LOW_PRIORITY; }
| DELAYED_SYM
{
- Lex->keyword_delayed_begin_offset= (uint)(YYLIP->get_tok_start() -
- thd->query());
- Lex->keyword_delayed_end_offset= Lex->keyword_delayed_begin_offset +
- YYLIP->yyLength() + 1;
+ // QQ: why was +1?
+ Lex->keyword_delayed_begin_offset= (uint)($1.pos() - thd->query());
+ Lex->keyword_delayed_end_offset= (uint)($1.end() - thd->query());
$$= TL_WRITE_DELAYED;
}
| HIGH_PRIORITY { $$= TL_WRITE; }
@@ -13175,10 +13167,8 @@ replace_lock_option:
opt_low_priority { $$= $1; }
| DELAYED_SYM
{
- Lex->keyword_delayed_begin_offset= (uint)(YYLIP->get_tok_start() -
- thd->query());
- Lex->keyword_delayed_end_offset= Lex->keyword_delayed_begin_offset +
- YYLIP->yyLength() + 1;
+ Lex->keyword_delayed_begin_offset= (uint)($1.pos() - thd->query());
+ Lex->keyword_delayed_end_offset= (uint)($1.end() - thd->query());
$$= TL_WRITE_DELAYED;
}
;
@@ -14122,7 +14112,7 @@ opt_format_json:
DBUG_ASSERT(Lex->explain_json==false);
else
my_yyabort_error((ER_UNKNOWN_EXPLAIN_FORMAT, MYF(0), "EXPLAIN",
- $3.str));
+ $3.str));
}
;
@@ -14951,24 +14941,26 @@ insert_ident:
table_wild:
ident '.' '*'
{
- SELECT_LEX *sel= Select;
- $$= new (thd->mem_root) Item_field(thd, Lex->current_context(),
- NullS, $1.str, &star_clex_str);
- if ($$ == NULL)
+ if (!($$= Lex->create_item_qualified_asterisk(thd, &$1)))
MYSQL_YYABORT;
- sel->with_wild++;
}
| ident '.' ident '.' '*'
{
- SELECT_LEX *sel= Select;
- const char* schema= thd->client_capabilities & CLIENT_NO_SCHEMA ?
- NullS : $1.str;
- $$= new (thd->mem_root) Item_field(thd, Lex->current_context(),
- schema,
- $3.str, &star_clex_str);
- if ($$ == NULL)
+ if (!($$= Lex->create_item_qualified_asterisk(thd, &$1, &$3)))
+ MYSQL_YYABORT;
+ }
+ ;
+
+select_sublist_qualified_asterisk:
+ ident_cli '.' '*'
+ {
+ if (!($$= Lex->create_item_qualified_asterisk(thd, &$1)))
+ MYSQL_YYABORT;
+ }
+ | ident_cli '.' ident_cli '.' '*'
+ {
+ if (!($$= Lex->create_item_qualified_asterisk(thd, &$1, &$3)))
MYSQL_YYABORT;
- sel->with_wild++;
}
;
@@ -14976,21 +14968,27 @@ order_ident:
expr { $$=$1; }
;
+
simple_ident:
- ident
+ ident_cli
{
- Lex_input_stream *lip= YYLIP;
- if (!($$= Lex->create_item_ident(thd, &$1,
- lip->get_tok_start_prev(),
- lip->get_tok_end())))
+ if (!($$= Lex->create_item_ident(thd, &$1)))
MYSQL_YYABORT;
}
- | simple_ident_q2
- | ident '.' ident
+ | ident_cli '.' ident_cli
{
- LEX *lex= thd->lex;
- if (!($$= lex->create_item_ident(thd, &$1, &$3,
- $1.m_pos, YYLIP->get_tok_end())))
+ if (!($$= Lex->create_item_ident(thd, &$1, &$3)))
+ MYSQL_YYABORT;
+ }
+ | '.' ident_cli '.' ident_cli
+ {
+ Lex_ident_cli empty($2.pos(), 0);
+ if (!($$= Lex->create_item_ident(thd, &empty, &$2, &$4)))
+ MYSQL_YYABORT;
+ }
+ | ident_cli '.' ident_cli '.' ident_cli
+ {
+ if (!($$= Lex->create_item_ident(thd, &$1, &$3, &$5)))
MYSQL_YYABORT;
}
;
@@ -15016,7 +15014,8 @@ simple_ident_q:
simple_ident_q2:
'.' ident '.' ident
{
- if (!($$= Lex->create_item_ident(thd, &null_clex_str, &$2, &$4)))
+ Lex_ident_sys none;
+ if (!($$= Lex->create_item_ident(thd, &none, &$2, &$4)))
MYSQL_YYABORT;
}
| ident '.' ident '.' ident
@@ -15095,32 +15094,22 @@ table_ident_nodb:
}
;
-IDENT_sys:
- IDENT { $$= $1; }
+IDENT_cli:
+ IDENT
| IDENT_QUOTED
+ ;
+
+ident_cli:
+ IDENT
+ | IDENT_QUOTED
+ | keyword { $$= $1; }
+ ;
+
+IDENT_sys:
+ IDENT_cli
{
- if (thd->charset_is_system_charset)
- {
- CHARSET_INFO *cs= system_charset_info;
- size_t wlen= Well_formed_prefix(cs, $1.str, $1.length).length();
- if (wlen < $1.length)
- {
- ErrConvString err($1.str, $1.length, &my_charset_bin);
- my_error(ER_INVALID_CHARACTER_STRING, MYF(0),
- cs->csname, err.ptr());
- MYSQL_YYABORT;
- }
- $$= $1;
- }
- else
- {
- LEX_STRING to;
- if (thd->convert_with_error(system_charset_info, &to,
- thd->charset(), $1.str, $1.length))
- MYSQL_YYABORT;
- $$.str= to.str;
- $$.length= to.length;
- }
+ if (thd->to_ident_sys_alloc(&$$, &$1))
+ MYSQL_YYABORT;
}
;
@@ -15176,7 +15165,7 @@ TEXT_STRING_filesystem:
}
ident_table_alias:
- IDENT_sys { $$= $1; }
+ IDENT_sys
| keyword_alias
{
$$.str= thd->strmake($1.str, $1.length);
@@ -15188,43 +15177,19 @@ ident_table_alias:
ident:
IDENT_sys
- {
- (LEX_CSTRING &)$$= $1;
- $$.m_pos= (char *) YYLIP->get_tok_start_prev();
- }
- | keyword
- {
- $$.str= thd->strmake($1.str, $1.length);
- if ($$.str == NULL)
- MYSQL_YYABORT;
- $$.length= $1.length;
- $$.m_pos= (char *) YYLIP->get_tok_start_prev();
- }
- ;
-
-ident_with_tok_start:
- IDENT_sys
- {
- (LEX_CSTRING &)$$= $1;
- $$.m_pos= (char *) YYLIP->get_tok_start();
- }
| keyword
{
- if (!($$.str= thd->strmake($1.str, $1.length)))
+ if ($$.copy_keyword(thd, &$1))
MYSQL_YYABORT;
- $$.length= $1.length;
- $$.m_pos= (char *) YYLIP->get_tok_start();
}
;
label_ident:
- IDENT_sys { $$=$1; }
+ IDENT_sys
| keyword_sp
{
- $$.str= thd->strmake($1.str, $1.length);
- if ($$.str == NULL)
+ if ($$.copy_keyword(thd, &$1))
MYSQL_YYABORT;
- $$.length= $1.length;
}
;
@@ -15300,73 +15265,73 @@ user: user_maybe_role
/* Keywords which we allow as table aliases. */
keyword_alias:
- keyword_sp {}
- | keyword_sp_verb_clause{}
- | ASCII_SYM {}
- | BACKUP_SYM {}
- | BINLOG_SYM {}
- | BYTE_SYM {}
- | CACHE_SYM {}
- | CHARSET {}
- | CHECKSUM_SYM {}
- | CHECKPOINT_SYM {}
- | COLUMN_ADD_SYM {}
- | COLUMN_CHECK_SYM {}
- | COLUMN_CREATE_SYM {}
- | COLUMN_DELETE_SYM {}
- | COLUMN_GET_SYM {}
- | COMMENT_SYM {}
- | CONTAINS_SYM {}
- | DEALLOCATE_SYM {}
- | EXAMINED_SYM {}
- | EXCLUDE_SYM {}
- | EXECUTE_SYM {}
- | FLUSH_SYM {}
- | FOLLOWS_SYM {}
- | FOLLOWING_SYM {}
- | FORMAT_SYM {}
- | GET_SYM {}
- | HELP_SYM {}
- | HOST_SYM {}
- | INSTALL_SYM {}
- | LANGUAGE_SYM {}
- | NO_SYM {}
- | OPTION {}
- | OPTIONS_SYM {}
- | OTHERS_SYM {}
- | OWNER_SYM {}
- | PARSER_SYM {}
- | PERIOD_SYM {}
- | PORT_SYM {}
- | PRECEDES_SYM {}
- | PRECEDING_SYM {}
- | PREPARE_SYM {}
- | REMOVE_SYM {}
- | RESET_SYM {}
- | RESTORE_SYM {}
- | SECURITY_SYM {}
- | SERVER_SYM {}
- | SIGNED_SYM {}
- | SOCKET_SYM {}
- | SLAVE {}
- | SLAVES {}
- | SONAME_SYM {}
- | START_SYM {}
- | STOP_SYM {}
- | STORED_SYM {}
- | TIES_SYM {}
- | UNICODE_SYM {}
- | UNINSTALL_SYM {}
- | UNBOUNDED_SYM {}
- | WITHIN {}
- | WRAPPER_SYM {}
- | XA_SYM {}
- | UPGRADE_SYM {}
+ keyword_sp
+ | keyword_sp_verb_clause
+ | ASCII_SYM
+ | BACKUP_SYM
+ | BINLOG_SYM
+ | BYTE_SYM
+ | CACHE_SYM
+ | CHARSET
+ | CHECKSUM_SYM
+ | CHECKPOINT_SYM
+ | COLUMN_ADD_SYM
+ | COLUMN_CHECK_SYM
+ | COLUMN_CREATE_SYM
+ | COLUMN_DELETE_SYM
+ | COLUMN_GET_SYM
+ | COMMENT_SYM
+ | CONTAINS_SYM
+ | DEALLOCATE_SYM
+ | EXAMINED_SYM
+ | EXCLUDE_SYM
+ | EXECUTE_SYM
+ | FLUSH_SYM
+ | FOLLOWS_SYM
+ | FOLLOWING_SYM
+ | FORMAT_SYM
+ | GET_SYM
+ | HELP_SYM
+ | HOST_SYM
+ | INSTALL_SYM
+ | LANGUAGE_SYM
+ | NO_SYM
+ | OPTION
+ | OPTIONS_SYM
+ | OTHERS_SYM
+ | OWNER_SYM
+ | PARSER_SYM
+ | PERIOD_SYM
+ | PORT_SYM
+ | PRECEDES_SYM
+ | PRECEDING_SYM
+ | PREPARE_SYM
+ | REMOVE_SYM
+ | RESET_SYM
+ | RESTORE_SYM
+ | SECURITY_SYM
+ | SERVER_SYM
+ | SIGNED_SYM
+ | SOCKET_SYM
+ | SLAVE
+ | SLAVES
+ | SONAME_SYM
+ | START_SYM
+ | STOP_SYM
+ | STORED_SYM
+ | TIES_SYM
+ | UNICODE_SYM
+ | UNINSTALL_SYM
+ | UNBOUNDED_SYM
+ | WITHIN
+ | WRAPPER_SYM
+ | XA_SYM
+ | UPGRADE_SYM
;
/* Keyword that we allow for identifiers (except SP labels) */
-keyword: keyword_alias | WINDOW_SYM {};
+keyword: keyword_alias | WINDOW_SYM;
/*
* Keywords that we allow for labels in SPs.
@@ -15388,18 +15353,18 @@ keyword_sp:
xxx:=10
*/
keyword_sp_verb_clause:
- BEGIN_SYM { /* Compound. Reserved in Oracle */ }
- | CLOSE_SYM { /* Verb clause. Reserved in Oracle */ }
- | COMMIT_SYM { /* Verb clause. Reserved in Oracle */ }
- | DO_SYM { /* Verb clause */ }
- | END { /* Compound. Reserved in Oracle */ }
- | HANDLER_SYM { /* Verb clause */ }
- | OPEN_SYM { /* Verb clause. Reserved in Oracle */ }
- | REPAIR { /* Verb clause */ }
- | ROLLBACK_SYM { /* Verb clause. Reserved in Oracle */ }
- | SAVEPOINT_SYM { /* Verb clause. Reserved in Oracle */ }
- | SHUTDOWN { /* Verb clause */ }
- | TRUNCATE_SYM { /* Verb clause. Reserved in Oracle */ }
+ BEGIN_SYM /* Compound. Reserved in Oracle */
+ | CLOSE_SYM /* Verb clause. Reserved in Oracle */
+ | COMMIT_SYM /* Verb clause. Reserved in Oracle */
+ | DO_SYM /* Verb clause */
+ | END /* Compound. Reserved in Oracle */
+ | HANDLER_SYM /* Verb clause */
+ | OPEN_SYM /* Verb clause. Reserved in Oracle */
+ | REPAIR /* Verb clause */
+ | ROLLBACK_SYM /* Verb clause. Reserved in Oracle */
+ | SAVEPOINT_SYM /* Verb clause. Reserved in Oracle */
+ | SHUTDOWN /* Verb clause */
+ | TRUNCATE_SYM /* Verb clause. Reserved in Oracle */
;
@@ -15408,362 +15373,362 @@ keyword_sp_verb_clause:
but not allowed as non-delimited SP variable names in sql_mode=ORACLE.
*/
keyword_sp_data_type:
- BIT_SYM {}
- | BOOLEAN_SYM {} /* PLSQL-R */
- | BOOL_SYM {}
- | CLOB {}
- | DATE_SYM {} /* Oracle-R, PLSQL-R */
- | DATETIME {}
- | ENUM {}
- | FIXED_SYM {}
- | GEOMETRYCOLLECTION {}
- | GEOMETRY_SYM {}
- | JSON_SYM {}
- | LINESTRING {}
- | MEDIUM_SYM {}
- | MULTILINESTRING {}
- | MULTIPOINT {}
- | MULTIPOLYGON {}
- | NATIONAL_SYM {}
- | NCHAR_SYM {}
- | NUMBER_SYM {} /* Oracle-R, PLSQL-R */
- | NVARCHAR_SYM {}
- | POINT_SYM {}
- | POLYGON {}
- | RAW {} /* Oracle-R */
- | ROW_SYM {}
- | SERIAL_SYM {}
- | TEXT_SYM {}
- | TIMESTAMP {}
- | TIME_SYM {} /* Oracle-R */
- | VARCHAR2 {} /* Oracle-R, PLSQL-R */
- | YEAR_SYM {}
+ BIT_SYM
+ | BOOLEAN_SYM /* PLSQL-R */
+ | BOOL_SYM
+ | CLOB
+ | DATE_SYM /* Oracle-R, PLSQL-R */
+ | DATETIME
+ | ENUM
+ | FIXED_SYM
+ | GEOMETRYCOLLECTION
+ | GEOMETRY_SYM
+ | JSON_SYM
+ | LINESTRING
+ | MEDIUM_SYM
+ | MULTILINESTRING
+ | MULTIPOINT
+ | MULTIPOLYGON
+ | NATIONAL_SYM
+ | NCHAR_SYM
+ | NUMBER_SYM /* Oracle-R, PLSQL-R */
+ | NVARCHAR_SYM
+ | POINT_SYM
+ | POLYGON
+ | RAW /* Oracle-R */
+ | ROW_SYM
+ | SERIAL_SYM
+ | TEXT_SYM
+ | TIMESTAMP
+ | TIME_SYM /* Oracle-R */
+ | VARCHAR2 /* Oracle-R, PLSQL-R */
+ | YEAR_SYM
;
keyword_sp_not_data_type:
- ACTION {}
- | ADDDATE_SYM {}
- | ADMIN_SYM {}
- | AFTER_SYM {}
- | AGAINST {}
- | AGGREGATE_SYM {}
- | ALGORITHM_SYM {}
- | ALWAYS_SYM {}
- | ANY_SYM {}
- | AT_SYM {}
- | ATOMIC_SYM {}
- | AUTHORS_SYM {}
- | AUTO_INC {}
- | AUTOEXTEND_SIZE_SYM {}
- | AUTO_SYM {}
- | AVG_ROW_LENGTH {}
- | AVG_SYM {}
- | BLOCK_SYM {}
- | BODY_SYM {}
- | BTREE_SYM {}
- | CASCADED {}
- | CATALOG_NAME_SYM {}
- | CHAIN_SYM {}
- | CHANGED {}
- | CIPHER_SYM {}
- | CLIENT_SYM {}
- | CLASS_ORIGIN_SYM {}
- | COALESCE {}
- | CODE_SYM {}
- | COLLATION_SYM {}
- | COLUMN_NAME_SYM {}
- | COLUMNS {}
- | COMMITTED_SYM {}
- | COMPACT_SYM {}
- | COMPLETION_SYM {}
- | COMPRESSED_SYM {}
- | CONCURRENT {}
- | CONNECTION_SYM {}
- | CONSISTENT_SYM {}
- | CONSTRAINT_CATALOG_SYM {}
- | CONSTRAINT_SCHEMA_SYM {}
- | CONSTRAINT_NAME_SYM {}
- | CONTEXT_SYM {}
- | CONTRIBUTORS_SYM {}
- | CURRENT_POS_SYM {}
- | CPU_SYM {}
- | CUBE_SYM {}
+ ACTION
+ | ADDDATE_SYM
+ | ADMIN_SYM
+ | AFTER_SYM
+ | AGAINST
+ | AGGREGATE_SYM
+ | ALGORITHM_SYM
+ | ALWAYS_SYM
+ | ANY_SYM
+ | AT_SYM
+ | ATOMIC_SYM
+ | AUTHORS_SYM
+ | AUTO_INC
+ | AUTOEXTEND_SIZE_SYM
+ | AUTO_SYM
+ | AVG_ROW_LENGTH
+ | AVG_SYM
+ | BLOCK_SYM
+ | BODY_SYM
+ | BTREE_SYM
+ | CASCADED
+ | CATALOG_NAME_SYM
+ | CHAIN_SYM
+ | CHANGED
+ | CIPHER_SYM
+ | CLIENT_SYM
+ | CLASS_ORIGIN_SYM
+ | COALESCE
+ | CODE_SYM
+ | COLLATION_SYM
+ | COLUMN_NAME_SYM
+ | COLUMNS
+ | COMMITTED_SYM
+ | COMPACT_SYM
+ | COMPLETION_SYM
+ | COMPRESSED_SYM
+ | CONCURRENT
+ | CONNECTION_SYM
+ | CONSISTENT_SYM
+ | CONSTRAINT_CATALOG_SYM
+ | CONSTRAINT_SCHEMA_SYM
+ | CONSTRAINT_NAME_SYM
+ | CONTEXT_SYM
+ | CONTRIBUTORS_SYM
+ | CURRENT_POS_SYM
+ | CPU_SYM
+ | CUBE_SYM
/*
Although a reserved keyword in SQL:2003 (and :2008),
not reserved in MySQL per WL#2111 specification.
*/
- | CURRENT_SYM {}
- | CURSOR_NAME_SYM {}
- | CYCLE_SYM {}
- | DATA_SYM {}
- | DATAFILE_SYM {}
- | DATE_FORMAT_SYM {}
- | DAY_SYM {}
- | DECODE_SYM {}
- | DEFINER_SYM {}
- | DELAY_KEY_WRITE_SYM {}
- | DES_KEY_FILE {}
- | DIAGNOSTICS_SYM {}
- | DIRECTORY_SYM {}
- | DISABLE_SYM {}
- | DISCARD {}
- | DISK_SYM {}
- | DUMPFILE {}
- | DUPLICATE_SYM {}
- | DYNAMIC_SYM {}
- | ELSIF_SYM {}
- | ENDS_SYM {}
- | ENGINE_SYM {}
- | ENGINES_SYM {}
- | ERROR_SYM {}
- | ERRORS {}
- | ESCAPE_SYM {}
- | EVENT_SYM {}
- | EVENTS_SYM {}
- | EVERY_SYM {}
- | EXCEPTION_SYM {}
- | EXCHANGE_SYM {}
- | EXPANSION_SYM {}
- | EXPORT_SYM {}
- | EXTENDED_SYM {}
- | EXTENT_SIZE_SYM {}
- | FAULTS_SYM {}
- | FAST_SYM {}
- | FOUND_SYM {}
- | ENABLE_SYM {}
- | FULL {}
- | FILE_SYM {}
- | FIRST_SYM {}
- | GENERAL {}
- | GENERATED_SYM {}
- | GET_FORMAT {}
- | GRANTS {}
- | GLOBAL_SYM {}
- | GOTO_SYM {}
- | HASH_SYM {}
- | HARD_SYM {}
- | HISTORY_SYM {}
- | HOSTS_SYM {}
- | HOUR_SYM {}
- | ID_SYM {}
- | IDENTIFIED_SYM {}
- | IGNORE_SERVER_IDS_SYM {}
- | INCREMENT_SYM {}
- | IMMEDIATE_SYM {} /* SQL-2003-R */
- | INVOKER_SYM {}
- | IMPORT {}
- | INDEXES {}
- | INITIAL_SIZE_SYM {}
- | IO_SYM {}
- | IPC_SYM {}
- | ISOLATION {}
- | ISOPEN_SYM {}
- | ISSUER_SYM {}
- | INSERT_METHOD {}
- | INVISIBLE_SYM {}
- | KEY_BLOCK_SIZE {}
- | LAST_VALUE {}
- | LAST_SYM {}
- | LASTVAL_SYM {}
- | LEAVES {}
- | LESS_SYM {}
- | LEVEL_SYM {}
- | LIST_SYM {}
- | LOCAL_SYM {}
- | LOCKS_SYM {}
- | LOGFILE_SYM {}
- | LOGS_SYM {}
- | MAX_ROWS {}
- | MASTER_SYM {}
- | MASTER_HEARTBEAT_PERIOD_SYM {}
- | MASTER_GTID_POS_SYM {}
- | MASTER_HOST_SYM {}
- | MASTER_PORT_SYM {}
- | MASTER_LOG_FILE_SYM {}
- | MASTER_LOG_POS_SYM {}
- | MASTER_USER_SYM {}
- | MASTER_USE_GTID_SYM {}
- | MASTER_PASSWORD_SYM {}
- | MASTER_SERVER_ID_SYM {}
- | MASTER_CONNECT_RETRY_SYM {}
- | MASTER_DELAY_SYM {}
- | MASTER_SSL_SYM {}
- | MASTER_SSL_CA_SYM {}
- | MASTER_SSL_CAPATH_SYM {}
- | MASTER_SSL_CERT_SYM {}
- | MASTER_SSL_CIPHER_SYM {}
- | MASTER_SSL_CRL_SYM {}
- | MASTER_SSL_CRLPATH_SYM {}
- | MASTER_SSL_KEY_SYM {}
- | MAX_CONNECTIONS_PER_HOUR {}
- | MAX_QUERIES_PER_HOUR {}
- | MAX_SIZE_SYM {}
- | MAX_STATEMENT_TIME_SYM {}
- | MAX_UPDATES_PER_HOUR {}
- | MAX_USER_CONNECTIONS_SYM {}
- | MEMORY_SYM {}
- | MERGE_SYM {}
- | MESSAGE_TEXT_SYM {}
- | MICROSECOND_SYM {}
- | MIGRATE_SYM {}
- | MINUTE_SYM {}
- | MINVALUE_SYM {}
- | MIN_ROWS {}
- | MODIFY_SYM {}
- | MODE_SYM {}
- | MONTH_SYM {}
- | MUTEX_SYM {}
- | MYSQL_SYM {}
- | MYSQL_ERRNO_SYM {}
- | NAME_SYM {}
- | NAMES_SYM {}
- | NEXT_SYM {}
- | NEXTVAL_SYM {}
- | NEW_SYM {}
- | NOCACHE_SYM {}
- | NOCYCLE_SYM {}
- | NOMINVALUE_SYM {}
- | NOMAXVALUE_SYM {}
- | NO_WAIT_SYM {}
- | NOWAIT_SYM {}
- | NODEGROUP_SYM {}
- | NONE_SYM {}
- | NOTFOUND_SYM {}
- | OF_SYM {} /* SQL-1999-R, Oracle-R */
- | OFFSET_SYM {}
- | OLD_PASSWORD_SYM {}
- | ONE_SYM {}
- | ONLINE_SYM {}
- | ONLY_SYM {}
- | PACKAGE_SYM {}
- | PACK_KEYS_SYM {}
- | PAGE_SYM {}
- | PARTIAL {}
- | PARTITIONING_SYM {}
- | PARTITIONS_SYM {}
- | PASSWORD_SYM {}
- | PERSISTENT_SYM {}
- | PHASE_SYM {}
- | PLUGIN_SYM {}
- | PLUGINS_SYM {}
- | PRESERVE_SYM {}
- | PREV_SYM {}
- | PREVIOUS_SYM {}
- | PRIVILEGES {}
- | PROCESS {}
- | PROCESSLIST_SYM {}
- | PROFILE_SYM {}
- | PROFILES_SYM {}
- | PROXY_SYM {}
- | QUARTER_SYM {}
- | QUERY_SYM {}
- | QUICK {}
- | RAISE_SYM {}
- | READ_ONLY_SYM {}
- | REBUILD_SYM {}
- | RECOVER_SYM {}
- | REDO_BUFFER_SIZE_SYM {}
- | REDOFILE_SYM {}
- | REDUNDANT_SYM {}
- | RELAY {}
- | RELAYLOG_SYM {}
- | RELAY_LOG_FILE_SYM {}
- | RELAY_LOG_POS_SYM {}
- | RELAY_THREAD {}
- | RELOAD {}
- | REORGANIZE_SYM {}
- | REPEATABLE_SYM {}
- | REPLICATION {}
- | RESOURCES {}
- | RESTART_SYM {}
- | RESUME_SYM {}
- | RETURNED_SQLSTATE_SYM {}
- | RETURNS_SYM {}
- | REUSE_SYM {} /* Oracle-R */
- | REVERSE_SYM {}
- | ROLE_SYM {}
- | ROLLUP_SYM {}
- | ROUTINE_SYM {}
- | ROWCOUNT_SYM {}
- | ROWTYPE_SYM {}
- | ROW_COUNT_SYM {}
- | ROW_FORMAT_SYM {}
- | RTREE_SYM {}
- | SCHEDULE_SYM {}
- | SCHEMA_NAME_SYM {}
- | SECOND_SYM {}
- | SEQUENCE_SYM {}
- | SERIALIZABLE_SYM {}
- | SESSION_SYM {}
- | SETVAL_SYM {}
- | SIMPLE_SYM {}
- | SHARE_SYM {}
- | SLAVE_POS_SYM {}
- | SLOW {}
- | SNAPSHOT_SYM {}
- | SOFT_SYM {}
- | SOUNDS_SYM {}
- | SOURCE_SYM {}
- | SQL_CACHE_SYM {}
- | SQL_BUFFER_RESULT {}
- | SQL_NO_CACHE_SYM {}
- | SQL_THREAD {}
- | STARTS_SYM {}
- | STATEMENT_SYM {}
- | STATUS_SYM {}
- | STORAGE_SYM {}
- | STRING_SYM {}
- | SUBCLASS_ORIGIN_SYM {}
- | SUBDATE_SYM {}
- | SUBJECT_SYM {}
- | SUBPARTITION_SYM {}
- | SUBPARTITIONS_SYM {}
- | SUPER_SYM {}
- | SUSPEND_SYM {}
- | SWAPS_SYM {}
- | SWITCHES_SYM {}
- | SYSTEM {}
- | SYSTEM_TIME_SYM {}
- | TABLE_NAME_SYM {}
- | TABLES {}
- | TABLE_CHECKSUM_SYM {}
- | TABLESPACE {}
- | TEMPORARY {}
- | TEMPTABLE_SYM {}
- | THAN_SYM {}
- | TRANSACTION_SYM {}
- | TRANSACTIONAL_SYM {}
- | TRIGGERS_SYM {}
- | TRIM_ORACLE {}
- | TIMESTAMP_ADD {}
- | TIMESTAMP_DIFF {}
- | TYPES_SYM {}
- | TYPE_SYM {}
- | UDF_RETURNS_SYM {}
- | FUNCTION_SYM {}
- | UNCOMMITTED_SYM {}
- | UNDEFINED_SYM {}
- | UNDO_BUFFER_SIZE_SYM {}
- | UNDOFILE_SYM {}
- | UNKNOWN_SYM {}
- | UNTIL_SYM {}
- | USER_SYM {}
- | USE_FRM {}
- | VARIABLES {}
- | VERSIONING_SYM {}
- | VIEW_SYM {}
- | VIRTUAL_SYM {}
- | VALUE_SYM {}
- | WARNINGS {}
- | WAIT_SYM {}
- | WEEK_SYM {}
- | WEIGHT_STRING_SYM {}
- | WITHOUT {}
- | WORK_SYM {}
- | X509_SYM {}
- | XML_SYM {}
- | VIA_SYM {}
+ | CURRENT_SYM
+ | CURSOR_NAME_SYM
+ | CYCLE_SYM
+ | DATA_SYM
+ | DATAFILE_SYM
+ | DATE_FORMAT_SYM
+ | DAY_SYM
+ | DECODE_SYM
+ | DEFINER_SYM
+ | DELAY_KEY_WRITE_SYM
+ | DES_KEY_FILE
+ | DIAGNOSTICS_SYM
+ | DIRECTORY_SYM
+ | DISABLE_SYM
+ | DISCARD
+ | DISK_SYM
+ | DUMPFILE
+ | DUPLICATE_SYM
+ | DYNAMIC_SYM
+ | ELSIF_SYM
+ | ENDS_SYM
+ | ENGINE_SYM
+ | ENGINES_SYM
+ | ERROR_SYM
+ | ERRORS
+ | ESCAPE_SYM
+ | EVENT_SYM
+ | EVENTS_SYM
+ | EVERY_SYM
+ | EXCEPTION_SYM
+ | EXCHANGE_SYM
+ | EXPANSION_SYM
+ | EXPORT_SYM
+ | EXTENDED_SYM
+ | EXTENT_SIZE_SYM
+ | FAULTS_SYM
+ | FAST_SYM
+ | FOUND_SYM
+ | ENABLE_SYM
+ | FULL
+ | FILE_SYM
+ | FIRST_SYM
+ | GENERAL
+ | GENERATED_SYM
+ | GET_FORMAT
+ | GRANTS
+ | GLOBAL_SYM
+ | GOTO_SYM
+ | HASH_SYM
+ | HARD_SYM
+ | HISTORY_SYM
+ | HOSTS_SYM
+ | HOUR_SYM
+ | ID_SYM
+ | IDENTIFIED_SYM
+ | IGNORE_SERVER_IDS_SYM
+ | INCREMENT_SYM
+ | IMMEDIATE_SYM /* SQL-2003-R */
+ | INVOKER_SYM
+ | IMPORT
+ | INDEXES
+ | INITIAL_SIZE_SYM
+ | IO_SYM
+ | IPC_SYM
+ | ISOLATION
+ | ISOPEN_SYM
+ | ISSUER_SYM
+ | INSERT_METHOD
+ | INVISIBLE_SYM
+ | KEY_BLOCK_SIZE
+ | LAST_VALUE
+ | LAST_SYM
+ | LASTVAL_SYM
+ | LEAVES
+ | LESS_SYM
+ | LEVEL_SYM
+ | LIST_SYM
+ | LOCAL_SYM
+ | LOCKS_SYM
+ | LOGFILE_SYM
+ | LOGS_SYM
+ | MAX_ROWS
+ | MASTER_SYM
+ | MASTER_HEARTBEAT_PERIOD_SYM
+ | MASTER_GTID_POS_SYM
+ | MASTER_HOST_SYM
+ | MASTER_PORT_SYM
+ | MASTER_LOG_FILE_SYM
+ | MASTER_LOG_POS_SYM
+ | MASTER_USER_SYM
+ | MASTER_USE_GTID_SYM
+ | MASTER_PASSWORD_SYM
+ | MASTER_SERVER_ID_SYM
+ | MASTER_CONNECT_RETRY_SYM
+ | MASTER_DELAY_SYM
+ | MASTER_SSL_SYM
+ | MASTER_SSL_CA_SYM
+ | MASTER_SSL_CAPATH_SYM
+ | MASTER_SSL_CERT_SYM
+ | MASTER_SSL_CIPHER_SYM
+ | MASTER_SSL_CRL_SYM
+ | MASTER_SSL_CRLPATH_SYM
+ | MASTER_SSL_KEY_SYM
+ | MAX_CONNECTIONS_PER_HOUR
+ | MAX_QUERIES_PER_HOUR
+ | MAX_SIZE_SYM
+ | MAX_STATEMENT_TIME_SYM
+ | MAX_UPDATES_PER_HOUR
+ | MAX_USER_CONNECTIONS_SYM
+ | MEMORY_SYM
+ | MERGE_SYM
+ | MESSAGE_TEXT_SYM
+ | MICROSECOND_SYM
+ | MIGRATE_SYM
+ | MINUTE_SYM
+ | MINVALUE_SYM
+ | MIN_ROWS
+ | MODIFY_SYM
+ | MODE_SYM
+ | MONTH_SYM
+ | MUTEX_SYM
+ | MYSQL_SYM
+ | MYSQL_ERRNO_SYM
+ | NAME_SYM
+ | NAMES_SYM
+ | NEXT_SYM
+ | NEXTVAL_SYM
+ | NEW_SYM
+ | NOCACHE_SYM
+ | NOCYCLE_SYM
+ | NOMINVALUE_SYM
+ | NOMAXVALUE_SYM
+ | NO_WAIT_SYM
+ | NOWAIT_SYM
+ | NODEGROUP_SYM
+ | NONE_SYM
+ | NOTFOUND_SYM
+ | OF_SYM /* SQL-1999-R, Oracle-R */
+ | OFFSET_SYM
+ | OLD_PASSWORD_SYM
+ | ONE_SYM
+ | ONLINE_SYM
+ | ONLY_SYM
+ | PACKAGE_SYM
+ | PACK_KEYS_SYM
+ | PAGE_SYM
+ | PARTIAL
+ | PARTITIONING_SYM
+ | PARTITIONS_SYM
+ | PASSWORD_SYM
+ | PERSISTENT_SYM
+ | PHASE_SYM
+ | PLUGIN_SYM
+ | PLUGINS_SYM
+ | PRESERVE_SYM
+ | PREV_SYM
+ | PREVIOUS_SYM
+ | PRIVILEGES
+ | PROCESS
+ | PROCESSLIST_SYM
+ | PROFILE_SYM
+ | PROFILES_SYM
+ | PROXY_SYM
+ | QUARTER_SYM
+ | QUERY_SYM
+ | QUICK
+ | RAISE_SYM
+ | READ_ONLY_SYM
+ | REBUILD_SYM
+ | RECOVER_SYM
+ | REDO_BUFFER_SIZE_SYM
+ | REDOFILE_SYM
+ | REDUNDANT_SYM
+ | RELAY
+ | RELAYLOG_SYM
+ | RELAY_LOG_FILE_SYM
+ | RELAY_LOG_POS_SYM
+ | RELAY_THREAD
+ | RELOAD
+ | REORGANIZE_SYM
+ | REPEATABLE_SYM
+ | REPLICATION
+ | RESOURCES
+ | RESTART_SYM
+ | RESUME_SYM
+ | RETURNED_SQLSTATE_SYM
+ | RETURNS_SYM
+ | REUSE_SYM /* Oracle-R */
+ | REVERSE_SYM
+ | ROLE_SYM
+ | ROLLUP_SYM
+ | ROUTINE_SYM
+ | ROWCOUNT_SYM
+ | ROWTYPE_SYM
+ | ROW_COUNT_SYM
+ | ROW_FORMAT_SYM
+ | RTREE_SYM
+ | SCHEDULE_SYM
+ | SCHEMA_NAME_SYM
+ | SECOND_SYM
+ | SEQUENCE_SYM
+ | SERIALIZABLE_SYM
+ | SESSION_SYM
+ | SETVAL_SYM
+ | SIMPLE_SYM
+ | SHARE_SYM
+ | SLAVE_POS_SYM
+ | SLOW
+ | SNAPSHOT_SYM
+ | SOFT_SYM
+ | SOUNDS_SYM
+ | SOURCE_SYM
+ | SQL_CACHE_SYM
+ | SQL_BUFFER_RESULT
+ | SQL_NO_CACHE_SYM
+ | SQL_THREAD
+ | STARTS_SYM
+ | STATEMENT_SYM
+ | STATUS_SYM
+ | STORAGE_SYM
+ | STRING_SYM
+ | SUBCLASS_ORIGIN_SYM
+ | SUBDATE_SYM
+ | SUBJECT_SYM
+ | SUBPARTITION_SYM
+ | SUBPARTITIONS_SYM
+ | SUPER_SYM
+ | SUSPEND_SYM
+ | SWAPS_SYM
+ | SWITCHES_SYM
+ | SYSTEM
+ | SYSTEM_TIME_SYM
+ | TABLE_NAME_SYM
+ | TABLES
+ | TABLE_CHECKSUM_SYM
+ | TABLESPACE
+ | TEMPORARY
+ | TEMPTABLE_SYM
+ | THAN_SYM
+ | TRANSACTION_SYM
+ | TRANSACTIONAL_SYM
+ | TRIGGERS_SYM
+ | TRIM_ORACLE
+ | TIMESTAMP_ADD
+ | TIMESTAMP_DIFF
+ | TYPES_SYM
+ | TYPE_SYM
+ | UDF_RETURNS_SYM
+ | FUNCTION_SYM
+ | UNCOMMITTED_SYM
+ | UNDEFINED_SYM
+ | UNDO_BUFFER_SIZE_SYM
+ | UNDOFILE_SYM
+ | UNKNOWN_SYM
+ | UNTIL_SYM
+ | USER_SYM
+ | USE_FRM
+ | VARIABLES
+ | VERSIONING_SYM
+ | VIEW_SYM
+ | VIRTUAL_SYM
+ | VALUE_SYM
+ | WARNINGS
+ | WAIT_SYM
+ | WEEK_SYM
+ | WEIGHT_STRING_SYM
+ | WITHOUT
+ | WORK_SYM
+ | X509_SYM
+ | XML_SYM
+ | VIA_SYM
;
/*
@@ -17133,7 +17098,7 @@ query_expression_option:
STRAIGHT_JOIN { Select->options|= SELECT_STRAIGHT_JOIN; }
| HIGH_PRIORITY
{
- if (check_simple_select())
+ if (Lex->check_simple_select(&$1))
MYSQL_YYABORT;
YYPS->m_lock_type= TL_READ_HIGH_PRIORITY;
YYPS->m_mdl_type= MDL_SHARED_READ;
@@ -17144,13 +17109,13 @@ query_expression_option:
| SQL_BIG_RESULT { Select->options|= SELECT_BIG_RESULT; }
| SQL_BUFFER_RESULT
{
- if (check_simple_select())
+ if (Lex->check_simple_select(&$1))
MYSQL_YYABORT;
Select->options|= OPTION_BUFFER_RESULT;
}
| SQL_CALC_FOUND_ROWS
{
- if (check_simple_select())
+ if (Lex->check_simple_select(&$1))
MYSQL_YYABORT;
Select->options|= OPTION_FOUND_ROWS;
}
diff --git a/sql/sql_yacc_ora.yy b/sql/sql_yacc_ora.yy
index ec2aeeaefba..dc0878d7ee7 100644
--- a/sql/sql_yacc_ora.yy
+++ b/sql/sql_yacc_ora.yy
@@ -169,9 +169,10 @@ void ORAerror(THD *thd, const char *s)
/* structs */
LEX_CSTRING lex_str;
- LEX_SYMBOL symbol;
+ Lex_ident_cli_st kwd;
+ Lex_ident_cli_st ident_cli;
+ Lex_ident_sys_st ident_sys;
Lex_string_with_metadata_st lex_string_with_metadata;
- Lex_string_with_pos_st lex_string_with_pos;
Lex_spblock_st spblock;
Lex_spblock_handlers_st spblock_handlers;
Lex_length_and_dec_st Lex_length_and_dec;
@@ -300,679 +301,276 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize);
This makes the code grep-able, and helps maintenance.
*/
-
+
+
+/*
+ Reserved keywords and operators
+*/
%token ABORT_SYM /* INTERNAL (used in lex) */
%token ACCESSIBLE_SYM
-%token ACTION /* SQL-2003-N */
%token ADD /* SQL-2003-R */
-%token ADMIN_SYM /* SQL-2003-N */
-%token ADDDATE_SYM /* MYSQL-FUNC */
-%token AFTER_SYM /* SQL-2003-N */
-%token AGAINST
-%token AGGREGATE_SYM
-%token ALGORITHM_SYM
%token ALL /* SQL-2003-R */
%token ALTER /* SQL-2003-R */
-%token ALWAYS_SYM
%token ANALYZE_SYM
%token AND_AND_SYM /* OPERATOR */
%token AND_SYM /* SQL-2003-R */
-%token ANY_SYM /* SQL-2003-R */
%token AS /* SQL-2003-R */
%token ASC /* SQL-2003-N */
-%token ASCII_SYM /* MYSQL-FUNC */
%token ASENSITIVE_SYM /* FUTURE-USE */
-%token AT_SYM /* SQL-2003-R */
-%token ATOMIC_SYM /* SQL-2003-R */
-%token AUTHORS_SYM
-%token AUTOEXTEND_SIZE_SYM
-%token AUTO_INC
-%token AUTO_SYM
-%token AVG_ROW_LENGTH
-%token AVG_SYM /* SQL-2003-N */
-%token BACKUP_SYM
%token BEFORE_SYM /* SQL-2003-N */
-%token BEGIN_SYM /* SQL-2003-R */
%token BETWEEN_SYM /* SQL-2003-R */
%token BIGINT /* SQL-2003-R */
%token BINARY /* SQL-2003-R */
-%token BINLOG_SYM
%token BIN_NUM
%token BIT_AND /* MYSQL-FUNC */
%token BIT_OR /* MYSQL-FUNC */
-%token BIT_SYM /* MYSQL-FUNC */
%token BIT_XOR /* MYSQL-FUNC */
%token BLOB_SYM /* SQL-2003-R */
-%token BLOCK_SYM
-%token BODY_SYM /* Oracle-R */
-%token BOOLEAN_SYM /* SQL-2003-R */
-%token BOOL_SYM
%token BOTH /* SQL-2003-R */
-%token BTREE_SYM
%token BY /* SQL-2003-R */
-%token BYTE_SYM
-%token CACHE_SYM
%token CALL_SYM /* SQL-2003-R */
%token CASCADE /* SQL-2003-N */
-%token CASCADED /* SQL-2003-R */
%token CASE_SYM /* SQL-2003-R */
%token CAST_SYM /* SQL-2003-R */
-%token CATALOG_NAME_SYM /* SQL-2003-N */
-%token CHAIN_SYM /* SQL-2003-N */
%token CHANGE
-%token CHANGED
-%token CHARSET
%token CHAR_SYM /* SQL-2003-R */
-%token CHECKPOINT_SYM
-%token CHECKSUM_SYM
%token CHECK_SYM /* SQL-2003-R */
-%token CIPHER_SYM
-%token CLASS_ORIGIN_SYM /* SQL-2003-N */
-%token CLIENT_SYM
-%token CLOSE_SYM /* SQL-2003-R */
-%token CLOB /* SQL-2003-R */
-%token COALESCE /* SQL-2003-N */
-%token CODE_SYM
%token COLLATE_SYM /* SQL-2003-R */
-%token COLLATION_SYM /* SQL-2003-N */
-%token COLUMNS
-%token COLUMN_ADD_SYM
-%token COLUMN_CHECK_SYM
-%token COLUMN_CREATE_SYM
-%token COLUMN_DELETE_SYM
-%token COLUMN_GET_SYM
-%token COLUMN_SYM /* SQL-2003-R */
-%token COLUMN_NAME_SYM /* SQL-2003-N */
-%token COMMENT_SYM
-%token COMMITTED_SYM /* SQL-2003-N */
-%token COMMIT_SYM /* SQL-2003-R */
-%token COMPACT_SYM
-%token COMPLETION_SYM
-%token COMPRESSED_SYM
-%token CONCURRENT
%token CONDITION_SYM /* SQL-2003-R, SQL-2008-R */
-%token CONNECTION_SYM
-%token CONSISTENT_SYM
%token CONSTRAINT /* SQL-2003-R */
-%token CONSTRAINT_CATALOG_SYM /* SQL-2003-N */
-%token CONSTRAINT_NAME_SYM /* SQL-2003-N */
-%token CONSTRAINT_SCHEMA_SYM /* SQL-2003-N */
-%token CONTAINS_SYM /* SQL-2003-N */
-%token CONTEXT_SYM
%token CONTINUE_SYM /* SQL-2003-R */
-%token CONTRIBUTORS_SYM
%token CONVERT_SYM /* SQL-2003-N */
%token COUNT_SYM /* SQL-2003-N */
-%token CPU_SYM
%token CREATE /* SQL-2003-R */
%token CROSS /* SQL-2003-R */
-%token CUBE_SYM /* SQL-2003-R */
%token CUME_DIST_SYM
%token CURDATE /* MYSQL-FUNC */
-%token CURRENT_SYM /* SQL-2003-R */
%token CURRENT_USER /* SQL-2003-R */
%token CURRENT_ROLE /* SQL-2003-R */
-%token CURRENT_POS_SYM
%token CURSOR_SYM /* SQL-2003-R */
-%token CURSOR_NAME_SYM /* SQL-2003-N */
%token CURTIME /* MYSQL-FUNC */
-%token CYCLE_SYM
%token DATABASE
%token DATABASES
-%token DATAFILE_SYM
-%token DATA_SYM /* SQL-2003-N */
-%token DATETIME
%token DATE_ADD_INTERVAL /* MYSQL-FUNC */
-%token DATE_FORMAT_SYM /* MYSQL-FUNC */
%token DATE_SUB_INTERVAL /* MYSQL-FUNC */
-%token DATE_SYM /* SQL-2003-R */
%token DAY_HOUR_SYM
%token DAY_MICROSECOND_SYM
%token DAY_MINUTE_SYM
%token DAY_SECOND_SYM
-%token DAY_SYM /* SQL-2003-R */
-%token DEALLOCATE_SYM /* SQL-2003-R */
%token DECIMAL_NUM
%token DECIMAL_SYM /* SQL-2003-R */
%token DECLARE_SYM /* SQL-2003-R */
-%token DECODE_SYM /* Oracle function, non-reserved */
%token DEFAULT /* SQL-2003-R */
-%token DEFINER_SYM
-%token DELAYED_SYM
-%token DELAY_KEY_WRITE_SYM
%token DELETE_DOMAIN_ID_SYM
%token DELETE_SYM /* SQL-2003-R */
%token DENSE_RANK_SYM
%token DESC /* SQL-2003-N */
%token DESCRIBE /* SQL-2003-R */
-%token DES_KEY_FILE
%token DETERMINISTIC_SYM /* SQL-2003-R */
-%token DIAGNOSTICS_SYM /* SQL-2003-N */
-%token DIRECTORY_SYM
-%token DISABLE_SYM
-%token DISCARD
-%token DISK_SYM
%token DISTINCT /* SQL-2003-R */
%token DIV_SYM
%token DOUBLE_SYM /* SQL-2003-R */
%token DO_DOMAIN_IDS_SYM
-%token DO_SYM
%token DOT_DOT_SYM
%token DROP /* SQL-2003-R */
%token DUAL_SYM
-%token DUMPFILE
-%token DUPLICATE_SYM
-%token DYNAMIC_SYM /* SQL-2003-R */
%token EACH_SYM /* SQL-2003-R */
%token ELSE /* SQL-2003-R */
%token ELSEIF_SYM
-%token ELSIF_SYM /* Oracle, reserved in PL/SQL*/
-%token ENABLE_SYM
%token ENCLOSED
-%token END /* SQL-2003-R */
-%token ENDS_SYM
%token END_OF_INPUT /* INTERNAL */
-%token ENGINES_SYM
-%token ENGINE_SYM
-%token ENUM
%token EQUAL_SYM /* OPERATOR */
-%token ERROR_SYM
-%token ERRORS
%token ESCAPED
-%token ESCAPE_SYM /* SQL-2003-R */
-%token EVENTS_SYM
-%token EVENT_SYM
-%token EVERY_SYM /* SQL-2003-N */
-%token EXCHANGE_SYM
-%token EXAMINED_SYM
%token EXCEPT_SYM /* SQL-2003-R */
-%token EXCLUDE_SYM /* SQL-2011-N */
-%token EXECUTE_SYM /* SQL-2003-R */
-%token EXCEPTION_SYM /* SQL-2003-N, Oracle-PLSQL-R */
%token EXISTS /* SQL-2003-R */
-%token EXIT_SYM
-%token EXPANSION_SYM
-%token EXPORT_SYM
-%token EXTENDED_SYM
-%token EXTENT_SIZE_SYM
%token EXTRACT_SYM /* SQL-2003-N */
%token FALSE_SYM /* SQL-2003-R */
-%token FAST_SYM
-%token FAULTS_SYM
%token FETCH_SYM /* SQL-2003-R */
-%token FILE_SYM
%token FIRST_VALUE_SYM /* SQL-2011 */
-%token FIRST_SYM /* SQL-2003-N */
-%token FIXED_SYM
%token FLOAT_NUM
%token FLOAT_SYM /* SQL-2003-R */
-%token FLUSH_SYM
-%token FOLLOWS_SYM /* MYSQL trigger*/
-%token FOLLOWING_SYM /* SQL-2011-N */
-%token FORCE_SYM
%token FOREIGN /* SQL-2003-R */
%token FOR_SYM /* SQL-2003-R */
%token FOR_SYSTEM_TIME_SYM /* INTERNAL */
-%token FORMAT_SYM
-%token FOUND_SYM /* SQL-2003-R */
%token FROM
-%token FULL /* SQL-2003-R */
%token FULLTEXT_SYM
-%token FUNCTION_SYM /* SQL-2003-R */
%token GE
-%token GENERAL
-%token GENERATED_SYM
-%token GEOMETRYCOLLECTION
-%token GEOMETRY_SYM
-%token GET_FORMAT /* MYSQL-FUNC */
-%token GET_SYM /* SQL-2003-R */
-%token GLOBAL_SYM /* SQL-2003-R */
-%token GOTO_SYM /* Oracle, reserved in PL/SQL*/
%token GRANT /* SQL-2003-R */
-%token GRANTS
%token GROUP_SYM /* SQL-2003-R */
%token GROUP_CONCAT_SYM
%token LAG_SYM /* SQL-2011 */
%token LEAD_SYM /* SQL-2011 */
-%token HANDLER_SYM
-%token HARD_SYM
-%token HASH_SYM
%token HAVING /* SQL-2003-R */
-%token HELP_SYM
%token HEX_NUM
%token HEX_STRING
-%token HIGH_PRIORITY
-%token HISTORY_SYM /* MYSQL */
-%token HOST_SYM
-%token HOSTS_SYM
%token HOUR_MICROSECOND_SYM
%token HOUR_MINUTE_SYM
%token HOUR_SECOND_SYM
-%token HOUR_SYM /* SQL-2003-R */
-%token ID_SYM /* MYSQL */
%token IDENT
-%token IDENTIFIED_SYM
%token IDENT_QUOTED
%token IF_SYM
%token IGNORE_DOMAIN_IDS_SYM
%token IGNORE_SYM
-%token IGNORE_SERVER_IDS_SYM
-%token IMMEDIATE_SYM /* SQL-2003-R */
-%token IMPORT
-%token INCREMENT_SYM
-%token INDEXES
%token INDEX_SYM
%token INFILE
-%token INITIAL_SIZE_SYM
%token INNER_SYM /* SQL-2003-R */
%token INOUT_SYM /* SQL-2003-R */
%token INSENSITIVE_SYM /* SQL-2003-R */
%token INSERT /* SQL-2003-R */
-%token INSERT_METHOD
-%token INSTALL_SYM
%token INTERSECT_SYM /* SQL-2003-R */
%token INTERVAL_SYM /* SQL-2003-R */
%token INTO /* SQL-2003-R */
%token INT_SYM /* SQL-2003-R */
-%token INVOKER_SYM
%token IN_SYM /* SQL-2003-R */
-%token IO_SYM
-%token IPC_SYM
%token IS /* SQL-2003-R */
-%token ISOLATION /* SQL-2003-R */
-%token ISOPEN_SYM /* Oracle-N */
-%token ISSUER_SYM
%token ITERATE_SYM
-%token INVISIBLE_SYM
%token JOIN_SYM /* SQL-2003-R */
-%token JSON_SYM
%token KEYS
-%token KEY_BLOCK_SIZE
%token KEY_SYM /* SQL-2003-N */
%token KILL_SYM
-%token LANGUAGE_SYM /* SQL-2003-R */
-%token LAST_SYM /* SQL-2003-N */
-%token LAST_VALUE
-%token LASTVAL_SYM /* PostgreSQL sequence function */
%token LE /* OPERATOR */
%token LEADING /* SQL-2003-R */
-%token LEAVES
%token LEAVE_SYM
%token LEFT /* SQL-2003-R */
-%token LESS_SYM
-%token LEVEL_SYM
%token LEX_HOSTNAME
%token LIKE /* SQL-2003-R */
%token LIMIT
%token LINEAR_SYM
%token LINES
-%token LINESTRING
-%token LIST_SYM
%token LOAD
-%token LOCAL_SYM /* SQL-2003-R */
%token LOCATOR_SYM /* SQL-2003-N */
-%token LOCKS_SYM
%token LOCK_SYM
-%token LOGFILE_SYM
-%token LOGS_SYM
%token LONGBLOB
%token LONGTEXT
%token LONG_NUM
%token LONG_SYM
%token LOOP_SYM
%token LOW_PRIORITY
-%token MASTER_CONNECT_RETRY_SYM
-%token MASTER_DELAY_SYM
-%token MASTER_GTID_POS_SYM
-%token MASTER_HOST_SYM
-%token MASTER_LOG_FILE_SYM
-%token MASTER_LOG_POS_SYM
-%token MASTER_PASSWORD_SYM
-%token MASTER_PORT_SYM
-%token MASTER_SERVER_ID_SYM
-%token MASTER_SSL_CAPATH_SYM
-%token MASTER_SSL_CA_SYM
-%token MASTER_SSL_CERT_SYM
-%token MASTER_SSL_CIPHER_SYM
-%token MASTER_SSL_CRL_SYM
-%token MASTER_SSL_CRLPATH_SYM
-%token MASTER_SSL_KEY_SYM
-%token MASTER_SSL_SYM
%token MASTER_SSL_VERIFY_SERVER_CERT_SYM
-%token MASTER_SYM
-%token MASTER_USER_SYM
-%token MASTER_USE_GTID_SYM
-%token MASTER_HEARTBEAT_PERIOD_SYM
%token MATCH /* SQL-2003-R */
-%token MAX_CONNECTIONS_PER_HOUR
-%token MAX_QUERIES_PER_HOUR
-%token MAX_ROWS
-%token MAX_SIZE_SYM
%token MAX_SYM /* SQL-2003-N */
-%token MAX_UPDATES_PER_HOUR
-%token MAX_STATEMENT_TIME_SYM
-%token MAX_USER_CONNECTIONS_SYM
%token MAXVALUE_SYM /* SQL-2003-N */
%token MEDIAN_SYM
%token MEDIUMBLOB
%token MEDIUMINT
%token MEDIUMTEXT
-%token MEDIUM_SYM
-%token MEMORY_SYM
-%token MERGE_SYM /* SQL-2003-R */
-%token MESSAGE_TEXT_SYM /* SQL-2003-N */
-%token MICROSECOND_SYM /* MYSQL-FUNC */
-%token MIGRATE_SYM
%token MINUTE_MICROSECOND_SYM
%token MINUTE_SECOND_SYM
-%token MINUTE_SYM /* SQL-2003-R */
-%token MINVALUE_SYM
-%token MIN_ROWS
%token MIN_SYM /* SQL-2003-N */
-%token MODE_SYM
%token MODIFIES_SYM /* SQL-2003-R */
-%token MODIFY_SYM
%token MOD_SYM /* SQL-2003-N */
-%token MONTH_SYM /* SQL-2003-R */
-%token MULTILINESTRING
-%token MULTIPOINT
-%token MULTIPOLYGON
-%token MUTEX_SYM
-%token MYSQL_SYM
-%token MYSQL_ERRNO_SYM
-%token NAMES_SYM /* SQL-2003-N */
-%token NAME_SYM /* SQL-2003-N */
-%token NATIONAL_SYM /* SQL-2003-R */
%token NATURAL /* SQL-2003-R */
%token NCHAR_STRING
-%token NCHAR_SYM /* SQL-2003-R */
%token NE /* OPERATOR */
%token NEG
-%token NEW_SYM /* SQL-2003-R */
-%token NEXT_SYM /* SQL-2003-N */
-%token NEXTVAL_SYM /* PostgreSQL sequence function */
-%token NOCACHE_SYM
-%token NOCYCLE_SYM
-%token NODEGROUP_SYM
-%token NONE_SYM /* SQL-2003-R */
%token NOT2_SYM
%token NOT_SYM /* SQL-2003-R */
-%token NOTFOUND_SYM /* Oracle-R */
%token NOW_SYM
-%token NO_SYM /* SQL-2003-R */
-%token NOMAXVALUE_SYM
-%token NOMINVALUE_SYM
-%token NO_WAIT_SYM
-%token NOWAIT_SYM
%token NO_WRITE_TO_BINLOG
%token NTILE_SYM
%token NULL_SYM /* SQL-2003-R */
%token NUM
-%token NUMBER_SYM /* SQL-2003-N */
%token NUMERIC_SYM /* SQL-2003-R */
%token NTH_VALUE_SYM /* SQL-2011 */
-%token NVARCHAR_SYM
-%token OF_SYM /* SQL-1992-R, Oracle-R */
-%token OFFSET_SYM
-%token OLD_PASSWORD_SYM
%token ON /* SQL-2003-R */
-%token ONE_SYM
-%token ONLY_SYM /* SQL-2003-R */
-%token ONLINE_SYM
-%token OPEN_SYM /* SQL-2003-R */
%token OPTIMIZE
-%token OPTIONS_SYM
-%token OPTION /* SQL-2003-N */
%token OPTIONALLY
%token OR2_SYM
%token ORDER_SYM /* SQL-2003-R */
%token OR_OR_SYM /* OPERATOR */
%token OR_SYM /* SQL-2003-R */
-%token OTHERS_SYM /* SQL-2011-N */
%token OUTER
%token OUTFILE
%token OUT_SYM /* SQL-2003-R */
%token OVER_SYM
-%token OWNER_SYM
-%token PACKAGE_SYM /* Oracle-R */
-%token PACK_KEYS_SYM
-%token PAGE_SYM
%token PAGE_CHECKSUM_SYM
%token PARAM_MARKER
-%token PARSER_SYM
%token PARSE_VCOL_EXPR_SYM
-%token PARTIAL /* SQL-2003-N */
%token PARTITION_SYM /* SQL-2003-R */
-%token PARTITIONS_SYM
-%token PARTITIONING_SYM
-%token PASSWORD_SYM
%token PERCENT_RANK_SYM
%token PERCENTILE_CONT_SYM
%token PERCENTILE_DISC_SYM
-%token PERIOD_SYM /* SQL-2011-R */
-%token PERSISTENT_SYM
-%token PHASE_SYM
-%token PLUGINS_SYM
-%token PLUGIN_SYM
-%token POINT_SYM
-%token POLYGON
-%token PORT_SYM
%token POSITION_SYM /* SQL-2003-N */
-%token PRECEDES_SYM /* MYSQL */
-%token PRECEDING_SYM /* SQL-2011-N */
%token PRECISION /* SQL-2003-R */
-%token PREPARE_SYM /* SQL-2003-R */
-%token PRESERVE_SYM
-%token PREV_SYM
-%token PREVIOUS_SYM
%token PRIMARY_SYM /* SQL-2003-R */
-%token PRIVILEGES /* SQL-2003-N */
%token PROCEDURE_SYM /* SQL-2003-R */
-%token PROCESS
-%token PROCESSLIST_SYM
-%token PROFILE_SYM
-%token PROFILES_SYM
-%token PROXY_SYM
%token PURGE
-%token QUARTER_SYM
-%token QUERY_SYM
-%token QUICK
-%token RAISE_SYM /* Oracle-PLSQL-R */
%token RANGE_SYM /* SQL-2003-R */
%token RANK_SYM
-%token RAW /* Oracle */
%token READS_SYM /* SQL-2003-R */
-%token READ_ONLY_SYM
%token READ_SYM /* SQL-2003-N */
%token READ_WRITE_SYM
%token REAL /* SQL-2003-R */
-%token REBUILD_SYM
-%token RECOVER_SYM
%token RECURSIVE_SYM
-%token REDOFILE_SYM
-%token REDO_BUFFER_SIZE_SYM
-%token REDUNDANT_SYM
+%token REF_SYSTEM_ID_SYM
%token REFERENCES /* SQL-2003-R */
%token REGEXP
-%token RELAY
-%token RELAYLOG_SYM
-%token RELAY_LOG_FILE_SYM
-%token RELAY_LOG_POS_SYM
-%token RELAY_THREAD
%token RELEASE_SYM /* SQL-2003-R */
-%token RELOAD
-%token REMOVE_SYM
%token RENAME
-%token REORGANIZE_SYM
-%token REPAIR
-%token REPEATABLE_SYM /* SQL-2003-N */
%token REPEAT_SYM /* MYSQL-FUNC */
%token REPLACE /* MYSQL-FUNC */
-%token REPLICATION
%token REQUIRE_SYM
-%token RESET_SYM
-%token RESTART_SYM
%token RESIGNAL_SYM /* SQL-2003-R */
-%token RESOURCES
-%token RESTORE_SYM
%token RESTRICT
-%token RESUME_SYM
-%token RETURNED_SQLSTATE_SYM /* SQL-2003-N */
%token RETURNING_SYM
-%token RETURNS_SYM /* SQL-2003-R */
%token RETURN_SYM /* SQL-2003-R */
-%token REUSE_SYM /* Oracle-R */
-%token REVERSE_SYM
%token REVOKE /* SQL-2003-R */
%token RIGHT /* SQL-2003-R */
-%token ROLE_SYM
-%token ROLLBACK_SYM /* SQL-2003-R */
-%token ROLLUP_SYM /* SQL-2003-R */
-%token ROUTINE_SYM /* SQL-2003-N */
-%token ROWCOUNT_SYM /* Oracle-N */
-%token ROW_SYM /* SQL-2003-R */
%token ROWS_SYM /* SQL-2003-R */
-%token ROWTYPE_SYM /* Oracle-PLSQL-R */
-%token ROW_COUNT_SYM /* SQL-2003-N */
-%token ROW_FORMAT_SYM
%token ROW_NUMBER_SYM
-%token RTREE_SYM
-%token SAVEPOINT_SYM /* SQL-2003-R */
-%token SCHEDULE_SYM
-%token SCHEMA_NAME_SYM /* SQL-2003-N */
%token SECOND_MICROSECOND_SYM
-%token SECOND_SYM /* SQL-2003-R */
-%token SECURITY_SYM /* SQL-2003-N */
%token SELECT_SYM /* SQL-2003-R */
%token SENSITIVE_SYM /* FUTURE-USE */
%token SEPARATOR_SYM
-%token SEQUENCE_SYM
-%token SERIALIZABLE_SYM /* SQL-2003-N */
-%token SERIAL_SYM
-%token SESSION_SYM /* SQL-2003-N */
-%token SERVER_SYM
%token SERVER_OPTIONS
%token SET /* SQL-2003-R */
-%token SETVAL_SYM /* PostgreSQL sequence function */
%token SET_VAR
-%token SHARE_SYM
%token SHIFT_LEFT /* OPERATOR */
%token SHIFT_RIGHT /* OPERATOR */
%token SHOW
-%token SHUTDOWN
%token SIGNAL_SYM /* SQL-2003-R */
-%token SIGNED_SYM
-%token SIMPLE_SYM /* SQL-2003-N */
-%token SLAVE
-%token SLAVES
-%token SLAVE_POS_SYM
-%token SLOW
%token SMALLINT /* SQL-2003-R */
-%token SNAPSHOT_SYM
-%token SOCKET_SYM
-%token SOFT_SYM
-%token SONAME_SYM
-%token SOUNDS_SYM
-%token SOURCE_SYM
%token SPATIAL_SYM
%token SPECIFIC_SYM /* SQL-2003-R */
%token SQLEXCEPTION_SYM /* SQL-2003-R */
%token SQLSTATE_SYM /* SQL-2003-R */
%token SQLWARNING_SYM /* SQL-2003-R */
%token SQL_BIG_RESULT
-%token SQL_BUFFER_RESULT
-%token SQL_CACHE_SYM
-%token SQL_CALC_FOUND_ROWS
-%token SQL_NO_CACHE_SYM
%token SQL_SMALL_RESULT
%token SQL_SYM /* SQL-2003-R */
-%token SQL_THREAD
-%token REF_SYSTEM_ID_SYM
%token SSL_SYM
%token STARTING
-%token STARTS_SYM
-%token START_SYM /* SQL-2003-R */
-%token STATEMENT_SYM
%token STATS_AUTO_RECALC_SYM
%token STATS_PERSISTENT_SYM
%token STATS_SAMPLE_PAGES_SYM
-%token STATUS_SYM
%token STDDEV_SAMP_SYM /* SQL-2003-N */
%token STD_SYM
-%token STOP_SYM
-%token STORAGE_SYM
-%token STORED_SYM
%token STRAIGHT_JOIN
-%token STRING_SYM
-%token SUBCLASS_ORIGIN_SYM /* SQL-2003-N */
-%token SUBDATE_SYM
-%token SUBJECT_SYM
-%token SUBPARTITIONS_SYM
-%token SUBPARTITION_SYM
%token SUBSTRING /* SQL-2003-N */
%token SUM_SYM /* SQL-2003-N */
-%token SUPER_SYM
-%token SUSPEND_SYM
-%token SWAPS_SYM
-%token SWITCHES_SYM
%token SYSDATE
-%token SYSTEM /* SQL-2011-R */
-%token SYSTEM_TIME_SYM /* SQL-2011-R */
-%token TABLES
-%token TABLESPACE
%token TABLE_REF_PRIORITY
%token TABLE_SYM /* SQL-2003-R */
-%token TABLE_CHECKSUM_SYM
-%token TABLE_NAME_SYM /* SQL-2003-N */
-%token TEMPORARY /* SQL-2003-N */
-%token TEMPTABLE_SYM
%token TERMINATED
%token TEXT_STRING
-%token TEXT_SYM
-%token THAN_SYM
%token THEN_SYM /* SQL-2003-R */
-%token TIES_SYM /* SQL-2011-N */
-%token TIMESTAMP /* SQL-2003-R */
-%token TIMESTAMP_ADD
-%token TIMESTAMP_DIFF
-%token TIME_SYM /* SQL-2003-R */
%token TINYBLOB
%token TINYINT
%token TINYTEXT
%token TO_SYM /* SQL-2003-R */
%token TRAILING /* SQL-2003-R */
-%token TRANSACTION_SYM
-%token TRANSACTIONAL_SYM
-%token TRIGGERS_SYM
%token TRIGGER_SYM /* SQL-2003-R */
%token TRIM /* SQL-2003-N */
-%token TRIM_ORACLE
%token TRUE_SYM /* SQL-2003-R */
-%token TRUNCATE_SYM
-%token TYPES_SYM
-%token TYPE_SYM /* SQL-2003-N */
-%token UDF_RETURNS_SYM
%token ULONGLONG_NUM
-%token UNBOUNDED_SYM /* SQL-2011-N */
-%token UNCOMMITTED_SYM /* SQL-2003-N */
-%token UNDEFINED_SYM
%token UNDERSCORE_CHARSET
-%token UNDOFILE_SYM
-%token UNDO_BUFFER_SIZE_SYM
%token UNDO_SYM /* FUTURE-USE */
-%token UNICODE_SYM
-%token UNINSTALL_SYM
%token UNION_SYM /* SQL-2003-R */
%token UNIQUE_SYM
-%token UNKNOWN_SYM /* SQL-2003-R */
%token UNLOCK_SYM
%token UNSIGNED
-%token UNTIL_SYM
%token UPDATE_SYM /* SQL-2003-R */
-%token UPGRADE_SYM
%token USAGE /* SQL-2003-N */
-%token USER_SYM /* SQL-2003-R */
-%token USE_FRM
%token USE_SYM
%token USING /* SQL-2003-R */
%token UTC_DATE_SYM
@@ -981,44 +579,462 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize);
%token VALUES /* SQL-2003-R */
%token VALUES_IN_SYM
%token VALUES_LESS_SYM
-%token VALUE_SYM /* SQL-2003-R */
%token VARBINARY
%token VARCHAR /* SQL-2003-R */
-%token VARCHAR2 /* Oracle */
-%token VARIABLES
%token VARIANCE_SYM
%token VARYING /* SQL-2003-R */
%token VAR_SAMP_SYM
-%token VERSIONING_SYM /* SQL-2011-R */
-%token VIA_SYM
-%token VIEW_SYM /* SQL-2003-N */
-%token VIRTUAL_SYM
-%token WAIT_SYM
-%token WARNINGS
-%token WEEK_SYM
-%token WEIGHT_STRING_SYM
%token WHEN_SYM /* SQL-2003-R */
%token WHERE /* SQL-2003-R */
-%token WINDOW_SYM
%token WHILE_SYM
%token WITH /* SQL-2003-R */
-%token WITHIN
-%token WITHOUT /* SQL-2003-R */
%token WITH_CUBE_SYM /* INTERNAL */
%token WITH_ROLLUP_SYM /* INTERNAL */
%token WITH_SYSTEM_SYM /* INTERNAL */
-%token WORK_SYM /* SQL-2003-N */
-%token WRAPPER_SYM
-%token WRITE_SYM /* SQL-2003-N */
-%token X509_SYM
-%token XA_SYM
-%token XML_SYM
%token XOR
%token YEAR_MONTH_SYM
-%token YEAR_SYM /* SQL-2003-R */
%token ZEROFILL
-%token IMPOSSIBLE_ACTION /* To avoid warning for yyerrlab1 */
+%token IMPOSSIBLE_ACTION /* To avoid warning for yyerrlab1 */
+
+
+/*
+ Keywords that have different reserved status in std/oracle modes.
+*/
+%token BODY_SYM /* Oracle-R */
+%token COMMENT_SYM
+%token ELSIF_SYM /* Oracle, reserved in PL/SQL*/
+%token GOTO_SYM /* Oracle, reserved in PL/SQL*/
+%token HISTORY_SYM /* MYSQL */
+%token OTHERS_SYM /* SQL-2011-N */
+%token PACKAGE_SYM /* Oracle-R */
+%token PERIOD_SYM /* SQL-2011-R */
+%token RAISE_SYM /* Oracle-PLSQL-R */
+%token ROWTYPE_SYM /* Oracle-PLSQL-R */
+%token SYSTEM /* SQL-2011-R */
+%token SYSTEM_TIME_SYM /* SQL-2011-R */
+%token VERSIONING_SYM /* SQL-2011-R */
+%token WINDOW_SYM
+%token WITHOUT /* SQL-2003-R */
+
+/*
+ Non-reserved keywords
+*/
+
+%token <kwd> ACTION /* SQL-2003-N */
+%token <kwd> ADMIN_SYM /* SQL-2003-N */
+%token <kwd> ADDDATE_SYM /* MYSQL-FUNC */
+%token <kwd> AFTER_SYM /* SQL-2003-N */
+%token <kwd> AGAINST
+%token <kwd> AGGREGATE_SYM
+%token <kwd> ALGORITHM_SYM
+%token <kwd> ALWAYS_SYM
+%token <kwd> ANY_SYM /* SQL-2003-R */
+%token <kwd> ASCII_SYM /* MYSQL-FUNC */
+%token <kwd> AT_SYM /* SQL-2003-R */
+%token <kwd> ATOMIC_SYM /* SQL-2003-R */
+%token <kwd> AUTHORS_SYM
+%token <kwd> AUTOEXTEND_SIZE_SYM
+%token <kwd> AUTO_INC
+%token <kwd> AUTO_SYM
+%token <kwd> AVG_ROW_LENGTH
+%token <kwd> AVG_SYM /* SQL-2003-N */
+%token <kwd> BACKUP_SYM
+%token <kwd> BEGIN_SYM /* SQL-2003-R */
+%token <kwd> BINLOG_SYM
+%token <kwd> BIT_SYM /* MYSQL-FUNC */
+%token <kwd> BLOCK_SYM
+%token <kwd> BOOL_SYM
+%token <kwd> BOOLEAN_SYM /* SQL-2003-R */
+%token <kwd> BTREE_SYM
+%token <kwd> BYTE_SYM
+%token <kwd> CACHE_SYM
+%token <kwd> CASCADED /* SQL-2003-R */
+%token <kwd> CATALOG_NAME_SYM /* SQL-2003-N */
+%token <kwd> CHAIN_SYM /* SQL-2003-N */
+%token <kwd> CHANGED
+%token <kwd> CHARSET
+%token <kwd> CHECKPOINT_SYM
+%token <kwd> CHECKSUM_SYM
+%token <kwd> CIPHER_SYM
+%token <kwd> CLASS_ORIGIN_SYM /* SQL-2003-N */
+%token <kwd> CLIENT_SYM
+%token <kwd> CLOB /* SQL-2003-R */
+%token <kwd> CLOSE_SYM /* SQL-2003-R */
+%token <kwd> COALESCE /* SQL-2003-N */
+%token <kwd> CODE_SYM
+%token <kwd> COLLATION_SYM /* SQL-2003-N */
+%token <kwd> COLUMNS
+%token <kwd> COLUMN_ADD_SYM
+%token <kwd> COLUMN_CHECK_SYM
+%token <kwd> COLUMN_CREATE_SYM
+%token <kwd> COLUMN_DELETE_SYM
+%token <kwd> COLUMN_GET_SYM
+%token <kwd> COLUMN_SYM /* SQL-2003-R */
+%token <kwd> COLUMN_NAME_SYM /* SQL-2003-N */
+%token <kwd> COMMITTED_SYM /* SQL-2003-N */
+%token <kwd> COMMIT_SYM /* SQL-2003-R */
+%token <kwd> COMPACT_SYM
+%token <kwd> COMPLETION_SYM
+%token <kwd> COMPRESSED_SYM
+%token <kwd> CONCURRENT
+%token <kwd> CONNECTION_SYM
+%token <kwd> CONSISTENT_SYM
+%token <kwd> CONSTRAINT_CATALOG_SYM /* SQL-2003-N */
+%token <kwd> CONSTRAINT_NAME_SYM /* SQL-2003-N */
+%token <kwd> CONSTRAINT_SCHEMA_SYM /* SQL-2003-N */
+%token <kwd> CONTAINS_SYM /* SQL-2003-N */
+%token <kwd> CONTEXT_SYM
+%token <kwd> CONTRIBUTORS_SYM
+%token <kwd> CPU_SYM
+%token <kwd> CUBE_SYM /* SQL-2003-R */
+%token <kwd> CURRENT_SYM /* SQL-2003-R */
+%token <kwd> CURRENT_POS_SYM
+%token <kwd> CURSOR_NAME_SYM /* SQL-2003-N */
+%token <kwd> CYCLE_SYM
+%token <kwd> DATAFILE_SYM
+%token <kwd> DATA_SYM /* SQL-2003-N */
+%token <kwd> DATETIME
+%token <kwd> DATE_FORMAT_SYM /* MYSQL-FUNC */
+%token <kwd> DATE_SYM /* SQL-2003-R */
+%token <kwd> DAY_SYM /* SQL-2003-R */
+%token <kwd> DEALLOCATE_SYM /* SQL-2003-R */
+%token <kwd> DECODE_SYM /* Oracle function, non-reserved */
+%token <kwd> DEFINER_SYM
+%token <kwd> DELAYED_SYM
+%token <kwd> DELAY_KEY_WRITE_SYM
+%token <kwd> DES_KEY_FILE
+%token <kwd> DIAGNOSTICS_SYM /* SQL-2003-N */
+%token <kwd> DIRECTORY_SYM
+%token <kwd> DISABLE_SYM
+%token <kwd> DISCARD
+%token <kwd> DISK_SYM
+%token <kwd> DO_SYM
+%token <kwd> DUMPFILE
+%token <kwd> DUPLICATE_SYM
+%token <kwd> DYNAMIC_SYM /* SQL-2003-R */
+%token <kwd> ENABLE_SYM
+%token <kwd> END /* SQL-2003-R */
+%token <kwd> ENDS_SYM
+%token <kwd> ENGINES_SYM
+%token <kwd> ENGINE_SYM
+%token <kwd> ENUM
+%token <kwd> ERROR_SYM
+%token <kwd> ERRORS
+%token <kwd> ESCAPE_SYM /* SQL-2003-R */
+%token <kwd> EVENTS_SYM
+%token <kwd> EVENT_SYM
+%token <kwd> EVERY_SYM /* SQL-2003-N */
+%token <kwd> EXCHANGE_SYM
+%token <kwd> EXAMINED_SYM
+%token <kwd> EXCLUDE_SYM /* SQL-2011-N */
+%token <kwd> EXECUTE_SYM /* SQL-2003-R */
+%token <kwd> EXCEPTION_SYM /* SQL-2003-N, Oracle-PLSQL-R */
+%token <kwd> EXIT_SYM
+%token <kwd> EXPANSION_SYM
+%token <kwd> EXPORT_SYM
+%token <kwd> EXTENDED_SYM
+%token <kwd> EXTENT_SIZE_SYM
+%token <kwd> FAST_SYM
+%token <kwd> FAULTS_SYM
+%token <kwd> FILE_SYM
+%token <kwd> FIRST_SYM /* SQL-2003-N */
+%token <kwd> FIXED_SYM
+%token <kwd> FLUSH_SYM
+%token <kwd> FOLLOWS_SYM /* MYSQL trigger*/
+%token <kwd> FOLLOWING_SYM /* SQL-2011-N */
+%token <kwd> FORCE_SYM
+%token <kwd> FORMAT_SYM
+%token <kwd> FOUND_SYM /* SQL-2003-R */
+%token <kwd> FULL /* SQL-2003-R */
+%token <kwd> FUNCTION_SYM /* SQL-2003-R */
+%token <kwd> GENERAL
+%token <kwd> GENERATED_SYM
+%token <kwd> GEOMETRYCOLLECTION
+%token <kwd> GEOMETRY_SYM
+%token <kwd> GET_FORMAT /* MYSQL-FUNC */
+%token <kwd> GET_SYM /* SQL-2003-R */
+%token <kwd> GLOBAL_SYM /* SQL-2003-R */
+%token <kwd> GRANTS
+%token <kwd> HANDLER_SYM
+%token <kwd> HARD_SYM
+%token <kwd> HASH_SYM
+%token <kwd> HELP_SYM
+%token <kwd> HIGH_PRIORITY
+%token <kwd> HOST_SYM
+%token <kwd> HOSTS_SYM
+%token <kwd> HOUR_SYM /* SQL-2003-R */
+%token <kwd> ID_SYM /* MYSQL */
+%token <kwd> IDENTIFIED_SYM
+%token <kwd> IGNORE_SERVER_IDS_SYM
+%token <kwd> IMMEDIATE_SYM /* SQL-2003-R */
+%token <kwd> IMPORT
+%token <kwd> INCREMENT_SYM
+%token <kwd> INDEXES
+%token <kwd> INITIAL_SIZE_SYM
+%token <kwd> INSERT_METHOD
+%token <kwd> INSTALL_SYM
+%token <kwd> INVOKER_SYM
+%token <kwd> IO_SYM
+%token <kwd> IPC_SYM
+%token <kwd> ISOLATION /* SQL-2003-R */
+%token <kwd> ISOPEN_SYM /* Oracle-N */
+%token <kwd> ISSUER_SYM
+%token <kwd> INVISIBLE_SYM
+%token <kwd> JSON_SYM
+%token <kwd> KEY_BLOCK_SIZE
+%token <kwd> LANGUAGE_SYM /* SQL-2003-R */
+%token <kwd> LAST_SYM /* SQL-2003-N */
+%token <kwd> LAST_VALUE
+%token <kwd> LASTVAL_SYM /* PostgreSQL sequence function */
+%token <kwd> LEAVES
+%token <kwd> LESS_SYM
+%token <kwd> LEVEL_SYM
+%token <kwd> LINESTRING
+%token <kwd> LIST_SYM
+%token <kwd> LOCAL_SYM /* SQL-2003-R */
+%token <kwd> LOCKS_SYM
+%token <kwd> LOGFILE_SYM
+%token <kwd> LOGS_SYM
+%token <kwd> MASTER_CONNECT_RETRY_SYM
+%token <kwd> MASTER_DELAY_SYM
+%token <kwd> MASTER_GTID_POS_SYM
+%token <kwd> MASTER_HOST_SYM
+%token <kwd> MASTER_LOG_FILE_SYM
+%token <kwd> MASTER_LOG_POS_SYM
+%token <kwd> MASTER_PASSWORD_SYM
+%token <kwd> MASTER_PORT_SYM
+%token <kwd> MASTER_SERVER_ID_SYM
+%token <kwd> MASTER_SSL_CAPATH_SYM
+%token <kwd> MASTER_SSL_CA_SYM
+%token <kwd> MASTER_SSL_CERT_SYM
+%token <kwd> MASTER_SSL_CIPHER_SYM
+%token <kwd> MASTER_SSL_CRL_SYM
+%token <kwd> MASTER_SSL_CRLPATH_SYM
+%token <kwd> MASTER_SSL_KEY_SYM
+%token <kwd> MASTER_SSL_SYM
+%token <kwd> MASTER_SYM
+%token <kwd> MASTER_USER_SYM
+%token <kwd> MASTER_USE_GTID_SYM
+%token <kwd> MASTER_HEARTBEAT_PERIOD_SYM
+%token <kwd> MAX_CONNECTIONS_PER_HOUR
+%token <kwd> MAX_QUERIES_PER_HOUR
+%token <kwd> MAX_ROWS
+%token <kwd> MAX_SIZE_SYM
+%token <kwd> MAX_UPDATES_PER_HOUR
+%token <kwd> MAX_STATEMENT_TIME_SYM
+%token <kwd> MAX_USER_CONNECTIONS_SYM
+%token <kwd> MEDIUM_SYM
+%token <kwd> MEMORY_SYM
+%token <kwd> MERGE_SYM /* SQL-2003-R */
+%token <kwd> MESSAGE_TEXT_SYM /* SQL-2003-N */
+%token <kwd> MICROSECOND_SYM /* MYSQL-FUNC */
+%token <kwd> MIGRATE_SYM
+%token <kwd> MINUTE_SYM /* SQL-2003-R */
+%token <kwd> MINVALUE_SYM
+%token <kwd> MIN_ROWS
+%token <kwd> MODE_SYM
+%token <kwd> MODIFY_SYM
+%token <kwd> MONTH_SYM /* SQL-2003-R */
+%token <kwd> MULTILINESTRING
+%token <kwd> MULTIPOINT
+%token <kwd> MULTIPOLYGON
+%token <kwd> MUTEX_SYM
+%token <kwd> MYSQL_SYM
+%token <kwd> MYSQL_ERRNO_SYM
+%token <kwd> NAMES_SYM /* SQL-2003-N */
+%token <kwd> NAME_SYM /* SQL-2003-N */
+%token <kwd> NATIONAL_SYM /* SQL-2003-R */
+%token <kwd> NCHAR_SYM /* SQL-2003-R */
+%token <kwd> NEW_SYM /* SQL-2003-R */
+%token <kwd> NEXT_SYM /* SQL-2003-N */
+%token <kwd> NEXTVAL_SYM /* PostgreSQL sequence function */
+%token <kwd> NOCACHE_SYM
+%token <kwd> NOCYCLE_SYM
+%token <kwd> NODEGROUP_SYM
+%token <kwd> NONE_SYM /* SQL-2003-R */
+%token <kwd> NOTFOUND_SYM /* Oracle-R */
+%token <kwd> NO_SYM /* SQL-2003-R */
+%token <kwd> NOMAXVALUE_SYM
+%token <kwd> NOMINVALUE_SYM
+%token <kwd> NO_WAIT_SYM
+%token <kwd> NOWAIT_SYM
+%token <kwd> NUMBER_SYM /* SQL-2003-N */
+%token <kwd> NVARCHAR_SYM
+%token <kwd> OF_SYM /* SQL-1992-R, Oracle-R */
+%token <kwd> OFFSET_SYM
+%token <kwd> OLD_PASSWORD_SYM
+%token <kwd> ONE_SYM
+%token <kwd> ONLY_SYM /* SQL-2003-R */
+%token <kwd> ONLINE_SYM
+%token <kwd> OPEN_SYM /* SQL-2003-R */
+%token <kwd> OPTIONS_SYM
+%token <kwd> OPTION /* SQL-2003-N */
+%token <kwd> OWNER_SYM
+%token <kwd> PACK_KEYS_SYM
+%token <kwd> PAGE_SYM
+%token <kwd> PARSER_SYM
+%token <kwd> PARTIAL /* SQL-2003-N */
+%token <kwd> PARTITIONS_SYM
+%token <kwd> PARTITIONING_SYM
+%token <kwd> PASSWORD_SYM
+%token <kwd> PERSISTENT_SYM
+%token <kwd> PHASE_SYM
+%token <kwd> PLUGINS_SYM
+%token <kwd> PLUGIN_SYM
+%token <kwd> POINT_SYM
+%token <kwd> POLYGON
+%token <kwd> PORT_SYM
+%token <kwd> PRECEDES_SYM /* MYSQL */
+%token <kwd> PRECEDING_SYM /* SQL-2011-N */
+%token <kwd> PREPARE_SYM /* SQL-2003-R */
+%token <kwd> PRESERVE_SYM
+%token <kwd> PREV_SYM
+%token <kwd> PREVIOUS_SYM
+%token <kwd> PRIVILEGES /* SQL-2003-N */
+%token <kwd> PROCESS
+%token <kwd> PROCESSLIST_SYM
+%token <kwd> PROFILE_SYM
+%token <kwd> PROFILES_SYM
+%token <kwd> PROXY_SYM
+%token <kwd> QUARTER_SYM
+%token <kwd> QUERY_SYM
+%token <kwd> QUICK
+%token <kwd> RAW /* Oracle */
+%token <kwd> READ_ONLY_SYM
+%token <kwd> REBUILD_SYM
+%token <kwd> RECOVER_SYM
+%token <kwd> REDOFILE_SYM
+%token <kwd> REDO_BUFFER_SIZE_SYM
+%token <kwd> REDUNDANT_SYM
+%token <kwd> RELAY
+%token <kwd> RELAYLOG_SYM
+%token <kwd> RELAY_LOG_FILE_SYM
+%token <kwd> RELAY_LOG_POS_SYM
+%token <kwd> RELAY_THREAD
+%token <kwd> RELOAD
+%token <kwd> REMOVE_SYM
+%token <kwd> REORGANIZE_SYM
+%token <kwd> REPAIR
+%token <kwd> REPEATABLE_SYM /* SQL-2003-N */
+%token <kwd> REPLICATION
+%token <kwd> RESET_SYM
+%token <kwd> RESTART_SYM
+%token <kwd> RESOURCES
+%token <kwd> RESTORE_SYM
+%token <kwd> RESUME_SYM
+%token <kwd> RETURNED_SQLSTATE_SYM /* SQL-2003-N */
+%token <kwd> RETURNS_SYM /* SQL-2003-R */
+%token <kwd> REUSE_SYM /* Oracle-R */
+%token <kwd> REVERSE_SYM
+%token <kwd> ROLE_SYM
+%token <kwd> ROLLBACK_SYM /* SQL-2003-R */
+%token <kwd> ROLLUP_SYM /* SQL-2003-R */
+%token <kwd> ROUTINE_SYM /* SQL-2003-N */
+%token <kwd> ROWCOUNT_SYM /* Oracle-N */
+%token <kwd> ROW_SYM /* SQL-2003-R */
+%token <kwd> ROW_COUNT_SYM /* SQL-2003-N */
+%token <kwd> ROW_FORMAT_SYM
+%token <kwd> RTREE_SYM
+%token <kwd> SAVEPOINT_SYM /* SQL-2003-R */
+%token <kwd> SCHEDULE_SYM
+%token <kwd> SCHEMA_NAME_SYM /* SQL-2003-N */
+%token <kwd> SECOND_SYM /* SQL-2003-R */
+%token <kwd> SECURITY_SYM /* SQL-2003-N */
+%token <kwd> SEQUENCE_SYM
+%token <kwd> SERIALIZABLE_SYM /* SQL-2003-N */
+%token <kwd> SERIAL_SYM
+%token <kwd> SESSION_SYM /* SQL-2003-N */
+%token <kwd> SERVER_SYM
+%token <kwd> SETVAL_SYM /* PostgreSQL sequence function */
+%token <kwd> SHARE_SYM
+%token <kwd> SHUTDOWN
+%token <kwd> SIGNED_SYM
+%token <kwd> SIMPLE_SYM /* SQL-2003-N */
+%token <kwd> SLAVE
+%token <kwd> SLAVES
+%token <kwd> SLAVE_POS_SYM
+%token <kwd> SLOW
+%token <kwd> SNAPSHOT_SYM
+%token <kwd> SOCKET_SYM
+%token <kwd> SOFT_SYM
+%token <kwd> SONAME_SYM
+%token <kwd> SOUNDS_SYM
+%token <kwd> SOURCE_SYM
+%token <kwd> SQL_BUFFER_RESULT
+%token <kwd> SQL_CACHE_SYM
+%token <kwd> SQL_CALC_FOUND_ROWS
+%token <kwd> SQL_NO_CACHE_SYM
+%token <kwd> SQL_THREAD
+%token <kwd> STARTS_SYM
+%token <kwd> START_SYM /* SQL-2003-R */
+%token <kwd> STATEMENT_SYM
+%token <kwd> STATUS_SYM
+%token <kwd> STOP_SYM
+%token <kwd> STORAGE_SYM
+%token <kwd> STORED_SYM
+%token <kwd> STRING_SYM
+%token <kwd> SUBCLASS_ORIGIN_SYM /* SQL-2003-N */
+%token <kwd> SUBDATE_SYM
+%token <kwd> SUBJECT_SYM
+%token <kwd> SUBPARTITIONS_SYM
+%token <kwd> SUBPARTITION_SYM
+%token <kwd> SUPER_SYM
+%token <kwd> SUSPEND_SYM
+%token <kwd> SWAPS_SYM
+%token <kwd> SWITCHES_SYM
+%token <kwd> TABLES
+%token <kwd> TABLESPACE
+%token <kwd> TABLE_CHECKSUM_SYM
+%token <kwd> TABLE_NAME_SYM /* SQL-2003-N */
+%token <kwd> TEMPORARY /* SQL-2003-N */
+%token <kwd> TEMPTABLE_SYM
+%token <kwd> TEXT_SYM
+%token <kwd> THAN_SYM
+%token <kwd> TIES_SYM /* SQL-2011-N */
+%token <kwd> TIMESTAMP /* SQL-2003-R */
+%token <kwd> TIMESTAMP_ADD
+%token <kwd> TIMESTAMP_DIFF
+%token <kwd> TIME_SYM /* SQL-2003-R */
+%token <kwd> TRANSACTION_SYM
+%token <kwd> TRANSACTIONAL_SYM
+%token <kwd> TRIGGERS_SYM
+%token <kwd> TRIM_ORACLE
+%token <kwd> TRUNCATE_SYM
+%token <kwd> TYPES_SYM
+%token <kwd> TYPE_SYM /* SQL-2003-N */
+%token <kwd> UDF_RETURNS_SYM
+%token <kwd> UNBOUNDED_SYM /* SQL-2011-N */
+%token <kwd> UNCOMMITTED_SYM /* SQL-2003-N */
+%token <kwd> UNDEFINED_SYM
+%token <kwd> UNDOFILE_SYM
+%token <kwd> UNDO_BUFFER_SIZE_SYM
+%token <kwd> UNICODE_SYM
+%token <kwd> UNINSTALL_SYM
+%token <kwd> UNKNOWN_SYM /* SQL-2003-R */
+%token <kwd> UNTIL_SYM
+%token <kwd> UPGRADE_SYM
+%token <kwd> USER_SYM /* SQL-2003-R */
+%token <kwd> USE_FRM
+%token <kwd> VALUE_SYM /* SQL-2003-R */
+%token <kwd> VARCHAR2 /* Oracle */
+%token <kwd> VARIABLES
+%token <kwd> VIA_SYM
+%token <kwd> VIEW_SYM /* SQL-2003-N */
+%token <kwd> VIRTUAL_SYM
+%token <kwd> WAIT_SYM
+%token <kwd> WARNINGS
+%token <kwd> WEEK_SYM
+%token <kwd> WEIGHT_STRING_SYM
+%token <kwd> WITHIN
+%token <kwd> WORK_SYM /* SQL-2003-N */
+%token <kwd> WRAPPER_SYM
+%token <kwd> WRITE_SYM /* SQL-2003-N */
+%token <kwd> X509_SYM
+%token <kwd> XA_SYM
+%token <kwd> XML_SYM
+%token <kwd> YEAR_SYM /* SQL-2003-R */
+
%left JOIN_SYM INNER_SYM STRAIGHT_JOIN CROSS LEFT RIGHT
/* A dummy token to force the priority of table_ref production in a join. */
@@ -1041,23 +1057,28 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize);
%left INTERVAL_SYM
%type <lex_str>
- IDENT IDENT_QUOTED DECIMAL_NUM FLOAT_NUM NUM LONG_NUM
+ DECIMAL_NUM FLOAT_NUM NUM LONG_NUM
HEX_NUM HEX_STRING
LEX_HOSTNAME ULONGLONG_NUM field_ident select_alias ident_or_text
- IDENT_sys TEXT_STRING_sys TEXT_STRING_literal
+ TEXT_STRING_sys TEXT_STRING_literal
opt_component key_cache_name
- sp_opt_label BIN_NUM TEXT_STRING_filesystem ident_or_empty
+ sp_opt_label BIN_NUM TEXT_STRING_filesystem
opt_constraint constraint opt_ident
- ident_directly_assignable
opt_package_routine_end_name
- sp_decl_ident
sp_block_label opt_place opt_db
%type <lex_str>
- label_ident
label_declaration_oracle
labels_declaration_oracle
+%type <ident_sys>
+ IDENT_sys
+ ident
+ label_ident
+ ident_or_empty
+ sp_decl_ident
+ ident_directly_assignable
+
%type <lex_string_with_metadata>
TEXT_STRING
NCHAR_STRING
@@ -1065,8 +1086,20 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize);
%type <lex_str_ptr>
opt_table_alias
-%type <lex_string_with_pos>
- ident ident_with_tok_start
+%type <ident_cli>
+ IDENT
+ IDENT_QUOTED
+ IDENT_cli
+ ident_cli
+
+%type <kwd>
+ keyword keyword_sp
+ keyword_directly_assignable
+ keyword_directly_not_assignable
+ keyword_sp_data_type
+ keyword_sp_not_data_type
+ keyword_sp_verb_clause
+ sp_decl_ident_keyword
%type <table>
table_ident table_ident_nodb references xid
@@ -1164,11 +1197,12 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize);
variable variable_aux bool_pri
predicate bit_expr parenthesized_expr
table_wild simple_expr column_default_non_parenthesized_expr udf_expr
+ select_sublist_qualified_asterisk
expr_or_default set_expr_or_default
geometry_function signed_literal expr_or_literal
opt_escape
sp_opt_default
- simple_ident_nospvar simple_ident_q simple_ident_q2
+ simple_ident_nospvar
field_or_var limit_option
part_func_expr
window_func_expr
@@ -1253,13 +1287,6 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize);
opt_field_length_default_sp_param_varchar
opt_field_length_default_sp_param_char
-%type <symbol> keyword keyword_sp
- keyword_directly_assignable
- keyword_directly_not_assignable
- sp_decl_ident_keyword
- keyword_sp_data_type
- keyword_sp_not_data_type
-
%type <lex_user> user grant_user grant_role user_or_role current_role
admin_option_for_role user_maybe_role
@@ -1445,7 +1472,6 @@ END_OF_INPUT
'-' '+' '*' '/' '%' '(' ')'
',' '!' '{' '}' '&' '|' AND_SYM OR_SYM OR_OR_SYM BETWEEN_SYM CASE_SYM
THEN_SYM WHEN_SYM DIV_SYM MOD_SYM OR2_SYM AND_AND_SYM DELETE_SYM
- ROLE_SYM
%type <with_clause> opt_with_clause with_clause
@@ -3535,13 +3561,9 @@ statement_information_item:
}
simple_target_specification:
- ident
+ ident_cli
{
- Lex_input_stream *lip= &thd->m_parser_state->m_lip;
- $$= thd->lex->create_item_for_sp_var(&$1, NULL,
- lip->get_tok_start(),
- lip->get_ptr());
- if ($$ == NULL)
+ if (!($$= thd->lex->create_item_for_sp_var(&$1, NULL)))
MYSQL_YYABORT;
}
| '@' ident_or_text
@@ -3624,10 +3646,8 @@ sp_decl_ident:
IDENT_sys
| sp_decl_ident_keyword
{
- $$.str= thd->strmake($1.str, $1.length);
- if ($$.str == NULL)
+ if ($$.copy_ident_cli(thd, &$1))
MYSQL_YYABORT;
- $$.length= $1.length;
}
;
@@ -7689,8 +7709,8 @@ opt_ev_sql_stmt:
;
ident_or_empty:
- /* empty */ { $$= null_clex_str; }
- | ident { $$= $1; }
+ /* empty */ { $$= Lex_ident_sys(); }
+ | ident
;
alter_commands:
@@ -9076,7 +9096,7 @@ select_item_list:
;
select_item:
- remember_name table_wild remember_end
+ remember_name select_sublist_qualified_asterisk remember_end
{
if (add_item_to_list(thd, $2))
MYSQL_YYABORT;
@@ -10621,40 +10641,10 @@ function_call_generic:
MYSQL_YYABORT;
}
}
- | ident '.' ident '(' opt_expr_list ')'
+ | ident_cli '.' ident_cli '(' opt_expr_list ')'
{
- Create_qfunc *builder;
- Item *item= NULL;
-
- /*
- The following in practice calls:
- <code>Create_sp_func::create()</code>
- and builds a stored function.
-
- However, it's important to maintain the interface between the
- parser and the implementation in item_create.cc clean,
- since this will change with WL#2128 (SQL PATH):
- - INFORMATION_SCHEMA.version() is the SQL 99 syntax for the native
- function version(),
- - MySQL.version() is the SQL 2003 syntax for the native function
- version() (a vendor can specify any schema).
- */
-
- if (!$1.str || check_db_name((LEX_STRING*) &$1))
- my_yyabort_error((ER_WRONG_DB_NAME, MYF(0), $1.str));
- if (check_routine_name(&$3))
- {
+ if (!($$= Lex->make_item_func_call_generic(thd, &$1, &$3, $5)))
MYSQL_YYABORT;
- }
-
- builder= find_qualified_function_builder(thd);
- DBUG_ASSERT(builder);
- item= builder->create_with_db(thd, &$1, &$3, true, $5);
-
- if (! ($$= item))
- {
- MYSQL_YYABORT;
- }
}
;
@@ -11033,10 +11023,11 @@ percentile_function:
{
Item *args= new (thd->mem_root) Item_decimal(thd, "0.5", 3,
thd->charset());
- if (($$ == NULL) || (thd->is_error()))
+ if ((args == NULL) || (thd->is_error()))
{
MYSQL_YYABORT;
}
+ Select->prepare_add_window_spec(thd);
if (add_order_to_list(thd, $3,FALSE)) MYSQL_YYABORT;
$$= new (thd->mem_root) Item_sum_percentile_cont(thd, args);
@@ -11065,6 +11056,7 @@ order_by_single_element_list:
{ if (add_order_to_list(thd, $3,(bool) $4)) MYSQL_YYABORT; }
;
+
window_name:
ident
{
@@ -11187,6 +11179,8 @@ glimit_options:
}
;
+
+
in_sum_expr:
opt_all
{
@@ -11301,7 +11295,6 @@ when_list:
}
;
-
when_list_opt_else:
when_list
| when_list ELSE expr
@@ -11538,6 +11531,7 @@ table_factor:
table_primary_ident:
{
+ DBUG_ASSERT(Select);
SELECT_LEX *sel= Select;
sel->table_join_options= 0;
}
@@ -12361,26 +12355,20 @@ limit_options:
;
limit_option:
- ident_with_tok_start
- {
- LEX *lex= thd->lex;
- Lex_input_stream *lip= & thd->m_parser_state->m_lip;
- if (!($$= lex->create_item_limit(thd, &$1,
- $1.m_pos, lip->get_tok_end())))
- MYSQL_YYABORT;
- }
- | ident_with_tok_start '.' ident
- {
- LEX *lex= thd->lex;
- Lex_input_stream *lip= & thd->m_parser_state->m_lip;
- if (!($$= lex->create_item_limit(thd, &$1, &$3,
- $1.m_pos, lip->get_ptr())))
- MYSQL_YYABORT;
- }
+ ident_cli
+ {
+ if (!($$= Lex->create_item_limit(thd, &$1)))
+ MYSQL_YYABORT;
+ }
+ | ident_cli '.' ident_cli
+ {
+ if (!($$= Lex->create_item_limit(thd, &$1, &$3)))
+ MYSQL_YYABORT;
+ }
| param_marker
- {
- $1->limit_clause_param= TRUE;
- }
+ {
+ $1->limit_clause_param= TRUE;
+ }
| ULONGLONG_NUM
{
$$= new (thd->mem_root) Item_uint(thd, $1.str, $1.length);
@@ -12926,10 +12914,9 @@ insert_lock_option:
| LOW_PRIORITY { $$= TL_WRITE_LOW_PRIORITY; }
| DELAYED_SYM
{
- Lex->keyword_delayed_begin_offset= (uint)(YYLIP->get_tok_start() -
- thd->query());
- Lex->keyword_delayed_end_offset= Lex->keyword_delayed_begin_offset +
- YYLIP->yyLength() + 1;
+ // QQ: why was +1?
+ Lex->keyword_delayed_begin_offset= (uint)($1.pos() - thd->query());
+ Lex->keyword_delayed_end_offset= (uint)($1.end() - thd->query());
$$= TL_WRITE_DELAYED;
}
| HIGH_PRIORITY { $$= TL_WRITE; }
@@ -12939,10 +12926,8 @@ replace_lock_option:
opt_low_priority { $$= $1; }
| DELAYED_SYM
{
- Lex->keyword_delayed_begin_offset= (uint)(YYLIP->get_tok_start() -
- thd->query());
- Lex->keyword_delayed_end_offset= Lex->keyword_delayed_begin_offset +
- YYLIP->yyLength() + 1;
+ Lex->keyword_delayed_begin_offset= (uint)($1.pos() - thd->query());
+ Lex->keyword_delayed_end_offset= (uint)($1.end() - thd->query());
$$= TL_WRITE_DELAYED;
}
;
@@ -14692,24 +14677,26 @@ insert_ident:
table_wild:
ident '.' '*'
{
- SELECT_LEX *sel= Select;
- $$= new (thd->mem_root) Item_field(thd, Lex->current_context(),
- NullS, $1.str, &star_clex_str);
- if ($$ == NULL)
+ if (!($$= Lex->create_item_qualified_asterisk(thd, &$1)))
MYSQL_YYABORT;
- sel->with_wild++;
}
| ident '.' ident '.' '*'
{
- SELECT_LEX *sel= Select;
- const char* schema= thd->client_capabilities & CLIENT_NO_SCHEMA ?
- NullS : $1.str;
- $$= new (thd->mem_root) Item_field(thd, Lex->current_context(),
- schema,
- $3.str, &star_clex_str);
- if ($$ == NULL)
+ if (!($$= Lex->create_item_qualified_asterisk(thd, &$1, &$3)))
+ MYSQL_YYABORT;
+ }
+ ;
+
+select_sublist_qualified_asterisk:
+ ident_cli '.' '*'
+ {
+ if (!($$= Lex->create_item_qualified_asterisk(thd, &$1)))
+ MYSQL_YYABORT;
+ }
+ | ident_cli '.' ident_cli '.' '*'
+ {
+ if (!($$= Lex->create_item_qualified_asterisk(thd, &$1, &$3)))
MYSQL_YYABORT;
- sel->with_wild++;
}
;
@@ -14717,21 +14704,32 @@ order_ident:
expr { $$=$1; }
;
+
simple_ident:
- ident
+ ident_cli
{
- Lex_input_stream *lip= YYLIP;
- if (!($$= Lex->create_item_ident(thd, &$1,
- lip->get_tok_start_prev(),
- lip->get_tok_end())))
+ if (!($$= Lex->create_item_ident(thd, &$1)))
MYSQL_YYABORT;
}
- | simple_ident_q2
- | ident '.' ident
+ | ident_cli '.' ident_cli
{
- LEX *lex= thd->lex;
- if (!($$= lex->create_item_ident(thd, &$1, &$3,
- $1.m_pos, YYLIP->get_tok_end())))
+ if (!($$= Lex->create_item_ident(thd, &$1, &$3)))
+ MYSQL_YYABORT;
+ }
+ | '.' ident_cli '.' ident_cli
+ {
+ Lex_ident_cli empty($2.pos(), 0);
+ if (!($$= Lex->create_item_ident(thd, &empty, &$2, &$4)))
+ MYSQL_YYABORT;
+ }
+ | ident_cli '.' ident_cli '.' ident_cli
+ {
+ if (!($$= Lex->create_item_ident(thd, &$1, &$3, &$5)))
+ MYSQL_YYABORT;
+ }
+ | colon_with_pos ident '.' ident
+ {
+ if (!($$= Lex->make_item_colon_ident_ident(thd, &$2, &$4)))
MYSQL_YYABORT;
}
;
@@ -14742,39 +14740,20 @@ simple_ident_nospvar:
if (!($$= Lex->create_item_ident_nosp(thd, &$1)))
MYSQL_YYABORT;
}
- | simple_ident_q { $$= $1; }
- ;
-
-simple_ident_q:
- ident '.' ident
+ | ident '.' ident
{
if (!($$= Lex->create_item_ident_nospvar(thd, &$1, &$3)))
MYSQL_YYABORT;
}
- | simple_ident_q2
- ;
-
-simple_ident_q2:
- colon_with_pos ident '.' ident
+ | colon_with_pos ident '.' ident
{
- LEX *lex= Lex;
- if (lex->is_trigger_new_or_old_reference(&$2))
- {
- bool new_row= ($2.str[0]=='N' || $2.str[0]=='n');
- if (!($$= lex->create_and_link_Item_trigger_field(thd,
- &$4,
- new_row)))
- MYSQL_YYABORT;
- }
- else
- {
- thd->parse_error();
+ if (!($$= Lex->make_item_colon_ident_ident(thd, &$2, &$4)))
MYSQL_YYABORT;
- }
}
| '.' ident '.' ident
{
- if (!($$= Lex->create_item_ident(thd, &null_clex_str, &$2, &$4)))
+ Lex_ident_sys none;
+ if (!($$= Lex->create_item_ident(thd, &none, &$2, &$4)))
MYSQL_YYABORT;
}
| ident '.' ident '.' ident
@@ -14853,32 +14832,22 @@ table_ident_nodb:
}
;
-IDENT_sys:
- IDENT { $$= $1; }
+IDENT_cli:
+ IDENT
+ | IDENT_QUOTED
+ ;
+
+ident_cli:
+ IDENT
| IDENT_QUOTED
+ | keyword { $$= $1; }
+ ;
+
+IDENT_sys:
+ IDENT_cli
{
- if (thd->charset_is_system_charset)
- {
- CHARSET_INFO *cs= system_charset_info;
- size_t wlen= Well_formed_prefix(cs, $1.str, $1.length).length();
- if (wlen < $1.length)
- {
- ErrConvString err($1.str, $1.length, &my_charset_bin);
- my_error(ER_INVALID_CHARACTER_STRING, MYF(0),
- cs->csname, err.ptr());
- MYSQL_YYABORT;
- }
- $$= $1;
- }
- else
- {
- LEX_STRING to;
- if (thd->convert_with_error(system_charset_info, &to,
- thd->charset(), $1.str, $1.length))
- MYSQL_YYABORT;
- $$.str= to.str;
- $$.length= to.length;
- }
+ if (thd->to_ident_sys_alloc(&$$, &$1))
+ MYSQL_YYABORT;
}
;
@@ -14936,62 +14905,34 @@ TEXT_STRING_filesystem:
ident:
IDENT_sys
- {
- (LEX_CSTRING &)$$= $1;
- $$.m_pos= (char *) YYLIP->get_tok_start_prev();
- }
- | keyword
- {
- $$.str= thd->strmake($1.str, $1.length);
- if ($$.str == NULL)
- MYSQL_YYABORT;
- $$.length= $1.length;
- $$.m_pos= (char *) YYLIP->get_tok_start_prev();
- }
- ;
-
-ident_with_tok_start:
- IDENT_sys
- {
- (LEX_CSTRING &)$$= $1;
- $$.m_pos= (char *) YYLIP->get_tok_start();
- }
| keyword
{
- if (!($$.str= thd->strmake($1.str, $1.length)))
+ if ($$.copy_keyword(thd, &$1))
MYSQL_YYABORT;
- $$.length= $1.length;
- $$.m_pos= (char *) YYLIP->get_tok_start();
}
;
ident_directly_assignable:
- IDENT_sys { $$=$1; }
+ IDENT_sys
| keyword_directly_assignable
{
- $$.str= thd->strmake($1.str, $1.length);
- if ($$.str == NULL)
+ if ($$.copy_keyword(thd, &$1))
MYSQL_YYABORT;
- $$.length= $1.length;
}
| keyword_sp
{
- $$.str= thd->strmake($1.str, $1.length);
- if ($$.str == NULL)
+ if ($$.copy_keyword(thd, &$1))
MYSQL_YYABORT;
- $$.length= $1.length;
}
;
label_ident:
- IDENT_sys { $$=$1; }
+ IDENT_sys
| keyword_sp
{
- $$.str= thd->strmake($1.str, $1.length);
- if ($$.str == NULL)
+ if ($$.copy_keyword(thd, &$1))
MYSQL_YYABORT;
- $$.length= $1.length;
}
;
@@ -15081,9 +15022,9 @@ user: user_maybe_role
/* Keyword that we allow for identifiers (except SP labels) */
keyword:
- keyword_sp {}
- | keyword_directly_assignable {}
- | keyword_directly_not_assignable {}
+ keyword_sp
+ | keyword_directly_assignable
+ | keyword_directly_not_assignable
;
@@ -15092,57 +15033,59 @@ keyword:
xxx := 10;
*/
keyword_directly_assignable:
- ASCII_SYM {}
- | BACKUP_SYM {}
- | BINLOG_SYM {}
- | BYTE_SYM {}
- | CACHE_SYM {}
- | CHECKSUM_SYM {}
- | CHECKPOINT_SYM {}
- | COLUMN_ADD_SYM {}
- | COLUMN_CHECK_SYM {}
- | COLUMN_CREATE_SYM {}
- | COLUMN_DELETE_SYM {}
- | COLUMN_GET_SYM {}
- | DEALLOCATE_SYM {}
- | EXAMINED_SYM {}
- | EXCLUDE_SYM {}
- | EXECUTE_SYM {}
- | FLUSH_SYM {}
- | FOLLOWING_SYM {}
- | FORMAT_SYM {}
- | GET_SYM {}
- | HELP_SYM {}
- | HOST_SYM {}
- | INSTALL_SYM {}
- | OPTION {}
- | OPTIONS_SYM {}
- | OWNER_SYM {}
- | PARSER_SYM {}
- | PORT_SYM {}
- | PRECEDING_SYM {}
- | PREPARE_SYM {}
- | REMOVE_SYM {}
- | RESET_SYM {}
- | RESTORE_SYM {}
- | SECURITY_SYM {}
- | SERVER_SYM {}
- | SIGNED_SYM {}
- | SOCKET_SYM {}
- | SLAVE {}
- | SLAVES {}
- | SONAME_SYM {}
- | START_SYM {}
- | STOP_SYM {}
- | STORED_SYM {}
- | TIES_SYM {}
- | UNICODE_SYM {}
- | UNINSTALL_SYM {}
- | UNBOUNDED_SYM {}
- | WITHIN {}
- | WRAPPER_SYM {}
- | XA_SYM {}
- | UPGRADE_SYM {}
+
+
+ ASCII_SYM
+ | BACKUP_SYM
+ | BINLOG_SYM
+ | BYTE_SYM
+ | CACHE_SYM
+ | CHECKSUM_SYM
+ | CHECKPOINT_SYM
+ | COLUMN_ADD_SYM
+ | COLUMN_CHECK_SYM
+ | COLUMN_CREATE_SYM
+ | COLUMN_DELETE_SYM
+ | COLUMN_GET_SYM
+ | DEALLOCATE_SYM
+ | EXAMINED_SYM
+ | EXCLUDE_SYM
+ | EXECUTE_SYM
+ | FLUSH_SYM
+ | FOLLOWING_SYM
+ | FORMAT_SYM
+ | GET_SYM
+ | HELP_SYM
+ | HOST_SYM
+ | INSTALL_SYM
+ | OPTION
+ | OPTIONS_SYM
+ | OWNER_SYM
+ | PARSER_SYM
+ | PORT_SYM
+ | PRECEDING_SYM
+ | PREPARE_SYM
+ | REMOVE_SYM
+ | RESET_SYM
+ | RESTORE_SYM
+ | SECURITY_SYM
+ | SERVER_SYM
+ | SIGNED_SYM
+ | SOCKET_SYM
+ | SLAVE
+ | SLAVES
+ | SONAME_SYM
+ | START_SYM
+ | STOP_SYM
+ | STORED_SYM
+ | TIES_SYM
+ | UNICODE_SYM
+ | UNINSTALL_SYM
+ | UNBOUNDED_SYM
+ | WITHIN
+ | WRAPPER_SYM
+ | XA_SYM
+ | UPGRADE_SYM
;
/*
@@ -15182,13 +15125,13 @@ keyword_directly_assignable:
CREATE TRIGGER .. FOR EACH ROW FOLLOWS tr1 a:= 10;
*/
keyword_directly_not_assignable:
- CONTAINS_SYM { /* SP characteristic */ }
- | LANGUAGE_SYM { /* SP characteristic */ }
- | NO_SYM { /* SP characteristic */ }
- | CHARSET { /* SET CHARSET utf8; */ }
- | FOLLOWS_SYM { /* Conflicts with assignment in FOR EACH */}
- | PRECEDES_SYM { /* Conflicts with assignment in FOR EACH */}
- | keyword_sp_verb_clause { }
+ CONTAINS_SYM /* SP characteristic */
+ | LANGUAGE_SYM /* SP characteristic */
+ | NO_SYM /* SP characteristic */
+ | CHARSET /* SET CHARSET utf8; */
+ | FOLLOWS_SYM /* Conflicts with assignment in FOR EACH */
+ | PRECEDES_SYM /* Conflicts with assignment in FOR EACH */
+ | keyword_sp_verb_clause
;
/*
@@ -15200,7 +15143,7 @@ keyword_directly_not_assignable:
keyword_sp:
keyword_sp_data_type
| keyword_sp_not_data_type
- | FUNCTION_SYM { /* Oracle-PLSQL-R */}
+ | FUNCTION_SYM /* Oracle-PLSQL-R */
;
@@ -15212,19 +15155,19 @@ keyword_sp:
xxx:=10
*/
keyword_sp_verb_clause:
- BEGIN_SYM { /* Compound. Reserved in Oracle */ }
- | CLOSE_SYM { /* Verb clause. Reserved in Oracle */ }
- | COMMIT_SYM { /* Verb clause. Reserved in Oracle */ }
- | EXCEPTION_SYM { /* EXCEPTION section in SP blocks */ }
- | DO_SYM { /* Verb clause */ }
- | END { /* Compound. Reserved in Oracle */ }
- | HANDLER_SYM { /* Verb clause */ }
- | OPEN_SYM { /* Verb clause. Reserved in Oracle */ }
- | REPAIR { /* Verb clause */ }
- | ROLLBACK_SYM { /* Verb clause. Reserved in Oracle */ }
- | SAVEPOINT_SYM { /* Verb clause. Reserved in Oracle */ }
- | SHUTDOWN { /* Verb clause */ }
- | TRUNCATE_SYM { /* Verb clause. Reserved in Oracle */ }
+ BEGIN_SYM /* Compound. Reserved in Oracle */
+ | CLOSE_SYM /* Verb clause. Reserved in Oracle */
+ | COMMIT_SYM /* Verb clause. Reserved in Oracle */
+ | EXCEPTION_SYM /* EXCEPTION section in SP blocks */
+ | DO_SYM /* Verb clause */
+ | END /* Compound. Reserved in Oracle */
+ | HANDLER_SYM /* Verb clause */
+ | OPEN_SYM /* Verb clause. Reserved in Oracle */
+ | REPAIR /* Verb clause */
+ | ROLLBACK_SYM /* Verb clause. Reserved in Oracle */
+ | SAVEPOINT_SYM /* Verb clause. Reserved in Oracle */
+ | SHUTDOWN /* Verb clause */
+ | TRUNCATE_SYM /* Verb clause. Reserved in Oracle */
;
@@ -15233,349 +15176,352 @@ keyword_sp_verb_clause:
but not allowed as non-delimited SP variable names in sql_mode=ORACLE.
*/
keyword_sp_data_type:
- BIT_SYM {}
- | BOOLEAN_SYM {} /* PLSQL-R */
- | BOOL_SYM {}
- | CLOB {}
- | DATE_SYM {} /* Oracle-R, PLSQL-R */
- | DATETIME {}
- | ENUM {}
- | FIXED_SYM {}
- | GEOMETRYCOLLECTION {}
- | GEOMETRY_SYM {}
- | JSON_SYM {}
- | LINESTRING {}
- | MEDIUM_SYM {}
- | MULTILINESTRING {}
- | MULTIPOINT {}
- | MULTIPOLYGON {}
- | NATIONAL_SYM {}
- | NCHAR_SYM {}
- | NUMBER_SYM {} /* Oracle-R, PLSQL-R */
- | NVARCHAR_SYM {}
- | POINT_SYM {}
- | POLYGON {}
- | RAW {} /* Oracle-R */
- | ROW_SYM {}
- | SERIAL_SYM {}
- | TEXT_SYM {}
- | TIMESTAMP {}
- | TIME_SYM {} /* Oracle-R */
- | VARCHAR2 {} /* Oracle-R, PLSQL-R */
- | YEAR_SYM {}
+ BIT_SYM
+ | BOOLEAN_SYM /* PLSQL-R */
+ | BOOL_SYM
+ | CLOB
+ | DATE_SYM /* Oracle-R, PLSQL-R */
+ | DATETIME
+ | ENUM
+ | FIXED_SYM
+ | GEOMETRYCOLLECTION
+ | GEOMETRY_SYM
+ | JSON_SYM
+ | LINESTRING
+ | MEDIUM_SYM
+ | MULTILINESTRING
+ | MULTIPOINT
+ | MULTIPOLYGON
+ | NATIONAL_SYM
+ | NCHAR_SYM
+ | NUMBER_SYM /* Oracle-R, PLSQL-R */
+ | NVARCHAR_SYM
+ | POINT_SYM
+ | POLYGON
+ | RAW /* Oracle-R */
+ | ROW_SYM
+ | SERIAL_SYM
+ | TEXT_SYM
+ | TIMESTAMP
+ | TIME_SYM /* Oracle-R */
+ | VARCHAR2 /* Oracle-R, PLSQL-R */
+ | YEAR_SYM
;
keyword_sp_not_data_type:
- ACTION {}
- | ADDDATE_SYM {}
- | ADMIN_SYM {}
- | AFTER_SYM {}
- | AGAINST {}
- | AGGREGATE_SYM {}
- | ALGORITHM_SYM {}
- | ALWAYS_SYM {}
- | ANY_SYM {}
- | AT_SYM {}
- | ATOMIC_SYM {}
- | AUTHORS_SYM {}
- | AUTO_INC {}
- | AUTOEXTEND_SIZE_SYM {}
- | AUTO_SYM {}
- | AVG_ROW_LENGTH {}
- | AVG_SYM {}
- | BLOCK_SYM {}
- | BTREE_SYM {}
- | CASCADED {}
- | CATALOG_NAME_SYM {}
- | CHAIN_SYM {}
- | CHANGED {}
- | CIPHER_SYM {}
- | CLIENT_SYM {}
- | CLASS_ORIGIN_SYM {}
- | COALESCE {}
- | CODE_SYM {}
- | COLLATION_SYM {}
- | COLUMN_NAME_SYM {}
- | COLUMNS {}
- | COMMITTED_SYM {}
- | COMPACT_SYM {}
- | COMPLETION_SYM {}
- | COMPRESSED_SYM {}
- | CONCURRENT {}
- | CONNECTION_SYM {}
- | CONSISTENT_SYM {}
- | CONSTRAINT_CATALOG_SYM {}
- | CONSTRAINT_SCHEMA_SYM {}
- | CONSTRAINT_NAME_SYM {}
- | CONTEXT_SYM {}
- | CONTRIBUTORS_SYM {}
- | CURRENT_POS_SYM {}
- | CPU_SYM {}
- | CUBE_SYM {}
+ ACTION
+ | ADDDATE_SYM
+ | ADMIN_SYM
+ | AFTER_SYM
+ | AGAINST
+ | AGGREGATE_SYM
+ | ALGORITHM_SYM
+ | ALWAYS_SYM
+ | ANY_SYM
+ | AT_SYM
+ | ATOMIC_SYM
+ | AUTHORS_SYM
+ | AUTO_INC
+ | AUTOEXTEND_SIZE_SYM
+ | AUTO_SYM
+ | AVG_ROW_LENGTH
+ | AVG_SYM
+ | BLOCK_SYM
+ | BTREE_SYM
+ | CASCADED
+ | CATALOG_NAME_SYM
+ | CHAIN_SYM
+ | CHANGED
+ | CIPHER_SYM
+ | CLIENT_SYM
+ | CLASS_ORIGIN_SYM
+ | COALESCE
+ | CODE_SYM
+ | COLLATION_SYM
+ | COLUMN_NAME_SYM
+ | COLUMNS
+ | COMMITTED_SYM
+ | COMPACT_SYM
+ | COMPLETION_SYM
+ | COMPRESSED_SYM
+ | CONCURRENT
+ | CONNECTION_SYM
+ | CONSISTENT_SYM
+ | CONSTRAINT_CATALOG_SYM
+ | CONSTRAINT_SCHEMA_SYM
+ | CONSTRAINT_NAME_SYM
+ | CONTEXT_SYM
+ | CONTRIBUTORS_SYM
+ | CURRENT_POS_SYM
+ | CPU_SYM
+ | CUBE_SYM
/*
Although a reserved keyword in SQL:2003 (and :2008),
not reserved in MySQL per WL#2111 specification.
*/
- | CURRENT_SYM {}
- | CURSOR_NAME_SYM {}
- | CYCLE_SYM {}
- | DATA_SYM {}
- | DATAFILE_SYM {}
- | DATE_FORMAT_SYM {}
- | DAY_SYM {}
- | DECODE_SYM {}
- | DEFINER_SYM {}
- | DELAY_KEY_WRITE_SYM {}
- | DES_KEY_FILE {}
- | DIAGNOSTICS_SYM {}
- | DIRECTORY_SYM {}
- | DISABLE_SYM {}
- | DISCARD {}
- | DISK_SYM {}
- | DUMPFILE {}
- | DUPLICATE_SYM {}
- | DYNAMIC_SYM {}
- | ENDS_SYM {}
- | ENGINE_SYM {}
- | ENGINES_SYM {}
- | ERROR_SYM {}
- | ERRORS {}
- | ESCAPE_SYM {}
- | EVENT_SYM {}
- | EVENTS_SYM {}
- | EVERY_SYM {}
- | EXCHANGE_SYM {}
- | EXPANSION_SYM {}
- | EXPORT_SYM {}
- | EXTENDED_SYM {}
- | EXTENT_SIZE_SYM {}
- | FAULTS_SYM {}
- | FAST_SYM {}
- | FOUND_SYM {}
- | ENABLE_SYM {}
- | FULL {}
- | FILE_SYM {}
- | FIRST_SYM {}
- | GENERAL {}
- | GENERATED_SYM {}
- | GET_FORMAT {}
- | GRANTS {}
- | GLOBAL_SYM {}
- | HASH_SYM {}
- | HARD_SYM {}
- | INVISIBLE_SYM {}
- | HOSTS_SYM {}
- | HOUR_SYM {}
- | ID_SYM {}
- | IDENTIFIED_SYM {}
- | IGNORE_SERVER_IDS_SYM {}
- | INCREMENT_SYM {}
- | IMMEDIATE_SYM {} /* SQL-2003-R */
- | INVOKER_SYM {}
- | IMPORT {}
- | INDEXES {}
- | INITIAL_SIZE_SYM {}
- | IO_SYM {}
- | IPC_SYM {}
- | ISOLATION {}
- | ISOPEN_SYM {}
- | ISSUER_SYM {}
- | INSERT_METHOD {}
- | KEY_BLOCK_SIZE {}
- | LAST_VALUE {}
- | LAST_SYM {}
- | LASTVAL_SYM {}
- | LEAVES {}
- | LESS_SYM {}
- | LEVEL_SYM {}
- | LIST_SYM {}
- | LOCAL_SYM {}
- | LOCKS_SYM {}
- | LOGFILE_SYM {}
- | LOGS_SYM {}
- | MAX_ROWS {}
- | MASTER_SYM {}
- | MASTER_HEARTBEAT_PERIOD_SYM {}
- | MASTER_GTID_POS_SYM {}
- | MASTER_HOST_SYM {}
- | MASTER_PORT_SYM {}
- | MASTER_LOG_FILE_SYM {}
- | MASTER_LOG_POS_SYM {}
- | MASTER_USER_SYM {}
- | MASTER_USE_GTID_SYM {}
- | MASTER_PASSWORD_SYM {}
- | MASTER_SERVER_ID_SYM {}
- | MASTER_CONNECT_RETRY_SYM {}
- | MASTER_DELAY_SYM {}
- | MASTER_SSL_SYM {}
- | MASTER_SSL_CA_SYM {}
- | MASTER_SSL_CAPATH_SYM {}
- | MASTER_SSL_CERT_SYM {}
- | MASTER_SSL_CIPHER_SYM {}
- | MASTER_SSL_CRL_SYM {}
- | MASTER_SSL_CRLPATH_SYM {}
- | MASTER_SSL_KEY_SYM {}
- | MAX_CONNECTIONS_PER_HOUR {}
- | MAX_QUERIES_PER_HOUR {}
- | MAX_SIZE_SYM {}
- | MAX_STATEMENT_TIME_SYM {}
- | MAX_UPDATES_PER_HOUR {}
- | MAX_USER_CONNECTIONS_SYM {}
- | MEMORY_SYM {}
- | MERGE_SYM {}
- | MESSAGE_TEXT_SYM {}
- | MICROSECOND_SYM {}
- | MIGRATE_SYM {}
- | MINUTE_SYM {}
- | MINVALUE_SYM {}
- | MIN_ROWS {}
- | MODIFY_SYM {}
- | MODE_SYM {}
- | MONTH_SYM {}
- | MUTEX_SYM {}
- | MYSQL_SYM {}
- | MYSQL_ERRNO_SYM {}
- | NAME_SYM {}
- | NAMES_SYM {}
- | NEXT_SYM {}
- | NEXTVAL_SYM {}
- | NEW_SYM {}
- | NOCACHE_SYM {}
- | NOCYCLE_SYM {}
- | NOMINVALUE_SYM {}
- | NOMAXVALUE_SYM {}
- | NO_WAIT_SYM {}
- | NOWAIT_SYM {}
- | NODEGROUP_SYM {}
- | NONE_SYM {}
- | NOTFOUND_SYM {}
- | OF_SYM {} /* SQL-1999-R, Oracle-R */
- | OFFSET_SYM {}
- | OLD_PASSWORD_SYM {}
- | ONE_SYM {}
- | ONLINE_SYM {}
- | ONLY_SYM {}
- | PACK_KEYS_SYM {}
- | PAGE_SYM {}
- | PARTIAL {}
- | PARTITIONING_SYM {}
- | PARTITIONS_SYM {}
- | PASSWORD_SYM {}
- | PERSISTENT_SYM {}
- | PHASE_SYM {}
- | PLUGIN_SYM {}
- | PLUGINS_SYM {}
- | PRESERVE_SYM {}
- | PREV_SYM {}
- | PREVIOUS_SYM {}
- | PRIVILEGES {}
- | PROCESS {}
- | PROCESSLIST_SYM {}
- | PROFILE_SYM {}
- | PROFILES_SYM {}
- | PROXY_SYM {}
- | QUARTER_SYM {}
- | QUERY_SYM {}
- | QUICK {}
- | READ_ONLY_SYM {}
- | REBUILD_SYM {}
- | RECOVER_SYM {}
- | REDO_BUFFER_SIZE_SYM {}
- | REDOFILE_SYM {}
- | REDUNDANT_SYM {}
- | RELAY {}
- | RELAYLOG_SYM {}
- | RELAY_LOG_FILE_SYM {}
- | RELAY_LOG_POS_SYM {}
- | RELAY_THREAD {}
- | RELOAD {}
- | REORGANIZE_SYM {}
- | REPEATABLE_SYM {}
- | REPLICATION {}
- | RESOURCES {}
- | RESTART_SYM {}
- | RESUME_SYM {}
- | RETURNED_SQLSTATE_SYM {}
- | RETURNS_SYM {}
- | REUSE_SYM {}
- | REVERSE_SYM {}
- | ROLE_SYM {}
- | ROLLUP_SYM {}
- | ROUTINE_SYM {}
- | ROWCOUNT_SYM {}
- | ROW_COUNT_SYM {}
- | ROW_FORMAT_SYM {}
- | RTREE_SYM {}
- | SCHEDULE_SYM {}
- | SCHEMA_NAME_SYM {}
- | SECOND_SYM {}
- | SEQUENCE_SYM {}
- | SERIALIZABLE_SYM {}
- | SESSION_SYM {}
- | SETVAL_SYM {}
- | SIMPLE_SYM {}
- | SHARE_SYM {}
- | SLAVE_POS_SYM {}
- | SLOW {}
- | SNAPSHOT_SYM {}
- | SOFT_SYM {}
- | SOUNDS_SYM {}
- | SOURCE_SYM {}
- | SQL_CACHE_SYM {}
- | SQL_BUFFER_RESULT {}
- | SQL_NO_CACHE_SYM {}
- | SQL_THREAD {}
- | STARTS_SYM {}
- | STATEMENT_SYM {}
- | STATUS_SYM {}
- | STORAGE_SYM {}
- | STRING_SYM {}
- | SUBCLASS_ORIGIN_SYM {}
- | SUBDATE_SYM {}
- | SUBJECT_SYM {}
- | SUBPARTITION_SYM {}
- | SUBPARTITIONS_SYM {}
- | SUPER_SYM {}
- | SUSPEND_SYM {}
- | SWAPS_SYM {}
- | SWITCHES_SYM {}
- | TABLE_NAME_SYM {}
- | TABLES {}
- | TABLE_CHECKSUM_SYM {}
- | TABLESPACE {}
- | TEMPORARY {}
- | TEMPTABLE_SYM {}
- | THAN_SYM {}
- | TRANSACTION_SYM {}
- | TRANSACTIONAL_SYM {}
- | TRIGGERS_SYM {}
- | TRIM_ORACLE {}
- | TIMESTAMP_ADD {}
- | TIMESTAMP_DIFF {}
- | TYPES_SYM {}
- | TYPE_SYM {}
- | UDF_RETURNS_SYM {}
- | UNCOMMITTED_SYM {}
- | UNDEFINED_SYM {}
- | UNDO_BUFFER_SIZE_SYM {}
- | UNDOFILE_SYM {}
- | UNKNOWN_SYM {}
- | UNTIL_SYM {}
- | USER_SYM {}
- | USE_FRM {}
- | VARIABLES {}
- | VIEW_SYM {}
- | VIRTUAL_SYM {}
- | VALUE_SYM {}
- | WARNINGS {}
- | WAIT_SYM {}
- | WEEK_SYM {}
- | WEIGHT_STRING_SYM {}
- | WORK_SYM {}
- | X509_SYM {}
- | XML_SYM {}
- | VIA_SYM {}
+ | CURRENT_SYM
+ | CURSOR_NAME_SYM
+ | CYCLE_SYM
+ | DATA_SYM
+ | DATAFILE_SYM
+ | DATE_FORMAT_SYM
+ | DAY_SYM
+ | DECODE_SYM
+ | DEFINER_SYM
+ | DELAY_KEY_WRITE_SYM
+ | DES_KEY_FILE
+ | DIAGNOSTICS_SYM
+ | DIRECTORY_SYM
+ | DISABLE_SYM
+ | DISCARD
+ | DISK_SYM
+ | DUMPFILE
+ | DUPLICATE_SYM
+ | DYNAMIC_SYM
+ | ENDS_SYM
+ | ENGINE_SYM
+ | ENGINES_SYM
+ | ERROR_SYM
+ | ERRORS
+ | ESCAPE_SYM
+ | EVENT_SYM
+ | EVENTS_SYM
+ | EVERY_SYM
+
+ | EXCHANGE_SYM
+ | EXPANSION_SYM
+ | EXPORT_SYM
+ | EXTENDED_SYM
+ | EXTENT_SIZE_SYM
+ | FAULTS_SYM
+ | FAST_SYM
+ | FOUND_SYM
+ | ENABLE_SYM
+ | FULL
+ | FILE_SYM
+ | FIRST_SYM
+ | GENERAL
+ | GENERATED_SYM
+ | GET_FORMAT
+ | GRANTS
+ | GLOBAL_SYM
+ | HASH_SYM
+ | HARD_SYM
+ | HOSTS_SYM
+ | HOUR_SYM
+ | ID_SYM
+ | IDENTIFIED_SYM
+ | IGNORE_SERVER_IDS_SYM
+ | INCREMENT_SYM
+ | IMMEDIATE_SYM /* SQL-2003-R */
+ | INVOKER_SYM
+ | IMPORT
+ | INDEXES
+ | INITIAL_SIZE_SYM
+ | IO_SYM
+ | IPC_SYM
+ | ISOLATION
+ | ISOPEN_SYM
+ | ISSUER_SYM
+ | INSERT_METHOD
+ | INVISIBLE_SYM
+ | KEY_BLOCK_SIZE
+ | LAST_VALUE
+ | LAST_SYM
+ | LASTVAL_SYM
+ | LEAVES
+ | LESS_SYM
+ | LEVEL_SYM
+ | LIST_SYM
+ | LOCAL_SYM
+ | LOCKS_SYM
+ | LOGFILE_SYM
+ | LOGS_SYM
+ | MAX_ROWS
+ | MASTER_SYM
+ | MASTER_HEARTBEAT_PERIOD_SYM
+ | MASTER_GTID_POS_SYM
+ | MASTER_HOST_SYM
+ | MASTER_PORT_SYM
+ | MASTER_LOG_FILE_SYM
+ | MASTER_LOG_POS_SYM
+ | MASTER_USER_SYM
+ | MASTER_USE_GTID_SYM
+ | MASTER_PASSWORD_SYM
+ | MASTER_SERVER_ID_SYM
+ | MASTER_CONNECT_RETRY_SYM
+ | MASTER_DELAY_SYM
+ | MASTER_SSL_SYM
+ | MASTER_SSL_CA_SYM
+ | MASTER_SSL_CAPATH_SYM
+ | MASTER_SSL_CERT_SYM
+ | MASTER_SSL_CIPHER_SYM
+ | MASTER_SSL_CRL_SYM
+ | MASTER_SSL_CRLPATH_SYM
+ | MASTER_SSL_KEY_SYM
+ | MAX_CONNECTIONS_PER_HOUR
+ | MAX_QUERIES_PER_HOUR
+ | MAX_SIZE_SYM
+ | MAX_STATEMENT_TIME_SYM
+ | MAX_UPDATES_PER_HOUR
+ | MAX_USER_CONNECTIONS_SYM
+ | MEMORY_SYM
+ | MERGE_SYM
+ | MESSAGE_TEXT_SYM
+ | MICROSECOND_SYM
+ | MIGRATE_SYM
+ | MINUTE_SYM
+ | MINVALUE_SYM
+ | MIN_ROWS
+ | MODIFY_SYM
+ | MODE_SYM
+ | MONTH_SYM
+ | MUTEX_SYM
+ | MYSQL_SYM
+ | MYSQL_ERRNO_SYM
+ | NAME_SYM
+ | NAMES_SYM
+ | NEXT_SYM
+ | NEXTVAL_SYM
+ | NEW_SYM
+ | NOCACHE_SYM
+ | NOCYCLE_SYM
+ | NOMINVALUE_SYM
+ | NOMAXVALUE_SYM
+ | NO_WAIT_SYM
+ | NOWAIT_SYM
+ | NODEGROUP_SYM
+ | NONE_SYM
+ | NOTFOUND_SYM
+ | OF_SYM /* SQL-1999-R, Oracle-R */
+ | OFFSET_SYM
+ | OLD_PASSWORD_SYM
+ | ONE_SYM
+ | ONLINE_SYM
+ | ONLY_SYM
+
+ | PACK_KEYS_SYM
+ | PAGE_SYM
+ | PARTIAL
+ | PARTITIONING_SYM
+ | PARTITIONS_SYM
+ | PASSWORD_SYM
+ | PERSISTENT_SYM
+ | PHASE_SYM
+ | PLUGIN_SYM
+ | PLUGINS_SYM
+ | PRESERVE_SYM
+ | PREV_SYM
+ | PREVIOUS_SYM
+ | PRIVILEGES
+ | PROCESS
+ | PROCESSLIST_SYM
+ | PROFILE_SYM
+ | PROFILES_SYM
+ | PROXY_SYM
+ | QUARTER_SYM
+ | QUERY_SYM
+ | QUICK
+
+ | READ_ONLY_SYM
+ | REBUILD_SYM
+ | RECOVER_SYM
+ | REDO_BUFFER_SIZE_SYM
+ | REDOFILE_SYM
+ | REDUNDANT_SYM
+ | RELAY
+ | RELAYLOG_SYM
+ | RELAY_LOG_FILE_SYM
+ | RELAY_LOG_POS_SYM
+ | RELAY_THREAD
+ | RELOAD
+ | REORGANIZE_SYM
+ | REPEATABLE_SYM
+ | REPLICATION
+ | RESOURCES
+ | RESTART_SYM
+ | RESUME_SYM
+ | RETURNED_SQLSTATE_SYM
+ | RETURNS_SYM
+ | REUSE_SYM /* Oracle-R */
+ | REVERSE_SYM
+ | ROLE_SYM
+ | ROLLUP_SYM
+ | ROUTINE_SYM
+ | ROWCOUNT_SYM
+ | ROW_COUNT_SYM
+ | ROW_FORMAT_SYM
+ | RTREE_SYM
+ | SCHEDULE_SYM
+ | SCHEMA_NAME_SYM
+ | SECOND_SYM
+ | SEQUENCE_SYM
+ | SERIALIZABLE_SYM
+ | SESSION_SYM
+ | SETVAL_SYM
+ | SIMPLE_SYM
+ | SHARE_SYM
+ | SLAVE_POS_SYM
+ | SLOW
+ | SNAPSHOT_SYM
+ | SOFT_SYM
+ | SOUNDS_SYM
+ | SOURCE_SYM
+ | SQL_CACHE_SYM
+ | SQL_BUFFER_RESULT
+ | SQL_NO_CACHE_SYM
+ | SQL_THREAD
+ | STARTS_SYM
+ | STATEMENT_SYM
+ | STATUS_SYM
+ | STORAGE_SYM
+ | STRING_SYM
+ | SUBCLASS_ORIGIN_SYM
+ | SUBDATE_SYM
+ | SUBJECT_SYM
+ | SUBPARTITION_SYM
+ | SUBPARTITIONS_SYM
+ | SUPER_SYM
+ | SUSPEND_SYM
+ | SWAPS_SYM
+ | SWITCHES_SYM
+ | TABLE_NAME_SYM
+ | TABLES
+ | TABLE_CHECKSUM_SYM
+ | TABLESPACE
+ | TEMPORARY
+ | TEMPTABLE_SYM
+ | THAN_SYM
+ | TRANSACTION_SYM
+ | TRANSACTIONAL_SYM
+ | TRIGGERS_SYM
+ | TRIM_ORACLE
+ | TIMESTAMP_ADD
+ | TIMESTAMP_DIFF
+ | TYPES_SYM
+ | TYPE_SYM
+ | UDF_RETURNS_SYM
+ | UNCOMMITTED_SYM
+ | UNDEFINED_SYM
+ | UNDO_BUFFER_SIZE_SYM
+ | UNDOFILE_SYM
+ | UNKNOWN_SYM
+ | UNTIL_SYM
+ | USER_SYM
+ | USE_FRM
+ | VARIABLES
+ | VIEW_SYM
+ | VIRTUAL_SYM
+ | VALUE_SYM
+ | WARNINGS
+ | WAIT_SYM
+ | WEEK_SYM
+ | WEIGHT_STRING_SYM
+ | WORK_SYM
+ | X509_SYM
+ | XML_SYM
+ | VIA_SYM
;
/*
@@ -16986,7 +16932,7 @@ query_expression_option:
STRAIGHT_JOIN { Select->options|= SELECT_STRAIGHT_JOIN; }
| HIGH_PRIORITY
{
- if (check_simple_select())
+ if (Lex->check_simple_select(&$1))
MYSQL_YYABORT;
YYPS->m_lock_type= TL_READ_HIGH_PRIORITY;
YYPS->m_mdl_type= MDL_SHARED_READ;
@@ -16998,13 +16944,13 @@ query_expression_option:
| SQL_BIG_RESULT { Select->options|= SELECT_BIG_RESULT; }
| SQL_BUFFER_RESULT
{
- if (check_simple_select())
+ if (Lex->check_simple_select(&$1))
MYSQL_YYABORT;
Select->options|= OPTION_BUFFER_RESULT;
}
| SQL_CALC_FOUND_ROWS
{
- if (check_simple_select())
+ if (Lex->check_simple_select(&$1))
MYSQL_YYABORT;
Select->options|= OPTION_FOUND_ROWS;
}
diff --git a/sql/structs.h b/sql/structs.h
index 01d99517fed..d530dd73b7c 100644
--- a/sql/structs.h
+++ b/sql/structs.h
@@ -754,12 +754,6 @@ public:
};
-struct Lex_string_with_pos_st: public LEX_CSTRING
-{
- const char *m_pos;
-};
-
-
class Load_data_param
{
protected: