mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Megrge new changes in...
This commit is contained in:
@ -262,5 +262,6 @@
|
|||||||
#define ER_CYCLIC_REFERENCE 1243
|
#define ER_CYCLIC_REFERENCE 1243
|
||||||
#define ER_AUTO_CONVERT 1244
|
#define ER_AUTO_CONVERT 1244
|
||||||
#define ER_ILLEGAL_REFERENCE 1245
|
#define ER_ILLEGAL_REFERENCE 1245
|
||||||
#define ER_SELECT_REDUCED 1246
|
#define ER_DERIVED_MUST_HAVE_ALIAS 1246
|
||||||
#define ER_ERROR_MESSAGES 247
|
#define ER_SELECT_REDUCED 1247
|
||||||
|
#define ER_ERROR_MESSAGES 248
|
||||||
|
@ -17,32 +17,55 @@ select t1.a,t4.y from t1,(select t2.a as y from t2,(select t3.b from t3 where t3
|
|||||||
a y
|
a y
|
||||||
3 3
|
3 3
|
||||||
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'
|
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
|
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
|
a a
|
||||||
1 2
|
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
|
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'
|
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'
|
Unknown column 'a' in 'having clause'
|
||||||
|
select * from t1 as x1, (select * from t1) as x2;
|
||||||
|
a b a b
|
||||||
|
1 a 1 a
|
||||||
|
2 b 1 a
|
||||||
|
3 c 1 a
|
||||||
|
3 c 1 a
|
||||||
|
1 a 2 b
|
||||||
|
2 b 2 b
|
||||||
|
3 c 2 b
|
||||||
|
3 c 2 b
|
||||||
|
1 a 3 c
|
||||||
|
2 b 3 c
|
||||||
|
3 c 3 c
|
||||||
|
3 c 3 c
|
||||||
|
1 a 3 c
|
||||||
|
2 b 3 c
|
||||||
|
3 c 3 c
|
||||||
|
3 c 3 c
|
||||||
|
explain select * from t1 as x1, (select * from t1) as x2;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 PRIMARY x1 ALL NULL NULL NULL NULL 4
|
||||||
|
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 4
|
||||||
|
2 DERIVED x1 ALL NULL NULL NULL NULL 4
|
||||||
drop table if exists t1.t2,t3;
|
drop table if exists t1.t2,t3;
|
||||||
select * from (select 1);
|
select * from (select 1) as a;
|
||||||
1
|
1
|
||||||
1
|
1
|
||||||
select a from (select 1 as a);
|
select a from (select 1 as a) as b;
|
||||||
a
|
a
|
||||||
1
|
1
|
||||||
select 1 from (select 1);
|
select 1 from (select 1) as a;
|
||||||
1
|
1
|
||||||
1
|
1
|
||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
create table t1(a int not null, t char(8), index(a));
|
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
|
a t
|
||||||
1 1
|
1 1
|
||||||
2 2
|
2 2
|
||||||
@ -64,7 +87,14 @@ a t
|
|||||||
18 18
|
18 18
|
||||||
19 19
|
19 19
|
||||||
20 20
|
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 PRIMARY Select tables optimized away
|
||||||
|
2 DERIVED tt1 index NULL a 4 NULL 10000 Using index
|
||||||
drop table if exists t1;
|
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))
|
(SELECT * FROM (SELECT 1 as a) as a )
|
||||||
1
|
1
|
||||||
|
select * from (select 1 as a) b left join (select 2 as a) c using(a);
|
||||||
|
a a
|
||||||
|
1 NULL
|
||||||
|
@ -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
|
Invalid use of group function
|
||||||
drop table if exists t1,t2,t3;
|
drop table if exists t1,t2,t3;
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
|
@ -168,7 +168,7 @@ test2 2 2
|
|||||||
SELECT FOUND_ROWS();
|
SELECT FOUND_ROWS();
|
||||||
FOUND_ROWS()
|
FOUND_ROWS()
|
||||||
2
|
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
|
1
|
||||||
SELECT FOUND_ROWS();
|
SELECT FOUND_ROWS();
|
||||||
FOUND_ROWS()
|
FOUND_ROWS()
|
||||||
|
@ -8,39 +8,39 @@ SELECT (SELECT 1) UNION SELECT (SELECT 2);
|
|||||||
SELECT (SELECT (SELECT 0 UNION SELECT 0));
|
SELECT (SELECT (SELECT 0 UNION SELECT 0));
|
||||||
(SELECT (SELECT 0 UNION SELECT 0))
|
(SELECT (SELECT 0 UNION SELECT 0))
|
||||||
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)
|
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)
|
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)
|
(SELECT 1) MAX(1)
|
||||||
1 1
|
1 1
|
||||||
SELECT (SELECT a) as a;
|
SELECT (SELECT a) as a;
|
||||||
Reference 'a' not supported (forward reference in item list)
|
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
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 PRIMARY <derived2> system NULL NULL NULL NULL 1
|
1 PRIMARY <derived2> system NULL NULL NULL NULL 1
|
||||||
3 DEPENDENT SUBSELECT No tables used
|
3 DEPENDENT SUBSELECT No tables used
|
||||||
2 DERIVED 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
|
||||||
1
|
1
|
||||||
SELECT (SELECT 1), a;
|
SELECT (SELECT 1), a;
|
||||||
Unknown column 'a' in 'field list'
|
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
|
a
|
||||||
1
|
1
|
||||||
SELECT 1 FROM (SELECT (SELECT a));
|
SELECT 1 FROM (SELECT (SELECT a) b) c;
|
||||||
Unknown column 'a' in 'field list'
|
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);
|
SELECT * FROM (SELECT 1 as id) b WHERE id IN (SELECT * FROM (SELECT 1 as id) c ORDER BY id LIMIT 1);
|
||||||
id
|
id
|
||||||
1
|
1
|
||||||
SELECT * FROM (SELECT 1) WHERE 1 IN (SELECT 1,1);
|
SELECT * FROM (SELECT 1) a WHERE 1 IN (SELECT 1,1);
|
||||||
Cardinality error (more/less than 1 columns)
|
Cardinality error (more/less than 1 columns)
|
||||||
SELECT 1 IN (SELECT 1);
|
SELECT 1 IN (SELECT 1);
|
||||||
1 IN (SELECT 1)
|
1 IN (SELECT 1)
|
||||||
1
|
1
|
||||||
SELECT 1 FROM (SELECT 1 as a) WHERE 1 IN (SELECT (SELECT a));
|
SELECT 1 FROM (SELECT 1 as a) b WHERE 1 IN (SELECT (SELECT a));
|
||||||
1
|
1
|
||||||
1
|
1
|
||||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8;
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8;
|
||||||
@ -319,7 +319,7 @@ SELECT numeropost,maxnumrep FROM t1 WHERE exists (SELECT 1 FROM t2 WHERE (mot='j
|
|||||||
numeropost maxnumrep
|
numeropost maxnumrep
|
||||||
43506 2
|
43506 2
|
||||||
40143 1
|
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'
|
Unknown column 'a' in 'having clause'
|
||||||
SELECT 1 IN (SELECT 1 FROM t2 HAVING a);
|
SELECT 1 IN (SELECT 1 FROM t2 HAVING a);
|
||||||
Unknown column 'a' in 'having clause'
|
Unknown column 'a' in 'having clause'
|
||||||
@ -368,7 +368,7 @@ Subselect returns more than 1 record
|
|||||||
drop table t1;
|
drop table t1;
|
||||||
CREATE TABLE t1 (field char(1) NOT NULL DEFAULT 'b');
|
CREATE TABLE t1 (field char(1) NOT NULL DEFAULT 'b');
|
||||||
INSERT INTO t1 VALUES ();
|
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
|
Subselect returns more than 1 record
|
||||||
drop table t1;
|
drop table t1;
|
||||||
CREATE 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;
|
drop table t1;
|
||||||
CREATE TABLE t1 (a int(1));
|
CREATE TABLE t1 (a int(1));
|
||||||
INSERT INTO t1 VALUES (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
|
||||||
1
|
1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
@ -411,6 +411,10 @@ a b
|
|||||||
0 10
|
0 10
|
||||||
1 11
|
1 11
|
||||||
2 12
|
2 12
|
||||||
|
update t1 set b= (select b from t1);
|
||||||
|
INSERT TABLE 't1' isn't allowed in FROM table list
|
||||||
|
update t1 set b= (select b from t2);
|
||||||
|
Subselect returns more than 1 record
|
||||||
update t1 set b= (select b from t2 where t1.a = t2.a);
|
update t1 set b= (select b from t2 where t1.a = t2.a);
|
||||||
select * from t1;
|
select * from t1;
|
||||||
a b
|
a b
|
||||||
@ -430,6 +434,10 @@ a b
|
|||||||
select * from t1 where b = (select b from t2 where t1.a = t2.a);
|
select * from t1 where b = (select b from t2 where t1.a = t2.a);
|
||||||
a b
|
a b
|
||||||
2 12
|
2 12
|
||||||
|
delete from t1 where b = (select b from t1);
|
||||||
|
INSERT TABLE 't1' isn't allowed in FROM table list
|
||||||
|
delete from t1 where b = (select b from t2);
|
||||||
|
Subselect returns more than 1 record
|
||||||
delete from t1 where b = (select b from t2 where t1.a = t2.a);
|
delete from t1 where b = (select b from t2 where t1.a = t2.a);
|
||||||
select * from t1;
|
select * from t1;
|
||||||
a b
|
a b
|
||||||
@ -453,6 +461,10 @@ a b
|
|||||||
33 10
|
33 10
|
||||||
22 11
|
22 11
|
||||||
2 12
|
2 12
|
||||||
|
delete t11.*, t12.* from t11,t12 where t11.a = t12.a and t11.b = (select b from t12 where t11.a = t12.a);
|
||||||
|
INSERT TABLE 't12' isn't allowed in FROM table list
|
||||||
|
delete t11.*, t12.* from t11,t12 where t11.a = t12.a and t11.b = (select b from t2);
|
||||||
|
Subselect returns more than 1 record
|
||||||
delete t11.*, t12.* from t11,t12 where t11.a = t12.a and t11.b = (select b from t2 where t11.a = t2.a);
|
delete t11.*, t12.* from t11,t12 where t11.a = t12.a and t11.b = (select b from t2 where t11.a = t2.a);
|
||||||
select * from t11;
|
select * from t11;
|
||||||
a b
|
a b
|
||||||
@ -465,7 +477,13 @@ a b
|
|||||||
drop table t11, t12, t2;
|
drop table t11, t12, t2;
|
||||||
CREATE TABLE t1 (x int);
|
CREATE TABLE t1 (x int);
|
||||||
create table t2 (a int);
|
create table t2 (a int);
|
||||||
|
create table t3 (a int);
|
||||||
insert into t2 values (1);
|
insert into t2 values (1);
|
||||||
|
insert into t3 values (1),(2);
|
||||||
|
INSERT INTO t1 (x) VALUES ((SELECT x FROM t1));
|
||||||
|
INSERT TABLE 't1' isn't allowed in FROM table list
|
||||||
|
INSERT INTO t1 (x) VALUES ((SELECT a FROM t3));
|
||||||
|
Subselect returns more than 1 record
|
||||||
INSERT INTO t1 (x) VALUES ((SELECT a FROM t2));
|
INSERT INTO t1 (x) VALUES ((SELECT a FROM t2));
|
||||||
select * from t1;
|
select * from t1;
|
||||||
x
|
x
|
||||||
@ -485,20 +503,26 @@ x
|
|||||||
3
|
3
|
||||||
INSERT INTO t1 (x) select (SELECT SUM(x)+2 FROM t1) FROM t2;
|
INSERT INTO t1 (x) select (SELECT SUM(x)+2 FROM t1) FROM t2;
|
||||||
INSERT TABLE 't1' isn't allowed in FROM table list
|
INSERT TABLE 't1' isn't allowed in FROM table list
|
||||||
INSERT DELAYED INTO t1 (x) VALUES ((SELECT SUM(x) FROM t1));
|
INSERT DELAYED INTO t1 (x) VALUES ((SELECT SUM(x) FROM t2));
|
||||||
select * from t1;
|
select * from t1;
|
||||||
x
|
x
|
||||||
1
|
1
|
||||||
2
|
2
|
||||||
3
|
3
|
||||||
3
|
3
|
||||||
9
|
0
|
||||||
drop table t1, t2;
|
drop table t1, t2, t3;
|
||||||
CREATE TABLE t1 (x int not null, y int, primary key (x));
|
CREATE TABLE t1 (x int not null, y int, primary key (x));
|
||||||
create table t2 (a int);
|
create table t2 (a int);
|
||||||
|
create table t3 (a int);
|
||||||
insert into t2 values (1);
|
insert into t2 values (1);
|
||||||
|
insert into t3 values (1),(2);
|
||||||
select * from t1;
|
select * from t1;
|
||||||
x y
|
x y
|
||||||
|
replace into t1 (x, y) VALUES ((SELECT x FROM t1), (SELECT a+1 FROM t2));
|
||||||
|
INSERT TABLE 't1' isn't allowed in FROM table list
|
||||||
|
replace into t1 (x, y) VALUES ((SELECT a FROM t3), (SELECT a+1 FROM t2));
|
||||||
|
Subselect returns more than 1 record
|
||||||
replace into t1 (x, y) VALUES ((SELECT a FROM t2), (SELECT a+1 FROM t2));
|
replace into t1 (x, y) VALUES ((SELECT a FROM t2), (SELECT a+1 FROM t2));
|
||||||
select * from t1;
|
select * from t1;
|
||||||
x y
|
x y
|
||||||
@ -523,8 +547,8 @@ x y
|
|||||||
1 3
|
1 3
|
||||||
4 2
|
4 2
|
||||||
2 1
|
2 1
|
||||||
drop table t1, t2;
|
drop table t1, t2, t3;
|
||||||
SELECT * FROM (SELECT 1) WHERE 1 IN (SELECT *);
|
SELECT * FROM (SELECT 1) b WHERE 1 IN (SELECT *);
|
||||||
No tables used
|
No tables used
|
||||||
drop table if exists t;
|
drop table if exists t;
|
||||||
CREATE TABLE t (id int(11) default NULL, KEY id (id)) TYPE=MyISAM CHARSET=latin1;
|
CREATE TABLE t (id int(11) default NULL, KEY id (id)) TYPE=MyISAM CHARSET=latin1;
|
||||||
@ -536,7 +560,7 @@ EXPLAIN SELECT * FROM t WHERE id IN (SELECT 1);
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 PRIMARY t ref id id 5 const 1 Using where; Using index
|
1 PRIMARY t ref id id 5 const 1 Using where; Using index
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1246 Select 2 was reduced during optimisation
|
Note 1247 Select 2 was reduced during optimisation
|
||||||
SELECT * FROM t WHERE id IN (SELECT 1 UNION SELECT 3);
|
SELECT * FROM t WHERE id IN (SELECT 1 UNION SELECT 3);
|
||||||
id
|
id
|
||||||
1
|
1
|
||||||
@ -548,7 +572,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
1 PRIMARY t ref id id 5 const 1 Using where; Using index
|
1 PRIMARY t ref id id 5 const 1 Using where; Using index
|
||||||
3 SUBSELECT No tables used
|
3 SUBSELECT No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1246 Select 2 was reduced during optimisation
|
Note 1247 Select 2 was reduced during optimisation
|
||||||
EXPLAIN SELECT * FROM t WHERE id IN (SELECT 1 UNION SELECT 3);
|
EXPLAIN SELECT * FROM t WHERE id IN (SELECT 1 UNION SELECT 3);
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 PRIMARY t index NULL id 5 NULL 2 Using where; Using index
|
1 PRIMARY t index NULL id 5 NULL 2 Using where; Using index
|
||||||
@ -559,4 +583,14 @@ id
|
|||||||
SELECT * FROM t WHERE id IN (SELECT 5 UNION SELECT 2);
|
SELECT * FROM t WHERE id IN (SELECT 5 UNION SELECT 2);
|
||||||
id
|
id
|
||||||
2
|
2
|
||||||
drop table if exists t;
|
INSERT INTO t VALUES ((SELECT * FROM t));
|
||||||
|
INSERT TABLE 't' isn't allowed in FROM table list
|
||||||
|
SELECT * FROM t;
|
||||||
|
id
|
||||||
|
1
|
||||||
|
2
|
||||||
|
CREATE TABLE t1 (id int(11) default NULL, KEY id (id)) TYPE=MyISAM CHARSET=latin1;
|
||||||
|
INSERT INTO t1 values (1),(1);
|
||||||
|
UPDATE t SET id=(SELECT * FROM t1);
|
||||||
|
Subselect returns more than 1 record
|
||||||
|
drop table t;
|
||||||
|
@ -9,19 +9,21 @@ CREATE TABLE t3 (a int not null, b char (10) not null);
|
|||||||
insert into t3 values (3,'f'),(4,'y'),(5,'z'),(6,'c');
|
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;
|
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
|
--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
|
--error 1052
|
||||||
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;
|
||||||
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;
|
||||||
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;
|
||||||
--error 1054
|
--error 1054
|
||||||
SELECT 1 FROM (SELECT 1) WHERE a=2;
|
SELECT 1 FROM (SELECT 1) a WHERE a=2;
|
||||||
--error 1054
|
--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;
|
||||||
|
select * from t1 as x1, (select * from t1) as x2;
|
||||||
|
explain select * from t1 as x1, (select * from t1) as x2;
|
||||||
drop table if exists t1.t2,t3;
|
drop table if exists t1.t2,t3;
|
||||||
select * from (select 1);
|
select * from (select 1) as a;
|
||||||
select a from (select 1 as a);
|
select a from (select 1 as a) as b;
|
||||||
select 1 from (select 1);
|
select 1 from (select 1) as a;
|
||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
create table t1(a int not null, t char(8), index(a));
|
create table t1(a int not null, t char(8), index(a));
|
||||||
disable_query_log;
|
disable_query_log;
|
||||||
@ -32,6 +34,8 @@ while ($1)
|
|||||||
dec $1;
|
dec $1;
|
||||||
}
|
}
|
||||||
enable_query_log;
|
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;
|
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);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
-- error 1111
|
-- 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>)
|
# Test of group (Failed for Lars Hoss <lh@pbm.de>)
|
||||||
#
|
#
|
||||||
|
@ -84,7 +84,7 @@ INSERT INTO t1 (titre,maxnumrep) VALUES
|
|||||||
('test1','1'),('test2','2'),('test3','3');
|
('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 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 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 FOUND_ROWS();
|
||||||
SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE numeropost > 1 LIMIT 0;
|
SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE numeropost > 1 LIMIT 0;
|
||||||
SELECT FOUND_ROWS();
|
SELECT FOUND_ROWS();
|
||||||
|
@ -2,25 +2,24 @@ select (select 2);
|
|||||||
SELECT (SELECT 1) UNION SELECT (SELECT 2);
|
SELECT (SELECT 1) UNION SELECT (SELECT 2);
|
||||||
SELECT (SELECT (SELECT 0 UNION SELECT 0));
|
SELECT (SELECT (SELECT 0 UNION SELECT 0));
|
||||||
-- error 1245
|
-- 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
|
-- 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 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);
|
SELECT (SELECT 1),MAX(1) FROM (SELECT 1) as a;
|
||||||
-- error 1245
|
-- error 1245
|
||||||
SELECT (SELECT a) as a;
|
SELECT (SELECT a) as a;
|
||||||
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;
|
||||||
SELECT 1 FROM (SELECT 1 as a) HAVING (SELECT a)=1;
|
SELECT 1 FROM (SELECT 1 as a) as b HAVING (SELECT a)=1;
|
||||||
-- error 1054
|
-- error 1054
|
||||||
SELECT (SELECT 1), a;
|
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
|
-- error 1054
|
||||||
SELECT 1 FROM (SELECT (SELECT a));
|
SELECT 1 FROM (SELECT (SELECT a) b) c;
|
||||||
SELECT * FROM (SELECT 1 as id) WHERE id IN (SELECT * FROM (SELECT 1 as id) ORDER BY id LIMIT 1);
|
SELECT * FROM (SELECT 1 as id) b WHERE id IN (SELECT * FROM (SELECT 1 as id) c ORDER BY id LIMIT 1);
|
||||||
-- error 1239
|
-- error 1239
|
||||||
SELECT * FROM (SELECT 1) WHERE 1 IN (SELECT 1,1);
|
SELECT * FROM (SELECT 1) a WHERE 1 IN (SELECT 1,1);
|
||||||
SELECT 1 IN (SELECT 1);
|
SELECT 1 IN (SELECT 1);
|
||||||
SELECT 1 FROM (SELECT 1 as a) WHERE 1 IN (SELECT (SELECT a));
|
SELECT 1 FROM (SELECT 1 as a) b WHERE 1 IN (SELECT (SELECT a));
|
||||||
|
|
||||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8;
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8;
|
||||||
create table t1 (a int);
|
create table t1 (a int);
|
||||||
create table t2 (a int, b int);
|
create table t2 (a int, b int);
|
||||||
@ -176,7 +175,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 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;
|
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
|
-- 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
|
-- error 1054
|
||||||
SELECT 1 IN (SELECT 1 FROM t2 HAVING a);
|
SELECT 1 IN (SELECT 1 FROM t2 HAVING a);
|
||||||
SELECT * from t2 where topic IN (SELECT topic FROM t2 GROUP BY date);
|
SELECT * from t2 where topic IN (SELECT topic FROM t2 GROUP BY date);
|
||||||
@ -210,7 +209,7 @@ drop table t1;
|
|||||||
CREATE TABLE t1 (field char(1) NOT NULL DEFAULT 'b');
|
CREATE TABLE t1 (field char(1) NOT NULL DEFAULT 'b');
|
||||||
INSERT INTO t1 VALUES ();
|
INSERT INTO t1 VALUES ();
|
||||||
-- error 1240
|
-- 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;
|
drop table t1;
|
||||||
|
|
||||||
# threadhardwarefr7
|
# threadhardwarefr7
|
||||||
@ -236,7 +235,7 @@ drop table t1;
|
|||||||
|
|
||||||
CREATE TABLE t1 (a int(1));
|
CREATE TABLE t1 (a int(1));
|
||||||
INSERT INTO t1 VALUES (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;
|
drop table t1;
|
||||||
|
|
||||||
#update with subselects
|
#update with subselects
|
||||||
@ -245,6 +244,10 @@ create table t2 (a int NOT NULL, b int, primary key (a));
|
|||||||
insert into t1 values (0, 10),(1, 11),(2, 12);
|
insert into t1 values (0, 10),(1, 11),(2, 12);
|
||||||
insert into t2 values (1, 21),(2, 22),(3, 23);
|
insert into t2 values (1, 21),(2, 22),(3, 23);
|
||||||
select * from t1;
|
select * from t1;
|
||||||
|
-- error 1093
|
||||||
|
update t1 set b= (select b from t1);
|
||||||
|
-- error 1240
|
||||||
|
update t1 set b= (select b from t2);
|
||||||
update t1 set b= (select b from t2 where t1.a = t2.a);
|
update t1 set b= (select b from t2 where t1.a = t2.a);
|
||||||
select * from t1;
|
select * from t1;
|
||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
@ -256,6 +259,10 @@ insert into t1 values (0, 10),(1, 11),(2, 12);
|
|||||||
insert into t2 values (1, 21),(2, 12),(3, 23);
|
insert into t2 values (1, 21),(2, 12),(3, 23);
|
||||||
select * from t1;
|
select * from t1;
|
||||||
select * from t1 where b = (select b from t2 where t1.a = t2.a);
|
select * from t1 where b = (select b from t2 where t1.a = t2.a);
|
||||||
|
-- error 1093
|
||||||
|
delete from t1 where b = (select b from t1);
|
||||||
|
-- error 1240
|
||||||
|
delete from t1 where b = (select b from t2);
|
||||||
delete from t1 where b = (select b from t2 where t1.a = t2.a);
|
delete from t1 where b = (select b from t2 where t1.a = t2.a);
|
||||||
select * from t1;
|
select * from t1;
|
||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
@ -270,6 +277,10 @@ insert into t12 values (33, 10),(22, 11),(2, 12);
|
|||||||
insert into t2 values (1, 21),(2, 12),(3, 23);
|
insert into t2 values (1, 21),(2, 12),(3, 23);
|
||||||
select * from t11;
|
select * from t11;
|
||||||
select * from t12;
|
select * from t12;
|
||||||
|
-- error 1093
|
||||||
|
delete t11.*, t12.* from t11,t12 where t11.a = t12.a and t11.b = (select b from t12 where t11.a = t12.a);
|
||||||
|
-- error 1240
|
||||||
|
delete t11.*, t12.* from t11,t12 where t11.a = t12.a and t11.b = (select b from t2);
|
||||||
delete t11.*, t12.* from t11,t12 where t11.a = t12.a and t11.b = (select b from t2 where t11.a = t2.a);
|
delete t11.*, t12.* from t11,t12 where t11.a = t12.a and t11.b = (select b from t2 where t11.a = t2.a);
|
||||||
select * from t11;
|
select * from t11;
|
||||||
select * from t12;
|
select * from t12;
|
||||||
@ -278,7 +289,13 @@ drop table t11, t12, t2;
|
|||||||
#insert with subselects
|
#insert with subselects
|
||||||
CREATE TABLE t1 (x int);
|
CREATE TABLE t1 (x int);
|
||||||
create table t2 (a int);
|
create table t2 (a int);
|
||||||
|
create table t3 (a int);
|
||||||
insert into t2 values (1);
|
insert into t2 values (1);
|
||||||
|
insert into t3 values (1),(2);
|
||||||
|
-- error 1093
|
||||||
|
INSERT INTO t1 (x) VALUES ((SELECT x FROM t1));
|
||||||
|
-- error 1240
|
||||||
|
INSERT INTO t1 (x) VALUES ((SELECT a FROM t3));
|
||||||
INSERT INTO t1 (x) VALUES ((SELECT a FROM t2));
|
INSERT INTO t1 (x) VALUES ((SELECT a FROM t2));
|
||||||
select * from t1;
|
select * from t1;
|
||||||
insert into t2 values (1);
|
insert into t2 values (1);
|
||||||
@ -289,16 +306,22 @@ INSERT INTO t1 (x) select (SELECT SUM(a)+1 FROM t2) FROM t2;
|
|||||||
select * from t1;
|
select * from t1;
|
||||||
-- error 1093
|
-- error 1093
|
||||||
INSERT INTO t1 (x) select (SELECT SUM(x)+2 FROM t1) FROM t2;
|
INSERT INTO t1 (x) select (SELECT SUM(x)+2 FROM t1) FROM t2;
|
||||||
INSERT DELAYED INTO t1 (x) VALUES ((SELECT SUM(x) FROM t1));
|
INSERT DELAYED INTO t1 (x) VALUES ((SELECT SUM(x) FROM t2));
|
||||||
-- sleep 1
|
-- sleep 1
|
||||||
select * from t1;
|
select * from t1;
|
||||||
drop table t1, t2;
|
drop table t1, t2, t3;
|
||||||
|
|
||||||
#replace with subselects
|
#replace with subselects
|
||||||
CREATE TABLE t1 (x int not null, y int, primary key (x));
|
CREATE TABLE t1 (x int not null, y int, primary key (x));
|
||||||
create table t2 (a int);
|
create table t2 (a int);
|
||||||
|
create table t3 (a int);
|
||||||
insert into t2 values (1);
|
insert into t2 values (1);
|
||||||
|
insert into t3 values (1),(2);
|
||||||
select * from t1;
|
select * from t1;
|
||||||
|
-- error 1093
|
||||||
|
replace into t1 (x, y) VALUES ((SELECT x FROM t1), (SELECT a+1 FROM t2));
|
||||||
|
-- error 1240
|
||||||
|
replace into t1 (x, y) VALUES ((SELECT a FROM t3), (SELECT a+1 FROM t2));
|
||||||
replace into t1 (x, y) VALUES ((SELECT a FROM t2), (SELECT a+1 FROM t2));
|
replace into t1 (x, y) VALUES ((SELECT a FROM t2), (SELECT a+1 FROM t2));
|
||||||
select * from t1;
|
select * from t1;
|
||||||
replace into t1 (x, y) VALUES ((SELECT a FROM t2), (SELECT a+2 FROM t2));
|
replace into t1 (x, y) VALUES ((SELECT a FROM t2), (SELECT a+2 FROM t2));
|
||||||
@ -311,10 +334,10 @@ replace DELAYED into t1 (x, y) VALUES ((SELECT a+3 FROM t2), (SELECT a+1 FROM t2
|
|||||||
select * from t1;
|
select * from t1;
|
||||||
replace LOW_PRIORITY into t1 (x, y) VALUES ((SELECT a+1 FROM t2), (SELECT a FROM t2));
|
replace LOW_PRIORITY into t1 (x, y) VALUES ((SELECT a+1 FROM t2), (SELECT a FROM t2));
|
||||||
select * from t1;
|
select * from t1;
|
||||||
drop table t1, t2;
|
drop table t1, t2, t3;
|
||||||
|
|
||||||
-- error 1096
|
-- error 1096
|
||||||
SELECT * FROM (SELECT 1) WHERE 1 IN (SELECT *);
|
SELECT * FROM (SELECT 1) b WHERE 1 IN (SELECT *);
|
||||||
drop table if exists t;
|
drop table if exists t;
|
||||||
CREATE TABLE t (id int(11) default NULL, KEY id (id)) TYPE=MyISAM CHARSET=latin1;
|
CREATE TABLE t (id int(11) default NULL, KEY id (id)) TYPE=MyISAM CHARSET=latin1;
|
||||||
INSERT INTO t VALUES (1),(2);
|
INSERT INTO t VALUES (1),(2);
|
||||||
@ -326,5 +349,11 @@ EXPLAIN SELECT * FROM t WHERE id IN (SELECT 1+(select 1));
|
|||||||
EXPLAIN SELECT * FROM t WHERE id IN (SELECT 1 UNION SELECT 3);
|
EXPLAIN SELECT * FROM t WHERE id IN (SELECT 1 UNION SELECT 3);
|
||||||
SELECT * FROM t WHERE id IN (SELECT 5 UNION SELECT 3);
|
SELECT * FROM t WHERE id IN (SELECT 5 UNION SELECT 3);
|
||||||
SELECT * FROM t WHERE id IN (SELECT 5 UNION SELECT 2);
|
SELECT * FROM t WHERE id IN (SELECT 5 UNION SELECT 2);
|
||||||
drop table if exists t;
|
-- error 1093
|
||||||
|
INSERT INTO t VALUES ((SELECT * FROM t));
|
||||||
|
SELECT * FROM t;
|
||||||
|
CREATE TABLE t1 (id int(11) default NULL, KEY id (id)) TYPE=MyISAM CHARSET=latin1;
|
||||||
|
INSERT INTO t1 values (1),(1);
|
||||||
|
-- error 1240
|
||||||
|
UPDATE t SET id=(SELECT * FROM t1);
|
||||||
|
drop table t;
|
||||||
|
@ -108,8 +108,6 @@ Item_func::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref)
|
|||||||
Set return character set to first argument if we are returning a
|
Set return character set to first argument if we are returning a
|
||||||
string.
|
string.
|
||||||
*/
|
*/
|
||||||
if (result_type() == STRING_RESULT)
|
|
||||||
set_charset((*args)->charset());
|
|
||||||
for (arg=args, arg_end=args+arg_count; arg != arg_end ; arg++)
|
for (arg=args, arg_end=args+arg_count; arg != arg_end ; arg++)
|
||||||
{
|
{
|
||||||
if ((*arg)->check_cols(allowed_arg_cols) ||
|
if ((*arg)->check_cols(allowed_arg_cols) ||
|
||||||
@ -123,6 +121,8 @@ Item_func::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref)
|
|||||||
used_tables_cache|=(*arg)->used_tables();
|
used_tables_cache|=(*arg)->used_tables();
|
||||||
const_item_cache&= (*arg)->const_item();
|
const_item_cache&= (*arg)->const_item();
|
||||||
}
|
}
|
||||||
|
if (result_type() == STRING_RESULT)
|
||||||
|
set_charset((*args)->charset());
|
||||||
}
|
}
|
||||||
fix_length_and_dec();
|
fix_length_and_dec();
|
||||||
fixed= 1;
|
fixed= 1;
|
||||||
|
@ -41,7 +41,7 @@ Item_sum::Item_sum(List<Item> &list)
|
|||||||
list.empty(); // Fields are used
|
list.empty(); // Fields are used
|
||||||
}
|
}
|
||||||
|
|
||||||
void Item_sum::mark_as_sum_func()
|
inline void Item_sum::mark_as_sum_func()
|
||||||
{
|
{
|
||||||
current_thd->lex.current_select->with_sum_func= with_sum_func= 1;
|
current_thd->lex.current_select->with_sum_func= with_sum_func= 1;
|
||||||
}
|
}
|
||||||
|
@ -34,6 +34,7 @@ public:
|
|||||||
uint arg_count;
|
uint arg_count;
|
||||||
bool quick_group; /* If incremental update of fields */
|
bool quick_group; /* If incremental update of fields */
|
||||||
|
|
||||||
|
inline void mark_as_sum_func();
|
||||||
Item_sum() : arg_count(0),quick_group(1)
|
Item_sum() : arg_count(0),quick_group(1)
|
||||||
{
|
{
|
||||||
mark_as_sum_func();
|
mark_as_sum_func();
|
||||||
@ -54,7 +55,6 @@ public:
|
|||||||
}
|
}
|
||||||
Item_sum(List<Item> &list);
|
Item_sum(List<Item> &list);
|
||||||
~Item_sum() { result_field=0; }
|
~Item_sum() { result_field=0; }
|
||||||
inline void mark_as_sum_func();
|
|
||||||
|
|
||||||
enum Type type() const { return SUM_FUNC_ITEM; }
|
enum Type type() const { return SUM_FUNC_ITEM; }
|
||||||
virtual enum Sumfunctype sum_func () const=0;
|
virtual enum Sumfunctype sum_func () const=0;
|
||||||
|
@ -582,6 +582,9 @@ bool close_thread_table(THD *thd, TABLE **table_ptr);
|
|||||||
void close_temporary_tables(THD *thd);
|
void close_temporary_tables(THD *thd);
|
||||||
TABLE_LIST * find_table_in_list(TABLE_LIST *table,
|
TABLE_LIST * find_table_in_list(TABLE_LIST *table,
|
||||||
const char *db_name, const char *table_name);
|
const char *db_name, const char *table_name);
|
||||||
|
TABLE_LIST * find_real_table_in_list(TABLE_LIST *table,
|
||||||
|
const char *db_name,
|
||||||
|
const char *table_name);
|
||||||
TABLE **find_temporary_table(THD *thd, const char *db, const char *table_name);
|
TABLE **find_temporary_table(THD *thd, const char *db, const char *table_name);
|
||||||
bool close_temporary_table(THD *thd, const char *db, const char *table_name);
|
bool close_temporary_table(THD *thd, const char *db, const char *table_name);
|
||||||
void close_temporary(TABLE *table, bool delete_table=1);
|
void close_temporary(TABLE *table, bool delete_table=1);
|
||||||
|
@ -256,4 +256,5 @@ v/*
|
|||||||
"Cyclic reference on subqueries",
|
"Cyclic reference on subqueries",
|
||||||
"Converting column '%s' from %s to %s",
|
"Converting column '%s' from %s to %s",
|
||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
@ -250,4 +250,5 @@
|
|||||||
"Cyclic reference on subqueries",
|
"Cyclic reference on subqueries",
|
||||||
"Converting column '%s' from %s to %s",
|
"Converting column '%s' from %s to %s",
|
||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
@ -258,4 +258,5 @@
|
|||||||
"Cyclic reference on subqueries",
|
"Cyclic reference on subqueries",
|
||||||
"Converting column '%s' from %s to %s",
|
"Converting column '%s' from %s to %s",
|
||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
@ -247,4 +247,5 @@
|
|||||||
"Cyclic reference on subqueries",
|
"Cyclic reference on subqueries",
|
||||||
"Converting column '%s' from %s to %s",
|
"Converting column '%s' from %s to %s",
|
||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
@ -252,4 +252,5 @@
|
|||||||
"Cyclic reference on subqueries",
|
"Cyclic reference on subqueries",
|
||||||
"Converting column '%s' from %s to %s",
|
"Converting column '%s' from %s to %s",
|
||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
@ -247,4 +247,5 @@
|
|||||||
"Cyclic reference on subqueries",
|
"Cyclic reference on subqueries",
|
||||||
"Converting column '%s' from %s to %s",
|
"Converting column '%s' from %s to %s",
|
||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
@ -250,4 +250,5 @@
|
|||||||
"Cyclic reference on subqueries",
|
"Cyclic reference on subqueries",
|
||||||
"Converting column '%s' from %s to %s",
|
"Converting column '%s' from %s to %s",
|
||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
@ -247,4 +247,5 @@
|
|||||||
"Cyclic reference on subqueries",
|
"Cyclic reference on subqueries",
|
||||||
"Converting column '%s' from %s to %s",
|
"Converting column '%s' from %s to %s",
|
||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
@ -249,4 +249,5 @@
|
|||||||
"Cyclic reference on subqueries",
|
"Cyclic reference on subqueries",
|
||||||
"Converting column '%s' from %s to %s",
|
"Converting column '%s' from %s to %s",
|
||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
@ -247,4 +247,5 @@
|
|||||||
"Cyclic reference on subqueries",
|
"Cyclic reference on subqueries",
|
||||||
"Converting column '%s' from %s to %s",
|
"Converting column '%s' from %s to %s",
|
||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
@ -249,4 +249,5 @@
|
|||||||
"Cyclic reference on subqueries",
|
"Cyclic reference on subqueries",
|
||||||
"Converting column '%s' from %s to %s",
|
"Converting column '%s' from %s to %s",
|
||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
@ -247,4 +247,5 @@
|
|||||||
"Cyclic reference on subqueries",
|
"Cyclic reference on subqueries",
|
||||||
"Converting column '%s' from %s to %s",
|
"Converting column '%s' from %s to %s",
|
||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
@ -249,4 +249,5 @@
|
|||||||
"Cyclic reference on subqueries",
|
"Cyclic reference on subqueries",
|
||||||
"Converting column '%s' from %s to %s",
|
"Converting column '%s' from %s to %s",
|
||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
@ -249,4 +249,5 @@
|
|||||||
"Cyclic reference on subqueries",
|
"Cyclic reference on subqueries",
|
||||||
"Converting column '%s' from %s to %s",
|
"Converting column '%s' from %s to %s",
|
||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
@ -251,4 +251,5 @@
|
|||||||
"Cyclic reference on subqueries",
|
"Cyclic reference on subqueries",
|
||||||
"Converting column '%s' from %s to %s",
|
"Converting column '%s' from %s to %s",
|
||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
@ -247,4 +247,5 @@
|
|||||||
"Cyclic reference on subqueries",
|
"Cyclic reference on subqueries",
|
||||||
"Converting column '%s' from %s to %s",
|
"Converting column '%s' from %s to %s",
|
||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
@ -251,4 +251,5 @@
|
|||||||
"Cyclic reference on subqueries",
|
"Cyclic reference on subqueries",
|
||||||
"Converting column '%s' from %s to %s"
|
"Converting column '%s' from %s to %s"
|
||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
@ -250,4 +250,5 @@
|
|||||||
"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||||
"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> '%s' <20><> %s <20> %s",
|
"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> '%s' <20><> %s <20> %s",
|
||||||
"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '%-.64s' <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (%s)",
|
"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '%-.64s' <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (%s)",
|
||||||
|
"Every derived table must have it's own alias"
|
||||||
"Select %u <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
"Select %u <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||||
|
@ -243,4 +243,5 @@
|
|||||||
"Cyclic reference on subqueries",
|
"Cyclic reference on subqueries",
|
||||||
"Converting column '%s' from %s to %s",
|
"Converting column '%s' from %s to %s",
|
||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
@ -255,4 +255,5 @@
|
|||||||
"Cyclic reference on subqueries",
|
"Cyclic reference on subqueries",
|
||||||
"Converting column '%s' from %s to %s",
|
"Converting column '%s' from %s to %s",
|
||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
@ -248,4 +248,5 @@
|
|||||||
"Cyclic reference on subqueries",
|
"Cyclic reference on subqueries",
|
||||||
"Converting column '%s' from %s to %s",
|
"Converting column '%s' from %s to %s",
|
||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
@ -247,4 +247,5 @@
|
|||||||
"Syklisk referens i subselect",
|
"Syklisk referens i subselect",
|
||||||
"Konvertar kolumn '%s' fr<66>n %s till %s",
|
"Konvertar kolumn '%s' fr<66>n %s till %s",
|
||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
@ -252,4 +252,5 @@
|
|||||||
"<22><><EFBFBD>̦<EFBFBD><CCA6><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> Ц<><D0A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
"<22><><EFBFBD>̦<EFBFBD><CCA6><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> Ц<><D0A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||||
"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '%s' <20> %s <20> %s",
|
"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '%s' <20> %s <20> %s",
|
||||||
"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '%-.64s' <20><> <20>i<EFBFBD><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (%s)",
|
"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '%-.64s' <20><> <20>i<EFBFBD><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (%s)",
|
||||||
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>i<EFBFBD><69><EFBFBD>ii",
|
"Select %u was <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>i<EFBFBD><69><EFBFBD>ii",
|
||||||
|
@ -744,7 +744,7 @@ void close_temporary_tables(THD *thd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Find first suitable table in given list.
|
Find first suitable table by alias in given list.
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
find_table_in_list()
|
find_table_in_list()
|
||||||
@ -767,6 +767,31 @@ TABLE_LIST * find_table_in_list(TABLE_LIST *table,
|
|||||||
return table;
|
return table;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Find real table in given list.
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
find_table_in_list()
|
||||||
|
table - pointer to table list
|
||||||
|
db_name - data base name
|
||||||
|
table_name - table name
|
||||||
|
|
||||||
|
RETURN VALUES
|
||||||
|
NULL Table not found
|
||||||
|
# Pointer to found table.
|
||||||
|
*/
|
||||||
|
|
||||||
|
TABLE_LIST * find_real_table_in_list(TABLE_LIST *table,
|
||||||
|
const char *db_name,
|
||||||
|
const char *table_name)
|
||||||
|
{
|
||||||
|
for (; table; table= table->next)
|
||||||
|
if (!strcmp(table->db, db_name) &&
|
||||||
|
!strcmp(table->real_name, table_name))
|
||||||
|
break;
|
||||||
|
return table;
|
||||||
|
}
|
||||||
|
|
||||||
TABLE **find_temporary_table(THD *thd, const char *db, const char *table_name)
|
TABLE **find_temporary_table(THD *thd, const char *db, const char *table_name)
|
||||||
{
|
{
|
||||||
char key[MAX_DBKEY_LENGTH];
|
char key[MAX_DBKEY_LENGTH];
|
||||||
@ -1894,13 +1919,13 @@ find_field_in_tables(THD *thd, Item_ident *item, TABLE_LIST *tables,
|
|||||||
const char *name=item->field_name;
|
const char *name=item->field_name;
|
||||||
uint length=(uint) strlen(name);
|
uint length=(uint) strlen(name);
|
||||||
|
|
||||||
if (table_name)
|
if (table_name && table_name[0])
|
||||||
{ /* Qualified field */
|
{ /* Qualified field */
|
||||||
bool found_table=0;
|
bool found_table=0;
|
||||||
for (; tables ; tables=tables->next)
|
for (; tables ; tables=tables->next)
|
||||||
{
|
{
|
||||||
if (!strcmp(tables->alias,table_name) &&
|
if (!strcmp(tables->alias,table_name) &&
|
||||||
(!db || !strcmp(db,tables->db)))
|
(!db || !tables->db || !tables->db[0] || !strcmp(db,tables->db)))
|
||||||
{
|
{
|
||||||
found_table=1;
|
found_table=1;
|
||||||
Field *find=find_field_in_table(thd,tables->table,name,length,
|
Field *find=find_field_in_table(thd,tables->table,name,length,
|
||||||
|
@ -51,6 +51,12 @@ int mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds, ORDER *order,
|
|||||||
if (setup_conds(thd, delete_table_list, &conds) ||
|
if (setup_conds(thd, delete_table_list, &conds) ||
|
||||||
setup_ftfuncs(&thd->lex.select_lex))
|
setup_ftfuncs(&thd->lex.select_lex))
|
||||||
DBUG_RETURN(-1);
|
DBUG_RETURN(-1);
|
||||||
|
if (find_real_table_in_list(table_list->next,
|
||||||
|
table_list->db, table_list->real_name))
|
||||||
|
{
|
||||||
|
my_error(ER_INSERT_TABLE_USED, MYF(0), table_list->real_name);
|
||||||
|
DBUG_RETURN(-1);
|
||||||
|
}
|
||||||
|
|
||||||
const_cond= (!conds || conds->const_item());
|
const_cond= (!conds || conds->const_item());
|
||||||
safe_update=test(thd->options & OPTION_SAFE_UPDATES);
|
safe_update=test(thd->options & OPTION_SAFE_UPDATES);
|
||||||
@ -134,9 +140,11 @@ int mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds, ORDER *order,
|
|||||||
deleted=0L;
|
deleted=0L;
|
||||||
init_ftfuncs(thd, &thd->lex.select_lex, 1);
|
init_ftfuncs(thd, &thd->lex.select_lex, 1);
|
||||||
thd->proc_info="updating";
|
thd->proc_info="updating";
|
||||||
while (!(error=info.read_record(&info)) && !thd->killed)
|
while (!(error=info.read_record(&info)) && !thd->killed &&
|
||||||
|
!thd->net.report_error)
|
||||||
{
|
{
|
||||||
if (!(select && select->skipp_record()))
|
// thd->net.report_error is tested to disallow delete row on error
|
||||||
|
if (!(select && select->skipp_record())&& !thd->net.report_error )
|
||||||
{
|
{
|
||||||
if (!(error=table->file->delete_row(table->record[0])))
|
if (!(error=table->file->delete_row(table->record[0])))
|
||||||
{
|
{
|
||||||
@ -199,7 +207,7 @@ cleanup:
|
|||||||
thd->lock=0;
|
thd->lock=0;
|
||||||
}
|
}
|
||||||
delete select;
|
delete select;
|
||||||
if (error >= 0) // Fatal error
|
if (error >= 0 || thd->net.report_error)
|
||||||
send_error(thd,thd->killed ? ER_SERVER_SHUTDOWN: 0);
|
send_error(thd,thd->killed ? ER_SERVER_SHUTDOWN: 0);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -106,10 +106,16 @@ int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit, TABLE_LIST *t)
|
|||||||
t->table=table;
|
t->table=table;
|
||||||
table->derived_select_number= sl->select_number;
|
table->derived_select_number= sl->select_number;
|
||||||
table->tmp_table=TMP_TABLE;
|
table->tmp_table=TMP_TABLE;
|
||||||
if (!lex->describe)
|
if (lex->describe)
|
||||||
|
{
|
||||||
|
if (tables)
|
||||||
|
tables->table_list->table=tables->table; // to fix a problem in EXPLAIN
|
||||||
|
}
|
||||||
|
else
|
||||||
sl->exclude();
|
sl->exclude();
|
||||||
t->db=(char *)"";
|
t->db=(char *)"";
|
||||||
t->derived=(SELECT_LEX *)0; // just in case ...
|
t->derived=(SELECT_LEX *)0; // just in case ...
|
||||||
|
table->file->info(HA_STATUS_VARIABLE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
delete derived_result;
|
delete derived_result;
|
||||||
|
@ -171,6 +171,13 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list, List<Item> &fields,
|
|||||||
table->time_stamp= save_time_stamp;
|
table->time_stamp= save_time_stamp;
|
||||||
goto abort;
|
goto abort;
|
||||||
}
|
}
|
||||||
|
if (find_real_table_in_list(table_list->next,
|
||||||
|
table_list->db, table_list->real_name))
|
||||||
|
{
|
||||||
|
my_error(ER_INSERT_TABLE_USED, MYF(0), table_list->real_name);
|
||||||
|
goto abort;
|
||||||
|
}
|
||||||
|
|
||||||
value_count= values->elements;
|
value_count= values->elements;
|
||||||
while ((values= its++))
|
while ((values= its++))
|
||||||
{
|
{
|
||||||
@ -228,9 +235,10 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list, List<Item> &fields,
|
|||||||
if (fields.elements || !value_count)
|
if (fields.elements || !value_count)
|
||||||
{
|
{
|
||||||
restore_record(table,2); // Get empty record
|
restore_record(table,2); // Get empty record
|
||||||
if (fill_record(fields,*values) || check_null_fields(thd,table))
|
if (fill_record(fields,*values)|| thd->net.report_error ||
|
||||||
|
check_null_fields(thd,table))
|
||||||
{
|
{
|
||||||
if (values_list.elements != 1)
|
if (values_list.elements != 1 && !thd->net.report_error)
|
||||||
{
|
{
|
||||||
info.records++;
|
info.records++;
|
||||||
continue;
|
continue;
|
||||||
@ -245,9 +253,9 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list, List<Item> &fields,
|
|||||||
restore_record(table,2); // Get empty record
|
restore_record(table,2); // Get empty record
|
||||||
else
|
else
|
||||||
table->record[0][0]=table->record[2][0]; // Fix delete marker
|
table->record[0][0]=table->record[2][0]; // Fix delete marker
|
||||||
if (fill_record(table->field,*values))
|
if (fill_record(table->field,*values) || thd->net.report_error)
|
||||||
{
|
{
|
||||||
if (values_list.elements != 1)
|
if (values_list.elements != 1 && ! thd->net.report_error)
|
||||||
{
|
{
|
||||||
info.records++;
|
info.records++;
|
||||||
continue;
|
continue;
|
||||||
@ -1342,7 +1350,7 @@ bool select_insert::send_data(List<Item> &values)
|
|||||||
fill_record(*fields,values);
|
fill_record(*fields,values);
|
||||||
else
|
else
|
||||||
fill_record(table->field,values);
|
fill_record(table->field,values);
|
||||||
if (write_record(table,&info))
|
if (thd->net.report_error || write_record(table,&info))
|
||||||
return 1;
|
return 1;
|
||||||
if (table->next_number_field) // Clear for next record
|
if (table->next_number_field) // Clear for next record
|
||||||
{
|
{
|
||||||
@ -1456,7 +1464,7 @@ bool select_create::send_data(List<Item> &values)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
fill_record(field,values);
|
fill_record(field,values);
|
||||||
if (write_record(table,&info))
|
if (thd->net.report_error ||write_record(table,&info))
|
||||||
return 1;
|
return 1;
|
||||||
if (table->next_number_field) // Clear for next record
|
if (table->next_number_field) // Clear for next record
|
||||||
{
|
{
|
||||||
|
@ -442,13 +442,13 @@ inline static uint int_token(const char *str,uint length)
|
|||||||
// STATE_OPERATOR_OR_IDENT ; last state was an ident, text or number
|
// STATE_OPERATOR_OR_IDENT ; last state was an ident, text or number
|
||||||
// (which can't be followed by a signed number)
|
// (which can't be followed by a signed number)
|
||||||
|
|
||||||
int yylex(void *arg)
|
int yylex(void *arg, void *yythd)
|
||||||
{
|
{
|
||||||
reg1 uchar c;
|
reg1 uchar c;
|
||||||
int tokval;
|
int tokval;
|
||||||
uint length;
|
uint length;
|
||||||
enum lex_states state,prev_state;
|
enum lex_states state,prev_state;
|
||||||
LEX *lex=current_lex;
|
LEX *lex= &(((THD *)yythd)->lex);
|
||||||
YYSTYPE *yylval=(YYSTYPE*) arg;
|
YYSTYPE *yylval=(YYSTYPE*) arg;
|
||||||
|
|
||||||
lex->yylval=yylval; // The global state
|
lex->yylval=yylval; // The global state
|
||||||
@ -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");
|
net_printf(thd,ER_WRONG_USAGE,"UNION","ORDER BY");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
if (sl->linkage == DERIVED_TABLE_TYPE)
|
||||||
|
continue;
|
||||||
for (SELECT_LEX_UNIT *inner= sl->first_inner_unit();
|
for (SELECT_LEX_UNIT *inner= sl->first_inner_unit();
|
||||||
inner;
|
inner;
|
||||||
inner= inner->next_unit())
|
inner= inner->next_unit())
|
||||||
|
@ -60,7 +60,6 @@ static int check_for_max_user_connections(THD *thd, USER_CONN *uc);
|
|||||||
static void decrease_user_connections(USER_CONN *uc);
|
static void decrease_user_connections(USER_CONN *uc);
|
||||||
static bool check_db_used(THD *thd,TABLE_LIST *tables);
|
static bool check_db_used(THD *thd,TABLE_LIST *tables);
|
||||||
static bool check_merge_table_access(THD *thd, char *db, TABLE_LIST *tables);
|
static bool check_merge_table_access(THD *thd, char *db, TABLE_LIST *tables);
|
||||||
static bool check_dup(const char *db, const char *name, TABLE_LIST *tables);
|
|
||||||
static void remove_escape(char *name);
|
static void remove_escape(char *name);
|
||||||
static void refresh_status(void);
|
static void refresh_status(void);
|
||||||
static bool append_file_to_dir(THD *thd, char **filename_ptr,
|
static bool append_file_to_dir(THD *thd, char **filename_ptr,
|
||||||
@ -1803,7 +1802,7 @@ mysql_execute_command(THD *thd)
|
|||||||
select_result *result;
|
select_result *result;
|
||||||
|
|
||||||
if (!(lex->create_info.options & HA_LEX_CREATE_TMP_TABLE) &&
|
if (!(lex->create_info.options & HA_LEX_CREATE_TMP_TABLE) &&
|
||||||
check_dup(tables->db, tables->real_name, tables->next))
|
find_real_table_in_list(tables->next, tables->db, tables->real_name))
|
||||||
{
|
{
|
||||||
net_printf(thd,ER_INSERT_TABLE_USED,tables->real_name);
|
net_printf(thd,ER_INSERT_TABLE_USED,tables->real_name);
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
@ -2059,6 +2058,8 @@ mysql_execute_command(THD *thd)
|
|||||||
(ORDER *) select_lex->order_list.first,
|
(ORDER *) select_lex->order_list.first,
|
||||||
select_lex->select_limit,
|
select_lex->select_limit,
|
||||||
lex->duplicates);
|
lex->duplicates);
|
||||||
|
if (thd->net.report_error)
|
||||||
|
res= -1;
|
||||||
break;
|
break;
|
||||||
case SQLCOM_UPDATE_MULTI:
|
case SQLCOM_UPDATE_MULTI:
|
||||||
if (check_access(thd,UPDATE_ACL,tables->db,&tables->grant.privilege))
|
if (check_access(thd,UPDATE_ACL,tables->db,&tables->grant.privilege))
|
||||||
@ -2118,6 +2119,8 @@ mysql_execute_command(THD *thd)
|
|||||||
SELECT_NO_JOIN_CACHE,
|
SELECT_NO_JOIN_CACHE,
|
||||||
result, unit, select_lex, 0);
|
result, unit, select_lex, 0);
|
||||||
delete result;
|
delete result;
|
||||||
|
if (thd->net.report_error)
|
||||||
|
res= -1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
res= -1; // Error is not sent
|
res= -1; // Error is not sent
|
||||||
@ -2135,6 +2138,8 @@ mysql_execute_command(THD *thd)
|
|||||||
goto error;
|
goto error;
|
||||||
res = mysql_insert(thd,tables,lex->field_list,lex->many_values,
|
res = mysql_insert(thd,tables,lex->field_list,lex->many_values,
|
||||||
lex->duplicates);
|
lex->duplicates);
|
||||||
|
if (thd->net.report_error)
|
||||||
|
res= -1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SQLCOM_REPLACE_SELECT:
|
case SQLCOM_REPLACE_SELECT:
|
||||||
@ -2165,7 +2170,7 @@ mysql_execute_command(THD *thd)
|
|||||||
if (unit->select_limit_cnt < select_lex->select_limit)
|
if (unit->select_limit_cnt < select_lex->select_limit)
|
||||||
unit->select_limit_cnt= HA_POS_ERROR; // No limit
|
unit->select_limit_cnt= HA_POS_ERROR; // No limit
|
||||||
|
|
||||||
if (check_dup(tables->db, tables->real_name, tables->next))
|
if (find_real_table_in_list(tables->next, tables->db, tables->real_name))
|
||||||
{
|
{
|
||||||
net_printf(thd,ER_INSERT_TABLE_USED,tables->real_name);
|
net_printf(thd,ER_INSERT_TABLE_USED,tables->real_name);
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
@ -2179,6 +2184,8 @@ mysql_execute_command(THD *thd)
|
|||||||
if ((result=new select_insert(tables->table,&lex->field_list,
|
if ((result=new select_insert(tables->table,&lex->field_list,
|
||||||
lex->duplicates)))
|
lex->duplicates)))
|
||||||
res=handle_select(thd,lex,result);
|
res=handle_select(thd,lex,result);
|
||||||
|
if (thd->net.report_error)
|
||||||
|
res= -1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
res= -1;
|
res= -1;
|
||||||
@ -2209,6 +2216,8 @@ mysql_execute_command(THD *thd)
|
|||||||
res = mysql_delete(thd,tables, select_lex->where,
|
res = mysql_delete(thd,tables, select_lex->where,
|
||||||
(ORDER*) select_lex->order_list.first,
|
(ORDER*) select_lex->order_list.first,
|
||||||
select_lex->select_limit, select_lex->options);
|
select_lex->select_limit, select_lex->options);
|
||||||
|
if (thd->net.report_error)
|
||||||
|
res= -1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SQLCOM_DELETE_MULTI:
|
case SQLCOM_DELETE_MULTI:
|
||||||
@ -2258,6 +2267,17 @@ mysql_execute_command(THD *thd)
|
|||||||
/* Fix tables-to-be-deleted-from list to point at opened tables */
|
/* Fix tables-to-be-deleted-from list to point at opened tables */
|
||||||
for (auxi=(TABLE_LIST*) aux_tables ; auxi ; auxi=auxi->next)
|
for (auxi=(TABLE_LIST*) aux_tables ; auxi ; auxi=auxi->next)
|
||||||
auxi->table= auxi->table_list->table;
|
auxi->table= auxi->table_list->table;
|
||||||
|
if (&lex->select_lex != lex->all_selects_list)
|
||||||
|
for (TABLE_LIST *t= select_lex->get_table_list();
|
||||||
|
t; t= t->next)
|
||||||
|
{
|
||||||
|
if (find_real_table_in_list(t->table_list->next, t->db, t->real_name))
|
||||||
|
{
|
||||||
|
my_error(ER_INSERT_TABLE_USED, MYF(0), t->real_name);
|
||||||
|
res= -1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
fix_tables_pointers(lex->all_selects_list);
|
fix_tables_pointers(lex->all_selects_list);
|
||||||
if (!thd->fatal_error && (result= new multi_delete(thd,aux_tables,
|
if (!thd->fatal_error && (result= new multi_delete(thd,aux_tables,
|
||||||
table_count)))
|
table_count)))
|
||||||
@ -2270,6 +2290,8 @@ mysql_execute_command(THD *thd)
|
|||||||
select_lex->options | thd->options |
|
select_lex->options | thd->options |
|
||||||
SELECT_NO_JOIN_CACHE,
|
SELECT_NO_JOIN_CACHE,
|
||||||
result, unit, select_lex, 0);
|
result, unit, select_lex, 0);
|
||||||
|
if (thd->net.report_error)
|
||||||
|
res= -1;
|
||||||
delete result;
|
delete result;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -3568,9 +3590,15 @@ TABLE_LIST *st_select_lex::add_table_to_list(Table_ident *table,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!alias) /* Alias is case sensitive */
|
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)))
|
if (!(alias_str=thd->memdup(alias_str,table->table.length+1)))
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
|
}
|
||||||
if (!(ptr = (TABLE_LIST *) thd->calloc(sizeof(TABLE_LIST))))
|
if (!(ptr = (TABLE_LIST *) thd->calloc(sizeof(TABLE_LIST))))
|
||||||
DBUG_RETURN(0); /* purecov: inspected */
|
DBUG_RETURN(0); /* purecov: inspected */
|
||||||
if (table->db.str)
|
if (table->db.str)
|
||||||
@ -3679,16 +3707,6 @@ void add_join_natural(TABLE_LIST *a,TABLE_LIST *b)
|
|||||||
b->natural_join=a;
|
b->natural_join=a;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check if name is used in table list */
|
|
||||||
|
|
||||||
static bool check_dup(const char *db, const char *name, TABLE_LIST *tables)
|
|
||||||
{
|
|
||||||
for (; tables ; tables=tables->next)
|
|
||||||
if (!strcmp(name,tables->real_name) && !strcmp(db,tables->db))
|
|
||||||
return 1;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool reload_acl_and_cache(THD *thd, ulong options, TABLE_LIST *tables)
|
bool reload_acl_and_cache(THD *thd, ulong options, TABLE_LIST *tables)
|
||||||
{
|
{
|
||||||
bool result=0;
|
bool result=0;
|
||||||
|
@ -76,7 +76,7 @@ bool select_union::send_data(List<Item> &values)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
fill_record(table->field,values);
|
fill_record(table->field,values);
|
||||||
if ((write_record(table,&info)))
|
if (thd->net.report_error || write_record(table,&info))
|
||||||
{
|
{
|
||||||
if (thd->net.last_errno == ER_RECORD_FILE_FULL)
|
if (thd->net.last_errno == ER_RECORD_FILE_FULL)
|
||||||
{
|
{
|
||||||
|
@ -86,6 +86,13 @@ int mysql_update(THD *thd,
|
|||||||
setup_conds(thd,update_table_list,&conds)
|
setup_conds(thd,update_table_list,&conds)
|
||||||
|| setup_ftfuncs(&thd->lex.select_lex))
|
|| setup_ftfuncs(&thd->lex.select_lex))
|
||||||
DBUG_RETURN(-1); /* purecov: inspected */
|
DBUG_RETURN(-1); /* purecov: inspected */
|
||||||
|
if (find_real_table_in_list(table_list->next,
|
||||||
|
table_list->db, table_list->real_name))
|
||||||
|
{
|
||||||
|
my_error(ER_INSERT_TABLE_USED, MYF(0), table_list->real_name);
|
||||||
|
DBUG_RETURN(-1);
|
||||||
|
}
|
||||||
|
|
||||||
old_used_keys=table->used_keys; // Keys used in WHERE
|
old_used_keys=table->used_keys; // Keys used in WHERE
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -274,7 +281,7 @@ int mysql_update(THD *thd,
|
|||||||
if (!(select && select->skipp_record()))
|
if (!(select && select->skipp_record()))
|
||||||
{
|
{
|
||||||
store_record(table,1);
|
store_record(table,1);
|
||||||
if (fill_record(fields,values))
|
if (fill_record(fields,values) || thd->net.report_error)
|
||||||
break; /* purecov: inspected */
|
break; /* purecov: inspected */
|
||||||
found++;
|
found++;
|
||||||
if (compare_record(table, query_id))
|
if (compare_record(table, query_id))
|
||||||
@ -598,7 +605,7 @@ bool multi_update::send_data(List<Item> &values)
|
|||||||
// Only one table being updated receives a completely different treatment
|
// Only one table being updated receives a completely different treatment
|
||||||
table->status|= STATUS_UPDATED;
|
table->status|= STATUS_UPDATED;
|
||||||
store_record(table,1);
|
store_record(table,1);
|
||||||
if (fill_record(fields,real_values))
|
if (fill_record(fields,real_values) || thd->net.report_error)
|
||||||
return 1;
|
return 1;
|
||||||
found++;
|
found++;
|
||||||
if (/* compare_record(table, query_id) && */
|
if (/* compare_record(table, query_id) && */
|
||||||
@ -637,7 +644,8 @@ bool multi_update::send_data(List<Item> &values)
|
|||||||
{
|
{
|
||||||
table->status|= STATUS_UPDATED;
|
table->status|= STATUS_UPDATED;
|
||||||
store_record(table,1);
|
store_record(table,1);
|
||||||
if (fill_record(*fields_by_tables[0],values_by_table))
|
if (fill_record(*fields_by_tables[0], values_by_table) ||
|
||||||
|
thd->net.report_error)
|
||||||
return 1;
|
return 1;
|
||||||
found++;
|
found++;
|
||||||
if (/*compare_record(table, query_id) && */
|
if (/*compare_record(table, query_id) && */
|
||||||
@ -660,8 +668,8 @@ bool multi_update::send_data(List<Item> &values)
|
|||||||
table->file->ref_length,
|
table->file->ref_length,
|
||||||
system_charset_info));
|
system_charset_info));
|
||||||
fill_record(tmp_tables[secure_counter]->field,values_by_table);
|
fill_record(tmp_tables[secure_counter]->field,values_by_table);
|
||||||
error= write_record(tmp_tables[secure_counter],
|
error= thd->net.report_error ||
|
||||||
&(infos[secure_counter]));
|
write_record(tmp_tables[secure_counter], &(infos[secure_counter]));
|
||||||
if (error)
|
if (error)
|
||||||
{
|
{
|
||||||
error=-1;
|
error=-1;
|
||||||
@ -767,8 +775,10 @@ int multi_update::do_updates (bool from_send_error)
|
|||||||
table->status|= STATUS_UPDATED;
|
table->status|= STATUS_UPDATED;
|
||||||
store_record(table,1);
|
store_record(table,1);
|
||||||
local_error= (fill_record(*fields_by_tables[counter + 1],list) ||
|
local_error= (fill_record(*fields_by_tables[counter + 1],list) ||
|
||||||
|
thd->net.report_error ||
|
||||||
/* compare_record(table, query_id) || */
|
/* compare_record(table, query_id) || */
|
||||||
table->file->update_row(table->record[1],table->record[0]));
|
table->file->update_row(table->record[1],
|
||||||
|
table->record[0]));
|
||||||
if (local_error)
|
if (local_error)
|
||||||
{
|
{
|
||||||
table->file->print_error(local_error,MYF(0));
|
table->file->print_error(local_error,MYF(0));
|
||||||
|
@ -17,10 +17,12 @@
|
|||||||
/* sql_yacc.yy */
|
/* sql_yacc.yy */
|
||||||
|
|
||||||
%{
|
%{
|
||||||
/* Pass thd as an arg to yyparse(). The type will be void*, so it
|
/* thd is passed as an arg to yyparse(), and subsequently to yylex().
|
||||||
** must be cast to (THD*) when used. Use the YYTHD macro for this.
|
** The type will be void*, so it must be cast to (THD*) when used.
|
||||||
|
** Use the YYTHD macro for this.
|
||||||
*/
|
*/
|
||||||
#define YYPARSE_PARAM yythd
|
#define YYPARSE_PARAM yythd
|
||||||
|
#define YYLEX_PARAM yythd
|
||||||
#define YYTHD ((THD *)yythd)
|
#define YYTHD ((THD *)yythd)
|
||||||
|
|
||||||
#define MYSQL_YACC
|
#define MYSQL_YACC
|
||||||
@ -37,7 +39,7 @@
|
|||||||
#include <myisammrg.h>
|
#include <myisammrg.h>
|
||||||
|
|
||||||
extern void yyerror(const char*);
|
extern void yyerror(const char*);
|
||||||
int yylex(void *yylval);
|
int yylex(void *yylval, void *yythd);
|
||||||
|
|
||||||
#define yyoverflow(A,B,C,D,E,F) if (my_yyoverflow((B),(D),(int*) (F))) { yyerror((char*) (A)); return 2; }
|
#define yyoverflow(A,B,C,D,E,F) if (my_yyoverflow((B),(D),(int*) (F))) { yyerror((char*) (A)); return 2; }
|
||||||
|
|
||||||
@ -2977,7 +2979,7 @@ insert_values:
|
|||||||
lex->lock_option= (using_update_log) ? TL_READ_NO_INSERT : TL_READ;
|
lex->lock_option= (using_update_log) ? TL_READ_NO_INSERT : TL_READ;
|
||||||
mysql_init_select(lex);
|
mysql_init_select(lex);
|
||||||
}
|
}
|
||||||
select_options select_item_list select_from select_lock_type
|
select_options select_item_list opt_select_from select_lock_type
|
||||||
union_clause {}
|
union_clause {}
|
||||||
;
|
;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user