Skip to content
Permalink
Browse files
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.
  • Loading branch information
dmitryshulga committed Jul 18, 2021
1 parent de85e29 commit efa311a
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 1 deletion.
@@ -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);

0 comments on commit efa311a

Please sign in to comment.