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
|
#
# Tests for DELETE FROM <table> ... RETURNING <expr>,...
#
--disable_warnings
drop table if exists t1,t2;
drop view if exists v1;
drop procedure if exists p1;
--enable_warnings
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 <table> ... RETURNING *
DELETE FROM t1 WHERE a=2 RETURNING * ;
SELECT * FROM t1;
INSERT INTO t1 VALUES (2,'BB'), (2,'bb');
# DELETE FROM <table> ... RETURNING <col>
DELETE FROM t1 WHERE a=2 RETURNING b;
SELECT * FROM t1;
# DELETE FROM <table> ... RETURNING <not existing col>
--error ER_BAD_FIELD_ERROR
DELETE FROM t1 WHERE a=2 RETURNING c;
INSERT INTO t1 VALUES (2,'BB'), (2,'bb');
# DELETE FROM <table> ... RETURNING <col>, <expr>
DELETE FROM t1 WHERE a=2 RETURNING a, UPPER(b);
SELECT * FROM t1;
INSERT INTO t1 VALUES (2,'BB'), (2,'bb');
# DELETE FROM <table> ... RETURNING <col> with no rows to be deleted
DELETE FROM t1 WHERE a=6 RETURNING b;
SELECT * FROM t1;
# DELETE FROM <table> ... RETURNING <expr with aggr function>
--error ER_INVALID_GROUP_FUNC_USE
DELETE FROM t1 WHERE a=2 RETURNING MAX(b);
# DELETE FROM <table> ... RETURNING <expr with subquery>
DELETE FROM t1 WHERE a < 5 RETURNING a, (SELECT MIN(c) FROM t2 WHERE c=a+1);
SELECT * FROM t1;
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 * FROM t2;
DELETE FROM t2;
INSERT INTO t2 SELECT * FROM t2c;
# DELETE FROM <table> ... RETURNING <expr with function invocation>
DELIMITER |;
CREATE FUNCTION f(arg INT) RETURNS TEXT
BEGIN
RETURN (SELECT GROUP_CONCAT(b) FROM t1 WHERE a=arg);
END|
DELIMITER ;|
DELETE FROM t2 WHERE c < 5 RETURNING f(c);
SELECT * FROM t2;
DELETE FROM t2;
INSERT INTO t2 SELECT * FROM t2c;
DROP FUNCTION f;
# DELETE FROM <view> ... RETURNING <col>, <col>
DELETE FROM v1 WHERE a < 5 RETURNING * ;
SELECT * FROM t1;
DELETE FROM t1;
INSERT INTO t1 SELECT * FROM t1c;
# DELETE FROM <view> ... RETURNING <expr>
CREATE VIEW v11(a,c) AS SELECT a, COUNT(b) FROM t1 GROUP BY a;
-- error ER_NON_UPDATABLE_TABLE
DELETE FROM v11 WHERE a < 5 RETURNING * ;
DROP VIEW v11;
# prepared DELETE FROM <table> ... RETURNING <expr>
PREPARE stmt FROM
"DELETE FROM t1 WHERE a=2 ORDER BY b LIMIT 1 RETURNING a, UPPER(b)";
EXECUTE stmt;
SELECT * FROM t1;
EXECUTE stmt;
SELECT * FROM t1;
DEALLOCATE PREPARE stmt;
# Cleanup
DROP VIEW v1;
DROP TABLE t1,t2;
DROP TABLE t1c,t2c;
--echo #
--echo # Bug mdev-4918: DELETE ... RETURNING subquery with more than 1 row
--echo #
CREATE TABLE t1 (i1 int);
INSERT INTO t1 VALUES (1),(2);
CREATE TABLE t2 (i2 int);
INSERT INTO t2 VALUES (1),(2);
--error ER_SUBQUERY_NO_1_ROW
DELETE FROM t1 ORDER BY i1 RETURNING ( SELECT i2 FROM t2 );
DROP TABLE t1,t2;
--echo #
--echo # MDEV-4919: Packets out of order on a SELECT after calling a procedure with DELETE .. RETURNING
--echo #
CREATE TABLE t1 (i INT);
INSERT INTO t1 VALUES (1),(2);
--delimiter |
CREATE PROCEDURE p1 (a INT)
BEGIN
DELETE FROM t1 WHERE i = a RETURNING *;
INSERT INTO t1 VALUES (a);
END |
--delimiter ;
CALL p1(1);
SELECT * FROM t1;
DROP PROCEDURE p1;
DROP TABLE t1;
|