]> granicus.if.org Git - php/commitdiff
Merge branch 'PHP-5.6'
authorKeyur Govande <keyur@php.net>
Wed, 7 Jan 2015 23:23:26 +0000 (23:23 +0000)
committerKeyur Govande <keyur@php.net>
Wed, 7 Jan 2015 23:23:26 +0000 (23:23 +0000)
* PHP-5.6:
  Add NEWS
  Add NEWS
  Patch commit d9f85373e32 by moving the float_to_double function to a header file.
  Fix for bugs #68114 (Build fails on OS X due to undefined symbols) and #68657 (Reading 4 byte floats with Mysqli and libmysqlclient has rounding errors).
  5.5.22 now

Conflicts:
ext/mysqli/mysqli_api.c

1  2 
ext/mysqli/mysqli_api.c
ext/mysqli/tests/bug67839.phpt
ext/mysqlnd/config9.m4
ext/mysqlnd/mysqlnd_ps_codec.c

index 698e6bb5ba8e9d881e42c20a70e03bbd49074980,3aa7b21b4c1b3fe683cd77c1f47ee5b3c0336847..7ea4d6a1a0d365a3fede864f38458e937ef071ef
  #include "php_ini.h"
  #include "php_globals.h"
  #include "ext/standard/info.h"
 -#include "ext/standard/php_smart_str.h"
 +#include "zend_smart_str.h"
  #include "php_mysqli_structs.h"
  #include "mysqli_priv.h"
+ #include "ext/mysqlnd/mysql_float_to_double.h"
  
  
  #if !defined(MYSQLI_USE_MYSQLND)
@@@ -413,8 -414,19 +414,17 @@@ mysqli_stmt_bind_result_do_bind(MY_STM
                col_type = (stmt->stmt->fields) ? stmt->stmt->fields[ofs].type : MYSQL_TYPE_STRING;
  
                switch (col_type) {
-                       case MYSQL_TYPE_DOUBLE:
                        case MYSQL_TYPE_FLOAT:
 -                              convert_to_double_ex(args[i]);
+                               stmt->result.buf[ofs].type = IS_DOUBLE;
+                               stmt->result.buf[ofs].buflen = sizeof(float);
+                               stmt->result.buf[ofs].val = (char *)emalloc(sizeof(float));
+                               bind[ofs].buffer_type = MYSQL_TYPE_FLOAT;
+                               bind[ofs].buffer = stmt->result.buf[ofs].val;
+                               bind[ofs].is_null = &stmt->result.is_null[ofs];
+                               break;
+                       case MYSQL_TYPE_DOUBLE:
 -                              convert_to_double_ex(args[i]);
                                stmt->result.buf[ofs].type = IS_DOUBLE;
                                stmt->result.buf[ofs].buflen = sizeof(double);
  
@@@ -1021,8 -1064,22 +1031,22 @@@ void mysqli_stmt_fetch_libmysql(INTERNA
                                                }
                                                break;
                                        case IS_DOUBLE:
-                                               ZVAL_DOUBLE(result, *(double *)stmt->result.buf[i].val);
+                                       {
+                                               double dval;
+                                               if (stmt->stmt->bind[i].buffer_type == MYSQL_TYPE_FLOAT) {
+ #ifndef NOT_FIXED_DEC
+ # define NOT_FIXED_DEC 31
+ #endif
+                                                       dval = mysql_float_to_double(*(float *)stmt->result.buf[i].val,
+                                                                               (stmt->stmt->fields[i].decimals >= NOT_FIXED_DEC) ? -1 :
+                                                                               stmt->stmt->fields[i].decimals);
+                                               } else {
+                                                       dval = *((double *)stmt->result.buf[i].val);
+                                               }
 -                                              ZVAL_DOUBLE(stmt->result.vars[i], dval);
++                                              ZVAL_DOUBLE(result, dval);
                                                break;
+                                       }
                                        case IS_STRING:
                                                if (stmt->stmt->bind[i].buffer_type == MYSQL_TYPE_LONGLONG
  #if MYSQL_VERSION_ID > 50002
Simple merge
Simple merge
Simple merge