diff options
author | pem@mysql.com <> | 2002-10-15 16:33:06 +0200 |
---|---|---|
committer | pem@mysql.com <> | 2002-10-15 16:33:06 +0200 |
commit | 3c1a3113488cf1ab5c209051fc1f5c4ba237d635 (patch) | |
tree | c5d1a62edee658063313b8ca82ecf5c59acc42a2 /sql/sql_yacc.yy | |
parent | e1303c7b3ccdb41071663c8b64c030ea1a024104 (diff) | |
download | mariadb-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.yy | 27 |
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: |