summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/mysqld_error.h5
-rw-r--r--mysql-test/r/derived.result30
-rw-r--r--mysql-test/r/group_by.result2
-rw-r--r--mysql-test/r/select_found.result2
-rw-r--r--mysql-test/r/subselect.result20
-rw-r--r--mysql-test/t/derived.test24
-rw-r--r--mysql-test/t/group_by.test2
-rw-r--r--mysql-test/t/select_found.test2
-rw-r--r--mysql-test/t/subselect.test20
-rw-r--r--sql/share/czech/errmsg.txt1
-rw-r--r--sql/share/danish/errmsg.txt1
-rw-r--r--sql/share/dutch/errmsg.txt1
-rw-r--r--sql/share/english/errmsg.txt1
-rw-r--r--sql/share/estonian/errmsg.txt1
-rw-r--r--sql/share/french/errmsg.txt1
-rw-r--r--sql/share/german/errmsg.txt1
-rw-r--r--sql/share/greek/errmsg.txt1
-rw-r--r--sql/share/hungarian/errmsg.txt1
-rw-r--r--sql/share/italian/errmsg.txt1
-rw-r--r--sql/share/japanese/errmsg.txt1
-rw-r--r--sql/share/korean/errmsg.txt1
-rw-r--r--sql/share/norwegian-ny/errmsg.txt1
-rw-r--r--sql/share/norwegian/errmsg.txt1
-rw-r--r--sql/share/polish/errmsg.txt1
-rw-r--r--sql/share/portuguese/errmsg.txt1
-rw-r--r--sql/share/romanian/errmsg.txt1
-rw-r--r--sql/share/russian/errmsg.txt1
-rw-r--r--sql/share/serbian/errmsg.txt1
-rw-r--r--sql/share/slovak/errmsg.txt1
-rw-r--r--sql/share/spanish/errmsg.txt1
-rw-r--r--sql/share/swedish/errmsg.txt1
-rw-r--r--sql/share/ukrainian/errmsg.txt1
-rw-r--r--sql/sql_base.cc4
-rw-r--r--sql/sql_derived.cc2
-rw-r--r--sql/sql_lex.cc2
-rw-r--r--sql/sql_parse.cc7
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 */