mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge mysql.com:/home/timka/mysql/src/5.0-virgin
into mysql.com:/home/timka/mysql/src/5.0-bug-12943 sql/sql_parse.cc: Auto merged mysql-test/r/select.result: merge BUG#12943 mysql-test/t/select.test: merge BUG#12943
This commit is contained in:
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
@ -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
|
||||
|
Reference in New Issue
Block a user