- char *val = PQgetvalue(res, row, c);
- int len = PQgetlength(res, row, c);
+ zval *zv, **zconv;
+
+ if (res_obj && (SUCCESS == zend_hash_index_find(&res_obj->intern->converters, PQftype(res, c), (void *) &zconv))) {
+ zval *tmp = NULL;
+
+ MAKE_STD_ZVAL(zv);
+ ZVAL_STRINGL(zv, PQgetvalue(res, row, c), PQgetlength(res, row, c), 1);
+ zend_call_method_with_1_params(zconv, NULL, NULL, "convertfromstring", &tmp, zv);
+
+ if (tmp) {
+ zval_ptr_dtor(&zv);
+ zv = tmp;
+ }
+ } else {
+ zv = php_pq_typed_zval(PQgetvalue(res, row, c), PQgetlength(res, row, c), PQftype(res, c) TSRMLS_CC);
+ }