Commit 53a9e7f4 authored by kaa@polly.(none)'s avatar kaa@polly.(none)
Browse files

Fix for bug #31742: delete from ... order by function call that causes

an error, asserts server

In case of a fatal error during filesort in find_all_keys() the error
was returned without the necessary handler uninitialization.
Fixed by changing the code so that handler uninitialization is performed
before returning the error.
parent 34984111
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -271,3 +271,11 @@ a
DROP TABLE t1, t2;
DROP DATABASE db1;
DROP DATABASE db2;
CREATE FUNCTION f1() RETURNS INT RETURN 1;
CREATE TABLE t1 (a INT);
INSERT INTO t1 VALUES (0);
DELETE FROM t1 ORDER BY (f1(10)) LIMIT 1;
ERROR 42000: Incorrect number of arguments for FUNCTION test.f1; expected 0, got 1
DROP TABLE t1;
DROP FUNCTION f1;
End of 5.0 tests
+15 −0
Original line number Diff line number Diff line
@@ -277,3 +277,18 @@ SELECT * FROM t1;
DROP TABLE t1, t2;
DROP DATABASE db1;
DROP DATABASE db2;

#
# Bug 31742: delete from ... order by function call that causes an error, 
#            asserts server
#

CREATE FUNCTION f1() RETURNS INT RETURN 1;
CREATE TABLE t1 (a INT);
INSERT INTO t1 VALUES (0);
--error 1318
DELETE FROM t1 ORDER BY (f1(10)) LIMIT 1;
DROP TABLE t1;
DROP FUNCTION f1;

--echo End of 5.0 tests
+4 −1
Original line number Diff line number Diff line
@@ -534,7 +534,7 @@ static ha_rows find_all_keys(SORTPARAM *param, SQL_SELECT *select,
      file->unlock_row();
    /* It does not make sense to read more keys in case of a fatal error */
    if (thd->net.report_error)
      DBUG_RETURN(HA_POS_ERROR);
      break;
  }
  if (quick_select)
  {
@@ -551,6 +551,9 @@ static ha_rows find_all_keys(SORTPARAM *param, SQL_SELECT *select,
      file->ha_rnd_end();
  }

  if (thd->net.report_error)
    DBUG_RETURN(HA_POS_ERROR);
  
  DBUG_PRINT("test",("error: %d  indexpos: %d",error,indexpos));
  if (error != HA_ERR_END_OF_FILE)
  {