#include <php.h>
#include <ext/spl/spl_iterators.h>
+#include <ext/json/php_json.h>
#include <libpq-events.h>
#include "php_pq.h"
php_pqdt_from_string(val, len, "Y-m-d H:i:s.uO", zv TSRMLS_CC);
break;
+#ifdef PHP_PQ_OID_JSON
+# ifdef PHP_PQ_OID_JSONB
+ case PHP_PQ_OID_JSONB:
+# endif
+ case PHP_PQ_OID_JSON:
+ if (!(res->auto_convert & PHP_PQRES_CONV_JSON)) {
+ goto noconversion;
+ }
+ php_json_decode_ex(zv, val, len, 0, 512 /* PHP_JSON_DEFAULT_DEPTH */ TSRMLS_CC);
+ break;
+#endif
+
default:
if (!(res->auto_convert & PHP_PQRES_CONV_ARRAY)) {
goto noconversion;
long index = -1;
char *name = NULL;
- switch (Z_TYPE_P(zcol)) {
- case IS_LONG:
- index = Z_LVAL_P(zcol);
- break;
+ if (!zcol) {
+ index = 0;
+ } else {
+ switch (Z_TYPE_P(zcol)) {
+ case IS_NULL:
+ index = 0;
+ break;
- default:
- convert_to_string(zcol);
- /* no break */
+ case IS_LONG:
+ index = Z_LVAL_P(zcol);
+ break;
+
+ default:
+ convert_to_string(zcol);
+ /* no break */
- case IS_STRING:
- if (!is_numeric_string(Z_STRVAL_P(zcol), Z_STRLEN_P(zcol), &index, NULL, 0)) {
- name = Z_STRVAL_P(zcol);
+ case IS_STRING:
+ if (!is_numeric_string(Z_STRVAL_P(zcol), Z_STRLEN_P(zcol), &index, NULL, 0)) {
+ name = Z_STRVAL_P(zcol);
+ }
+ break;
}
- break;
}
if (name) {
return data;
}
-ZEND_BEGIN_ARG_INFO_EX(ai_pqres_fetch_col, 0, 0, 2)
- ZEND_ARG_INFO(0, col)
+ZEND_BEGIN_ARG_INFO_EX(ai_pqres_fetch_col, 0, 0, 1)
ZEND_ARG_INFO(1, ref)
+ ZEND_ARG_INFO(0, col)
ZEND_END_ARG_INFO();
static PHP_METHOD(pqres, fetchCol) {
zend_error_handling zeh;
- zval *zcol, *zref;
+ zval *zcol = NULL, *zref;
STATUS rv;
zend_replace_error_handling(EH_THROW, exce(EX_INVALID_ARGUMENT), &zeh TSRMLS_CC);
- rv = zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z/z", &zcol, &zref);
+ rv = zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|z/!", &zref, &zcol);
zend_restore_error_handling(&zeh TSRMLS_CC);
if (SUCCESS == rv) {
}
}
-ZEND_BEGIN_ARG_INFO_EX(ai_pqres_fetch_all_cols, 0, 0, 1)
+ZEND_BEGIN_ARG_INFO_EX(ai_pqres_fetch_all_cols, 0, 0, 0)
ZEND_ARG_INFO(0, col)
ZEND_END_ARG_INFO();
static PHP_METHOD(pqres, fetchAllCols) {
zend_error_handling zeh;
- zval *zcol;
+ zval *zcol = NULL;
STATUS rv;
zend_replace_error_handling(EH_THROW, exce(EX_INVALID_ARGUMENT), &zeh TSRMLS_CC);
- rv = zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &zcol);
+ rv = zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|z!", &zcol);
zend_restore_error_handling(&zeh TSRMLS_CC);
if (SUCCESS == rv) {
zend_hash_add(&php_pqres_object_prophandlers, "fetchType", sizeof("fetchType"), (void *) &ph, sizeof(ph), NULL);
ph.write = NULL;
- zend_declare_property_long(php_pqres_class_entry, ZEND_STRL("autoConvert"), PHP_PQRES_FETCH_ARRAY, ZEND_ACC_PUBLIC TSRMLS_CC);
+ zend_declare_property_long(php_pqres_class_entry, ZEND_STRL("autoConvert"), PHP_PQRES_CONV_ALL, ZEND_ACC_PUBLIC TSRMLS_CC);
ph.read = php_pqres_object_read_auto_conv;
ph.write = php_pqres_object_write_auto_conv;
zend_hash_add(&php_pqres_object_prophandlers, "autoConvert", sizeof("autoConvert"), (void *) &ph, sizeof(ph), NULL);