Commit 7a8747f7 authored by Oleksandr Byelkin's avatar Oleksandr Byelkin

Changes of merge moved to oracle mode parser.

parent 8990e3e2
...@@ -281,7 +281,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize); ...@@ -281,7 +281,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize);
Currently there are 55 shift/reduce conflicts. Currently there are 55 shift/reduce conflicts.
We should not introduce new conflicts any more. We should not introduce new conflicts any more.
*/ */
%expect 55 %expect 54
/* /*
Comments for TOKENS. Comments for TOKENS.
...@@ -1059,10 +1059,6 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize); ...@@ -1059,10 +1059,6 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize);
%token <kwd> YEAR_SYM /* SQL-2003-R */ %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. */
%left TABLE_REF_PRIORITY
/* /*
Give ESCAPE (in LIKE) a very low precedence. Give ESCAPE (in LIKE) a very low precedence.
This allows the concatenation operator || to be used on the right This allows the concatenation operator || to be used on the right
...@@ -1072,6 +1068,9 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize); ...@@ -1072,6 +1068,9 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize);
%left PREC_BELOW_ESCAPE %left PREC_BELOW_ESCAPE
%left ESCAPE_SYM %left ESCAPE_SYM
/* A dummy token to force the priority of table_ref production in a join. */
%left CONDITIONLESS_JOIN
%left JOIN_SYM INNER_SYM STRAIGHT_JOIN CROSS LEFT RIGHT ON_SYM USING
%left SET_VAR %left SET_VAR
%left OR_SYM OR2_SYM %left OR_SYM OR2_SYM
%left XOR %left XOR
...@@ -11809,9 +11808,9 @@ join_table_list: ...@@ -11809,9 +11808,9 @@ join_table_list:
and are ignored. and are ignored.
*/ */
esc_table_ref: esc_table_ref:
table_ref { $$=$1; } table_ref { $$=$1; }
| '{' ident table_ref '}' { $$=$3; } | '{' ident table_ref '}' { $$=$3; }
; ;
/* Equivalent to <table reference list> in the SQL:2003 standard. */ /* Equivalent to <table reference list> in the SQL:2003 standard. */
/* Warning - may return NULL in case of incomplete SELECT */ /* Warning - may return NULL in case of incomplete SELECT */
...@@ -11824,11 +11823,9 @@ derived_table_list: ...@@ -11824,11 +11823,9 @@ derived_table_list:
; ;
/* /*
Notice that JOIN is a left-associative operation, and it must be parsed Notice that JOIN can be a left-associative operator in one context and
as such, that is, the parser must process first the left join operand a right-associative operator in another context (see the comment for
then the right one. Such order of processing ensures that the parser st_select_lex::add_cross_joined_table).
produces correct join trees which is essential for semantic analysis
and subsequent optimization phases.
*/ */
join_table: join_table:
/* INNER JOIN variants */ /* INNER JOIN variants */
...@@ -11837,8 +11834,13 @@ join_table: ...@@ -11837,8 +11834,13 @@ join_table:
so that [INNER | CROSS] JOIN is properly nested as other so that [INNER | CROSS] JOIN is properly nested as other
left-associative joins. left-associative joins.
*/ */
table_ref normal_join table_ref %prec TABLE_REF_PRIORITY table_ref normal_join table_ref %prec CONDITIONLESS_JOIN
{ MYSQL_YYABORT_UNLESS($1 && ($$=$3)); $3->straight=$2; } {
MYSQL_YYABORT_UNLESS($1 && ($$=$3));
if (unlikely(Select->add_cross_joined_table($1, $3, $2)))
MYSQL_YYABORT;
}
| table_ref normal_join table_ref | table_ref normal_join table_ref
ON ON
{ {
...@@ -11852,7 +11854,7 @@ join_table: ...@@ -11852,7 +11854,7 @@ join_table:
{ {
$3->straight=$2; $3->straight=$2;
add_join_on(thd, $3, $6); add_join_on(thd, $3, $6);
Lex->pop_context(); $3->on_context= Lex->pop_context();
Select->parsing_place= NO_MATTER; Select->parsing_place= NO_MATTER;
} }
| table_ref normal_join table_ref | table_ref normal_join table_ref
...@@ -11886,7 +11888,7 @@ join_table: ...@@ -11886,7 +11888,7 @@ join_table:
expr expr
{ {
add_join_on(thd, $5, $8); add_join_on(thd, $5, $8);
Lex->pop_context(); $5->on_context= Lex->pop_context();
$5->outer_join|=JOIN_TYPE_LEFT; $5->outer_join|=JOIN_TYPE_LEFT;
$$=$5; $$=$5;
Select->parsing_place= NO_MATTER; Select->parsing_place= NO_MATTER;
...@@ -11925,7 +11927,7 @@ join_table: ...@@ -11925,7 +11927,7 @@ join_table:
if (unlikely(!($$= lex->current_select->convert_right_join()))) if (unlikely(!($$= lex->current_select->convert_right_join())))
MYSQL_YYABORT; MYSQL_YYABORT;
add_join_on(thd, $$, $8); add_join_on(thd, $$, $8);
Lex->pop_context(); $1->on_context= Lex->pop_context();
Select->parsing_place= NO_MATTER; Select->parsing_place= NO_MATTER;
} }
| table_ref RIGHT opt_outer JOIN_SYM table_factor | table_ref RIGHT opt_outer JOIN_SYM table_factor
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment