abies Fri Feb 13 05:43:24 2004 EDT Modified files: (Branch: PHP_4_3) /php-src/ext/interbase interbase.c /php-src/ext/interbase/tests 003.phpt Log: Fixed bug #27235 (NUMERIC x.0 field returns empty string on 0) CS/WS # MFB not necessary, bug doesn't apply to HEAD http://cvs.php.net/diff.php/php-src/ext/interbase/interbase.c?r1=1.91.2.28&r2=1.91.2.29&ty=u Index: php-src/ext/interbase/interbase.c diff -u php-src/ext/interbase/interbase.c:1.91.2.28 php-src/ext/interbase/interbase.c:1.91.2.29 --- php-src/ext/interbase/interbase.c:1.91.2.28 Wed Jan 21 05:12:14 2004 +++ php-src/ext/interbase/interbase.c Fri Feb 13 05:43:22 2004 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: interbase.c,v 1.91.2.28 2004/01/21 10:12:14 abies Exp $ */ +/* $Id: interbase.c,v 1.91.2.29 2004/02/13 10:43:22 abies Exp $ */ /* TODO: Arrays, roles? @@ -643,7 +643,7 @@ php_info_print_table_start(); php_info_print_table_row(2, "Interbase Support", "enabled"); - php_info_print_table_row(2, "Revision", "$Revision: 1.91.2.28 $"); + php_info_print_table_row(2, "Revision", "$Revision: 1.91.2.29 $"); #ifdef COMPILE_DL_INTERBASE php_info_print_table_row(2, "Dynamic Module", "yes"); #endif @@ -1836,32 +1836,34 @@ } break; #ifdef SQL_INT64 - case SQL_INT64: + case SQL_INT64: { + ISC_INT64 n = *(ISC_INT64 *) data; Z_TYPE_P(val) = IS_STRING; - if (scale < 0 ){ - short j = 0; - ISC_INT64 n, f = 1; - n = (ISC_INT64) *(ISC_INT64 *) data; - for (j = 0; j < -scale; j++) { + + if (scale < 0) { + short j; + ISC_INT64 f = 1; + + for (j = 0; j < -scale; ++j) { f *= 10; } - if ( n >= 0){ - Z_STRLEN_P(val) = sprintf (string_data, "%" ISC_INT64_FORMAT "d.%0*" ISC_INT64_FORMAT "d", - (ISC_INT64) n / f, -scale, (ISC_INT64) n % f ); - }else if ((n/f) != 0 ){ - Z_STRLEN_P(val) = sprintf (string_data, "%" ISC_INT64_FORMAT "d.%0*" ISC_INT64_FORMAT "d", - (ISC_INT64) n / f, -scale, (ISC_INT64) -(n % f) ); - }else{ - Z_STRLEN_P(val) = sprintf (string_data, "%s.%0*" ISC_INT64_FORMAT "d", - "-0", -scale, (ISC_INT64) -(n % f) ); + if (n >= 0) { + Z_STRLEN_P(val) = sprintf (string_data, + "%" ISC_INT64_FORMAT "d.%0*" ISC_INT64_FORMAT "d", n / f, -scale, n % f); + } else if (n < -f) { + Z_STRLEN_P(val) = sprintf (string_data, + "%" ISC_INT64_FORMAT "d.%0*" ISC_INT64_FORMAT "d", n / f, -scale, -n % f); + } else { + Z_STRLEN_P(val) = sprintf (string_data, + "-0.%0*" ISC_INT64_FORMAT "d", -scale, -n % f); } } else { - Z_STRLEN_P(val) =sprintf (string_data, "%.0" ISC_INT64_FORMAT "d", - (ISC_INT64) *(ISC_INT64 *) data); + Z_STRLEN_P(val) = sprintf (string_data, "%" ISC_INT64_FORMAT "d", n); } Z_STRVAL_P(val) = estrdup(string_data); break; + } #endif #ifndef SQL_TIMESTAMP case SQL_DATE: http://cvs.php.net/diff.php/php-src/ext/interbase/tests/003.phpt?r1=1.2.4.2&r2=1.2.4.3&ty=u Index: php-src/ext/interbase/tests/003.phpt diff -u php-src/ext/interbase/tests/003.phpt:1.2.4.2 php-src/ext/interbase/tests/003.phpt:1.2.4.3 --- php-src/ext/interbase/tests/003.phpt:1.2.4.2 Mon Jun 2 08:59:20 2003 +++ php-src/ext/interbase/tests/003.phpt Fri Feb 13 05:43:24 2004 @@ -41,7 +41,7 @@ $v_decimal7_2 = rand_number(7,2); $v_decimal7_0 = rand_number(7,0); $v_numeric15_15 = rand_number(15,15); - $v_numeric15_0 = rand_number(15,0); + $v_numeric15_0 = $iter ? rand_number(15,0) : 0; $v_double = rand_number(18); $v_float = rand_number(7); $v_integer = rand_number(9,0); @@ -88,7 +88,7 @@ echo " in: $v_numeric15_15\n"; echo " out: $row->V_NUMERIC15_15\n"; } - if($row->V_NUMERIC15_0 != $v_numeric15_0){ + if($row->V_NUMERIC15_0 != (string)$v_numeric15_0){ echo " NUMERIC15_0 fail\n"; echo " in: $v_numeric15_0\n"; echo " out: $row->V_NUMERIC15_0\n";
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php