diff options
author | Dmitry Shulga <dmitry.shulga@mariadb.com> | 2021-07-14 22:48:15 +0700 |
---|---|---|
committer | Dmitry Shulga <dmitry.shulga@mariadb.com> | 2021-07-14 22:48:15 +0700 |
commit | 939ee8dbc5edb7b2b1062d0e3836e88bc9646e4b (patch) | |
tree | 7bacb1cab63d978e56e883deb5d4ab72f850a79c | |
parent | 04369f9cee4e2ce7562d42344cd59683b5fbb8ae (diff) | |
download | mariadb-git-bb-10.6-MDEV-26147.tar.gz |
MDEV-26147: The test main.sp-row fails in case it is run in PS modebb-10.6-MDEV-26147
In case stored procedure is invoked in PS mode with argument of type ROW()
like the following one:
CALL p1(ROW(10,20))
such statement fails with the error
ER_OPERAND_COLUMNS (1241): Operand should contain 1 column(s)
The reason of emitting the error is that wrong method was invoked
on fixing an item corresponding to an argument of stored procedure -
the method fix_fields_if_needed_for_scalar() was called instead of
fix_fields_if_needed() that should be called.
-rw-r--r-- | mysql-test/main/sp-row.result | 1 | ||||
-rw-r--r-- | mysql-test/main/sp-row.test | 12 | ||||
-rw-r--r-- | sql/sql_prepare.cc | 2 |
3 files changed, 9 insertions, 6 deletions
diff --git a/mysql-test/main/sp-row.result b/mysql-test/main/sp-row.result index 3751b70b260..2764b4cd999 100644 --- a/mysql-test/main/sp-row.result +++ b/mysql-test/main/sp-row.result @@ -228,6 +228,7 @@ CREATE FUNCTION f1(a INT) RETURNS INT BEGIN RETURN a; END; +$$ CREATE PROCEDURE p1() BEGIN DECLARE a ROW (a INT,b INT); diff --git a/mysql-test/main/sp-row.test b/mysql-test/main/sp-row.test index cbd1e940475..527ff9455bd 100644 --- a/mysql-test/main/sp-row.test +++ b/mysql-test/main/sp-row.test @@ -2,11 +2,6 @@ --echo # MDEV-10914 ROW data type for stored routine variables --echo # -if (`SELECT $PS_PROTOCOL != 0`) -{ - --skip Test temporarily disabled for ps-protocol -} - --echo # --echo # ROW of ROWs is not supported yet --echo # @@ -304,6 +299,7 @@ CREATE FUNCTION f1(a INT) RETURNS INT BEGIN RETURN a; END; +$$ CREATE PROCEDURE p1() BEGIN DECLARE a ROW (a INT,b INT); @@ -1340,6 +1336,7 @@ DROP PROCEDURE p1; --echo # ROW variable with a wrong column count +--enable_prepare_warnings CREATE TABLE t1 (a INT, b VARCHAR(32)); INSERT INTO t1 VALUES (10,'b10'); DELIMITER $$; @@ -1351,6 +1348,7 @@ BEGIN END; $$ DELIMITER ;$$ +--disable_prepare_warnings --error ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT CALL p1(); DROP TABLE t1; @@ -1360,6 +1358,7 @@ DROP PROCEDURE p1; --echo # Multiple ROW variables CREATE TABLE t1 (a INT, b VARCHAR(32)); INSERT INTO t1 VALUES (10,'b10'); +--enable_prepare_warnings DELIMITER $$; CREATE PROCEDURE p1() BEGIN @@ -1369,6 +1368,7 @@ BEGIN END; $$ DELIMITER ;$$ +--disable_prepare_warnings --error ER_OPERAND_COLUMNS CALL p1(); DROP TABLE t1; @@ -1378,6 +1378,7 @@ DROP PROCEDURE p1; --echo # ROW variables working example CREATE TABLE t1 (a INT, b VARCHAR(32)); INSERT INTO t1 VALUES (10,'b10'); +--enable_prepare_warnings DELIMITER $$; CREATE PROCEDURE p1() BEGIN @@ -1387,6 +1388,7 @@ BEGIN END; $$ DELIMITER ;$$ +--disable_prepare_warnings CALL p1(); DROP TABLE t1; DROP PROCEDURE p1; diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index 2f5470db123..31d27779def 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -1731,7 +1731,7 @@ static bool mysql_test_call_fields(Prepared_statement *stmt, while ((item= it++)) { - if (item->fix_fields_if_needed_for_scalar(thd, it.ref())) + if (item->fix_fields_if_needed(thd, it.ref())) goto err; } DBUG_RETURN(FALSE); |