]> granicus.if.org Git - php/commitdiff
Fixed bug #27235 (NUMERIC x.0 field returns empty string on 0)
authorArd Biesheuvel <abies@php.net>
Fri, 13 Feb 2004 10:43:24 +0000 (10:43 +0000)
committerArd Biesheuvel <abies@php.net>
Fri, 13 Feb 2004 10:43:24 +0000 (10:43 +0000)
CS/WS
# MFB not necessary, bug doesn't apply to HEAD

ext/interbase/interbase.c
ext/interbase/tests/003.phpt

index 81a37640fd150f889f482b1913bbf7d05cc030db..70abb42eaf2ad456e86be14eb9ec2f02e494e1d6 100644 (file)
@@ -1836,32 +1836,34 @@ static int _php_ibase_var_zval(zval *val, void *data, int type, int len, int sca
                        }
                        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:
index 341be8e31060fe618c3db00bbce01a0c0d59aec6..06a5c709c0ae4cd7de2a9cef4b54ffdbbedd70a9 100644 (file)
@@ -41,7 +41,7 @@ InterBase: misc sql types (may take a while)
        $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 @@ InterBase: misc sql types (may take a while)
             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";