Skip to content

Commit 8bb2465

Browse files
committed
MFH:
Add float conversions too. Float users should understand how float works!!!
1 parent 2fced40 commit 8bb2465

File tree

5 files changed

+15
-7
lines changed

5 files changed

+15
-7
lines changed

ext/mysqli/mysqli.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -777,7 +777,7 @@ PHP_MINIT_FUNCTION(mysqli)
777777
REGISTER_LONG_CONSTANT("MYSQLI_OPT_NET_READ_BUFFER_SIZE", MYSQLND_OPT_NET_READ_BUFFER_SIZE, CONST_CS | CONST_PERSISTENT);
778778
#endif
779779
#ifdef MYSQLND_STRING_TO_INT_CONVERSION
780-
REGISTER_LONG_CONSTANT("MYSQLI_OPT_INT_AND_YEAR_AS_INT", MYSQLND_OPT_INT_AND_YEAR_AS_INT, CONST_CS | CONST_PERSISTENT);
780+
REGISTER_LONG_CONSTANT("MYSQLI_OPT_INT_AND_FLOAT_NATIVE", MYSQLND_OPT_INT_AND_FLOAT_NATIVE, CONST_CS | CONST_PERSISTENT);
781781
#endif
782782

783783
/* mysqli_real_connect flags */

ext/mysqlnd/mysqlnd.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1711,8 +1711,8 @@ MYSQLND_METHOD(mysqlnd_conn, set_client_option)(MYSQLND * const conn,
17111711
conn->options.net_read_buffer_size = *(uint*) value;
17121712
break;
17131713
#ifdef MYSQLND_STRING_TO_INT_CONVERSION
1714-
case MYSQLND_OPT_INT_AND_YEAR_AS_INT:
1715-
conn->options.int_and_year_as_int = *(uint*) value;
1714+
case MYSQLND_OPT_INT_AND_FLOAT_NATIVE:
1715+
conn->options.int_and_float_native = *(uint*) value;
17161716
break;
17171717
#endif
17181718
case MYSQL_OPT_CONNECT_TIMEOUT:

ext/mysqlnd/mysqlnd_enum_n_def.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ typedef enum mysqlnd_option
136136
MYSQLND_OPT_NUMERIC_AND_DATETIME_AS_UNICODE = 200,
137137
#endif
138138
#ifdef MYSQLND_STRING_TO_INT_CONVERSION
139-
MYSQLND_OPT_INT_AND_YEAR_AS_INT = 201,
139+
MYSQLND_OPT_INT_AND_FLOAT_NATIVE = 201,
140140
#endif
141141
MYSQLND_OPT_NET_CMD_BUFFER_SIZE = 202,
142142
MYSQLND_OPT_NET_READ_BUFFER_SIZE = 203,

ext/mysqlnd/mysqlnd_structs.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ typedef struct st_mysqlnd_option
177177

178178
zend_bool numeric_and_datetime_as_unicode;
179179
#ifdef MYSQLND_STRING_TO_INT_CONVERSION
180-
zend_bool int_and_year_as_int;
180+
zend_bool int_and_float_native;
181181
#endif
182182
unsigned int net_read_buffer_size;
183183
} MYSQLND_OPTION;

ext/mysqlnd/mysqlnd_wireprotocol.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1467,7 +1467,7 @@ void php_mysqlnd_rowp_read_text_protocol(MYSQLND_MEMORY_POOL_CHUNK * row_buffer,
14671467
zend_uchar *bit_area = (zend_uchar*) row_buffer->ptr + data_size + 1; /* we allocate from here */
14681468
zend_bool as_unicode = conn->options.numeric_and_datetime_as_unicode;
14691469
#ifdef MYSQLND_STRING_TO_INT_CONVERSION
1470-
zend_bool as_int = conn->options.int_and_year_as_int;
1470+
zend_bool as_int_or_float = conn->options.int_and_float_native;
14711471
#endif
14721472

14731473
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,
15511551
}
15521552

15531553
#ifdef MYSQLND_STRING_TO_INT_CONVERSION
1554-
if (as_int && perm_bind.php_type == IS_LONG &&
1554+
if (as_int_or_float && perm_bind.php_type == IS_LONG &&
15551555
perm_bind.pack_len <= SIZEOF_LONG)
15561556
{
15571557
zend_uchar save = *(p + len);
@@ -1580,6 +1580,14 @@ void php_mysqlnd_rowp_read_text_protocol(MYSQLND_MEMORY_POOL_CHUNK * row_buffer,
15801580
}
15811581
}
15821582
*(p + len) = save;
1583+
} else if (as_int_or_float && perm_bind.php_type == IS_DOUBLE)
1584+
{
1585+
zend_uchar save = *(p + len);
1586+
/* We have to make it ASCIIZ temporarily */
1587+
*(p + len) = '\0';
1588+
double v = atof((char *) p);
1589+
ZVAL_DOUBLE(*current_field, v);
1590+
*(p + len) = save;
15831591
} else
15841592
#endif /* MYSQLND_STRING_TO_INT_CONVERSION */
15851593
if (fields_metadata[i].type == MYSQL_TYPE_BIT) {

0 commit comments

Comments
 (0)