Commit 83698bab authored by unknown's avatar unknown

Fixes to make client_test run on 64 bit Sun: a bug in libmysql and

test suite fixed.


libmysql/libmysql.c:
  - fixed a bug in protocol -> host integer conversions in send_data_str
tests/client_test.c:
  Fixes to make client_test run on 64 bit Sun:
  - strlen() doesn't accept NULL input
  - Sun is high byte first, so we can't store bind 32-bit variables to 16-bit
  to MYSQL_TYPE_SHORT/TINY
parent c65bf20b
...@@ -3245,32 +3245,32 @@ static void send_data_str(MYSQL_BIND *param, char *value, uint length) ...@@ -3245,32 +3245,32 @@ static void send_data_str(MYSQL_BIND *param, char *value, uint length)
{ {
short data= (short)my_strntol(&my_charset_latin1,value,length,10,NULL, short data= (short)my_strntol(&my_charset_latin1,value,length,10,NULL,
&err); &err);
int2store(buffer, data); shortstore(buffer, data);
break; break;
} }
case MYSQL_TYPE_LONG: case MYSQL_TYPE_LONG:
{ {
int32 data= (int32)my_strntol(&my_charset_latin1,value,length,10,NULL, int32 data= (int32)my_strntol(&my_charset_latin1,value,length,10,NULL,
&err); &err);
int4store(buffer, data); longstore(buffer, data);
break; break;
} }
case MYSQL_TYPE_LONGLONG: case MYSQL_TYPE_LONGLONG:
{ {
longlong data= my_strntoll(&my_charset_latin1,value,length,10,NULL,&err); longlong data= my_strntoll(&my_charset_latin1,value,length,10,NULL,&err);
int8store(buffer, data); longlongstore(buffer, data);
break; break;
} }
case MYSQL_TYPE_FLOAT: case MYSQL_TYPE_FLOAT:
{ {
float data = (float)my_strntod(&my_charset_latin1,value,length,NULL,&err); float data = (float)my_strntod(&my_charset_latin1,value,length,NULL,&err);
float4store(buffer, data); floatstore(buffer, data);
break; break;
} }
case MYSQL_TYPE_DOUBLE: case MYSQL_TYPE_DOUBLE:
{ {
double data= my_strntod(&my_charset_latin1,value,length,NULL,&err); double data= my_strntod(&my_charset_latin1,value,length,NULL,&err);
float8store(buffer, data); doublestore(buffer, data);
break; break;
} }
case MYSQL_TYPE_TINY_BLOB: case MYSQL_TYPE_TINY_BLOB:
......
...@@ -177,7 +177,8 @@ static void client_connect() ...@@ -177,7 +177,8 @@ static void client_connect()
int rc; int rc;
myheader_r("client_connect"); myheader_r("client_connect");
fprintf(stdout, "\n Establishing a connection to '%s' ...", opt_host); fprintf(stdout, "\n Establishing a connection to '%s' ...",
opt_host ? opt_host : "");
if (!(mysql= mysql_init(NULL))) if (!(mysql= mysql_init(NULL)))
{ {
...@@ -3226,8 +3227,11 @@ static void bind_fetch(int row_count) ...@@ -3226,8 +3227,11 @@ static void bind_fetch(int row_count)
{ {
MYSQL_STMT *stmt; MYSQL_STMT *stmt;
int rc, i, count= row_count; int rc, i, count= row_count;
ulong bit;
long data[10]; long data[10];
int8 i8_data;
int16 i16_data;
int32 i32_data;
longlong i64_data;
float f_data; float f_data;
double d_data; double d_data;
char s_data[10]; char s_data[10];
...@@ -3283,9 +3287,16 @@ static void bind_fetch(int row_count) ...@@ -3283,9 +3287,16 @@ static void bind_fetch(int row_count)
} }
bind[0].buffer_type= MYSQL_TYPE_TINY; bind[0].buffer_type= MYSQL_TYPE_TINY;
bind[0].buffer= (char *)&i8_data;
bind[1].buffer_type= MYSQL_TYPE_SHORT; bind[1].buffer_type= MYSQL_TYPE_SHORT;
bind[1].buffer= (char *)&i16_data;
bind[2].buffer_type= MYSQL_TYPE_LONG; bind[2].buffer_type= MYSQL_TYPE_LONG;
bind[2].buffer= (char *)&i32_data;
bind[3].buffer_type= MYSQL_TYPE_LONGLONG; bind[3].buffer_type= MYSQL_TYPE_LONGLONG;
bind[3].buffer= (char *)&i64_data;
bind[4].buffer_type= MYSQL_TYPE_FLOAT; bind[4].buffer_type= MYSQL_TYPE_FLOAT;
bind[4].buffer= (char *)&f_data; bind[4].buffer= (char *)&f_data;
...@@ -3312,36 +3323,47 @@ static void bind_fetch(int row_count) ...@@ -3312,36 +3323,47 @@ static void bind_fetch(int row_count)
check_execute(stmt, rc); check_execute(stmt, rc);
fprintf(stdout, "\n"); fprintf(stdout, "\n");
fprintf(stdout, "\n tiny : %ld(%lu)", data[0], length[0]); fprintf(stdout, "\n tiny : %ld(%lu)", (ulong) i8_data, length[0]);
fprintf(stdout, "\n short : %ld(%lu)", data[1], length[1]); fprintf(stdout, "\n short : %ld(%lu)", (ulong) i16_data, length[1]);
fprintf(stdout, "\n int : %ld(%lu)", data[2], length[2]); fprintf(stdout, "\n int : %ld(%lu)", (ulong) i32_data, length[2]);
fprintf(stdout, "\n longlong : %ld(%lu)", data[3], length[3]); fprintf(stdout, "\n longlong : %ld(%lu)", (ulong) i64_data, length[3]);
fprintf(stdout, "\n float : %f(%lu)", f_data, length[4]); fprintf(stdout, "\n float : %f(%lu)", f_data, length[4]);
fprintf(stdout, "\n double : %g(%lu)", d_data, length[5]); fprintf(stdout, "\n double : %g(%lu)", d_data, length[5]);
fprintf(stdout, "\n char : %s(%lu)", s_data, length[6]); fprintf(stdout, "\n char : %s(%lu)", s_data, length[6]);
bit= 1;
rc= 10+row_count; rc= 10+row_count;
for (i= 0; i < 4; i++)
{ /* TINY */
assert(data[i] == rc+i); assert((int) i8_data == rc);
assert(length[i] == bit); assert(length[0] == 1);
bit<<= 1; rc+= 13;
rc+= 12;
} /* SHORT */
assert((int) i16_data == rc);
assert(length[1] == 2);
rc+= 13;
/* LONG */
assert((int) i32_data == rc);
assert(length[2] == 4);
rc+= 13;
/* LONGLONG */
assert((int) i64_data == rc);
assert(length[3] == 8);
rc+= 13;
/* FLOAT */ /* FLOAT */
rc+= i;
assert((int)f_data == rc); assert((int)f_data == rc);
assert(length[4] == 4); assert(length[4] == 4);
rc+= 13;
/* DOUBLE */ /* DOUBLE */
rc+= 13;
assert((int)d_data == rc); assert((int)d_data == rc);
assert(length[5] == 8); assert(length[5] == 8);
rc+= 13;
/* CHAR */ /* CHAR */
rc+= 13;
{ {
char buff[20]; char buff[20];
long len= my_sprintf(buff, (buff, "%d", rc)); long len= my_sprintf(buff, (buff, "%d", rc));
...@@ -4523,7 +4545,8 @@ static void test_multi_stmt() ...@@ -4523,7 +4545,8 @@ static void test_multi_stmt()
{ {
MYSQL_STMT *stmt, *stmt1, *stmt2; MYSQL_STMT *stmt, *stmt1, *stmt2;
int rc, id; int rc;
ulong id;
char name[50]; char name[50];
MYSQL_BIND bind[2]; MYSQL_BIND bind[2];
ulong length[2]; ulong length[2];
...@@ -4555,7 +4578,7 @@ static void test_multi_stmt() ...@@ -4555,7 +4578,7 @@ static void test_multi_stmt()
*/ */
bzero((char*) bind, sizeof(bind)); bzero((char*) bind, sizeof(bind));
bind[0].buffer_type= MYSQL_TYPE_SHORT; bind[0].buffer_type= MYSQL_TYPE_LONG;
bind[0].buffer= (char *)&id; bind[0].buffer= (char *)&id;
bind[0].is_null= &is_null[0]; bind[0].is_null= &is_null[0];
bind[0].length= &length[0]; bind[0].length= &length[0];
...@@ -4582,7 +4605,7 @@ static void test_multi_stmt() ...@@ -4582,7 +4605,7 @@ static void test_multi_stmt()
rc= mysql_stmt_fetch(stmt); rc= mysql_stmt_fetch(stmt);
check_execute(stmt, rc); check_execute(stmt, rc);
fprintf(stdout, "\n int_data: %d(%lu)", id, length[0]); fprintf(stdout, "\n int_data: %lu(%lu)", id, length[0]);
fprintf(stdout, "\n str_data: %s(%lu)", name, length[1]); fprintf(stdout, "\n str_data: %s(%lu)", name, length[1]);
assert(id == 10); assert(id == 10);
assert(strcmp(name, "mysql") == 0); assert(strcmp(name, "mysql") == 0);
...@@ -4611,7 +4634,7 @@ static void test_multi_stmt() ...@@ -4611,7 +4634,7 @@ static void test_multi_stmt()
rc= mysql_stmt_fetch(stmt); rc= mysql_stmt_fetch(stmt);
check_execute(stmt, rc); check_execute(stmt, rc);
fprintf(stdout, "\n int_data: %d(%lu)", id, length[0]); fprintf(stdout, "\n int_data: %lu(%lu)", id, length[0]);
fprintf(stdout, "\n str_data: %s(%lu)", name, length[1]); fprintf(stdout, "\n str_data: %s(%lu)", name, length[1]);
assert(id == 10); assert(id == 10);
assert(strcmp(name, "updated") == 0); assert(strcmp(name, "updated") == 0);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment