Fixed array parser compatibility with arrays of boxes
[m6w6/ext-pq] / src / php_pq_params.c
index 4a6ba68ca33ec8a42a7c77f3a4dcf03c37eef4b8..1ae7dd654ad1a54fb674b306c449ebc16436ea62 100644 (file)
@@ -17,7 +17,9 @@
 #include <php.h>
 #include <ext/standard/php_string.h>
 #include <ext/standard/php_smart_str.h>
-#include <ext/json/php_json.h>
+#if PHP_PQ_HAVE_PHP_JSON_H
+#include <php_json.h> /* we've added the include directory to INCLUDES */
+#endif
 
 #include <Zend/zend_interfaces.h>
 
@@ -86,7 +88,7 @@ static zval *object_param_to_string(php_pq_params_t *p, zval *zobj, Oid type TSR
        smart_str str = {0};
 
        switch (type) {
-#ifdef PHP_PQ_OID_JSON
+#if PHP_PQ_HAVE_PHP_JSON_H && defined(PHP_PQ_OID_JSON)
 #      ifdef PHP_PQ_OID_JSONB
        case PHP_PQ_OID_JSONB:
 #      endif
@@ -132,6 +134,7 @@ struct apply_to_param_from_array_arg {
        unsigned index;
        smart_str *buffer;
        Oid type;
+       char delim;
        zval **zconv;
 };
 
@@ -144,7 +147,7 @@ static int apply_to_param_from_array(void *ptr, void *arg_ptr TSRMLS_DC)
        int tmp_len;
 
        if (arg->index++) {
-               smart_str_appendc(arg->buffer, ',');
+               smart_str_appendc(arg->buffer, arg->delim);
        }
 
        if (arg->zconv) {
@@ -225,7 +228,7 @@ static zval *array_param_to_string(php_pq_params_t *p, zval *zarr, Oid type TSRM
        struct apply_to_param_from_array_arg arg = {NULL};
 
        switch (type) {
-#ifdef PHP_PQ_OID_JSON
+#if PHP_PQ_HAVE_PHP_JSON_H && defined(PHP_PQ_OID_JSON)
 #      ifdef PHP_PQ_OID_JSONB
        case PHP_PQ_OID_JSONB:
 #      endif
@@ -239,6 +242,7 @@ static zval *array_param_to_string(php_pq_params_t *p, zval *zarr, Oid type TSRM
                arg.params = p;
                arg.buffer = &s;
                arg.type = PHP_PQ_TYPE_OF_ARRAY(type);
+               arg.delim = PHP_PQ_DELIM_OF_ARRAY(type);
                zend_hash_index_find(&p->type.conv, PHP_PQ_TYPE_OF_ARRAY(type), (void *) &arg.zconv);
                smart_str_appendc(arg.buffer, '{');
                MAKE_STD_ZVAL(zcopy);