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