Loading mysql-test/r/join_outer.result +22 −0 Original line number Diff line number Diff line Loading @@ -1154,3 +1154,25 @@ id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 index PRIMARY,name name 23 NULL 3 Using where; Using index 1 SIMPLE t2 ref fkey fkey 5 test.t1.id 1 Using where; Using index DROP TABLE t1,t2; DROP VIEW IF EXISTS v1,v2; DROP TABLE IF EXISTS t1,t2; CREATE TABLE t1 (a int); CREATE table t2 (b int); INSERT INTO t1 VALUES (1), (2), (3), (4), (1), (1), (3); INSERT INTO t2 VALUES (2), (3); CREATE VIEW v1 AS SELECT a FROM t1 JOIN t2 ON t1.a=t2.b; CREATE VIEW v2 AS SELECT b FROM t2 JOIN t1 ON t2.b=t1.a; SELECT v1.a, v2. b FROM v1 LEFT OUTER JOIN v2 ON (v1.a=v2.b) AND (v1.a >= 3) GROUP BY v1.a; a b 2 NULL 3 3 SELECT v1.a, v2. b FROM { OJ v1 LEFT OUTER JOIN v2 ON (v1.a=v2.b) AND (v1.a >= 3) } GROUP BY v1.a; a b 2 NULL 3 3 DROP VIEW v1,v2; DROP TABLE t1,t2; mysql-test/t/join_outer.test +26 −0 Original line number Diff line number Diff line Loading @@ -779,3 +779,29 @@ SELECT COUNT(*) FROM t2 LEFT JOIN t1 ON t2.fkey = t1.id WHERE t1.name LIKE 'A%' OR FALSE; DROP TABLE t1,t2; # # Bug 19396: LEFT OUTER JOIN over views in curly braces # --disable_warnings DROP VIEW IF EXISTS v1,v2; DROP TABLE IF EXISTS t1,t2; --enable_warnings CREATE TABLE t1 (a int); CREATE table t2 (b int); INSERT INTO t1 VALUES (1), (2), (3), (4), (1), (1), (3); INSERT INTO t2 VALUES (2), (3); CREATE VIEW v1 AS SELECT a FROM t1 JOIN t2 ON t1.a=t2.b; CREATE VIEW v2 AS SELECT b FROM t2 JOIN t1 ON t2.b=t1.a; SELECT v1.a, v2. b FROM v1 LEFT OUTER JOIN v2 ON (v1.a=v2.b) AND (v1.a >= 3) GROUP BY v1.a; SELECT v1.a, v2. b FROM { OJ v1 LEFT OUTER JOIN v2 ON (v1.a=v2.b) AND (v1.a >= 3) } GROUP BY v1.a; DROP VIEW v1,v2; DROP TABLE t1,t2; sql/sql_yacc.yy +4 −0 Original line number Diff line number Diff line Loading @@ -448,6 +448,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); %token NUMERIC_SYM %token NVARCHAR_SYM %token OFFSET_SYM %token OJ_SYM %token OLD_PASSWORD %token ON %token ONE_SHOT_SYM Loading Loading @@ -5246,11 +5247,14 @@ table_factor: } expr '}' { LEX *lex= Lex; YYERROR_UNLESS($3 && $7); add_join_on($7,$10); Lex->pop_context(); $7->outer_join|=JOIN_TYPE_LEFT; $$=$7; if (!($$= lex->current_select->nest_last_join(lex->thd))) YYABORT; } | select_derived_init get_select_lex select_derived2 { Loading Loading
mysql-test/r/join_outer.result +22 −0 Original line number Diff line number Diff line Loading @@ -1154,3 +1154,25 @@ id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 index PRIMARY,name name 23 NULL 3 Using where; Using index 1 SIMPLE t2 ref fkey fkey 5 test.t1.id 1 Using where; Using index DROP TABLE t1,t2; DROP VIEW IF EXISTS v1,v2; DROP TABLE IF EXISTS t1,t2; CREATE TABLE t1 (a int); CREATE table t2 (b int); INSERT INTO t1 VALUES (1), (2), (3), (4), (1), (1), (3); INSERT INTO t2 VALUES (2), (3); CREATE VIEW v1 AS SELECT a FROM t1 JOIN t2 ON t1.a=t2.b; CREATE VIEW v2 AS SELECT b FROM t2 JOIN t1 ON t2.b=t1.a; SELECT v1.a, v2. b FROM v1 LEFT OUTER JOIN v2 ON (v1.a=v2.b) AND (v1.a >= 3) GROUP BY v1.a; a b 2 NULL 3 3 SELECT v1.a, v2. b FROM { OJ v1 LEFT OUTER JOIN v2 ON (v1.a=v2.b) AND (v1.a >= 3) } GROUP BY v1.a; a b 2 NULL 3 3 DROP VIEW v1,v2; DROP TABLE t1,t2;
mysql-test/t/join_outer.test +26 −0 Original line number Diff line number Diff line Loading @@ -779,3 +779,29 @@ SELECT COUNT(*) FROM t2 LEFT JOIN t1 ON t2.fkey = t1.id WHERE t1.name LIKE 'A%' OR FALSE; DROP TABLE t1,t2; # # Bug 19396: LEFT OUTER JOIN over views in curly braces # --disable_warnings DROP VIEW IF EXISTS v1,v2; DROP TABLE IF EXISTS t1,t2; --enable_warnings CREATE TABLE t1 (a int); CREATE table t2 (b int); INSERT INTO t1 VALUES (1), (2), (3), (4), (1), (1), (3); INSERT INTO t2 VALUES (2), (3); CREATE VIEW v1 AS SELECT a FROM t1 JOIN t2 ON t1.a=t2.b; CREATE VIEW v2 AS SELECT b FROM t2 JOIN t1 ON t2.b=t1.a; SELECT v1.a, v2. b FROM v1 LEFT OUTER JOIN v2 ON (v1.a=v2.b) AND (v1.a >= 3) GROUP BY v1.a; SELECT v1.a, v2. b FROM { OJ v1 LEFT OUTER JOIN v2 ON (v1.a=v2.b) AND (v1.a >= 3) } GROUP BY v1.a; DROP VIEW v1,v2; DROP TABLE t1,t2;
sql/sql_yacc.yy +4 −0 Original line number Diff line number Diff line Loading @@ -448,6 +448,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); %token NUMERIC_SYM %token NVARCHAR_SYM %token OFFSET_SYM %token OJ_SYM %token OLD_PASSWORD %token ON %token ONE_SHOT_SYM Loading Loading @@ -5246,11 +5247,14 @@ table_factor: } expr '}' { LEX *lex= Lex; YYERROR_UNLESS($3 && $7); add_join_on($7,$10); Lex->pop_context(); $7->outer_join|=JOIN_TYPE_LEFT; $$=$7; if (!($$= lex->current_select->nest_last_join(lex->thd))) YYABORT; } | select_derived_init get_select_lex select_derived2 { Loading