summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Shulga <dmitry.shulga@mariadb.com>2021-07-14 22:48:15 +0700
committerDmitry Shulga <dmitry.shulga@mariadb.com>2021-07-14 22:48:15 +0700
commit939ee8dbc5edb7b2b1062d0e3836e88bc9646e4b (patch)
tree7bacb1cab63d978e56e883deb5d4ab72f850a79c
parent04369f9cee4e2ce7562d42344cd59683b5fbb8ae (diff)
downloadmariadb-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.result1
-rw-r--r--mysql-test/main/sp-row.test12
-rw-r--r--sql/sql_prepare.cc2
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);