Merge branch 'feature/cursor-async' of https://github.com/DaveRandom/pecl-database-pq
[m6w6/ext-pq] / src / php_pqres.h
1 /*
2 +--------------------------------------------------------------------+
3 | PECL :: pq |
4 +--------------------------------------------------------------------+
5 | Redistribution and use in source and binary forms, with or without |
6 | modification, are permitted provided that the conditions mentioned |
7 | in the accompanying LICENSE file are met. |
8 +--------------------------------------------------------------------+
9 | Copyright (c) 2013, Michael Wallner <mike@php.net> |
10 +--------------------------------------------------------------------+
11 */
12
13
14 #ifndef PHP_PQRES_H
15 #define PHP_PQRES_H
16
17 #include "php_pqconn.h"
18
19 typedef enum php_pqres_fetch {
20 PHP_PQRES_FETCH_ARRAY,
21 PHP_PQRES_FETCH_ASSOC,
22 PHP_PQRES_FETCH_OBJECT
23 } php_pqres_fetch_t;
24
25 #define PHP_PQRES_CONV_BOOL 0x0001
26 #define PHP_PQRES_CONV_INT 0x0002
27 #define PHP_PQRES_CONV_FLOAT 0x0004
28 #define PHP_PQRES_CONV_SCALAR 0x000f
29 #define PHP_PQRES_CONV_ARRAY 0x0010
30 #define PHP_PQRES_CONV_DATETIME 0x0020
31 #define PHP_PQRES_CONV_JSON 0x0100
32 #define PHP_PQRES_CONV_ALL 0xffff
33
34 typedef struct php_pqres_iterator {
35 zend_object_iterator zi;
36 zval *current_val;
37 unsigned index;
38 php_pqres_fetch_t fetch_type;
39 } php_pqres_iterator_t;
40
41 typedef struct php_pqres {
42 PGresult *res;
43 php_pqres_iterator_t *iter;
44 HashTable bound;
45 HashTable converters;
46 unsigned auto_convert;
47 php_pqres_fetch_t default_fetch_type;
48 } php_pqres_t;
49
50 typedef struct php_pqres_object {
51 zend_object zo;
52 zend_object_value zv;
53 HashTable *prophandler;
54 php_pqres_t *intern;
55 } php_pqres_object_t;
56
57 extern ZEND_RESULT_CODE php_pqres_success(PGresult *res TSRMLS_DC);
58 extern void php_pqres_init_instance_data(PGresult *res, php_pqconn_object_t *obj, php_pqres_object_t **ptr TSRMLS_DC);
59 extern zval *php_pqres_row_to_zval(PGresult *res, unsigned row, php_pqres_fetch_t fetch_type, zval **data_ptr TSRMLS_DC);
60 extern zval *php_pqres_typed_zval(php_pqres_t *res, char *val, size_t len, Oid typ TSRMLS_DC);
61 extern php_pqres_fetch_t php_pqres_fetch_type(php_pqres_t *res);
62
63 #include "php_pq_object.h"
64 #include "php_pqconn_event.h"
65 #define PHP_PQclear(_r) do { \
66 php_pqres_object_t *_o = PQresultInstanceData((_r), php_pqconn_event); \
67 if (_o) { \
68 php_pq_object_delref(_o TSRMLS_CC); \
69 } else { \
70 PQclear(_r); \
71 } \
72 } while(0)
73
74 extern zend_class_entry *php_pqres_class_entry;
75 extern zend_object_value php_pqres_create_object_ex(zend_class_entry *ce, php_pqres_t *intern, php_pqres_object_t **ptr TSRMLS_DC);
76
77 extern PHP_MINIT_FUNCTION(pqres);
78 extern PHP_MSHUTDOWN_FUNCTION(pqres);
79
80 #endif
81
82 /*
83 * Local variables:
84 * tab-width: 4
85 * c-basic-offset: 4
86 * End:
87 * vim600: noet sw=4 ts=4 fdm=marker
88 * vim<600: noet sw=4 ts=4
89 */