Commit bd44c99b authored by unknown's avatar unknown
Browse files

A fix and a test case for Bug#11183 "mysql_stmt_reset() doesn't reset

information about error".


libmysql/libmysql.c:
  Clear the last error on the statement if mysql_stmt_reset succeeded.
tests/mysql_client_test.c:
  A test case for Bug#11183 "mysql_stmt_reset() doesn't reset information 
  about error"
parent 69ecbbcb
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -1834,6 +1834,17 @@ static void net_clear_error(NET *net)
  }
}


static void stmt_clear_error(MYSQL_STMT *stmt)
{
  if (stmt->last_errno)
  {
    stmt->last_errno= 0;
    stmt->last_error[0]= '\0';
    strmov(stmt->sqlstate, not_error_sqlstate);
  }
}

/*
  Set statement error code, sqlstate, and error message
  from given errcode and sqlstate.
@@ -4625,6 +4636,7 @@ my_bool STDCALL mysql_stmt_reset(MYSQL_STMT *stmt)
       param < param_end;
       param++)
    param->long_data_used= 0;
  stmt_clear_error(stmt);

  DBUG_RETURN(0);
}
+45 −0
Original line number Diff line number Diff line
@@ -11697,6 +11697,50 @@ static void test_bug9735()
  myquery(rc);
}

/* Bug#11183 "mysql_stmt_reset() doesn't reset information about error" */

static void test_bug11183()
{
  int rc;
  MYSQL_STMT *stmt;
  char bug_statement[]= "insert into t1 values (1)";

  myheader("test_bug11183");

  mysql_query(mysql, "drop table t1 if exists");
  mysql_query(mysql, "create table t1 (a int)");

  stmt= mysql_stmt_init(mysql);
  DIE_UNLESS(stmt != 0);

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

  rc= mysql_query(mysql, "drop table t1");
  myquery(rc);

  /* Trying to execute statement that should fail on execute stage */
  rc= mysql_stmt_execute(stmt);
  DIE_UNLESS(rc);

  mysql_stmt_reset(stmt);
  DIE_UNLESS(mysql_stmt_errno(stmt) == 0);

  mysql_query(mysql, "create table t1 (a int)");

  /* Trying to execute statement that should pass ok */
  if (mysql_stmt_execute(stmt))
  {
    mysql_stmt_reset(stmt);
    DIE_UNLESS(mysql_stmt_errno(stmt) == 0);
  }

  mysql_stmt_close(stmt);

  rc= mysql_query(mysql, "drop table t1");
  myquery(rc);
}


/*
  Read and parse arguments and MySQL options from my.cnf
@@ -11913,6 +11957,7 @@ static struct my_tests_st my_tests[]= {
  { "test_bug7990", test_bug7990 },
  { "test_bug8378", test_bug8378 },
  { "test_bug9735", test_bug9735 },
  { "test_bug11183", test_bug11183 },
  { 0, 0 }
};