diff options
36 files changed, 93 insertions, 52 deletions
diff --git a/include/mysqld_error.h b/include/mysqld_error.h index d0b3cc9aa4a..7c77d229b81 100644 --- a/include/mysqld_error.h +++ b/include/mysqld_error.h @@ -262,5 +262,6 @@ #define ER_CYCLIC_REFERENCE 1243 #define ER_AUTO_CONVERT 1244 #define ER_ILLEGAL_REFERENCE 1245 -#define ER_SELECT_REDUCED 1246 -#define ER_ERROR_MESSAGES 247 +#define ER_DERIVED_MUST_HAVE_ALIAS 1246 +#define ER_SELECT_REDUCED 1247 +#define ER_ERROR_MESSAGES 248 diff --git a/mysql-test/r/derived.result b/mysql-test/r/derived.result index b397c2f7635..0dce2b50819 100644 --- a/mysql-test/r/derived.result +++ b/mysql-test/r/derived.result @@ -17,32 +17,32 @@ select t1.a,t4.y from t1,(select t2.a as y from t2,(select t3.b from t3 where t3 a y 3 3 3 3 -SELECT a FROM (SELECT 1 FROM (SELECT 1) HAVING a=1); +SELECT a FROM (SELECT 1 FROM (SELECT 1) a HAVING a=1) b; Unknown column 'a' in 'having clause' -SELECT a,b as a FROM (SELECT '1' as a,'2' as b) HAVING a=1; +SELECT a,b as a FROM (SELECT '1' as a,'2' as b) b HAVING a=1; Column: 'a' in having clause is ambiguous -SELECT a,2 as a FROM (SELECT '1' as a) HAVING a=2; +SELECT a,2 as a FROM (SELECT '1' as a) b HAVING a=2; a a 1 2 -SELECT a,2 as a FROM (SELECT '1' as a) HAVING a=1; +SELECT a,2 as a FROM (SELECT '1' as a) b HAVING a=1; a a -SELECT 1 FROM (SELECT 1) WHERE a=2; +SELECT 1 FROM (SELECT 1) a WHERE a=2; Unknown column 'a' in 'where clause' -SELECT (SELECT 1) as a FROM (SELECT 1 FROM t1 HAVING a=1); +SELECT (SELECT 1) as a FROM (SELECT 1 FROM t1 HAVING a=1) as a; Unknown column 'a' in 'having clause' drop table if exists t1.t2,t3; -select * from (select 1); +select * from (select 1) as a; 1 1 -select a from (select 1 as a); +select a from (select 1 as a) as b; a 1 -select 1 from (select 1); +select 1 from (select 1) as a; 1 1 drop table if exists t1; create table t1(a int not null, t char(8), index(a)); -SELECT * FROM (SELECT * FROM t1) ORDER BY a ASC LIMIT 0,20; +SELECT * FROM (SELECT * FROM t1) as b ORDER BY a ASC LIMIT 0,20; a t 1 1 2 2 @@ -64,7 +64,13 @@ a t 18 18 19 19 20 20 +explain select count(*) from t1 as tt1, (select * from t1) as tt2; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE Select tables optimized away drop table if exists t1; -SELECT * FROM (SELECT (SELECT * FROM (SELECT 1 as a))); -(SELECT * FROM (SELECT 1 as a)) +SELECT * FROM (SELECT (SELECT * FROM (SELECT 1 as a) as a )) as b; +(SELECT * FROM (SELECT 1 as a) as a ) 1 +select * from (select 1 as a) b left join (select 2 as a) c using(a); +a a +1 NULL diff --git a/mysql-test/r/group_by.result b/mysql-test/r/group_by.result index ead9935f824..b5a35b981db 100644 --- a/mysql-test/r/group_by.result +++ b/mysql-test/r/group_by.result @@ -1,4 +1,4 @@ -SELECT 1 FROM (SELECT 1) GROUP BY SUM(1); +SELECT 1 FROM (SELECT 1) as a GROUP BY SUM(1); Invalid use of group function drop table if exists t1,t2,t3; CREATE TABLE t1 ( diff --git a/mysql-test/r/select_found.result b/mysql-test/r/select_found.result index 8500e244d08..5b6c490b928 100644 --- a/mysql-test/r/select_found.result +++ b/mysql-test/r/select_found.result @@ -168,7 +168,7 @@ test2 2 2 SELECT FOUND_ROWS(); FOUND_ROWS() 2 -SELECT SQL_CALC_FOUND_ROWS 1 FROM (SELECT 1) LIMIT 0; +SELECT SQL_CALC_FOUND_ROWS 1 FROM (SELECT 1) as a LIMIT 0; 1 SELECT FOUND_ROWS(); FOUND_ROWS() diff --git a/mysql-test/r/subselect.result b/mysql-test/r/subselect.result index bbf70150ee0..65221ab3f4b 100644 --- a/mysql-test/r/subselect.result +++ b/mysql-test/r/subselect.result @@ -8,29 +8,29 @@ SELECT (SELECT 1) UNION SELECT (SELECT 2); SELECT (SELECT (SELECT 0 UNION SELECT 0)); (SELECT (SELECT 0 UNION SELECT 0)) 0 -SELECT (SELECT 1 FROM (SELECT 1) HAVING a=1) as a; +SELECT (SELECT 1 FROM (SELECT 1) as b HAVING a=1) as a; Reference 'a' not supported (forward reference in item list) -SELECT (SELECT 1 FROM (SELECT 1) HAVING b=1) as a,(SELECT 1 FROM (SELECT 1) HAVING a=1) as b; +SELECT (SELECT 1 FROM (SELECT 1) as b HAVING b=1) as a,(SELECT 1 FROM (SELECT 1) as c HAVING a=1) as b; Reference 'b' not supported (forward reference in item list) -SELECT (SELECT 1),MAX(1) FROM (SELECT 1); +SELECT (SELECT 1),MAX(1) FROM (SELECT 1) as a; (SELECT 1) MAX(1) 1 1 SELECT (SELECT a) as a; Reference 'a' not supported (forward reference in item list) -EXPLAIN SELECT 1 FROM (SELECT 1 as a) HAVING (SELECT a)=1; +EXPLAIN SELECT 1 FROM (SELECT 1 as a) as b HAVING (SELECT a)=1; id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY <derived2> system NULL NULL NULL NULL 1 3 DEPENDENT SUBSELECT No tables used 2 DERIVED No tables used -SELECT 1 FROM (SELECT 1 as a) HAVING (SELECT a)=1; +SELECT 1 FROM (SELECT 1 as a) as b HAVING (SELECT a)=1; 1 1 SELECT (SELECT 1), a; Unknown column 'a' in 'field list' -SELECT 1 as a FROM (SELECT 1) HAVING (SELECT a)=1; +SELECT 1 as a FROM (SELECT 1) as b HAVING (SELECT a)=1; a 1 -SELECT 1 FROM (SELECT (SELECT a)); +SELECT 1 FROM (SELECT (SELECT a) b) c; Unknown column 'a' in 'field list' SELECT * FROM (SELECT 1 as id) WHERE id IN (SELECT * FROM (SELECT 1 as id) ORDER BY id LIMIT 1); id @@ -319,7 +319,7 @@ SELECT numeropost,maxnumrep FROM t1 WHERE exists (SELECT 1 FROM t2 WHERE (mot='j numeropost maxnumrep 43506 2 40143 1 -SELECT (SELECT 1) as a FROM (SELECT 1 FROM t1 HAVING a=1); +SELECT (SELECT 1) as a FROM (SELECT 1 FROM t1 HAVING a=1) b; Unknown column 'a' in 'having clause' SELECT 1 IN (SELECT 1 FROM t2 HAVING a); Unknown column 'a' in 'having clause' @@ -368,7 +368,7 @@ Subselect returns more than 1 record drop table t1; CREATE TABLE t1 (field char(1) NOT NULL DEFAULT 'b'); INSERT INTO t1 VALUES (); -SELECT field FROM t1 WHERE 1=(SELECT 1 UNION ALL SELECT 1 FROM (SELECT 1) HAVING field='b'); +SELECT field FROM t1 WHERE 1=(SELECT 1 UNION ALL SELECT 1 FROM (SELECT 1) a HAVING field='b'); Subselect returns more than 1 record drop table t1; CREATE TABLE `t1` ( @@ -398,7 +398,7 @@ id select_type table type possible_keys key key_len ref rows Extra drop table t1; CREATE TABLE t1 (a int(1)); INSERT INTO t1 VALUES (1); -SELECT 1 FROM (SELECT a FROM t1) HAVING (SELECT a)=1; +SELECT 1 FROM (SELECT a FROM t1) b HAVING (SELECT b.a)=1; 1 1 drop table t1; diff --git a/mysql-test/t/derived.test b/mysql-test/t/derived.test index c1d8af4074a..5c2d0157f14 100644 --- a/mysql-test/t/derived.test +++ b/mysql-test/t/derived.test @@ -9,19 +9,19 @@ CREATE TABLE t3 (a int not null, b char (10) not null); insert into t3 values (3,'f'),(4,'y'),(5,'z'),(6,'c'); select t1.a,t4.y from t1,(select t2.a as y from t2,(select t3.b from t3 where t3.a>3) as t5 where t2.b=t5.b) as t4 where t1.a = t4.y; --error 1054 -SELECT a FROM (SELECT 1 FROM (SELECT 1) HAVING a=1); +SELECT a FROM (SELECT 1 FROM (SELECT 1) a HAVING a=1) b; --error 1052 -SELECT a,b as a FROM (SELECT '1' as a,'2' as b) HAVING a=1; -SELECT a,2 as a FROM (SELECT '1' as a) HAVING a=2; -SELECT a,2 as a FROM (SELECT '1' as a) HAVING a=1; +SELECT a,b as a FROM (SELECT '1' as a,'2' as b) b HAVING a=1; +SELECT a,2 as a FROM (SELECT '1' as a) b HAVING a=2; +SELECT a,2 as a FROM (SELECT '1' as a) b HAVING a=1; --error 1054 -SELECT 1 FROM (SELECT 1) WHERE a=2; +SELECT 1 FROM (SELECT 1) a WHERE a=2; --error 1054 -SELECT (SELECT 1) as a FROM (SELECT 1 FROM t1 HAVING a=1); +SELECT (SELECT 1) as a FROM (SELECT 1 FROM t1 HAVING a=1) as a; drop table if exists t1.t2,t3; -select * from (select 1); -select a from (select 1 as a); -select 1 from (select 1); +select * from (select 1) as a; +select a from (select 1 as a) as b; +select 1 from (select 1) as a; drop table if exists t1; create table t1(a int not null, t char(8), index(a)); disable_query_log; @@ -32,6 +32,8 @@ while ($1) dec $1; } enable_query_log; -SELECT * FROM (SELECT * FROM t1) ORDER BY a ASC LIMIT 0,20; +SELECT * FROM (SELECT * FROM t1) as b ORDER BY a ASC LIMIT 0,20; +explain select count(*) from t1 as tt1, (select * from t1) as tt2; drop table if exists t1; -SELECT * FROM (SELECT (SELECT * FROM (SELECT 1 as a))); +SELECT * FROM (SELECT (SELECT * FROM (SELECT 1 as a) as a )) as b; +select * from (select 1 as a) b left join (select 2 as a) c using(a); diff --git a/mysql-test/t/group_by.test b/mysql-test/t/group_by.test index 0f30fbd4cc6..4670feca500 100644 --- a/mysql-test/t/group_by.test +++ b/mysql-test/t/group_by.test @@ -1,5 +1,5 @@ -- error 1111 -SELECT 1 FROM (SELECT 1) GROUP BY SUM(1); +SELECT 1 FROM (SELECT 1) as a GROUP BY SUM(1); # # Test of group (Failed for Lars Hoss <lh@pbm.de>) # diff --git a/mysql-test/t/select_found.test b/mysql-test/t/select_found.test index 316e7894344..fb57224dd19 100644 --- a/mysql-test/t/select_found.test +++ b/mysql-test/t/select_found.test @@ -84,7 +84,7 @@ INSERT INTO t1 (titre,maxnumrep) VALUES ('test1','1'),('test2','2'),('test3','3'); SELECT SQL_CALC_FOUND_ROWS titre,numeropost,maxnumrep FROM t1 WHERE numeropost IN (1,2) ORDER BY maxnumrep DESC LIMIT 0, 1; SELECT FOUND_ROWS(); -SELECT SQL_CALC_FOUND_ROWS 1 FROM (SELECT 1) LIMIT 0; +SELECT SQL_CALC_FOUND_ROWS 1 FROM (SELECT 1) as a LIMIT 0; SELECT FOUND_ROWS(); SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE numeropost > 1 LIMIT 0; SELECT FOUND_ROWS(); diff --git a/mysql-test/t/subselect.test b/mysql-test/t/subselect.test index c875f8372b3..d0d66729374 100644 --- a/mysql-test/t/subselect.test +++ b/mysql-test/t/subselect.test @@ -2,25 +2,25 @@ select (select 2); SELECT (SELECT 1) UNION SELECT (SELECT 2); SELECT (SELECT (SELECT 0 UNION SELECT 0)); -- error 1245 -SELECT (SELECT 1 FROM (SELECT 1) HAVING a=1) as a; +SELECT (SELECT 1 FROM (SELECT 1) as b HAVING a=1) as a; -- error 1245 -SELECT (SELECT 1 FROM (SELECT 1) HAVING b=1) as a,(SELECT 1 FROM (SELECT 1) HAVING a=1) as b; -SELECT (SELECT 1),MAX(1) FROM (SELECT 1); +SELECT (SELECT 1 FROM (SELECT 1) as b HAVING b=1) as a,(SELECT 1 FROM (SELECT 1) as c HAVING a=1) as b; +SELECT (SELECT 1),MAX(1) FROM (SELECT 1) as a; -- error 1245 SELECT (SELECT a) as a; -EXPLAIN SELECT 1 FROM (SELECT 1 as a) HAVING (SELECT a)=1; -SELECT 1 FROM (SELECT 1 as a) HAVING (SELECT a)=1; +EXPLAIN SELECT 1 FROM (SELECT 1 as a) as b HAVING (SELECT a)=1; +SELECT 1 FROM (SELECT 1 as a) as b HAVING (SELECT a)=1; -- error 1054 SELECT (SELECT 1), a; -SELECT 1 as a FROM (SELECT 1) HAVING (SELECT a)=1; +SELECT 1 as a FROM (SELECT 1) as b HAVING (SELECT a)=1; -- error 1054 +SELECT 1 FROM (SELECT (SELECT a) b) c; SELECT 1 FROM (SELECT (SELECT a)); SELECT * FROM (SELECT 1 as id) WHERE id IN (SELECT * FROM (SELECT 1 as id) ORDER BY id LIMIT 1); -- error 1239 SELECT * FROM (SELECT 1) WHERE 1 IN (SELECT 1,1); SELECT 1 IN (SELECT 1); SELECT 1 FROM (SELECT 1 as a) WHERE 1 IN (SELECT (SELECT a)); - drop table if exists t1,t2,t3,t4,t5,t6,t7,t8; create table t1 (a int); create table t2 (a int, b int); @@ -176,7 +176,7 @@ INSERT INTO t2 (mot,topic,date,pseudo) VALUES ('joce','40143','2002-10-22','joce select numeropost as a FROM t1 GROUP BY (SELECT 1 FROM t1 HAVING a=1); SELECT numeropost,maxnumrep FROM t1 WHERE exists (SELECT 1 FROM t2 WHERE (mot='joce') AND date >= '2002-10-21' AND t1.numeropost = t2.topic) ORDER BY maxnumrep DESC LIMIT 0, 20; -- error 1054 -SELECT (SELECT 1) as a FROM (SELECT 1 FROM t1 HAVING a=1); +SELECT (SELECT 1) as a FROM (SELECT 1 FROM t1 HAVING a=1) b; -- error 1054 SELECT 1 IN (SELECT 1 FROM t2 HAVING a); SELECT * from t2 where topic IN (SELECT topic FROM t2 GROUP BY date); @@ -210,7 +210,7 @@ drop table t1; CREATE TABLE t1 (field char(1) NOT NULL DEFAULT 'b'); INSERT INTO t1 VALUES (); -- error 1240 -SELECT field FROM t1 WHERE 1=(SELECT 1 UNION ALL SELECT 1 FROM (SELECT 1) HAVING field='b'); +SELECT field FROM t1 WHERE 1=(SELECT 1 UNION ALL SELECT 1 FROM (SELECT 1) a HAVING field='b'); drop table t1; # threadhardwarefr7 @@ -236,7 +236,7 @@ drop table t1; CREATE TABLE t1 (a int(1)); INSERT INTO t1 VALUES (1); -SELECT 1 FROM (SELECT a FROM t1) HAVING (SELECT a)=1; +SELECT 1 FROM (SELECT a FROM t1) b HAVING (SELECT b.a)=1; drop table t1; #update with subselects diff --git a/sql/share/czech/errmsg.txt b/sql/share/czech/errmsg.txt index 1a81a7e9182..31d47b821e0 100644 --- a/sql/share/czech/errmsg.txt +++ b/sql/share/czech/errmsg.txt @@ -256,4 +256,5 @@ v/* "Cyclic reference on subqueries", "Converting column '%s' from %s to %s", "Reference '%-.64s' not supported (%s)", +"Every derived table must have it's own alias" "Select %u was reduced during optimisation", diff --git a/sql/share/danish/errmsg.txt b/sql/share/danish/errmsg.txt index e2d33a06fb3..ca5a6918517 100644 --- a/sql/share/danish/errmsg.txt +++ b/sql/share/danish/errmsg.txt @@ -250,4 +250,5 @@ "Cyclic reference on subqueries", "Converting column '%s' from %s to %s", "Reference '%-.64s' not supported (%s)", +"Every derived table must have it's own alias" "Select %u was reduced during optimisation", diff --git a/sql/share/dutch/errmsg.txt b/sql/share/dutch/errmsg.txt index f4f2227f27f..6f5754dee76 100644 --- a/sql/share/dutch/errmsg.txt +++ b/sql/share/dutch/errmsg.txt @@ -258,4 +258,5 @@ "Cyclic reference on subqueries", "Converting column '%s' from %s to %s", "Reference '%-.64s' not supported (%s)", +"Every derived table must have it's own alias" "Select %u was reduced during optimisation", diff --git a/sql/share/english/errmsg.txt b/sql/share/english/errmsg.txt index 78c6e5185ec..66ca9eab596 100644 --- a/sql/share/english/errmsg.txt +++ b/sql/share/english/errmsg.txt @@ -247,4 +247,5 @@ "Cyclic reference on subqueries", "Converting column '%s' from %s to %s", "Reference '%-.64s' not supported (%s)", +"Every derived table must have it's own alias" "Select %u was reduced during optimisation", diff --git a/sql/share/estonian/errmsg.txt b/sql/share/estonian/errmsg.txt index 236c688a048..757ae5b6443 100644 --- a/sql/share/estonian/errmsg.txt +++ b/sql/share/estonian/errmsg.txt @@ -252,4 +252,5 @@ "Cyclic reference on subqueries", "Converting column '%s' from %s to %s", "Reference '%-.64s' not supported (%s)", +"Every derived table must have it's own alias" "Select %u was reduced during optimisation", diff --git a/sql/share/french/errmsg.txt b/sql/share/french/errmsg.txt index fa732ed10e4..43952d848c4 100644 --- a/sql/share/french/errmsg.txt +++ b/sql/share/french/errmsg.txt @@ -247,4 +247,5 @@ "Cyclic reference on subqueries", "Converting column '%s' from %s to %s", "Reference '%-.64s' not supported (%s)", +"Every derived table must have it's own alias" "Select %u was reduced during optimisation", diff --git a/sql/share/german/errmsg.txt b/sql/share/german/errmsg.txt index 62da0945799..f9a70feb549 100644 --- a/sql/share/german/errmsg.txt +++ b/sql/share/german/errmsg.txt @@ -250,4 +250,5 @@ "Cyclic reference on subqueries", "Converting column '%s' from %s to %s", "Reference '%-.64s' not supported (%s)", +"Every derived table must have it's own alias" "Select %u was reduced during optimisation", diff --git a/sql/share/greek/errmsg.txt b/sql/share/greek/errmsg.txt index e4b594faad3..9410c3d69bb 100644 --- a/sql/share/greek/errmsg.txt +++ b/sql/share/greek/errmsg.txt @@ -247,4 +247,5 @@ "Cyclic reference on subqueries", "Converting column '%s' from %s to %s", "Reference '%-.64s' not supported (%s)", +"Every derived table must have it's own alias" "Select %u was reduced during optimisation", diff --git a/sql/share/hungarian/errmsg.txt b/sql/share/hungarian/errmsg.txt index 161d686a0d7..1410a88af4a 100644 --- a/sql/share/hungarian/errmsg.txt +++ b/sql/share/hungarian/errmsg.txt @@ -249,4 +249,5 @@ "Cyclic reference on subqueries", "Converting column '%s' from %s to %s", "Reference '%-.64s' not supported (%s)", +"Every derived table must have it's own alias" "Select %u was reduced during optimisation", diff --git a/sql/share/italian/errmsg.txt b/sql/share/italian/errmsg.txt index 806cf1bbc2c..499c06e64dc 100644 --- a/sql/share/italian/errmsg.txt +++ b/sql/share/italian/errmsg.txt @@ -247,4 +247,5 @@ "Cyclic reference on subqueries", "Converting column '%s' from %s to %s", "Reference '%-.64s' not supported (%s)", +"Every derived table must have it's own alias" "Select %u was reduced during optimisation", diff --git a/sql/share/japanese/errmsg.txt b/sql/share/japanese/errmsg.txt index 06ab3e3df25..90a6e23efbd 100644 --- a/sql/share/japanese/errmsg.txt +++ b/sql/share/japanese/errmsg.txt @@ -249,4 +249,5 @@ "Cyclic reference on subqueries", "Converting column '%s' from %s to %s", "Reference '%-.64s' not supported (%s)", +"Every derived table must have it's own alias" "Select %u was reduced during optimisation", diff --git a/sql/share/korean/errmsg.txt b/sql/share/korean/errmsg.txt index 707b45f1cd4..f05ab3148eb 100644 --- a/sql/share/korean/errmsg.txt +++ b/sql/share/korean/errmsg.txt @@ -247,4 +247,5 @@ "Cyclic reference on subqueries", "Converting column '%s' from %s to %s", "Reference '%-.64s' not supported (%s)", +"Every derived table must have it's own alias" "Select %u was reduced during optimisation", diff --git a/sql/share/norwegian-ny/errmsg.txt b/sql/share/norwegian-ny/errmsg.txt index 42d3245f3fb..5e75877145c 100644 --- a/sql/share/norwegian-ny/errmsg.txt +++ b/sql/share/norwegian-ny/errmsg.txt @@ -249,4 +249,5 @@ "Cyclic reference on subqueries", "Converting column '%s' from %s to %s", "Reference '%-.64s' not supported (%s)", +"Every derived table must have it's own alias" "Select %u was reduced during optimisation", diff --git a/sql/share/norwegian/errmsg.txt b/sql/share/norwegian/errmsg.txt index 7db402f193c..4330827fe1c 100644 --- a/sql/share/norwegian/errmsg.txt +++ b/sql/share/norwegian/errmsg.txt @@ -249,4 +249,5 @@ "Cyclic reference on subqueries", "Converting column '%s' from %s to %s", "Reference '%-.64s' not supported (%s)", +"Every derived table must have it's own alias" "Select %u was reduced during optimisation", diff --git a/sql/share/polish/errmsg.txt b/sql/share/polish/errmsg.txt index c10c41c4c8b..db5b97554ff 100644 --- a/sql/share/polish/errmsg.txt +++ b/sql/share/polish/errmsg.txt @@ -251,4 +251,5 @@ "Cyclic reference on subqueries", "Converting column '%s' from %s to %s", "Reference '%-.64s' not supported (%s)", +"Every derived table must have it's own alias" "Select %u was reduced during optimisation", diff --git a/sql/share/portuguese/errmsg.txt b/sql/share/portuguese/errmsg.txt index 8c84b0f71cf..80c1b498345 100644 --- a/sql/share/portuguese/errmsg.txt +++ b/sql/share/portuguese/errmsg.txt @@ -247,4 +247,5 @@ "Cyclic reference on subqueries", "Converting column '%s' from %s to %s", "Reference '%-.64s' not supported (%s)", +"Every derived table must have it's own alias" "Select %u was reduced during optimisation", diff --git a/sql/share/romanian/errmsg.txt b/sql/share/romanian/errmsg.txt index 24d220f1f9d..59f6e550650 100644 --- a/sql/share/romanian/errmsg.txt +++ b/sql/share/romanian/errmsg.txt @@ -251,4 +251,5 @@ "Cyclic reference on subqueries", "Converting column '%s' from %s to %s" "Reference '%-.64s' not supported (%s)", +"Every derived table must have it's own alias" "Select %u was reduced during optimisation", diff --git a/sql/share/russian/errmsg.txt b/sql/share/russian/errmsg.txt index ec682f7778e..fafcc61f60a 100644 --- a/sql/share/russian/errmsg.txt +++ b/sql/share/russian/errmsg.txt @@ -250,4 +250,5 @@ "Циклическая ссылка на подзапрос", "Преобразование поля '%s' из %s в %s", "Ссылка '%-.64s' не поддерживается (%s)", +"Every derived table must have it's own alias" "Select %u был упразднен в процессе оптимизации", diff --git a/sql/share/serbian/errmsg.txt b/sql/share/serbian/errmsg.txt index 4ccbc95eefc..6bcecf9e4c9 100644 --- a/sql/share/serbian/errmsg.txt +++ b/sql/share/serbian/errmsg.txt @@ -243,4 +243,5 @@ "Cyclic reference on subqueries", "Converting column '%s' from %s to %s", "Reference '%-.64s' not supported (%s)", +"Every derived table must have it's own alias" "Select %u was reduced during optimisation", diff --git a/sql/share/slovak/errmsg.txt b/sql/share/slovak/errmsg.txt index e66ea93b021..55ead96545c 100644 --- a/sql/share/slovak/errmsg.txt +++ b/sql/share/slovak/errmsg.txt @@ -255,4 +255,5 @@ "Cyclic reference on subqueries", "Converting column '%s' from %s to %s", "Reference '%-.64s' not supported (%s)", +"Every derived table must have it's own alias" "Select %u was reduced during optimisation", diff --git a/sql/share/spanish/errmsg.txt b/sql/share/spanish/errmsg.txt index 8de5202952b..93a0abeed39 100644 --- a/sql/share/spanish/errmsg.txt +++ b/sql/share/spanish/errmsg.txt @@ -248,4 +248,5 @@ "Cyclic reference on subqueries", "Converting column '%s' from %s to %s", "Reference '%-.64s' not supported (%s)", +"Every derived table must have it's own alias" "Select %u was reduced during optimisation", diff --git a/sql/share/swedish/errmsg.txt b/sql/share/swedish/errmsg.txt index 31f4239e8e3..a996898446e 100644 --- a/sql/share/swedish/errmsg.txt +++ b/sql/share/swedish/errmsg.txt @@ -247,4 +247,5 @@ "Syklisk referens i subselect", "Konvertar kolumn '%s' frЕn %s till %s", "Reference '%-.64s' not supported (%s)", +"Every derived table must have it's own alias" "Select %u was reduced during optimisation", diff --git a/sql/share/ukrainian/errmsg.txt b/sql/share/ukrainian/errmsg.txt index 1caedcbb19c..0ec1d88e601 100644 --- a/sql/share/ukrainian/errmsg.txt +++ b/sql/share/ukrainian/errmsg.txt @@ -252,4 +252,5 @@ "Цикл╕чне посилання на п╕дзапит", "Перетворення стовбца '%s' з %s у %s", "Посилання '%-.64s' не пiдтримуется (%s)", +"Every derived table must have it's own alias" "Select %u was скасовано при оптимiзацii", diff --git a/sql/sql_base.cc b/sql/sql_base.cc index f8202035d51..fc50941c646 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -1894,13 +1894,13 @@ find_field_in_tables(THD *thd, Item_ident *item, TABLE_LIST *tables, const char *name=item->field_name; uint length=(uint) strlen(name); - if (table_name) + if (table_name && table_name[0]) { /* Qualified field */ bool found_table=0; for (; tables ; tables=tables->next) { if (!strcmp(tables->alias,table_name) && - (!db || !strcmp(db,tables->db))) + (!db || !tables->db || !tables->db[0] || !strcmp(db,tables->db))) { found_table=1; Field *find=find_field_in_table(thd,tables->table,name,length, diff --git a/sql/sql_derived.cc b/sql/sql_derived.cc index afdd1ccfdb2..2176740e67b 100644 --- a/sql/sql_derived.cc +++ b/sql/sql_derived.cc @@ -106,7 +106,7 @@ int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit, TABLE_LIST *t) t->table=table; table->derived_select_number= sl->select_number; table->tmp_table=TMP_TABLE; - if (!lex->describe) + if (lex->describe) sl->exclude(); t->db=(char *)""; t->derived=(SELECT_LEX *)0; // just in case ... diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index be0430d4afe..724933e08d4 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -1205,6 +1205,8 @@ bool st_select_lex_unit::create_total_list_n_last_return(THD *thd, st_lex *lex, net_printf(thd,ER_WRONG_USAGE,"UNION","ORDER BY"); return 1; } + if (sl->linkage == DERIVED_TABLE_TYPE) + continue; for (SELECT_LEX_UNIT *inner= sl->first_inner_unit(); inner; inner= inner->next_unit()) diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 2e8a431d212..114c9723510 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -3404,8 +3404,15 @@ TABLE_LIST *st_select_lex::add_table_to_list(Table_ident *table, } if (!alias) /* Alias is case sensitive */ + { + if (table->sel) + { + net_printf(thd,ER_DERIVED_MUST_HAVE_ALIAS); + DBUG_RETURN(0); + } if (!(alias_str=thd->memdup(alias_str,table->table.length+1))) DBUG_RETURN(0); + } if (!(ptr = (TABLE_LIST *) thd->calloc(sizeof(TABLE_LIST)))) DBUG_RETURN(0); /* purecov: inspected */ |