Commit efa311ab authored by Dmitry Shulga's avatar Dmitry Shulga

MDEV-26147: The test main.sp-row fails in case it is run in PS mode

In case a 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.
parent de85e294
......@@ -5553,3 +5553,17 @@ DEALLOCATE PREPARE stmt;
DROP TABLE t1, t2, t3;
# End of 10.2 tests
#
#
# MDEV-26147: The test main.sp-row fails in case it is run in PS mode
#
CREATE PROCEDURE p1(a ROW(a INT,b INT))
BEGIN
SELECT a.a, a.b;
END;
$$
PREPARE stmt FROM 'CALL p1(ROW(10, 20))';
EXECUTE stmt;
a.a a.b
10 20
DEALLOCATE PREPARE stmt;
DROP PROCEDURE p1;
......@@ -5000,3 +5000,19 @@ DROP TABLE t1, t2, t3;
--echo # End of 10.2 tests
--echo #
--echo #
--echo # MDEV-26147: The test main.sp-row fails in case it is run in PS mode
--echo #
DELIMITER $$;
CREATE PROCEDURE p1(a ROW(a INT,b INT))
BEGIN
SELECT a.a, a.b;
END;
$$
DELIMITER ;$$
PREPARE stmt FROM 'CALL p1(ROW(10, 20))';
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
DROP PROCEDURE p1;
......@@ -1741,7 +1741,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);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment