}
} else {
zval *zv;
+ Oid typ = PQftype(res, c);
char *val = PQgetvalue(res, row, c);
int len = PQgetlength(res, row, c);
MAKE_STD_ZVAL(zv);
- switch (PQftype(res, c)) {
+ switch (typ) {
#ifdef HAVE_PHP_PQ_TYPE_H
# undef PHP_PQ_TYPE
# include "php_pq_type.h"
ZVAL_DOUBLE(zv, zend_strtod(val, NULL));
break;
- case PHP_PQ_OID_ABSTIME:
case PHP_PQ_OID_DATE:
+ php_pqdt_from_string(val, len, "Y-m-d", zv TSRMLS_CC);
+ break;
+
+ case PHP_PQ_OID_ABSTIME:
+ php_pqdt_from_string(val, len, "Y-m-d H:i:s", zv TSRMLS_CC);
+ break;
+
case PHP_PQ_OID_TIMESTAMP:
+ php_pqdt_from_string(val, len, "Y-m-d H:i:s.u", zv TSRMLS_CC);
+ break;
+
case PHP_PQ_OID_TIMESTAMPTZ:
- php_pq_date_from_string(val, len, zv TSRMLS_CC);
+ php_pqdt_from_string(val, len, "Y-m-d H:i:s.uO", zv TSRMLS_CC);
break;
#else
- case 18: /* BOOL */
+ case 16: /* BOOL */
ZVAL_BOOL(zv, *val == 't');
break;
#endif
default:
- ZVAL_STRINGL(zv, val, len, 1);
+ if (PHP_PQ_TYPE_IS_ARRAY(typ) && (Z_ARRVAL_P(zv) = php_pq_parse_array(val, len TSRMLS_CC))) {
+ Z_TYPE_P(zv) = IS_ARRAY;
+ } else {
+ ZVAL_STRINGL(zv, val, len, 1);
+ }
break;
}