1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-27 18:02:13 +03:00

Fix for verification tests: loss of decimal places should not

return an error
This commit is contained in:
georg@lmy002.wdf.sap.corp
2005-04-12 08:51:26 +02:00
parent 698399dc98
commit 1cbe701d78
2 changed files with 8 additions and 10 deletions

View File

@ -3656,8 +3656,6 @@ static void fetch_long_with_conversion(MYSQL_BIND *param, MYSQL_FIELD *field,
} }
} }
#define MY_TRUNC(val) (val < 0 ? - floor(-val) : floor(val))
/* /*
Convert double/float column to supplied buffer of any type. Convert double/float column to supplied buffer of any type.
@ -3674,6 +3672,7 @@ static void fetch_float_with_conversion(MYSQL_BIND *param, MYSQL_FIELD *field,
double value, int width) double value, int width)
{ {
char *buffer= (char *)param->buffer; char *buffer= (char *)param->buffer;
double val64 = (value < 0 ? -floor(-value) : floor(value));
switch (param->buffer_type) { switch (param->buffer_type) {
case MYSQL_TYPE_NULL: /* do nothing */ case MYSQL_TYPE_NULL: /* do nothing */
@ -3689,8 +3688,8 @@ static void fetch_float_with_conversion(MYSQL_BIND *param, MYSQL_FIELD *field,
*buffer= (uint8) value; *buffer= (uint8) value;
else else
*buffer= (int8) value; *buffer= (int8) value;
*param->error= MY_TRUNC(value) != (param->is_unsigned ? (double) ((uint8) *buffer) : *param->error= val64 != (param->is_unsigned ? (double)((uint8) *buffer) :
(double) ((int8) *buffer)); (double)((int8) *buffer));
break; break;
case MYSQL_TYPE_SHORT: case MYSQL_TYPE_SHORT:
if (param->is_unsigned) if (param->is_unsigned)
@ -3703,7 +3702,7 @@ static void fetch_float_with_conversion(MYSQL_BIND *param, MYSQL_FIELD *field,
short data= (short) value; short data= (short) value;
shortstore(buffer, data); shortstore(buffer, data);
} }
*param->error= MY_TRUNC(value) != (param->is_unsigned ? (double) (*(ushort*) buffer): *param->error= val64 != (param->is_unsigned ? (double) (*(ushort*) buffer):
(double) (*(short*) buffer)); (double) (*(short*) buffer));
break; break;
case MYSQL_TYPE_LONG: case MYSQL_TYPE_LONG:
@ -3717,7 +3716,7 @@ static void fetch_float_with_conversion(MYSQL_BIND *param, MYSQL_FIELD *field,
int32 data= (int32) value; int32 data= (int32) value;
longstore(buffer, data); longstore(buffer, data);
} }
*param->error= MY_TRUNC(value) != (param->is_unsigned ? (double) (*(uint32*) buffer): *param->error= val64 != (param->is_unsigned ? (double) (*(uint32*) buffer):
(double) (*(int32*) buffer)); (double) (*(int32*) buffer));
break; break;
case MYSQL_TYPE_LONGLONG: case MYSQL_TYPE_LONGLONG:
@ -3731,7 +3730,7 @@ static void fetch_float_with_conversion(MYSQL_BIND *param, MYSQL_FIELD *field,
longlong data= (longlong) value; longlong data= (longlong) value;
longlongstore(buffer, data); longlongstore(buffer, data);
} }
*param->error= MY_TRUNC(value) != (param->is_unsigned ? *param->error= val64 != (param->is_unsigned ?
ulonglong2double(*(ulonglong*) buffer) : ulonglong2double(*(ulonglong*) buffer) :
(double) (*(longlong*) buffer)); (double) (*(longlong*) buffer));
break; break;

View File

@ -3654,8 +3654,8 @@ static void test_bind_result_ext1()
check_execute(stmt, rc); check_execute(stmt, rc);
rc= mysql_stmt_fetch(stmt); rc= mysql_stmt_fetch(stmt);
DIE_UNLESS(rc == MYSQL_DATA_TRUNCATED); printf("rc=%d\n", rc);
DIE_UNLESS(bind[4].error_value == 1); DIE_UNLESS(rc == 0);
if (!opt_silent) if (!opt_silent)
{ {
@ -12462,7 +12462,6 @@ static void test_truncation()
/* double -> longlong: fractional part is lost */ /* double -> longlong: fractional part is lost */
DIE_UNLESS(++bind < bind_array + bind_count); DIE_UNLESS(++bind < bind_array + bind_count);
DIE_UNLESS(*bind->error && * (longlong*) bind->buffer == 123);
/* double -> ulonglong, negative fp number to unsigned integer */ /* double -> ulonglong, negative fp number to unsigned integer */
DIE_UNLESS(++bind < bind_array + bind_count); DIE_UNLESS(++bind < bind_array + bind_count);