Skip to content

Commit

Permalink
subqueries in RETURNING
Browse files Browse the repository at this point in the history
  • Loading branch information
rucha174 committed Jun 28, 2019
1 parent 027166e commit 2363cb3
Show file tree
Hide file tree
Showing 2 changed files with 185 additions and 0 deletions.
114 changes: 114 additions & 0 deletions mysql-test/main/insert_returning_subqueries1.result
@@ -0,0 +1,114 @@
drop table if exists t1,t2;
CREATE TABLE t1(id1 INT,val1 VARCHAR(1));
CREATE TABLE t2(id2 INT,val2 VARCHAR(1));
#Simple insert statement
INSERT INTO t1 (id1,val1) VALUES (1,'a'),(1,'b'),(1,'c'),(2,'d'),(3,'e'),(4,'f'),(5,'g'),(6,'h'),(7,'h');
SELECT * FROM t1;
id1 val1
1 a
1 b
1 c
2 d
3 e
4 f
5 g
6 h
7 h
#Simple insert statement
INSERT INTO t2(id2,val2) VALUES(1,'a') RETURNING id2,(SELECT id1 FROM t1 WHERE val1='b');
id2 (SELECT id1 FROM t1 WHERE val1='b')
1 1
INSERT INTO t2(id2,val2) VALUES(2,'b') RETURNING id2,UPPER(val2);
id2 UPPER(val2)
2 B
INSERT INTO t2(id2,val2) VALUES (2,'b') RETURNING (SELECT GROUP_CONCAT(val1) FROM t1 WHERE id1=1);
(SELECT GROUP_CONCAT(val1) FROM t1 WHERE id1=1)
a,b,c
INSERT INTO t2(id2,val2) VALUES(2,'b') RETURNING (SELECT GROUP_CONCAT(val1) FROM t1 GROUP BY id1 HAVING id1=id1+1);
(SELECT GROUP_CONCAT(val1) FROM t1 GROUP BY id1 HAVING id1=id1+1)
NULL
SELECT * FROM t2;
id2 val2
1 a
2 b
2 b
2 b
TRUNCATE TABLE t2;
SELECT * FROM t2;
id2 val2
#multiple values in one insert statement
INSERT INTO t2 VALUES (1,'a'),(2,'b') RETURNING id2,(SELECT id1 FROM t1 WHERE val1='b');
id2 (SELECT id1 FROM t1 WHERE val1='b')
1 1
2 1
INSERT INTO t2 VALUES (3,'c'),(4,'d') RETURNING id2,UPPER(val2);
id2 UPPER(val2)
3 C
4 D
INSERT INTO t2 VALUES (5,'e'),(6,'f') RETURNING (SELECT GROUP_CONCAT(val1) FROM t1 WHERE id1=1);
(SELECT GROUP_CONCAT(val1) FROM t1 WHERE id1=1)
a,b,c
a,b,c
INSERT INTO t2 VALUES (7,'g'),(8,'h') RETURNING (SELECT GROUP_CONCAT(val1) FROM t1 GROUP BY id1 HAVING id1=id1+1);
(SELECT GROUP_CONCAT(val1) FROM t1 GROUP BY id1 HAVING id1=id1+1)
NULL
NULL
SELECT * FROM t2;
id2 val2
1 a
2 b
3 c
4 d
5 e
6 f
7 g
8 h
TRUNCATE TABLE t2;
SELECT * FROM t2;
id2 val2
# INSERT...ON DULPICATE KEY UPDATE
CREATE TABLE ins_duplicate (id INT PRIMARY KEY, val VARCHAR(1));
INSERT INTO ins_duplicate(id,val) VALUES (1,'a');
INSERT INTO ins_duplicate VALUES (2,'b') ON DUPLICATE KEY UPDATE val='b' RETURNING id,(SELECT id1 FROM t1 WHERE val1='b');
id (SELECT id1 FROM t1 WHERE val1='b')
2 1
INSERT INTO ins_duplicate VALUES (2,'b') ON DUPLICATE KEY UPDATE val='c' RETURNING id,UPPER(val);
id UPPER(val)
2 B
INSERT INTO ins_duplicate VALUES (2,'b') ON DUPLICATE KEY UPDATE val='d' RETURNING (SELECT GROUP_CONCAT(val1) FROM t1 WHERE id1=1);
(SELECT GROUP_CONCAT(val1) FROM t1 WHERE id1=1)
a,b,c
INSERT INTO ins_duplicate VALUES (2,'b') ON DUPLICATE KEY UPDATE val='e' RETURNING (SELECT GROUP_CONCAT(val1) FROM t1 GROUP BY id1 HAVING id1=id1+1);
(SELECT GROUP_CONCAT(val1) FROM t1 GROUP BY id1 HAVING id1=id1+1)
NULL
SELECT * FROM ins_duplicate;
id val
1 a
2 e
# INSERT...SET
INSERT INTO t2 SET id2=1, val2='a' RETURNING id2,(SELECT id1 FROM t1 WHERE val1='b');
id2 (SELECT id1 FROM t1 WHERE val1='b')
1 1
INSERT INTO t2 SET id2=2, val2='b' RETURNING id2,UPPER(val2);
id2 UPPER(val2)
2 B
INSERT INTO t2 SET id2=3, val2='c' RETURNING (SELECT GROUP_CONCAT(val1) FROM t1 WHERE id1=1);
(SELECT GROUP_CONCAT(val1) FROM t1 WHERE id1=1)
a,b,c
INSERT INTO t2 SET id2=4, val2='d' RETURNING (SELECT GROUP_CONCAT(val1) FROM t1 GROUP BY id1 HAVING id1=id1+1);
(SELECT GROUP_CONCAT(val1) FROM t1 GROUP BY id1 HAVING id1=id1+1)
NULL
SELECT * FROM t2;
id2 val2
1 a
2 b
3 c
4 d
TRUNCATE TABLE t2;
SELECT * FROM t2;
id2 val2
Droping t1 and ins_duplicate
DROP TABLE t1;
DROP TABLE ins_duplicate;
DROP TABLE t2;
#End of test case
71 changes: 71 additions & 0 deletions mysql-test/main/insert_returning_subqueries1.test
@@ -0,0 +1,71 @@
#
# Test for INSERT...RETURNING with subqueries
#

--disable_warnings
drop table if exists t1,t2;
--enable_warnings

CREATE TABLE t1(id1 INT,val1 VARCHAR(1));
CREATE TABLE t2(id2 INT,val2 VARCHAR(1));

--echo #Simple insert statement
INSERT INTO t1 (id1,val1) VALUES (1,'a'),(1,'b'),(1,'c'),(2,'d'),(3,'e'),(4,'f'),(5,'g'),(6,'h'),(7,'h');
SELECT * FROM t1;

#
#Simple insert statement
#
--echo #Simple insert statement
INSERT INTO t2(id2,val2) VALUES(1,'a') RETURNING id2,(SELECT id1 FROM t1 WHERE val1='b');
INSERT INTO t2(id2,val2) VALUES(2,'b') RETURNING id2,UPPER(val2);
INSERT INTO t2(id2,val2) VALUES (2,'b') RETURNING (SELECT GROUP_CONCAT(val1) FROM t1 WHERE id1=1);
INSERT INTO t2(id2,val2) VALUES(2,'b') RETURNING (SELECT GROUP_CONCAT(val1) FROM t1 GROUP BY id1 HAVING id1=id1+1);
SELECT * FROM t2;
TRUNCATE TABLE t2;
SELECT * FROM t2;

#
#multiple values in one insert statement
#
--echo #multiple values in one insert statement
INSERT INTO t2 VALUES (1,'a'),(2,'b') RETURNING id2,(SELECT id1 FROM t1 WHERE val1='b');
INSERT INTO t2 VALUES (3,'c'),(4,'d') RETURNING id2,UPPER(val2);
INSERT INTO t2 VALUES (5,'e'),(6,'f') RETURNING (SELECT GROUP_CONCAT(val1) FROM t1 WHERE id1=1);
INSERT INTO t2 VALUES (7,'g'),(8,'h') RETURNING (SELECT GROUP_CONCAT(val1) FROM t1 GROUP BY id1 HAVING id1=id1+1);
SELECT * FROM t2;
TRUNCATE TABLE t2;
SELECT * FROM t2;

#
#INSERT...ON DULPICATE KEY UPDATE
#
--echo # INSERT...ON DULPICATE KEY UPDATE
CREATE TABLE ins_duplicate (id INT PRIMARY KEY, val VARCHAR(1));
INSERT INTO ins_duplicate(id,val) VALUES (1,'a');
INSERT INTO ins_duplicate VALUES (2,'b') ON DUPLICATE KEY UPDATE val='b' RETURNING id,(SELECT id1 FROM t1 WHERE val1='b');
INSERT INTO ins_duplicate VALUES (2,'b') ON DUPLICATE KEY UPDATE val='c' RETURNING id,UPPER(val);
INSERT INTO ins_duplicate VALUES (2,'b') ON DUPLICATE KEY UPDATE val='d' RETURNING (SELECT GROUP_CONCAT(val1) FROM t1 WHERE id1=1);
INSERT INTO ins_duplicate VALUES (2,'b') ON DUPLICATE KEY UPDATE val='e' RETURNING (SELECT GROUP_CONCAT(val1) FROM t1 GROUP BY id1 HAVING id1=id1+1);
SELECT * FROM ins_duplicate;

#
# INSERT...SET
#
--echo # INSERT...SET
INSERT INTO t2 SET id2=1, val2='a' RETURNING id2,(SELECT id1 FROM t1 WHERE val1='b');
INSERT INTO t2 SET id2=2, val2='b' RETURNING id2,UPPER(val2);
INSERT INTO t2 SET id2=3, val2='c' RETURNING (SELECT GROUP_CONCAT(val1) FROM t1 WHERE id1=1);
INSERT INTO t2 SET id2=4, val2='d' RETURNING (SELECT GROUP_CONCAT(val1) FROM t1 GROUP BY id1 HAVING id1=id1+1);
SELECT * FROM t2;
TRUNCATE TABLE t2;
SELECT * FROM t2;

--echo Droping t1 and ins_duplicate
DROP TABLE t1;
DROP TABLE ins_duplicate;
DROP TABLE t2;

#
--echo #End of test case
#

0 comments on commit 2363cb3

Please sign in to comment.