prefix internal API; ensure raphf is built first in-tree
[m6w6/ext-pq] / src / php_pqres.c
index ae8774db10ca22a3c0ae1ea226bb26e22d8c856b..1ad5f1dd681aa7e636bc276b5a8a61c8dee04b67 100644 (file)
@@ -82,7 +82,7 @@ static STATUS php_pqres_iterator_valid(zend_object_iterator *i TSRMLS_DC)
 
        switch (PQresultStatus(obj->intern->res)) {
        case PGRES_TUPLES_OK:
-#if HAVE_PGRES_SINGLE_TUPLE
+#ifdef HAVE_PGRES_SINGLE_TUPLE
        case PGRES_SINGLE_TUPLE:
 #endif
                if (PQntuples(obj->intern->res) <= iter->index) {
@@ -126,10 +126,9 @@ zval *php_pqres_typed_zval(php_pqres_t *res, char *val, size_t len, Oid typ TSRM
                }
                ZVAL_BOOL(zv, *val == 't');
                break;
-#if SIZEOF_LONG >= 8
+
        case PHP_PQ_OID_INT8:
        case PHP_PQ_OID_TID:
-#endif
        case PHP_PQ_OID_INT4:
        case PHP_PQ_OID_INT2:
        case PHP_PQ_OID_XID:
@@ -137,7 +136,21 @@ zval *php_pqres_typed_zval(php_pqres_t *res, char *val, size_t len, Oid typ TSRM
                if (!(res->auto_convert & PHP_PQRES_CONV_INT)) {
                        goto noconversion;
                }
-               ZVAL_LONG(zv, zend_atol(val, len));
+               {
+                       long lval;
+                       double dval;
+
+                       switch (is_numeric_string(val, len, &lval, &dval, 0)) {
+                               case IS_LONG:
+                                       ZVAL_LONG(zv, lval);
+                                       break;
+                               case IS_DOUBLE:
+                                       ZVAL_DOUBLE(zv, dval);
+                                       break;
+                               default:
+                                       goto noconversion;
+                       }
+               }
                break;
 
        case PHP_PQ_OID_FLOAT4:
@@ -687,7 +700,7 @@ static PHP_METHOD(pqres, bind) {
                                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to bind column %s@%d", col.name, col.num);
                                        RETVAL_FALSE;
                                } else {
-                                       zend_hash_sort(&obj->intern->bound, zend_qsort, compare_index, 0 TSRMLS_CC);
+                                       zend_hash_sort(&obj->intern->bound, zend_qsort, php_pq_compare_index, 0 TSRMLS_CC);
                                        RETVAL_TRUE;
                                }
                        }
@@ -1211,7 +1224,7 @@ PHP_MINIT_FUNCTION(pqres)
 #ifdef HAVE_PGRES_COPY_BOTH
        zend_declare_class_constant_long(php_pqres_class_entry, ZEND_STRL("COPY_BOTH"), PGRES_COPY_BOTH TSRMLS_CC);
 #endif
-#if HAVE_PGRES_SINGLE_TUPLE
+#ifdef HAVE_PGRES_SINGLE_TUPLE
        zend_declare_class_constant_long(php_pqres_class_entry, ZEND_STRL("SINGLE_TUPLE"), PGRES_SINGLE_TUPLE TSRMLS_CC);
 #endif