summaryrefslogtreecommitdiff
path: root/sql/sql_yacc_ora.yy
diff options
context:
space:
mode:
Diffstat (limited to 'sql/sql_yacc_ora.yy')
-rw-r--r--sql/sql_yacc_ora.yy18
1 files changed, 15 insertions, 3 deletions
diff --git a/sql/sql_yacc_ora.yy b/sql/sql_yacc_ora.yy
index 8f98cfa3694..ecbf4f3aa28 100644
--- a/sql/sql_yacc_ora.yy
+++ b/sql/sql_yacc_ora.yy
@@ -1212,7 +1212,8 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize);
optionally_qualified_column_ident
%type <simple_string>
- remember_name remember_end remember_end_opt remember_tok_start
+ remember_name remember_end remember_end_opt
+ remember_tok_start remember_tok_end
wild_and_where
colon_with_pos
@@ -9466,6 +9467,12 @@ remember_tok_start:
}
;
+remember_tok_end:
+ {
+ $$= (char*) YYLIP->get_tok_end();
+ }
+ ;
+
remember_name:
{
$$= (char*) YYLIP->get_cpp_tok_start();
@@ -15148,13 +15155,18 @@ with_list_element:
MYSQL_YYABORT;
Lex->with_column_list.empty();
}
- AS '(' remember_name subselect remember_end ')'
+ AS '(' remember_tok_start subselect remember_tok_end ')'
{
+ LEX *lex= thd->lex;
+ const char *query_start= lex->sphead ? lex->sphead->m_tmp_query
+ : thd->query();
+ char *spec_start= $6 + 1;
With_element *elem= new With_element($1, *$2, $7->master_unit());
if (unlikely(elem == NULL) ||
unlikely(Lex->curr_with_clause->add_with_element(elem)))
MYSQL_YYABORT;
- if (unlikely(elem->set_unparsed_spec(thd, $6+1, $8)))
+ if (elem->set_unparsed_spec(thd, spec_start, $8,
+ spec_start - query_start))
MYSQL_YYABORT;
}
;