From: Timm Friebe Date: Sun, 16 May 2004 20:30:35 +0000 (+0000) Subject: - Fixed auto-conversion from long to double when LONG_MAX / X-Git-Tag: RELEASE_0_1~188 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=425ae989161913f37cfb4c057fb876a60df8090b;p=php - Fixed auto-conversion from long to double when LONG_MAX / LONG_MIN where overflown --- diff --git a/ext/sybase_ct/php_sybase_ct.c b/ext/sybase_ct/php_sybase_ct.c index 5081c194fc..a5c9affb83 100644 --- a/ext/sybase_ct/php_sybase_ct.c +++ b/ext/sybase_ct/php_sybase_ct.c @@ -1127,15 +1127,14 @@ static int php_sybase_fetch_result_row (sybase_result *result, int numrows) convert_to_long(&result->data[i][j]); break; case 2: - /* We also get numbers that are actually integers here due to the check on - * precision against > 9 (ranges are -1E10 to -1E9 and 1E9 to 1E10). As we - * cannot be sure that they "fit" into MIN_LONG <= x <= MAX_LONG, we call - * convert_to_double() on them. This is a small performance penalty, but - * ensures that "select 2147483648" will be a float and "select 2147483647" - * will be become an int. - */ convert_to_double(&result->data[i][j]); break; + case 3: + /* This signals we have an integer datatype, but we need to convert to double if we + * overflow. + */ + convert_scalar_to_number(&result->data[i][j]); + break; } } } @@ -1243,7 +1242,7 @@ static sybase_result * php_sybase_fetch_result_set (sybase_link *sybase_ptr, int case CS_DECIMAL_TYPE: result->datafmt[i].maxlength = result->datafmt[i].precision + 3; /* numeric(10) vs numeric(10, 1) */ - result->numerics[i] = (result->datafmt[i].scale == 0 && result->datafmt[i].precision <= 9) ? 1 : 2; + result->numerics[i] = (result->datafmt[i].scale == 0) ? 3 : 2; break; default: result->datafmt[i].maxlength++;