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);
Currently there are 55 shift/reduce conflicts.
We should not introduce new conflicts any more.
*/
%expect 55
%expect 54
/*
Comments for TOKENS.
......@@ -1059,10 +1059,6 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize);
%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.
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);
%left PREC_BELOW_ESCAPE
%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 OR_SYM OR2_SYM
%left XOR
......@@ -11824,11 +11823,9 @@ derived_table_list:
;
/*
Notice that JOIN is a left-associative operation, and it must be parsed
as such, that is, the parser must process first the left join operand
then the right one. Such order of processing ensures that the parser
produces correct join trees which is essential for semantic analysis
and subsequent optimization phases.
Notice that JOIN can be a left-associative operator in one context and
a right-associative operator in another context (see the comment for
st_select_lex::add_cross_joined_table).
*/
join_table:
/* INNER JOIN variants */
......@@ -11837,8 +11834,13 @@ join_table:
so that [INNER | CROSS] JOIN is properly nested as other
left-associative joins.
*/
table_ref normal_join table_ref %prec TABLE_REF_PRIORITY
{ MYSQL_YYABORT_UNLESS($1 && ($$=$3)); $3->straight=$2; }
table_ref normal_join table_ref %prec CONDITIONLESS_JOIN
{
MYSQL_YYABORT_UNLESS($1 && ($$=$3));
if (unlikely(Select->add_cross_joined_table($1, $3, $2)))
MYSQL_YYABORT;
}
| table_ref normal_join table_ref
ON
{
......@@ -11852,7 +11854,7 @@ join_table:
{
$3->straight=$2;
add_join_on(thd, $3, $6);
Lex->pop_context();
$3->on_context= Lex->pop_context();
Select->parsing_place= NO_MATTER;
}
| table_ref normal_join table_ref
......@@ -11886,7 +11888,7 @@ join_table:
expr
{
add_join_on(thd, $5, $8);
Lex->pop_context();
$5->on_context= Lex->pop_context();
$5->outer_join|=JOIN_TYPE_LEFT;
$$=$5;
Select->parsing_place= NO_MATTER;
......@@ -11925,7 +11927,7 @@ join_table:
if (unlikely(!($$= lex->current_select->convert_right_join())))
MYSQL_YYABORT;
add_join_on(thd, $$, $8);
Lex->pop_context();
$1->on_context= Lex->pop_context();
Select->parsing_place= NO_MATTER;
}
| 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