Bug #58 prepare/bind/fetch fails for smallint -> long
Submitted: 5 Feb 2003 13:08 Modified: 5 Feb 2003 21:30
Reporter: Georg Richter Email Updates:
Status: Closed Impact on me:
Category:MySQL Server Severity:S3 (Non-critical)
Version: OS:
Assigned to: Bugs System CPU Architecture:Any

[5 Feb 2003 13:08] Georg Richter
mysql_prepare/bind_result/execute/fetch fails for signed smallint -> long

How to repeat:
static void test_bug_58()
  MYSQL_STMT *stmt;
  MYSQL_BIND bind[4];
  ushort     short_value;
  long       long_value;
  long       s_length, l_length, ll_length, t_length;
  ulonglong  longlong_value;
  int        rc;
  uchar      tiny_value;


  rc= mysql_query(mysql,"DROP TABLE IF EXISTS test_ushort");
  rc= mysql_query(mysql,"CREATE TABLE test_ushort(a smallint signed, \
                                                  b smallint signed, \
                                                  c smallint unsigned, \
                                                  d smallint unsigned)");
  rc= mysql_query(mysql,"INSERT INTO test_ushort VALUES(-5999, -5999, 35999, 200)");
  stmt = mysql_prepare(mysql,"SELECT * FROM test_ushort",50);

  rc = mysql_execute(stmt);
  mystmt(stmt, rc);

  bind[0].buffer_type= MYSQL_TYPE_SHORT;
  bind[0].buffer= (char *)&short_value;
  bind[0].is_null= 0;
  bind[0].length= &s_length;
  bind[1].buffer_type= MYSQL_TYPE_LONG;
  bind[1].buffer= (char *)&long_value;
  bind[1].is_null= 0;
  bind[1].length= &l_length;

  bind[2].buffer_type= MYSQL_TYPE_LONGLONG;
  bind[2].buffer= (char *)&longlong_value;
  bind[2].is_null= 0;
  bind[2].length= &ll_length;
  bind[3].buffer_type= MYSQL_TYPE_TINY;
  bind[3].buffer= (char *)&tiny_value;
  bind[3].is_null= 0;
  bind[3].length= &t_length;
  rc = mysql_bind_result(stmt, bind);
  mystmt(stmt, rc);

  rc = mysql_fetch(stmt);
  mystmt(stmt, rc);
  fprintf(stdout,"\n ushort: %d (%ld)", short_value, s_length);
  fprintf(stdout,"\n ulong : %ld (%ld)", long_value, l_length);
  fprintf(stdout,"\n ulong : %lld (%ld)", longlong_value, ll_length);
  fprintf(stdout,"\n ulong : %d   (%ld)", tiny_value, t_length);
  myassert(short_value == -5999);
  myassert(s_length == 2);
  myassert(long_value == -5999);
  myassert(l_length == 4);

  myassert(longlong_value == 35999);
  myassert(ll_length == 8);

  myassert(tiny_value == 200);
  myassert(t_length == 1);
  rc = mysql_fetch(stmt);
  myassert(rc == MYSQL_NO_DATA);

[5 Feb 2003 21:24] MySQL Developer
Thank you for your bug report. This issue has already been fixed
in the latest released version of that product, which you can download at 

It is now fixed and the fix is available from the current BK source.
[5 Feb 2003 21:32] Venu Anuganti
It is now fixed and the fix is available from the current BK source tree.

The tests are also added as test_sshort_bug() and test_stiny_bug() in client_test.c for verification purpose.