X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-pq;a=blobdiff_plain;f=src%2Fphp_pqres.c;h=2ebcf74dbc2a2944d32855eb9081ce212f1e7f43;hp=75355154acc971ed4aa79ffc1f767707ddef1d24;hb=9e37136f3b7f6d2d2d35b5626cd56dab0d5acce3;hpb=fad4fe6a60c56ad5d5752e10abd1085884cc09c2 diff --git a/src/php_pqres.c b/src/php_pqres.c index 7535515..2ebcf74 100644 --- a/src/php_pqres.c +++ b/src/php_pqres.c @@ -127,12 +127,13 @@ zval *php_pqres_row_to_zval(PGresult *res, unsigned row, php_pqres_fetch_t fetch } } 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" @@ -155,21 +156,34 @@ zval *php_pqres_row_to_zval(PGresult *res, unsigned row, php_pqres_fetch_t fetch 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; }