summaryrefslogtreecommitdiff
path: root/sql/sql_yacc.yy
diff options
context:
space:
mode:
authorpem@mysql.com <>2002-10-15 16:33:06 +0200
committerpem@mysql.com <>2002-10-15 16:33:06 +0200
commit3c1a3113488cf1ab5c209051fc1f5c4ba237d635 (patch)
treec5d1a62edee658063313b8ca82ecf5c59acc42a2 /sql/sql_yacc.yy
parente1303c7b3ccdb41071663c8b64c030ea1a024104 (diff)
downloadmariadb-git-3c1a3113488cf1ab5c209051fc1f5c4ba237d635.tar.gz
SCRUM Task 430: Allowing braces in joins by simply removing them.
Fixed the remaining join variations, (left, right, natural, etc). (Previous fix only solved "," and "[cross] join".)
Diffstat (limited to 'sql/sql_yacc.yy')
-rw-r--r--sql/sql_yacc.yy27
1 files changed, 17 insertions, 10 deletions
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index f9a24a31eac..5367bc897b3 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -491,6 +491,12 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
%right NOT
%right BINARY
+/* These don't actually affect the way the query is really evaluated, but
+ they silence a few warnings for shift/reduce conflicts. */
+%left ','
+%left STRAIGHT_JOIN JOIN_SYM
+%nonassoc CROSS INNER_SYM NATURAL LEFT RIGHT
+
%type <lex_str>
IDENT TEXT_STRING REAL_NUM FLOAT_NUM NUM LONG_NUM HEX_NUM LEX_HOSTNAME
ULONGLONG_NUM field_ident select_alias ident ident_or_text
@@ -2027,10 +2033,11 @@ join_table_list:
'(' join_table_list ')' { $$=$2; }
| join_table { $$=$1; }
| join_table_list normal_join join_table_list { $$=$3; }
- | join_table_list STRAIGHT_JOIN join_table { $$=$3 ; $$->straight=1; }
- | join_table_list INNER_SYM JOIN_SYM join_table ON expr
+ | join_table_list STRAIGHT_JOIN join_table_list
+ { $$=$3 ; $$->straight=1; }
+ | join_table_list INNER_SYM JOIN_SYM join_table_list ON expr
{ add_join_on($4,$6); $$=$4; }
- | join_table_list INNER_SYM JOIN_SYM join_table
+ | join_table_list INNER_SYM JOIN_SYM join_table_list
{
SELECT_LEX *sel=Select;
sel->db1=$1->db; sel->table1=$1->alias;
@@ -2038,9 +2045,9 @@ join_table_list:
}
USING '(' using_list ')'
{ add_join_on($4,$8); $$=$4; }
- | join_table_list LEFT opt_outer JOIN_SYM join_table ON expr
+ | join_table_list LEFT opt_outer JOIN_SYM join_table_list ON expr
{ add_join_on($5,$7); $5->outer_join|=JOIN_TYPE_LEFT; $$=$5; }
- | join_table_list LEFT opt_outer JOIN_SYM join_table
+ | join_table_list LEFT opt_outer JOIN_SYM join_table_list
{
SELECT_LEX *sel=Select;
sel->db1=$1->db; sel->table1=$1->alias;
@@ -2048,11 +2055,11 @@ join_table_list:
}
USING '(' using_list ')'
{ add_join_on($5,$9); $5->outer_join|=JOIN_TYPE_LEFT; $$=$5; }
- | join_table_list NATURAL LEFT opt_outer JOIN_SYM join_table
+ | join_table_list NATURAL LEFT opt_outer JOIN_SYM join_table_list
{ add_join_natural($1,$6); $6->outer_join|=JOIN_TYPE_LEFT; $$=$6; }
- | join_table_list RIGHT opt_outer JOIN_SYM join_table ON expr
+ | join_table_list RIGHT opt_outer JOIN_SYM join_table_list ON expr
{ add_join_on($1,$7); $1->outer_join|=JOIN_TYPE_RIGHT; $$=$1; }
- | join_table_list RIGHT opt_outer JOIN_SYM join_table
+ | join_table_list RIGHT opt_outer JOIN_SYM join_table_list
{
SELECT_LEX *sel=Select;
sel->db1=$1->db; sel->table1=$1->alias;
@@ -2060,9 +2067,9 @@ join_table_list:
}
USING '(' using_list ')'
{ add_join_on($1,$9); $1->outer_join|=JOIN_TYPE_RIGHT; $$=$1; }
- | join_table_list NATURAL RIGHT opt_outer JOIN_SYM join_table
+ | join_table_list NATURAL RIGHT opt_outer JOIN_SYM join_table_list
{ add_join_natural($6,$1); $1->outer_join|=JOIN_TYPE_RIGHT; $$=$1; }
- | join_table_list NATURAL JOIN_SYM join_table
+ | join_table_list NATURAL JOIN_SYM join_table_list
{ add_join_natural($1,$4); $$=$4; };
normal_join: