Loading mysql-test/r/select.result +20 −0 Original line number Diff line number Diff line Loading @@ -2922,3 +2922,23 @@ a b b select * from t1 inner join t2 using (a); a b b 1 10 10 create table t1 (a int, c int); create table t2 (b int); create table t3 (b int, a int); create table t4 (c int); insert into t1 values (1,1); insert into t2 values (1); insert into t3 values (1,1); insert into t4 values (1); select * from t1 join t2 join t3 on (t2.b = t3.b and t1.a = t3.a); a c b b a 1 1 1 1 1 select * from t1, t2 join t3 on (t2.b = t3.b and t1.a = t3.a); ERROR 42S22: Unknown column 't1.a' in 'on clause' select * from t1 join t2 join t3 join t4 on (t1.a = t4.c and t2.b = t4.c); a c b b a c 1 1 1 1 1 1 select * from t1 join t2 join t4 using (c); c a b 1 1 1 drop table t1, t2, t3, t4; mysql-test/t/select.test +21 −0 Original line number Diff line number Diff line Loading @@ -2499,3 +2499,24 @@ insert into t2 values (1,10); # both queries should produce the same result select * from t1 inner join t2 using (A); select * from t1 inner join t2 using (a); # Bug #12943 Incorrect nesting of [INNER| CROSS] JOIN due to unspecified # associativity in the parser. # create table t1 (a int, c int); create table t2 (b int); create table t3 (b int, a int); create table t4 (c int); insert into t1 values (1,1); insert into t2 values (1); insert into t3 values (1,1); insert into t4 values (1); select * from t1 join t2 join t3 on (t2.b = t3.b and t1.a = t3.a); # Notice that ',' has lower priority than 'join', thus we have that: # t1, t2 join t3 <==> t1, (t2 join t3). -- error 1054 select * from t1, t2 join t3 on (t2.b = t3.b and t1.a = t3.a); select * from t1 join t2 join t3 join t4 on (t1.a = t4.c and t2.b = t4.c); select * from t1 join t2 join t4 using (c); drop table t1, t2, t3, t4; sql/sql_parse.cc +1 −1 Original line number Diff line number Diff line Loading @@ -6360,7 +6360,7 @@ void st_select_lex::set_lock_for_tables(thr_lock_type lock_type) SYNOPSIS make_join_on_context() thd pointer to current thread left_op lefto operand of the JOIN left_op left operand of the JOIN right_op rigth operand of the JOIN DESCRIPTION Loading sql/sql_yacc.yy +10 −1 Original line number Diff line number Diff line Loading @@ -660,6 +660,9 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); %token YEAR_SYM %token ZEROFILL %left JOIN_SYM /* A dummy token to force the priority of table_ref production in a join. */ %left TABLE_REF_PRIORITY %left SET_VAR %left OR_OR_SYM OR_SYM OR2_SYM XOR %left AND_SYM AND_AND_SYM Loading Loading @@ -5189,7 +5192,13 @@ derived_table_list: ; join_table: table_ref normal_join table_ref { YYERROR_UNLESS($1 && ($$=$3)); } /* Evaluate production 'table_ref' before 'normal_join' so that [INNER | CROSS] JOIN is properly nested as other left-associative joins. */ table_ref %prec TABLE_REF_PRIORITY normal_join table_ref { YYERROR_UNLESS($1 && ($$=$3)); } | table_ref STRAIGHT_JOIN table_factor { YYERROR_UNLESS($1 && ($$=$3)); $3->straight=1; } | table_ref normal_join table_ref Loading Loading
mysql-test/r/select.result +20 −0 Original line number Diff line number Diff line Loading @@ -2922,3 +2922,23 @@ a b b select * from t1 inner join t2 using (a); a b b 1 10 10 create table t1 (a int, c int); create table t2 (b int); create table t3 (b int, a int); create table t4 (c int); insert into t1 values (1,1); insert into t2 values (1); insert into t3 values (1,1); insert into t4 values (1); select * from t1 join t2 join t3 on (t2.b = t3.b and t1.a = t3.a); a c b b a 1 1 1 1 1 select * from t1, t2 join t3 on (t2.b = t3.b and t1.a = t3.a); ERROR 42S22: Unknown column 't1.a' in 'on clause' select * from t1 join t2 join t3 join t4 on (t1.a = t4.c and t2.b = t4.c); a c b b a c 1 1 1 1 1 1 select * from t1 join t2 join t4 using (c); c a b 1 1 1 drop table t1, t2, t3, t4;
mysql-test/t/select.test +21 −0 Original line number Diff line number Diff line Loading @@ -2499,3 +2499,24 @@ insert into t2 values (1,10); # both queries should produce the same result select * from t1 inner join t2 using (A); select * from t1 inner join t2 using (a); # Bug #12943 Incorrect nesting of [INNER| CROSS] JOIN due to unspecified # associativity in the parser. # create table t1 (a int, c int); create table t2 (b int); create table t3 (b int, a int); create table t4 (c int); insert into t1 values (1,1); insert into t2 values (1); insert into t3 values (1,1); insert into t4 values (1); select * from t1 join t2 join t3 on (t2.b = t3.b and t1.a = t3.a); # Notice that ',' has lower priority than 'join', thus we have that: # t1, t2 join t3 <==> t1, (t2 join t3). -- error 1054 select * from t1, t2 join t3 on (t2.b = t3.b and t1.a = t3.a); select * from t1 join t2 join t3 join t4 on (t1.a = t4.c and t2.b = t4.c); select * from t1 join t2 join t4 using (c); drop table t1, t2, t3, t4;
sql/sql_parse.cc +1 −1 Original line number Diff line number Diff line Loading @@ -6360,7 +6360,7 @@ void st_select_lex::set_lock_for_tables(thr_lock_type lock_type) SYNOPSIS make_join_on_context() thd pointer to current thread left_op lefto operand of the JOIN left_op left operand of the JOIN right_op rigth operand of the JOIN DESCRIPTION Loading
sql/sql_yacc.yy +10 −1 Original line number Diff line number Diff line Loading @@ -660,6 +660,9 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); %token YEAR_SYM %token ZEROFILL %left JOIN_SYM /* A dummy token to force the priority of table_ref production in a join. */ %left TABLE_REF_PRIORITY %left SET_VAR %left OR_OR_SYM OR_SYM OR2_SYM XOR %left AND_SYM AND_AND_SYM Loading Loading @@ -5189,7 +5192,13 @@ derived_table_list: ; join_table: table_ref normal_join table_ref { YYERROR_UNLESS($1 && ($$=$3)); } /* Evaluate production 'table_ref' before 'normal_join' so that [INNER | CROSS] JOIN is properly nested as other left-associative joins. */ table_ref %prec TABLE_REF_PRIORITY normal_join table_ref { YYERROR_UNLESS($1 && ($$=$3)); } | table_ref STRAIGHT_JOIN table_factor { YYERROR_UNLESS($1 && ($$=$3)); $3->straight=1; } | table_ref normal_join table_ref Loading