Commit fe94b6bf authored by unknown's avatar unknown
Browse files

A test case for Bug#14845 "mysql_stmt_fetch returns MYSQL_NO_DATA

when COUNT(*) is 0". The bug itself cannot be repeated.


mysql-test/r/sp.result:
  Test results were fixed (Bug#14845)
mysql-test/t/sp.test:
  An SQL language test case for Bug#14845
tests/mysql_client_test.c:
  A test case for Bug#14845
parent 27b4c2a5
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -3648,4 +3648,23 @@ call bug14723();;
42
drop function bug14723|
drop procedure bug14723|
create procedure bug14845()
begin
declare a char(255);
declare done int default 0;
declare c cursor for select count(*) from t1 where 1 = 0;
declare continue handler for sqlstate '02000' set done = 1;
open c;
repeat
fetch c into a;
if not done then
select a;
end if;
until done end repeat;
close c;
end|
call bug14845()|
a
0
drop procedure bug14845|
drop table t1,t2;
+21 −0
Original line number Diff line number Diff line
@@ -4572,6 +4572,27 @@ delimiter |;;
drop function bug14723|
drop procedure bug14723|

#
# Bug#14845 "mysql_stmt_fetch returns MYSQL_NO_DATA when COUNT(*) is 0"
# Check that when fetching from a cursor, COUNT(*) works properly.
#
create procedure bug14845()
begin
  declare a char(255);
  declare done int default 0;
  declare c cursor for select count(*) from t1 where 1 = 0;
  declare continue handler for sqlstate '02000' set done = 1;
  open c;
  repeat
    fetch c into a;
    if not done then
      select a;
    end if;
  until done end repeat;
  close c;
end|
call bug14845()|
drop procedure bug14845|

#
# BUG#NNNN: New bug synopsis
+44 −0
Original line number Diff line number Diff line
@@ -14546,6 +14546,49 @@ static void test_bug13524()
  myquery(rc);
}

/*
  Bug#14845 "mysql_stmt_fetch returns MYSQL_NO_DATA when COUNT(*) is 0"
*/

static void test_bug14845()
{
  MYSQL_STMT *stmt;
  int rc;
  const ulong type= CURSOR_TYPE_READ_ONLY;
  const char *query= "select count(*) from t1 where 1 = 0";

  myheader("test_bug14845");

  rc= mysql_query(mysql, "drop table if exists t1");
  myquery(rc);
  rc= mysql_query(mysql, "create table t1 (id int(11) default null, "
                         "name varchar(20) default null)"
                         "engine=MyISAM DEFAULT CHARSET=utf8");
  myquery(rc);
  rc= mysql_query(mysql, "insert into t1 values (1,'abc'),(2,'def')");
  myquery(rc);

  stmt= mysql_stmt_init(mysql);
  rc= mysql_stmt_attr_set(stmt, STMT_ATTR_CURSOR_TYPE, (const void*) &type);
  check_execute(stmt, rc);

  rc= mysql_stmt_prepare(stmt, query, strlen(query));
  check_execute(stmt, rc);

  rc= mysql_stmt_execute(stmt);
  check_execute(stmt, rc);

  rc= mysql_stmt_fetch(stmt);
  DIE_UNLESS(rc == 0);

  rc= mysql_stmt_fetch(stmt);
  DIE_UNLESS(rc == MYSQL_NO_DATA);

  /* Cleanup */
  mysql_stmt_close(stmt);
  rc= mysql_query(mysql, "drop table t1");
  myquery(rc);
}

/*
  Read and parse arguments and MySQL options from my.cnf
@@ -14805,6 +14848,7 @@ static struct my_tests_st my_tests[]= {
  { "test_bug14210", test_bug14210 },
  { "test_bug13488", test_bug13488 },
  { "test_bug13524", test_bug13524 },
  { "test_bug14845", test_bug14845 },
  { 0, 0 }
};