Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions mysql-test/main/delete_returning.result
Original file line number Diff line number Diff line change
Expand Up @@ -227,3 +227,10 @@ show status like "Rows_sent";
Variable_name Value
Rows_sent 3
drop table t1;
#
# MDEV-39563 Implement UPDATE ... RETURNING ... INTO
#
DELETE FROM t1 RETURNING a INTO @a;
ERROR HY000: 'RETURNING..INTO' is not allowed in this context
ANALYZE DELETE FROM t1 RETURNING a INTO @a;
ERROR HY000: 'RETURNING..INTO' is not allowed in this context
10 changes: 10 additions & 0 deletions mysql-test/main/delete_returning.test
Original file line number Diff line number Diff line change
Expand Up @@ -183,3 +183,13 @@ flush status;
delete from t1 where a between 1 and 3 returning a,b;
show status like "Rows_sent";
drop table t1;

--echo #
--echo # MDEV-39563 Implement UPDATE ... RETURNING ... INTO
--echo #

--error ER_NOT_ALLOWED_IN_THIS_CONTEXT
DELETE FROM t1 RETURNING a INTO @a;

--error ER_NOT_ALLOWED_IN_THIS_CONTEXT
ANALYZE DELETE FROM t1 RETURNING a INTO @a;
5 changes: 5 additions & 0 deletions mysql-test/main/insert_returning.result
Original file line number Diff line number Diff line change
Expand Up @@ -705,3 +705,8 @@ show status like "Rows_sent";
Variable_name Value
Rows_sent 6
drop table t1;
#
# MDEV-39563 Implement UPDATE ... RETURNING ... INTO
#
INSERT INTO t1 VALUES (10) RETURNING a INTO @a;
ERROR HY000: 'RETURNING..INTO' is not allowed in this context
7 changes: 7 additions & 0 deletions mysql-test/main/insert_returning.test
Original file line number Diff line number Diff line change
Expand Up @@ -412,3 +412,10 @@ insert into t1 values (1,2),(2,4) returning a,b;
insert into t1 select seq,seq from seq_10_to_13 returning a,b;
show status like "Rows_sent";
drop table t1;

--echo #
--echo # MDEV-39563 Implement UPDATE ... RETURNING ... INTO
--echo #

--error ER_NOT_ALLOWED_IN_THIS_CONTEXT
INSERT INTO t1 VALUES (10) RETURNING a INTO @a;
7 changes: 7 additions & 0 deletions mysql-test/main/replace_returning.result
Original file line number Diff line number Diff line change
Expand Up @@ -260,3 +260,10 @@ ERROR 21000: Subquery returns more than 1 row
REPLACE INTO t2(id2,val2) SELECT t1.* FROM t1 WHERE id1=2 RETURNING t1.*;
ERROR 42S02: Unknown table 'test.t1'
DROP TABLE t1,t2;
#
# MDEV-39563 Implement UPDATE ... RETURNING ... INTO
#
REPLACE t1 SET a=a+1 RETURNING a INTO @a;
ERROR HY000: 'RETURNING..INTO' is not allowed in this context
ANALYZE REPLACE INTO t1 VALUES (a=11, 'b11') RETURNING a,b INTO @a, @b;
ERROR HY000: 'RETURNING..INTO' is not allowed in this context
11 changes: 11 additions & 0 deletions mysql-test/main/replace_returning.test
Original file line number Diff line number Diff line change
Expand Up @@ -190,3 +190,14 @@ REPLACE INTO t2(id2,val2) SELECT t1.* FROM t1 WHERE id1=2 RETURNING t1.*;


DROP TABLE t1,t2;


--echo #
--echo # MDEV-39563 Implement UPDATE ... RETURNING ... INTO
--echo #

--error ER_NOT_ALLOWED_IN_THIS_CONTEXT
REPLACE t1 SET a=a+1 RETURNING a INTO @a;

--error ER_NOT_ALLOWED_IN_THIS_CONTEXT
ANALYZE REPLACE INTO t1 VALUES (a=11, 'b11') RETURNING a,b INTO @a, @b;
140 changes: 140 additions & 0 deletions mysql-test/main/select_into_row.result
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
#
# MDEV-40790 SELECT INTO row_type_of.field crashes the server
#
# Into an explicit ROW variable
CREATE TABLE t1 (a INT,b VARCHAR(10));
INSERT INTO t1 VALUES (10,'b10');
CREATE PROCEDURE p1()
BEGIN
DECLARE r0 ROW (a INT, b VARCHAR(10));
SELECT a,b INTO r0 FROM t1;
SELECT r0.a, r0.b;
END;
$$
CALL p1;
r0.a r0.b
10 b10
DROP PROCEDURE p1;
DROP TABLE t1;
# Into an explicit ROW field variable
CREATE TABLE t1 (a INT,b VARCHAR(10));
INSERT INTO t1 VALUES (10,'b10');
CREATE PROCEDURE p1()
BEGIN
DECLARE r0 ROW (a INT, b VARCHAR(10));
SELECT a,b INTO r0.a,r0.b FROM t1;
SELECT r0.a, r0.b;
END;
$$
CALL p1;
r0.a r0.b
10 b10
DROP PROCEDURE p1;
DROP TABLE t1;
# Into an explicit ROW field variable - non-existing field
CREATE TABLE t1 (a INT,b VARCHAR(10));
INSERT INTO t1 VALUES (10,'b10');
CREATE PROCEDURE p1()
BEGIN
DECLARE r0 ROW (a INT, b VARCHAR(10));
SELECT a,b INTO r0.a,r0.b1_non_existing FROM t1;
END;
$$
ERROR HY000: Row variable 'r0' does not have a field 'b1_non_existing'
DROP TABLE t1;
# Into a `ROW TYPE OF table1` variable
CREATE TABLE t1 (a INT,b VARCHAR(10));
INSERT INTO t1 VALUES (10,'b10');
CREATE PROCEDURE p1()
BEGIN
DECLARE r0 ROW TYPE OF t1;
SELECT a,b INTO r0 FROM t1;
SELECT r0.a, r0.b;
END;
$$
CALL p1;
r0.a r0.b
10 b10
DROP PROCEDURE p1;
DROP TABLE t1;
# Into a `ROW TYPE OF table1` field variable
CREATE TABLE t1 (a INT,b VARCHAR(10));
INSERT INTO t1 VALUES (10,'b10');
CREATE PROCEDURE p1()
BEGIN
DECLARE r0 ROW TYPE OF t1;
SELECT a,b INTO r0.a,r0.b FROM t1;
SELECT r0.a, r0.b;
END;
$$
CALL p1;
r0.a r0.b
10 b10
DROP PROCEDURE p1;
DROP TABLE t1;
# Into a `ROW TYPE OF table1` field variable - non-existing field
CREATE TABLE t1 (a INT,b VARCHAR(10));
INSERT INTO t1 VALUES (10,'b10');
CREATE PROCEDURE p1()
BEGIN
DECLARE r0 ROW TYPE OF t1;
SELECT a,b INTO r0.a,r0.b1_non_existing FROM t1;
END;
$$
CALL p1;
ERROR HY000: Row variable 'r0' does not have a field 'b1_non_existing'
DROP PROCEDURE p1;
DROP TABLE t1;
# Into a `ROW TYPE OF cursor1` variable
CREATE TABLE t1 (a INT,b VARCHAR(10));
INSERT INTO t1 VALUES (10,'b10');
CREATE PROCEDURE p1()
BEGIN
DECLARE c1 CURSOR FOR SELECT * FROM t1;
BEGIN
DECLARE r0 ROW TYPE OF c1;
SELECT a,b INTO r0 FROM t1;
SELECT r0.a, r0.b;
END;
END;
$$
CALL p1;
r0.a r0.b
10 b10
DROP PROCEDURE p1;
DROP TABLE t1;
# Into a `ROW TYPE OF cursor1` field variable
CREATE TABLE t1 (a INT,b VARCHAR(10));
INSERT INTO t1 VALUES (10,'b10');
CREATE PROCEDURE p1()
BEGIN
DECLARE c1 CURSOR FOR SELECT * FROM t1;
BEGIN
DECLARE r0 ROW TYPE OF c1;
SELECT a,b INTO r0.a,r0.b FROM t1;
SELECT r0.a, r0.b;
END;
END;
$$
CALL p1;
r0.a r0.b
10 b10
DROP PROCEDURE p1;
DROP TABLE t1;
# Into a `ROW TYPE OF cursor1` field variable - non-existing field
CREATE TABLE t1 (a INT,b VARCHAR(10));
INSERT INTO t1 VALUES (10,'b10');
CREATE PROCEDURE p1()
BEGIN
DECLARE c1 CURSOR FOR SELECT * FROM t1;
BEGIN
DECLARE r0 ROW TYPE OF c1;
SELECT a,b INTO r0.a,r0.b1_non_existing FROM t1;
END;
END;
$$
CALL p1;
ERROR HY000: Row variable 'r0' does not have a field 'b1_non_existing'
DROP PROCEDURE p1;
DROP TABLE t1;
# End of 12.3 tests
174 changes: 174 additions & 0 deletions mysql-test/main/select_into_row.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@
--echo #
--echo # MDEV-40790 SELECT INTO row_type_of.field crashes the server
--echo #


--echo # Into an explicit ROW variable

CREATE TABLE t1 (a INT,b VARCHAR(10));
INSERT INTO t1 VALUES (10,'b10');
DELIMITER $$;
CREATE PROCEDURE p1()
BEGIN
DECLARE r0 ROW (a INT, b VARCHAR(10));
SELECT a,b INTO r0 FROM t1;
SELECT r0.a, r0.b;
END;
$$
DELIMITER ;$$
CALL p1;
DROP PROCEDURE p1;
DROP TABLE t1;


--echo # Into an explicit ROW field variable

CREATE TABLE t1 (a INT,b VARCHAR(10));
INSERT INTO t1 VALUES (10,'b10');
DELIMITER $$;
CREATE PROCEDURE p1()
BEGIN
DECLARE r0 ROW (a INT, b VARCHAR(10));
SELECT a,b INTO r0.a,r0.b FROM t1;
SELECT r0.a, r0.b;
END;
$$
DELIMITER ;$$
CALL p1;
DROP PROCEDURE p1;
DROP TABLE t1;


--echo # Into an explicit ROW field variable - non-existing field

CREATE TABLE t1 (a INT,b VARCHAR(10));
INSERT INTO t1 VALUES (10,'b10');
DELIMITER $$;
--error ER_ROW_VARIABLE_DOES_NOT_HAVE_FIELD
CREATE PROCEDURE p1()
BEGIN
DECLARE r0 ROW (a INT, b VARCHAR(10));
SELECT a,b INTO r0.a,r0.b1_non_existing FROM t1;
END;
$$
DELIMITER ;$$
DROP TABLE t1;


--echo # Into a `ROW TYPE OF table1` variable

CREATE TABLE t1 (a INT,b VARCHAR(10));
INSERT INTO t1 VALUES (10,'b10');
DELIMITER $$;
CREATE PROCEDURE p1()
BEGIN
DECLARE r0 ROW TYPE OF t1;
SELECT a,b INTO r0 FROM t1;
SELECT r0.a, r0.b;
END;
$$
DELIMITER ;$$
CALL p1;
DROP PROCEDURE p1;
DROP TABLE t1;


--echo # Into a `ROW TYPE OF table1` field variable

CREATE TABLE t1 (a INT,b VARCHAR(10));
INSERT INTO t1 VALUES (10,'b10');
DELIMITER $$;
CREATE PROCEDURE p1()
BEGIN
DECLARE r0 ROW TYPE OF t1;
SELECT a,b INTO r0.a,r0.b FROM t1;
SELECT r0.a, r0.b;
END;
$$
DELIMITER ;$$
CALL p1;
DROP PROCEDURE p1;
DROP TABLE t1;


--echo # Into a `ROW TYPE OF table1` field variable - non-existing field

CREATE TABLE t1 (a INT,b VARCHAR(10));
INSERT INTO t1 VALUES (10,'b10');
DELIMITER $$;
CREATE PROCEDURE p1()
BEGIN
DECLARE r0 ROW TYPE OF t1;
SELECT a,b INTO r0.a,r0.b1_non_existing FROM t1;
END;
$$
DELIMITER ;$$
--error ER_ROW_VARIABLE_DOES_NOT_HAVE_FIELD
CALL p1;
DROP PROCEDURE p1;
DROP TABLE t1;


--echo # Into a `ROW TYPE OF cursor1` variable

CREATE TABLE t1 (a INT,b VARCHAR(10));
INSERT INTO t1 VALUES (10,'b10');
DELIMITER $$;
CREATE PROCEDURE p1()
BEGIN
DECLARE c1 CURSOR FOR SELECT * FROM t1;
BEGIN
DECLARE r0 ROW TYPE OF c1;
SELECT a,b INTO r0 FROM t1;
SELECT r0.a, r0.b;
END;
END;
$$
DELIMITER ;$$
CALL p1;
DROP PROCEDURE p1;
DROP TABLE t1;


--echo # Into a `ROW TYPE OF cursor1` field variable

CREATE TABLE t1 (a INT,b VARCHAR(10));
INSERT INTO t1 VALUES (10,'b10');
DELIMITER $$;
CREATE PROCEDURE p1()
BEGIN
DECLARE c1 CURSOR FOR SELECT * FROM t1;
BEGIN
DECLARE r0 ROW TYPE OF c1;
SELECT a,b INTO r0.a,r0.b FROM t1;
SELECT r0.a, r0.b;
END;
END;
$$
DELIMITER ;$$
CALL p1;
DROP PROCEDURE p1;
DROP TABLE t1;


--echo # Into a `ROW TYPE OF cursor1` field variable - non-existing field

CREATE TABLE t1 (a INT,b VARCHAR(10));
INSERT INTO t1 VALUES (10,'b10');
DELIMITER $$;
CREATE PROCEDURE p1()
BEGIN
DECLARE c1 CURSOR FOR SELECT * FROM t1;
BEGIN
DECLARE r0 ROW TYPE OF c1;
SELECT a,b INTO r0.a,r0.b1_non_existing FROM t1;
END;
END;
$$
DELIMITER ;$$
--error ER_ROW_VARIABLE_DOES_NOT_HAVE_FIELD
CALL p1;
DROP PROCEDURE p1;
DROP TABLE t1;

--echo # End of 12.3 tests
Loading