1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201
|
drop table if exists t1,t2;
drop view if exists v1;
drop procedure if exists p1;
CREATE TABLE t1 (a int, b varchar(32));
INSERT INTO t1 VALUES
(7,'ggggggg'), (1,'a'), (3,'ccc'),
(4,'dddd'), (1,'A'), (2,'BB'), (4,'DDDD'),
(5,'EEEEE'), (7,'GGGGGGG'), (2,'bb');
CREATE TABLE t1c SELECT * FROM t1;
CREATE TABLE t2 (c int);
INSERT INTO t2 VALUES
(4), (5), (7), (1);
CREATE TABLE t2c SELECT * FROM t2;
CREATE VIEW v1 AS SELECT a, UPPER(b) FROM t1;
DELETE FROM t1 WHERE a=2 RETURNING * ;
a b
2 BB
2 bb
SELECT * FROM t1;
a b
7 ggggggg
1 a
3 ccc
4 dddd
1 A
4 DDDD
5 EEEEE
7 GGGGGGG
INSERT INTO t1 VALUES (2,'BB'), (2,'bb');
DELETE FROM t1 WHERE a=2 RETURNING b;
b
bb
BB
SELECT * FROM t1;
a b
7 ggggggg
1 a
3 ccc
4 dddd
1 A
4 DDDD
5 EEEEE
7 GGGGGGG
DELETE FROM t1 WHERE a=2 RETURNING c;
ERROR 42S22: Unknown column 'c' in 'field list'
INSERT INTO t1 VALUES (2,'BB'), (2,'bb');
DELETE FROM t1 WHERE a=2 RETURNING a, UPPER(b);
a UPPER(b)
2 BB
2 BB
SELECT * FROM t1;
a b
7 ggggggg
1 a
3 ccc
4 dddd
1 A
4 DDDD
5 EEEEE
7 GGGGGGG
INSERT INTO t1 VALUES (2,'BB'), (2,'bb');
DELETE FROM t1 WHERE a=6 RETURNING b;
b
SELECT * FROM t1;
a b
7 ggggggg
1 a
3 ccc
4 dddd
1 A
2 bb
4 DDDD
5 EEEEE
7 GGGGGGG
2 BB
DELETE FROM t1 WHERE a=2 RETURNING MAX(b);
ERROR HY000: Invalid use of group function
DELETE FROM t1 WHERE a < 5 RETURNING a, (SELECT MIN(c) FROM t2 WHERE c=a+1);
a (SELECT MIN(c) FROM t2 WHERE c=a+1)
1 NULL
3 4
4 5
1 NULL
2 NULL
4 5
2 NULL
SELECT * FROM t1;
a b
7 ggggggg
5 EEEEE
7 GGGGGGG
DELETE FROM t1;
INSERT INTO t1 SELECT * FROM t1c;
DELETE FROM t2 WHERE c < 5
RETURNING (SELECT GROUP_CONCAT(b) FROM t1 GROUP BY a HAVING a=c);
(SELECT GROUP_CONCAT(b) FROM t1 GROUP BY a HAVING a=c)
dddd,DDDD
a,A
SELECT * FROM t2;
c
5
7
DELETE FROM t2;
INSERT INTO t2 SELECT * FROM t2c;
CREATE FUNCTION f(arg INT) RETURNS TEXT
BEGIN
RETURN (SELECT GROUP_CONCAT(b) FROM t1 WHERE a=arg);
END|
DELETE FROM t2 WHERE c < 5 RETURNING f(c);
f(c)
dddd,DDDD
a,A
SELECT * FROM t2;
c
5
7
DELETE FROM t2;
INSERT INTO t2 SELECT * FROM t2c;
DROP FUNCTION f;
DELETE FROM v1 WHERE a < 5 RETURNING * ;
a UPPER(b)
1 A
3 CCC
4 DDDD
1 A
2 BB
4 DDDD
2 BB
SELECT * FROM t1;
a b
7 ggggggg
5 EEEEE
7 GGGGGGG
DELETE FROM t1;
INSERT INTO t1 SELECT * FROM t1c;
CREATE VIEW v11(a,c) AS SELECT a, COUNT(b) FROM t1 GROUP BY a;
DELETE FROM v11 WHERE a < 5 RETURNING * ;
ERROR HY000: The target table v11 of the DELETE is not updatable
DROP VIEW v11;
PREPARE stmt FROM
"DELETE FROM t1 WHERE a=2 ORDER BY b LIMIT 1 RETURNING a, UPPER(b)";
EXECUTE stmt;
a UPPER(b)
2 BB
SELECT * FROM t1;
a b
7 ggggggg
1 a
3 ccc
4 dddd
1 A
4 DDDD
5 EEEEE
7 GGGGGGG
2 bb
EXECUTE stmt;
a UPPER(b)
2 BB
SELECT * FROM t1;
a b
7 ggggggg
1 a
3 ccc
4 dddd
1 A
4 DDDD
5 EEEEE
7 GGGGGGG
DEALLOCATE PREPARE stmt;
DROP VIEW v1;
DROP TABLE t1,t2;
DROP TABLE t1c,t2c;
#
# Bug mdev-4918: DELETE ... RETURNING subquery with more than 1 row
#
CREATE TABLE t1 (i1 int);
INSERT INTO t1 VALUES (1),(2);
CREATE TABLE t2 (i2 int);
INSERT INTO t2 VALUES (1),(2);
DELETE FROM t1 ORDER BY i1 RETURNING ( SELECT i2 FROM t2 );
ERROR 21000: Subquery returns more than 1 row
DROP TABLE t1,t2;
#
# MDEV-4919: Packets out of order on a SELECT after calling a procedure with DELETE .. RETURNING
#
CREATE TABLE t1 (i INT);
INSERT INTO t1 VALUES (1),(2);
CREATE PROCEDURE p1 (a INT)
BEGIN
DELETE FROM t1 WHERE i = a RETURNING *;
INSERT INTO t1 VALUES (a);
END |
CALL p1(1);
i
1
SELECT * FROM t1;
i
1
2
DROP PROCEDURE p1;
DROP TABLE t1;
|