diff options
author | Andrey Hristov <andrey@php.net> | 2008-09-15 18:09:20 +0000 |
---|---|---|
committer | Andrey Hristov <andrey@php.net> | 2008-09-15 18:09:20 +0000 |
commit | 8bb2465a516361bf857b264a44aee0339774c72c (patch) | |
tree | 5b239d0ecd2439e0d9a6c32f48ebb9c5c393b22e | |
parent | 2fced40b7674c8de0ba115aac14888a8b795cee3 (diff) | |
download | php-git-8bb2465a516361bf857b264a44aee0339774c72c.tar.gz |
MFH:
Add float conversions too. Float users should understand how float works!!!
-rw-r--r-- | ext/mysqli/mysqli.c | 2 | ||||
-rw-r--r-- | ext/mysqlnd/mysqlnd.c | 4 | ||||
-rw-r--r-- | ext/mysqlnd/mysqlnd_enum_n_def.h | 2 | ||||
-rw-r--r-- | ext/mysqlnd/mysqlnd_structs.h | 2 | ||||
-rw-r--r-- | ext/mysqlnd/mysqlnd_wireprotocol.c | 12 |
5 files changed, 15 insertions, 7 deletions
diff --git a/ext/mysqli/mysqli.c b/ext/mysqli/mysqli.c index 1cdab4dbd4..96a5cde068 100644 --- a/ext/mysqli/mysqli.c +++ b/ext/mysqli/mysqli.c @@ -777,7 +777,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 */ diff --git a/ext/mysqlnd/mysqlnd.c b/ext/mysqlnd/mysqlnd.c index 0a4c718011..a68808c357 100644 --- a/ext/mysqlnd/mysqlnd.c +++ b/ext/mysqlnd/mysqlnd.c @@ -1711,8 +1711,8 @@ MYSQLND_METHOD(mysqlnd_conn, set_client_option)(MYSQLND * const conn, conn->options.net_read_buffer_size = *(uint*) value; break; #ifdef MYSQLND_STRING_TO_INT_CONVERSION - case MYSQLND_OPT_INT_AND_YEAR_AS_INT: - conn->options.int_and_year_as_int = *(uint*) value; + case MYSQLND_OPT_INT_AND_FLOAT_NATIVE: + conn->options.int_and_float_native = *(uint*) value; break; #endif case MYSQL_OPT_CONNECT_TIMEOUT: diff --git a/ext/mysqlnd/mysqlnd_enum_n_def.h b/ext/mysqlnd/mysqlnd_enum_n_def.h index 3528d42f5d..2b397ffaad 100644 --- a/ext/mysqlnd/mysqlnd_enum_n_def.h +++ b/ext/mysqlnd/mysqlnd_enum_n_def.h @@ -136,7 +136,7 @@ typedef enum mysqlnd_option MYSQLND_OPT_NUMERIC_AND_DATETIME_AS_UNICODE = 200, #endif #ifdef MYSQLND_STRING_TO_INT_CONVERSION - MYSQLND_OPT_INT_AND_YEAR_AS_INT = 201, + MYSQLND_OPT_INT_AND_FLOAT_NATIVE = 201, #endif MYSQLND_OPT_NET_CMD_BUFFER_SIZE = 202, MYSQLND_OPT_NET_READ_BUFFER_SIZE = 203, diff --git a/ext/mysqlnd/mysqlnd_structs.h b/ext/mysqlnd/mysqlnd_structs.h index 2f6dcfa2e1..2385aff6aa 100644 --- a/ext/mysqlnd/mysqlnd_structs.h +++ b/ext/mysqlnd/mysqlnd_structs.h @@ -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; diff --git a/ext/mysqlnd/mysqlnd_wireprotocol.c b/ext/mysqlnd/mysqlnd_wireprotocol.c index d6e4715483..0dc013df41 100644 --- a/ext/mysqlnd/mysqlnd_wireprotocol.c +++ b/ext/mysqlnd/mysqlnd_wireprotocol.c @@ -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) { |