mirror of
https://github.com/MariaDB/server.git
synced 2026-01-06 05:22:24 +03:00
support of simple row subselects (SCRUM)
mysql-test/r/subselect.result: test of simple row subselect fixed table droping mysql-test/t/subselect.test: test of simple row subselect fixed table dropimg sql/item.cc: Item_cache_str fixed to correctly store NULL and copy string value sql/item.h: Item_cache_str fixed to correctly store NULL and copy string value sql/item_cmpfunc.cc: support of simple row subselects sql/item_subselect.cc: support of simple row subselects sql/item_subselect.h: support of simple row subselects sql/sql_class.cc: support of simple row subselects
This commit is contained in:
@@ -52,6 +52,54 @@ a
|
||||
SELECT (SELECT 1) as a FROM (SELECT 1) b WHERE (SELECT a) IS NOT NULL;
|
||||
a
|
||||
1
|
||||
SELECT (SELECT 1,2,3) = ROW(1,2,3);
|
||||
(SELECT 1,2,3) = ROW(1,2,3)
|
||||
1
|
||||
SELECT (SELECT 1,2,3) = ROW(1,2,1);
|
||||
(SELECT 1,2,3) = ROW(1,2,1)
|
||||
0
|
||||
SELECT (SELECT 1,2,3) < ROW(1,2,1);
|
||||
(SELECT 1,2,3) < ROW(1,2,1)
|
||||
0
|
||||
SELECT (SELECT 1,2,3) > ROW(1,2,1);
|
||||
(SELECT 1,2,3) > ROW(1,2,1)
|
||||
1
|
||||
SELECT (SELECT 1,2,3) = ROW(1,2,NULL);
|
||||
(SELECT 1,2,3) = ROW(1,2,NULL)
|
||||
NULL
|
||||
SELECT ROW(1,2,3) = (SELECT 1,2,3);
|
||||
ROW(1,2,3) = (SELECT 1,2,3)
|
||||
1
|
||||
SELECT ROW(1,2,3) = (SELECT 1,2,1);
|
||||
ROW(1,2,3) = (SELECT 1,2,1)
|
||||
0
|
||||
SELECT ROW(1,2,3) < (SELECT 1,2,1);
|
||||
ROW(1,2,3) < (SELECT 1,2,1)
|
||||
0
|
||||
SELECT ROW(1,2,3) > (SELECT 1,2,1);
|
||||
ROW(1,2,3) > (SELECT 1,2,1)
|
||||
1
|
||||
SELECT ROW(1,2,3) = (SELECT 1,2,NULL);
|
||||
ROW(1,2,3) = (SELECT 1,2,NULL)
|
||||
NULL
|
||||
SELECT (SELECT 1.5,2,'a') = ROW(1.5,2,'a');
|
||||
(SELECT 1.5,2,'a') = ROW(1.5,2,'a')
|
||||
1
|
||||
SELECT (SELECT 1.5,2,'a') = ROW(1.5,2,'b');
|
||||
(SELECT 1.5,2,'a') = ROW(1.5,2,'b')
|
||||
0
|
||||
SELECT (SELECT 1.5,2,'a') = ROW('b',2,'b');
|
||||
(SELECT 1.5,2,'a') = ROW('b',2,'b')
|
||||
0
|
||||
SELECT (SELECT 'b',2,'a') = ROW(1.5,2,'a');
|
||||
(SELECT 'b',2,'a') = ROW(1.5,2,'a')
|
||||
0
|
||||
SELECT (SELECT 1.5,2,'a') = ROW(1.5,'c','a');
|
||||
(SELECT 1.5,2,'a') = ROW(1.5,'c','a')
|
||||
0
|
||||
SELECT (SELECT 1.5,'c','a') = ROW(1.5,2,'a');
|
||||
(SELECT 1.5,'c','a') = ROW(1.5,2,'a')
|
||||
0
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8;
|
||||
create table t1 (a int);
|
||||
create table t2 (a int, b int);
|
||||
@@ -602,7 +650,7 @@ CREATE TABLE t1 (id int(11) default NULL, KEY id (id)) TYPE=MyISAM CHARSET=latin
|
||||
INSERT INTO t1 values (1),(1);
|
||||
UPDATE t SET id=(SELECT * FROM t1);
|
||||
Subselect returns more than 1 record
|
||||
drop table t;
|
||||
drop table t, t1;
|
||||
create table t (a int);
|
||||
insert into t values (1),(2),(3);
|
||||
select 1 IN (SELECT * from t);
|
||||
@@ -705,3 +753,23 @@ select 10.5 > ANY (SELECT * from t);
|
||||
10.5 > ANY (SELECT * from t)
|
||||
1
|
||||
drop table t;
|
||||
create table t1 (a int, b int, c varchar(10));
|
||||
create table t2 (a int);
|
||||
insert into t1 values (1,2,'a'),(2,3,'b'),(3,4,'c');
|
||||
insert into t2 values (1),(2),(NULL);
|
||||
select a, (select a,b,c from t1 where t1.a=t2.a) = ROW(a,2,'a'),(select c from t1 where a=t2.a) from t2;
|
||||
a (select a,b,c from t1 where t1.a=t2.a) = ROW(a,2,'a') (select c from t1 where a=t2.a)
|
||||
1 1 a
|
||||
2 0 b
|
||||
NULL NULL NULL
|
||||
select a, (select a,b,c from t1 where t1.a=t2.a) = ROW(a,3,'b'),(select c from t1 where a=t2.a) from t2;
|
||||
a (select a,b,c from t1 where t1.a=t2.a) = ROW(a,3,'b') (select c from t1 where a=t2.a)
|
||||
1 0 a
|
||||
2 1 b
|
||||
NULL NULL NULL
|
||||
select a, (select a,b,c from t1 where t1.a=t2.a) = ROW(a,4,'c'),(select c from t1 where a=t2.a) from t2;
|
||||
a (select a,b,c from t1 where t1.a=t2.a) = ROW(a,4,'c') (select c from t1 where a=t2.a)
|
||||
1 0 a
|
||||
2 0 b
|
||||
NULL NULL NULL
|
||||
drop table t1,t2;
|
||||
|
||||
@@ -26,6 +26,22 @@ select (SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE(1));
|
||||
SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE((SELECT 1));
|
||||
SELECT (SELECT 1) as a FROM (SELECT 1) b WHERE (SELECT a) IS NULL;
|
||||
SELECT (SELECT 1) as a FROM (SELECT 1) b WHERE (SELECT a) IS NOT NULL;
|
||||
SELECT (SELECT 1,2,3) = ROW(1,2,3);
|
||||
SELECT (SELECT 1,2,3) = ROW(1,2,1);
|
||||
SELECT (SELECT 1,2,3) < ROW(1,2,1);
|
||||
SELECT (SELECT 1,2,3) > ROW(1,2,1);
|
||||
SELECT (SELECT 1,2,3) = ROW(1,2,NULL);
|
||||
SELECT ROW(1,2,3) = (SELECT 1,2,3);
|
||||
SELECT ROW(1,2,3) = (SELECT 1,2,1);
|
||||
SELECT ROW(1,2,3) < (SELECT 1,2,1);
|
||||
SELECT ROW(1,2,3) > (SELECT 1,2,1);
|
||||
SELECT ROW(1,2,3) = (SELECT 1,2,NULL);
|
||||
SELECT (SELECT 1.5,2,'a') = ROW(1.5,2,'a');
|
||||
SELECT (SELECT 1.5,2,'a') = ROW(1.5,2,'b');
|
||||
SELECT (SELECT 1.5,2,'a') = ROW('b',2,'b');
|
||||
SELECT (SELECT 'b',2,'a') = ROW(1.5,2,'a');
|
||||
SELECT (SELECT 1.5,2,'a') = ROW(1.5,'c','a');
|
||||
SELECT (SELECT 1.5,'c','a') = ROW(1.5,2,'a');
|
||||
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8;
|
||||
create table t1 (a int);
|
||||
@@ -363,7 +379,7 @@ CREATE TABLE t1 (id int(11) default NULL, KEY id (id)) TYPE=MyISAM CHARSET=latin
|
||||
INSERT INTO t1 values (1),(1);
|
||||
-- error 1240
|
||||
UPDATE t SET id=(SELECT * FROM t1);
|
||||
drop table t;
|
||||
drop table t, t1;
|
||||
|
||||
|
||||
#NULL test
|
||||
@@ -409,3 +425,12 @@ select 10.5 > ALL (SELECT * from t);
|
||||
select 1.5 > ANY (SELECT * from t);
|
||||
select 10.5 > ANY (SELECT * from t);
|
||||
drop table t;
|
||||
|
||||
create table t1 (a int, b int, c varchar(10));
|
||||
create table t2 (a int);
|
||||
insert into t1 values (1,2,'a'),(2,3,'b'),(3,4,'c');
|
||||
insert into t2 values (1),(2),(NULL);
|
||||
select a, (select a,b,c from t1 where t1.a=t2.a) = ROW(a,2,'a'),(select c from t1 where a=t2.a) from t2;
|
||||
select a, (select a,b,c from t1 where t1.a=t2.a) = ROW(a,3,'b'),(select c from t1 where a=t2.a) from t2;
|
||||
select a, (select a,b,c from t1 where t1.a=t2.a) = ROW(a,4,'c'),(select c from t1 where a=t2.a) from t2;
|
||||
drop table t1,t2;
|
||||
|
||||
Reference in New Issue
Block a user