Commit fd08f953 authored by Varun Gupta's avatar Varun Gupta

MDEV-17963: Assertion `field_pos < field_count' failed in...

MDEV-17963: Assertion `field_pos < field_count' failed in Protocol_text::store, Assertion `field_handlers == 0 || field_pos < field_count'

The problem was that sp_head::MULTI_RESULTS was not set correctly for ANALYZE statement
with SELECT ... INTO variable.
This is a follow up fix for MDEV-7023
parent 838bb9fa
...@@ -8319,4 +8319,18 @@ UNION ...@@ -8319,4 +8319,18 @@ UNION
SELECT * FROM INFORMATION_SCHEMA.TABLES JOIN INFORMATION_SCHEMA.PARAMETERS; SELECT * FROM INFORMATION_SCHEMA.TABLES JOIN INFORMATION_SCHEMA.PARAMETERS;
DROP FUNCTION f; DROP FUNCTION f;
DROP VIEW v; DROP VIEW v;
#
# MDEV-17963: Assertion `field_pos < field_count' failed in Protocol_text::store,
# Assertion `field_handlers == 0 || field_pos < field_count'
#
CREATE TABLE t1 (ct time);
INSERT INTO t1 VALUES ('16:11:28');
CREATE FUNCTION f1 () RETURNS varchar(100)
BEGIN
DECLARE xxx varchar(100);
ANALYZE SELECT sum(ct) FROM t1 INTO xxx ;
RETURN xxx;
END|
ERROR 0A000: Not allowed to return a result set from a function
drop table t1;
#End of 10.1 tests #End of 10.1 tests
...@@ -9840,4 +9840,24 @@ SELECT * FROM INFORMATION_SCHEMA.TABLES JOIN INFORMATION_SCHEMA.PARAMETERS; ...@@ -9840,4 +9840,24 @@ SELECT * FROM INFORMATION_SCHEMA.TABLES JOIN INFORMATION_SCHEMA.PARAMETERS;
DROP FUNCTION f; DROP FUNCTION f;
DROP VIEW v; DROP VIEW v;
--echo #
--echo # MDEV-17963: Assertion `field_pos < field_count' failed in Protocol_text::store,
--echo # Assertion `field_handlers == 0 || field_pos < field_count'
--echo #
CREATE TABLE t1 (ct time);
INSERT INTO t1 VALUES ('16:11:28');
DELIMITER |;
--error ER_SP_NO_RETSET
CREATE FUNCTION f1 () RETURNS varchar(100)
BEGIN
DECLARE xxx varchar(100);
ANALYZE SELECT sum(ct) FROM t1 INTO xxx ;
RETURN xxx;
END|
DELIMITER ;|
drop table t1;
--echo #End of 10.1 tests --echo #End of 10.1 tests
...@@ -212,7 +212,7 @@ sp_get_flags_for_command(LEX *lex) ...@@ -212,7 +212,7 @@ sp_get_flags_for_command(LEX *lex)
switch (lex->sql_command) { switch (lex->sql_command) {
case SQLCOM_SELECT: case SQLCOM_SELECT:
if (lex->result) if (lex->result && !lex->analyze_stmt)
{ {
flags= 0; /* This is a SELECT with INTO clause */ flags= 0; /* This is a SELECT with INTO clause */
break; break;
......
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