]> granicus.if.org Git - php/commitdiff
Add float conversions too. Float users should understand how float works!!!
authorAndrey Hristov <andrey@php.net>
Mon, 15 Sep 2008 18:07:58 +0000 (18:07 +0000)
committerAndrey Hristov <andrey@php.net>
Mon, 15 Sep 2008 18:07:58 +0000 (18:07 +0000)
ext/mysqli/mysqli.c
ext/mysqlnd/mysqlnd_structs.h
ext/mysqlnd/mysqlnd_wireprotocol.c

index 7562e94632ddbc0b41b19f78c30de3de7c23f504..89bee8c58f173189fd2e0ab195d506fe23968d81 100644 (file)
@@ -783,7 +783,7 @@ PHP_MINIT_FUNCTION(mysqli)
        REGISTER_LONG_CONSTANT("MYSQLI_OPT_NET_READ_BUFFER_SIZE", MYSQLND_OPT_NET_READ_BUFFER_SIZE, CONST_CS | CONST_PERSISTENT);
 #endif
 #ifdef MYSQLND_STRING_TO_INT_CONVERSION
-       REGISTER_LONG_CONSTANT("MYSQLI_OPT_INT_AND_YEAR_AS_INT", MYSQLND_OPT_INT_AND_YEAR_AS_INT, CONST_CS | CONST_PERSISTENT);
+       REGISTER_LONG_CONSTANT("MYSQLI_OPT_INT_AND_FLOAT_NATIVE", MYSQLND_OPT_INT_AND_FLOAT_NATIVE, CONST_CS | CONST_PERSISTENT);
 #endif
 
        /* mysqli_real_connect flags */ 
index 2f6dcfa2e14be644337e4700b2855b3c345f2592..2385aff6aa445ff61d862a887d61274ada93d7cd 100644 (file)
@@ -177,7 +177,7 @@ typedef struct st_mysqlnd_option
 
        zend_bool       numeric_and_datetime_as_unicode;
 #ifdef MYSQLND_STRING_TO_INT_CONVERSION
-       zend_bool       int_and_year_as_int;
+       zend_bool       int_and_float_native;
 #endif
        unsigned int net_read_buffer_size;
 } MYSQLND_OPTION;
index d6e4715483095e12782d9a1278449d1d62b71ba7..0dc013df4120dcbb42f7f01e88fd5d23d2d7740f 100644 (file)
@@ -1467,7 +1467,7 @@ void php_mysqlnd_rowp_read_text_protocol(MYSQLND_MEMORY_POOL_CHUNK * row_buffer,
        zend_uchar *bit_area = (zend_uchar*) row_buffer->ptr + data_size + 1; /* we allocate from here */
        zend_bool as_unicode = conn->options.numeric_and_datetime_as_unicode;
 #ifdef MYSQLND_STRING_TO_INT_CONVERSION
-       zend_bool as_int = conn->options.int_and_year_as_int;
+       zend_bool as_int_or_float = conn->options.int_and_float_native;
 #endif
 
        DBG_ENTER("php_mysqlnd_rowp_read_text_protocol");
@@ -1551,7 +1551,7 @@ void php_mysqlnd_rowp_read_text_protocol(MYSQLND_MEMORY_POOL_CHUNK * row_buffer,
                        }
 
 #ifdef MYSQLND_STRING_TO_INT_CONVERSION
-                       if (as_int && perm_bind.php_type == IS_LONG &&
+                       if (as_int_or_float && perm_bind.php_type == IS_LONG &&
                                perm_bind.pack_len <= SIZEOF_LONG)
                        {
                                zend_uchar save = *(p + len);
@@ -1580,6 +1580,14 @@ void php_mysqlnd_rowp_read_text_protocol(MYSQLND_MEMORY_POOL_CHUNK * row_buffer,
                                        }
                                }
                                *(p + len) = save;
+                       } else if (as_int_or_float && perm_bind.php_type == IS_DOUBLE)
+                       {
+                               zend_uchar save = *(p + len);
+                               /* We have to make it ASCIIZ temporarily */
+                               *(p + len) = '\0';
+                               double v = atof((char *) p);
+                               ZVAL_DOUBLE(*current_field, v);
+                               *(p + len) = save;
                        } else
 #endif /* MYSQLND_STRING_TO_INT_CONVERSION */
                        if (fields_metadata[i].type == MYSQL_TYPE_BIT) {