Description:
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;
myheader("test_bug_58");
rc= mysql_query(mysql,"DROP TABLE IF EXISTS test_ushort");
myquery(rc);
rc= mysql_query(mysql,"CREATE TABLE test_ushort(a smallint signed, \
b smallint signed, \
c smallint unsigned, \
d smallint unsigned)");
myquery(rc);
rc= mysql_query(mysql,"INSERT INTO test_ushort VALUES(-5999, -5999, 35999, 200)");
myquery(rc);
stmt = mysql_prepare(mysql,"SELECT * FROM test_ushort",50);
mystmt_init(stmt);
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);
mysql_stmt_close(stmt);
}
Description: 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; myheader("test_bug_58"); rc= mysql_query(mysql,"DROP TABLE IF EXISTS test_ushort"); myquery(rc); rc= mysql_query(mysql,"CREATE TABLE test_ushort(a smallint signed, \ b smallint signed, \ c smallint unsigned, \ d smallint unsigned)"); myquery(rc); rc= mysql_query(mysql,"INSERT INTO test_ushort VALUES(-5999, -5999, 35999, 200)"); myquery(rc); stmt = mysql_prepare(mysql,"SELECT * FROM test_ushort",50); mystmt_init(stmt); 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); mysql_stmt_close(stmt); }