diff options
author | Xinchen Hui <laruence@gmail.com> | 2015-02-03 13:51:04 +0800 |
---|---|---|
committer | Xinchen Hui <laruence@gmail.com> | 2015-02-03 13:51:04 +0800 |
commit | 0d4255de30314dbfa32827e044b35543b1ae5a39 (patch) | |
tree | eb8adc5f1e3a67cc10197babf8d27f57463d4011 | |
parent | 5c87488a70acafa9122fba58774e2ea6bc6f1f26 (diff) | |
download | php-git-0d4255de30314dbfa32827e044b35543b1ae5a39.tar.gz |
Ported pgsql
-rw-r--r-- | ext/pgsql/pgsql.c | 569 |
1 files changed, 318 insertions, 251 deletions
diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c index 225ff65c30..7b755fd9c8 100644 --- a/ext/pgsql/pgsql.c +++ b/ext/pgsql/pgsql.c @@ -86,8 +86,8 @@ #define PQ_SETNONBLOCKING(pg_link, flag) 0 #endif -#define CHECK_DEFAULT_LINK(x) if ((x) == -1) { php_error_docref(NULL, E_WARNING, "No PostgreSQL link opened yet"); } -#define FETCH_DEFAULT_LINK() PGG(default_link) ? (int)PGG(default_link)->handle : -1 +#define CHECK_DEFAULT_LINK(x) if ((x) == NULL) { php_error_docref(NULL, E_WARNING, "No PostgreSQL link opened yet"); } +#define FETCH_DEFAULT_LINK() PGG(default_link) #ifndef HAVE_PQFREEMEM #define PQfreemem free @@ -1409,7 +1409,7 @@ static void php_pgsql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent) PQclear(pg_result); } } - ZEND_REGISTER_RESOURCE(return_value, pgsql, le_plink); + RETVAL_RES(zend_register_resource(pgsql, le_plink)); } else { /* Non persistent connection */ zend_resource *index_ptr, new_index_ptr; @@ -1472,7 +1472,7 @@ static void php_pgsql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent) } /* add it to the list */ - ZEND_REGISTER_RESOURCE(return_value, pgsql, le_link); + RETVAL_RES(zend_register_resource(pgsql, le_link)); /* add it to the hash */ new_index_ptr.ptr = (void *) Z_RES_P(return_value); @@ -1484,7 +1484,7 @@ static void php_pgsql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent) } /* set notice processor */ if (! PGG(ignore_notices) && Z_TYPE_P(return_value) == IS_RESOURCE) { - PQsetNoticeProcessor(pgsql, _php_pgsql_notice_handler, (void*)Z_RES_HANDLE_P(return_value)); + PQsetNoticeProcessor(pgsql, _php_pgsql_notice_handler, (void*)(zend_uintptr_t)Z_RES_HANDLE_P(return_value)); } php_pgsql_set_default_link(Z_RES_P(return_value)); @@ -1525,20 +1525,17 @@ PHP_FUNCTION(pg_connect) PHP_FUNCTION(pg_connect_poll) { zval *pgsql_link; - int id = -1; PGconn *pgsql; int ret; if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &pgsql_link) == FAILURE) { return; } - - if (pgsql_link == NULL) { + + if ((pgsql = (PGconn *)zend_fetch_resource2(Z_RES_P(pgsql_link), "PostgreSQL link", le_link, le_plink)) == NULL) { RETURN_FALSE; } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); - ret = PQconnectPoll(pgsql); RETURN_LONG(ret); @@ -1558,7 +1555,8 @@ PHP_FUNCTION(pg_pconnect) PHP_FUNCTION(pg_close) { zval *pgsql_link = NULL; - int id = -1, argc = ZEND_NUM_ARGS(); + zend_resource *link; + int argc = ZEND_NUM_ARGS(); PGconn *pgsql; if (zend_parse_parameters(argc, "|r", &pgsql_link) == FAILURE) { @@ -1566,23 +1564,22 @@ PHP_FUNCTION(pg_close) } if (argc == 0) { - id = FETCH_DEFAULT_LINK(); - CHECK_DEFAULT_LINK(id); + link = FETCH_DEFAULT_LINK(); + CHECK_DEFAULT_LINK(link); + } else { + link = Z_RES_P(pgsql_link); } - if (pgsql_link == NULL && id == -1) { + if ((pgsql = (PGconn *)zend_fetch_resource2(link, "PostgreSQL link", le_link, le_plink)) == NULL) { RETURN_FALSE; } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); - - if (id==-1) { /* explicit resource number */ - zend_list_close(Z_RES_P(pgsql_link)); + if (argc == 0) { /* explicit resource number */ + zend_list_close(link); } - if (id!=-1 - || (pgsql_link && Z_RES_P(pgsql_link) == PGG(default_link))) { - zend_list_close(PGG(default_link)); + if (argc || (pgsql_link && Z_RES_P(pgsql_link) == PGG(default_link))) { + zend_list_close(link); PGG(default_link) = NULL; } @@ -1602,8 +1599,9 @@ PHP_FUNCTION(pg_close) */ static void php_pgsql_get_link_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type) { + zend_resource *link; zval *pgsql_link = NULL; - int id = -1, argc = ZEND_NUM_ARGS(); + int argc = ZEND_NUM_ARGS(); PGconn *pgsql; char *msgbuf; char *result; @@ -1613,16 +1611,16 @@ static void php_pgsql_get_link_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type } if (argc == 0) { - id = FETCH_DEFAULT_LINK(); - CHECK_DEFAULT_LINK(id); + link = FETCH_DEFAULT_LINK(); + CHECK_DEFAULT_LINK(link); + } else { + link = Z_RES_P(pgsql_link); } - if (pgsql_link == NULL && id == -1) { + if ((pgsql = (PGconn *)zend_fetch_resource2(link, "PostgreSQL link", le_link, le_plink)) == NULL) { RETURN_FALSE; } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); - switch(entry_type) { case PHP_PG_DBNAME: result = PQdb(pgsql); @@ -1750,26 +1748,27 @@ PHP_FUNCTION(pg_version) Returns the value of a server parameter */ PHP_FUNCTION(pg_parameter_status) { - zval *pgsql_link; - int id; + zval *pgsql_link = NULL; + zend_resource *link; PGconn *pgsql; char *param; size_t len; - if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "rs", &pgsql_link, ¶m, &len) == SUCCESS) { - id = -1; - } else if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", ¶m, &len) == SUCCESS) { - pgsql_link = NULL; - id = FETCH_DEFAULT_LINK(); + if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "rs", &pgsql_link, ¶m, &len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", ¶m, &len) == SUCCESS) { + link = FETCH_DEFAULT_LINK(); + CHECK_DEFAULT_LINK(link); + } else { + RETURN_FALSE; + } } else { - RETURN_FALSE; + link = Z_RES_P(pgsql_link); } - if (pgsql_link == NULL && id == -1) { + + if ((pgsql = (PGconn *)zend_fetch_resource2(link, "PostgreSQL link", le_link, le_plink)) == NULL) { RETURN_FALSE; } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); - param = (char*)PQparameterStatus(pgsql, param); if (param) { RETURN_STRING(param); @@ -1785,22 +1784,21 @@ PHP_FUNCTION(pg_parameter_status) PHP_FUNCTION(pg_ping) { zval *pgsql_link; - int id; PGconn *pgsql; PGresult *res; + zend_resource *link; if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "r", &pgsql_link) == SUCCESS) { - id = -1; + link = Z_RES_P(pgsql_link); } else { - pgsql_link = NULL; - id = FETCH_DEFAULT_LINK(); + link = FETCH_DEFAULT_LINK(); + CHECK_DEFAULT_LINK(link); } - if (pgsql_link == NULL && id == -1) { + + if ((pgsql = (PGconn *)zend_fetch_resource2(link, "PostgreSQL link", le_link, le_plink)) == NULL) { RETURN_FALSE; } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); - /* ping connection */ res = PQexec(pgsql, "SELECT 1;"); PQclear(res); @@ -1824,9 +1822,10 @@ PHP_FUNCTION(pg_query) { zval *pgsql_link = NULL; char *query; - int id = -1, argc = ZEND_NUM_ARGS(); + int argc = ZEND_NUM_ARGS(); size_t query_len; int leftover = 0; + zend_resource *link; PGconn *pgsql; PGresult *pgsql_result; ExecStatusType status; @@ -1836,20 +1835,19 @@ PHP_FUNCTION(pg_query) if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &query, &query_len) == FAILURE) { return; } - id = FETCH_DEFAULT_LINK(); - CHECK_DEFAULT_LINK(id); + link = FETCH_DEFAULT_LINK(); + CHECK_DEFAULT_LINK(link); } else { if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &pgsql_link, &query, &query_len) == FAILURE) { return; } + link = Z_RES_P(pgsql_link); } - if (pgsql_link == NULL && id == -1) { + if ((pgsql = (PGconn *)zend_fetch_resource2(link, "PostgreSQL link", le_link, le_plink)) == NULL) { RETURN_FALSE; } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); - if (PQ_SETNONBLOCKING(pgsql, 0)) { php_error_docref(NULL, E_NOTICE,"Cannot set connection to blocking mode"); RETURN_FALSE; @@ -1890,7 +1888,7 @@ PHP_FUNCTION(pg_query) pg_result->conn = pgsql; pg_result->result = pgsql_result; pg_result->row = 0; - ZEND_REGISTER_RESOURCE(return_value, pg_result, le_result); + RETURN_RES(zend_register_resource(pg_result, le_result)); } else { PQclear(pgsql_result); RETURN_FALSE; @@ -1926,10 +1924,11 @@ PHP_FUNCTION(pg_query_params) zval *pv_param_arr, *tmp; char *query; size_t query_len; - int id = -1, argc = ZEND_NUM_ARGS(); + int argc = ZEND_NUM_ARGS(); int leftover = 0; int num_params = 0; char **params = NULL; + zend_resource *link; PGconn *pgsql; PGresult *pgsql_result; ExecStatusType status; @@ -1939,20 +1938,19 @@ PHP_FUNCTION(pg_query_params) if (zend_parse_parameters(argc, "sa", &query, &query_len, &pv_param_arr) == FAILURE) { return; } - id = FETCH_DEFAULT_LINK(); - CHECK_DEFAULT_LINK(id); + link = FETCH_DEFAULT_LINK(); + CHECK_DEFAULT_LINK(link); } else { if (zend_parse_parameters(argc, "rsa", &pgsql_link, &query, &query_len, &pv_param_arr) == FAILURE) { return; } + link = Z_RES_P(pgsql_link); } - if (pgsql_link == NULL && id == -1) { + if ((pgsql = (PGconn *)zend_fetch_resource2(link, "PostgreSQL link", le_link, le_plink)) == NULL) { RETURN_FALSE; } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); - if (PQ_SETNONBLOCKING(pgsql, 0)) { php_error_docref(NULL, E_NOTICE,"Cannot set connection to blocking mode"); RETURN_FALSE; @@ -2025,7 +2023,7 @@ PHP_FUNCTION(pg_query_params) pg_result->conn = pgsql; pg_result->result = pgsql_result; pg_result->row = 0; - ZEND_REGISTER_RESOURCE(return_value, pg_result, le_result); + RETURN_RES(zend_register_resource(pg_result, le_result)); } else { PQclear(pgsql_result); RETURN_FALSE; @@ -2044,9 +2042,10 @@ PHP_FUNCTION(pg_prepare) zval *pgsql_link = NULL; char *query, *stmtname; size_t query_len, stmtname_len; - int id = -1, argc = ZEND_NUM_ARGS(); + int argc = ZEND_NUM_ARGS(); int leftover = 0; PGconn *pgsql; + zend_resource *link; PGresult *pgsql_result; ExecStatusType status; pgsql_result_handle *pg_result; @@ -2055,20 +2054,19 @@ PHP_FUNCTION(pg_prepare) if (zend_parse_parameters(argc, "ss", &stmtname, &stmtname_len, &query, &query_len) == FAILURE) { return; } - id = FETCH_DEFAULT_LINK(); - CHECK_DEFAULT_LINK(id); + link = FETCH_DEFAULT_LINK(); + CHECK_DEFAULT_LINK(link); } else { if (zend_parse_parameters(argc, "rss", &pgsql_link, &stmtname, &stmtname_len, &query, &query_len) == FAILURE) { return; } + link = Z_RES_P(pgsql_link); } - if (pgsql_link == NULL && id == -1) { + if ((pgsql = (PGconn *)zend_fetch_resource2(link, "PostgreSQL link", le_link, le_plink)) == NULL) { RETURN_FALSE; } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); - if (PQ_SETNONBLOCKING(pgsql, 0)) { php_error_docref(NULL, E_NOTICE,"Cannot set connection to blocking mode"); RETURN_FALSE; @@ -2109,7 +2107,7 @@ PHP_FUNCTION(pg_prepare) pg_result->conn = pgsql; pg_result->result = pgsql_result; pg_result->row = 0; - ZEND_REGISTER_RESOURCE(return_value, pg_result, le_result); + RETURN_RES(zend_register_resource(pg_result, le_result)); } else { PQclear(pgsql_result); RETURN_FALSE; @@ -2129,11 +2127,12 @@ PHP_FUNCTION(pg_execute) zval *pv_param_arr, *tmp; char *stmtname; size_t stmtname_len; - int id = -1, argc = ZEND_NUM_ARGS(); + int argc = ZEND_NUM_ARGS(); int leftover = 0; int num_params = 0; char **params = NULL; PGconn *pgsql; + zend_resource *link; PGresult *pgsql_result; ExecStatusType status; pgsql_result_handle *pg_result; @@ -2142,20 +2141,19 @@ PHP_FUNCTION(pg_execute) if (zend_parse_parameters(argc, "sa/", &stmtname, &stmtname_len, &pv_param_arr)==FAILURE) { return; } - id = FETCH_DEFAULT_LINK(); - CHECK_DEFAULT_LINK(id); + link = FETCH_DEFAULT_LINK(); + CHECK_DEFAULT_LINK(link); } else { if (zend_parse_parameters(argc, "rsa/", &pgsql_link, &stmtname, &stmtname_len, &pv_param_arr) == FAILURE) { return; } + link = Z_RES_P(pgsql_link); } - if (pgsql_link == NULL && id == -1) { + if ((pgsql = (PGconn *)zend_fetch_resource2(link, "PostgreSQL link", le_link, le_plink)) == NULL) { RETURN_FALSE; } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); - if (PQ_SETNONBLOCKING(pgsql, 0)) { php_error_docref(NULL, E_NOTICE,"Cannot set connection to blocking mode"); RETURN_FALSE; @@ -2229,7 +2227,7 @@ PHP_FUNCTION(pg_execute) pg_result->conn = pgsql; pg_result->result = pgsql_result; pg_result->row = 0; - ZEND_REGISTER_RESOURCE(return_value, pg_result, le_result); + RETURN_RES(zend_register_resource(pg_result, le_result)); } else { PQclear(pgsql_result); RETURN_FALSE; @@ -2256,7 +2254,9 @@ static void php_pgsql_get_result_info(INTERNAL_FUNCTION_PARAMETERS, int entry_ty return; } - ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, result, -1, "PostgreSQL result", le_result); + if ((pg_result = (pgsql_result_handle *)zend_fetch_resource(Z_RES_P(result), "PostgreSQL result", le_result)) == NULL) { + RETURN_FALSE; + } pgsql_result = pg_result->result; @@ -2313,20 +2313,17 @@ PHP_FUNCTION(pg_last_notice) { zval *pgsql_link = NULL; PGconn *pg_link; - int id = -1; php_pgsql_notice *notice; if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &pgsql_link) == FAILURE) { return; } - if (pgsql_link == NULL) { + /* Just to check if user passed valid resoruce */ + if ((pg_link = (PGconn *)zend_fetch_resource2(Z_RES_P(pgsql_link), "PostgreSQL link", le_link, le_plink)) == NULL) { RETURN_FALSE; } - /* Just to check if user passed valid resoruce */ - ZEND_FETCH_RESOURCE2(pg_link, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); - if ((notice = zend_hash_index_find_ptr(&PGG(notices), (zend_ulong)Z_RES_HANDLE_P(pgsql_link))) == NULL) { RETURN_FALSE; } @@ -2413,7 +2410,9 @@ PHP_FUNCTION(pg_field_table) return; } - ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, result, -1, "PostgreSQL result", le_result); + if ((pg_result = (pgsql_result_handle *)zend_fetch_resource(Z_RES_P(result), "PostgreSQL result", le_result)) == NULL) { + RETURN_FALSE; + } if (fnum < 0 || fnum >= PQnfields(pg_result->result)) { php_error_docref(NULL, E_WARNING, "Bad field offset specified"); @@ -2504,7 +2503,10 @@ static void php_pgsql_get_field_info(INTERNAL_FUNCTION_PARAMETERS, int entry_typ return; } - ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, result, -1, "PostgreSQL result", le_result); + if ((pg_result = (pgsql_result_handle *)zend_fetch_resource(Z_RES_P(result), "PostgreSQL result", le_result)) == NULL) { + RETURN_FALSE; + } + pgsql_result = pg_result->result; @@ -2593,7 +2595,9 @@ PHP_FUNCTION(pg_field_num) return; } - ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, result, -1, "PostgreSQL result", le_result); + if ((pg_result = (pgsql_result_handle *)zend_fetch_resource(Z_RES_P(result), "PostgreSQL result", le_result)) == NULL) { + RETURN_FALSE; + } pgsql_result = pg_result->result; @@ -2621,7 +2625,9 @@ PHP_FUNCTION(pg_fetch_result) } } - ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, result, -1, "PostgreSQL result", le_result); + if ((pg_result = (pgsql_result_handle *)zend_fetch_resource(Z_RES_P(result), "PostgreSQL result", le_result)) == NULL) { + RETURN_FALSE; + } pgsql_result = pg_result->result; if (argc == 2) { @@ -2717,7 +2723,9 @@ static void php_pgsql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, zend_long result_ RETURN_FALSE; } - ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, result, -1, "PostgreSQL result", le_result); + if ((pg_result = (pgsql_result_handle *)zend_fetch_resource(Z_RES_P(result), "PostgreSQL result", le_result)) == NULL) { + RETURN_FALSE; + } pgsql_result = pg_result->result; @@ -2877,7 +2885,9 @@ PHP_FUNCTION(pg_fetch_all) return; } - ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, result, -1, "PostgreSQL result", le_result); + if ((pg_result = (pgsql_result_handle *)zend_fetch_resource(Z_RES_P(result), "PostgreSQL result", le_result)) == NULL) { + RETURN_FALSE; + } pgsql_result = pg_result->result; array_init(return_value); @@ -2903,7 +2913,9 @@ PHP_FUNCTION(pg_fetch_all_columns) RETURN_FALSE; } - ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, result, -1, "PostgreSQL result", le_result); + if ((pg_result = (pgsql_result_handle *)zend_fetch_resource(Z_RES_P(result), "PostgreSQL result", le_result)) == NULL) { + RETURN_FALSE; + } pgsql_result = pg_result->result; @@ -2941,7 +2953,9 @@ PHP_FUNCTION(pg_result_seek) return; } - ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, result, -1, "PostgreSQL result", le_result); + if ((pg_result = (pgsql_result_handle *)zend_fetch_resource(Z_RES_P(result), "PostgreSQL result", le_result)) == NULL) { + RETURN_FALSE; + } if (row < 0 || row >= PQntuples(pg_result->result)) { RETURN_FALSE; @@ -2976,7 +2990,9 @@ static void php_pgsql_data_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type) } } - ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, result, -1, "PostgreSQL result", le_result); + if ((pg_result = (pgsql_result_handle *)zend_fetch_resource(Z_RES_P(result), "PostgreSQL result", le_result)) == NULL) { + RETURN_FALSE; + } pgsql_result = pg_result->result; if (argc == 2) { @@ -3053,10 +3069,10 @@ PHP_FUNCTION(pg_free_result) return; } - ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, result, -1, "PostgreSQL result", le_result); - if (Z_RES_P(result) == NULL) { + if ((pg_result = (pgsql_result_handle *)zend_fetch_resource(Z_RES_P(result), "PostgreSQL result", le_result)) == NULL) { RETURN_FALSE; } + zend_list_close(Z_RES_P(result)); RETURN_TRUE; } @@ -3077,7 +3093,10 @@ PHP_FUNCTION(pg_last_oid) return; } - ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, result, -1, "PostgreSQL result", le_result); + if ((pg_result = (pgsql_result_handle *)zend_fetch_resource(Z_RES_P(result), "PostgreSQL result", le_result)) == NULL) { + RETURN_FALSE; + } + pgsql_result = pg_result->result; #ifdef HAVE_PQOIDVALUE oid = PQoidValue(pgsql_result); @@ -3102,26 +3121,27 @@ PHP_FUNCTION(pg_trace) char *z_filename, *mode = "w"; size_t z_filename_len, mode_len; zval *pgsql_link = NULL; - int id = -1, argc = ZEND_NUM_ARGS(); + int argc = ZEND_NUM_ARGS(); PGconn *pgsql; FILE *fp = NULL; php_stream *stream; - id = FETCH_DEFAULT_LINK(); + zend_resource *link; if (zend_parse_parameters(argc, "s|sr", &z_filename, &z_filename_len, &mode, &mode_len, &pgsql_link) == FAILURE) { return; } if (argc < 3) { - CHECK_DEFAULT_LINK(id); + link = FETCH_DEFAULT_LINK(); + CHECK_DEFAULT_LINK(link); + } else { + link = Z_RES_P(pgsql_link); } - if (pgsql_link == NULL && id == -1) { + if ((pgsql = (PGconn *)zend_fetch_resource2(link, "PostgreSQL link", le_link, le_plink)) == NULL) { RETURN_FALSE; } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); - stream = php_stream_open_wrapper(z_filename, mode, REPORT_ERRORS, NULL); if (!stream) { @@ -3143,23 +3163,25 @@ PHP_FUNCTION(pg_trace) PHP_FUNCTION(pg_untrace) { zval *pgsql_link = NULL; - int id = -1, argc = ZEND_NUM_ARGS(); + int argc = ZEND_NUM_ARGS(); PGconn *pgsql; + zend_resource *link; if (zend_parse_parameters(argc, "|r", &pgsql_link) == FAILURE) { return; } if (argc == 0) { - id = FETCH_DEFAULT_LINK(); - CHECK_DEFAULT_LINK(id); + link = FETCH_DEFAULT_LINK(); + CHECK_DEFAULT_LINK(link); + } else { + link = Z_RES_P(pgsql_link); } - if (pgsql_link == NULL && id == -1) { + if ((pgsql = (PGconn *)zend_fetch_resource2(link, "PostgreSQL link", le_link, le_plink)) == NULL) { RETURN_FALSE; } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); PQuntrace(pgsql); RETURN_TRUE; } @@ -3172,7 +3194,8 @@ PHP_FUNCTION(pg_lo_create) zval *pgsql_link = NULL, *oid = NULL; PGconn *pgsql; Oid pgsql_oid, wanted_oid = InvalidOid; - int id = -1, argc = ZEND_NUM_ARGS(); + int argc = ZEND_NUM_ARGS(); + zend_resource *link; if (zend_parse_parameters(argc, "|zz", &pgsql_link, &oid) == FAILURE) { return; @@ -3184,14 +3207,15 @@ PHP_FUNCTION(pg_lo_create) } if (pgsql_link == NULL) { - id = FETCH_DEFAULT_LINK(); - CHECK_DEFAULT_LINK(id); - if (id == -1) { - RETURN_FALSE; - } + link = FETCH_DEFAULT_LINK(); + CHECK_DEFAULT_LINK(link); + } else { + link = Z_RES_P(pgsql_link); } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); + if ((pgsql = (PGconn *)zend_fetch_resource2(link, "PostgreSQL link", le_link, le_plink)) == NULL) { + RETURN_FALSE; + } if (oid) { #ifndef HAVE_PG_LO_CREATE @@ -3248,7 +3272,7 @@ PHP_FUNCTION(pg_lo_unlink) size_t oid_strlen; PGconn *pgsql; Oid oid; - int id = -1; + zend_resource *link; int argc = ZEND_NUM_ARGS(); /* accept string type since Oid type is unsigned int */ @@ -3260,6 +3284,7 @@ PHP_FUNCTION(pg_lo_unlink) php_error_docref(NULL, E_NOTICE, "Wrong OID value passed"); RETURN_FALSE; } + link = Z_RES_P(pgsql_link); } else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc, "rl", &pgsql_link, &oid_long) == SUCCESS) { @@ -3268,6 +3293,7 @@ PHP_FUNCTION(pg_lo_unlink) RETURN_FALSE; } oid = (Oid)oid_long; + link = Z_RES_P(pgsql_link); } else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc, "s", &oid_string, &oid_strlen) == SUCCESS) { @@ -3277,8 +3303,8 @@ PHP_FUNCTION(pg_lo_unlink) php_error_docref(NULL, E_NOTICE, "Wrong OID value passed"); RETURN_FALSE; } - id = FETCH_DEFAULT_LINK(); - CHECK_DEFAULT_LINK(id); + link = FETCH_DEFAULT_LINK(); + CHECK_DEFAULT_LINK(link); } else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc, "l", &oid_long) == SUCCESS) { @@ -3287,19 +3313,18 @@ PHP_FUNCTION(pg_lo_unlink) RETURN_FALSE; } oid = (Oid)oid_long; - id = FETCH_DEFAULT_LINK(); - CHECK_DEFAULT_LINK(id); + link = FETCH_DEFAULT_LINK(); + CHECK_DEFAULT_LINK(link); } else { php_error_docref(NULL, E_WARNING, "Requires 1 or 2 arguments"); RETURN_FALSE; } - if (pgsql_link == NULL && id == -1) { + + if ((pgsql = (PGconn *)zend_fetch_resource2(link, "PostgreSQL link", le_link, le_plink)) == NULL) { RETURN_FALSE; } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); - if (lo_unlink(pgsql, oid) == -1) { php_error_docref(NULL, E_WARNING, "Unable to delete PostgreSQL large object %u", oid); RETURN_FALSE; @@ -3318,10 +3343,11 @@ PHP_FUNCTION(pg_lo_open) size_t oid_strlen, mode_strlen; PGconn *pgsql; Oid oid; - int id = -1, pgsql_mode=0, pgsql_lofd; + int pgsql_mode=0, pgsql_lofd; int create = 0; pgLofp *pgsql_lofp; int argc = ZEND_NUM_ARGS(); + zend_resource *link; /* accept string type since Oid is unsigned int */ if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc, @@ -3332,6 +3358,7 @@ PHP_FUNCTION(pg_lo_open) php_error_docref(NULL, E_NOTICE, "Wrong OID value passed"); RETURN_FALSE; } + link = Z_RES_P(pgsql_link); } else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc, "rls", &pgsql_link, &oid_long, &mode_string, &mode_strlen) == SUCCESS) { @@ -3340,6 +3367,7 @@ PHP_FUNCTION(pg_lo_open) RETURN_FALSE; } oid = (Oid)oid_long; + link = Z_RES_P(pgsql_link); } else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc, "ss", &oid_string, &oid_strlen, &mode_string, &mode_strlen) == SUCCESS) { @@ -3349,8 +3377,8 @@ PHP_FUNCTION(pg_lo_open) php_error_docref(NULL, E_NOTICE, "Wrong OID value passed"); RETURN_FALSE; } - id = FETCH_DEFAULT_LINK(); - CHECK_DEFAULT_LINK(id); + link = FETCH_DEFAULT_LINK(); + CHECK_DEFAULT_LINK(link); } else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc, "ls", &oid_long, &mode_string, &mode_strlen) == SUCCESS) { @@ -3359,19 +3387,18 @@ PHP_FUNCTION(pg_lo_open) RETURN_FALSE; } oid = (Oid)oid_long; - id = FETCH_DEFAULT_LINK(); - CHECK_DEFAULT_LINK(id); + link = FETCH_DEFAULT_LINK(); + CHECK_DEFAULT_LINK(link); } else { php_error_docref(NULL, E_WARNING, "Requires 1 or 2 arguments"); RETURN_FALSE; } - if (pgsql_link == NULL && id == -1) { + + if ((pgsql = (PGconn *)zend_fetch_resource2(link, "PostgreSQL link", le_link, le_plink)) == NULL) { RETURN_FALSE; } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); - /* r/w/+ is little bit more PHP-like than INV_READ/INV_WRITE and a lot of faster to type. Unfortunately, doesn't behave the same way as fopen()... (Jouni) @@ -3412,7 +3439,7 @@ PHP_FUNCTION(pg_lo_open) } else { pgsql_lofp->conn = pgsql; pgsql_lofp->lofd = pgsql_lofd; - ZEND_REGISTER_RESOURCE(return_value, pgsql_lofp, le_lofp); + RETURN_RES(zend_register_resource(pgsql_lofp, le_lofp)); } } } else { @@ -3423,7 +3450,7 @@ PHP_FUNCTION(pg_lo_open) } else { pgsql_lofp->conn = pgsql; pgsql_lofp->lofd = pgsql_lofd; - ZEND_REGISTER_RESOURCE(return_value, pgsql_lofp, le_lofp); + RETURN_RES(zend_register_resource(pgsql_lofp, le_lofp)); } } /* }}} */ @@ -3439,7 +3466,9 @@ PHP_FUNCTION(pg_lo_close) return; } - ZEND_FETCH_RESOURCE(pgsql, pgLofp *, pgsql_lofp, -1, "PostgreSQL large object", le_lofp); + if ((pgsql = (pgLofp *)zend_fetch_resource(Z_RES_P(pgsql_lofp), "PostgreSQL large object", le_lofp)) == NULL) { + RETURN_FALSE; + } if (lo_close((PGconn *)pgsql->conn, pgsql->lofd) < 0) { php_error_docref(NULL, E_WARNING, "Unable to close PostgreSQL large object descriptor %d", pgsql->lofd); @@ -3470,7 +3499,9 @@ PHP_FUNCTION(pg_lo_read) return; } - ZEND_FETCH_RESOURCE(pgsql, pgLofp *, pgsql_id, -1, "PostgreSQL large object", le_lofp); + if ((pgsql = (pgLofp *)zend_fetch_resource(Z_RES_P(pgsql_id), "PostgreSQL large object", le_lofp)) == NULL) { + RETURN_FALSE; + } if (argc > 1) { buf_len = len < 0 ? 0 : len; @@ -3519,7 +3550,9 @@ PHP_FUNCTION(pg_lo_write) len = str_len; } - ZEND_FETCH_RESOURCE(pgsql, pgLofp *, pgsql_id, -1, "PostgreSQL large object", le_lofp); + if ((pgsql = (pgLofp *)zend_fetch_resource(Z_RES_P(pgsql_id), "PostgreSQL large object", le_lofp)) == NULL) { + RETURN_FALSE; + } if ((nbytes = lo_write((PGconn *)pgsql->conn, pgsql->lofd, str, len)) == -1) { RETURN_FALSE; @@ -3543,7 +3576,9 @@ PHP_FUNCTION(pg_lo_read_all) return; } - ZEND_FETCH_RESOURCE(pgsql, pgLofp *, pgsql_id, -1, "PostgreSQL large object", le_lofp); + if ((pgsql = (pgLofp *)zend_fetch_resource(Z_RES_P(pgsql_id), "PostgreSQL large object", le_lofp)) == NULL) { + RETURN_FALSE; + } tbytes = 0; while ((nbytes = lo_read((PGconn *)pgsql->conn, pgsql->lofd, buf, PGSQL_LO_READ_BUF_SIZE))>0) { @@ -3560,25 +3595,26 @@ PHP_FUNCTION(pg_lo_import) { zval *pgsql_link = NULL, *oid = NULL; char *file_in; - int id = -1; size_t name_len; int argc = ZEND_NUM_ARGS(); PGconn *pgsql; Oid returned_oid; + zend_resource *link; if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc, "rp|z", &pgsql_link, &file_in, &name_len, &oid) == SUCCESS) { - ; + link = Z_RES_P(pgsql_link); } else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc, "p|z", &file_in, &name_len, &oid) == SUCCESS) { - id = FETCH_DEFAULT_LINK(); - CHECK_DEFAULT_LINK(id); + link = FETCH_DEFAULT_LINK(); + CHECK_DEFAULT_LINK(link); } /* old calling convention, deprecated since PHP 4.2 */ else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc, "pr", &file_in, &name_len, &pgsql_link ) == SUCCESS) { php_error_docref(NULL, E_NOTICE, "Old API is used"); + link = Z_RES_P(pgsql_link); } else { WRONG_PARAM_COUNT; @@ -3588,12 +3624,10 @@ PHP_FUNCTION(pg_lo_import) RETURN_FALSE; } - if (pgsql_link == NULL && id == -1) { + if ((pgsql = (PGconn *)zend_fetch_resource2(link, "PostgreSQL link", le_link, le_plink)) == NULL) { RETURN_FALSE; } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); - if (oid) { #ifndef HAVE_PG_LO_IMPORT_WITH_OID php_error_docref(NULL, E_NOTICE, "OID value passing not supported"); @@ -3649,12 +3683,12 @@ PHP_FUNCTION(pg_lo_export) zval *pgsql_link = NULL; char *file_out, *oid_string, *end_ptr; size_t oid_strlen; - int id = -1; size_t name_len; zend_long oid_long; Oid oid; PGconn *pgsql; int argc = ZEND_NUM_ARGS(); + zend_resource *link; /* allow string to handle large OID value correctly */ if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc, @@ -3664,6 +3698,7 @@ PHP_FUNCTION(pg_lo_export) RETURN_FALSE; } oid = (Oid)oid_long; + link = Z_RES_P(pgsql_link); } else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc, "rss", &pgsql_link, &oid_string, &oid_strlen, &file_out, &name_len) == SUCCESS) { @@ -3673,6 +3708,7 @@ PHP_FUNCTION(pg_lo_export) php_error_docref(NULL, E_NOTICE, "Wrong OID value passed"); RETURN_FALSE; } + link = Z_RES_P(pgsql_link); } else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc, "lp", &oid_long, &file_out, &name_len) == SUCCESS) { @@ -3681,8 +3717,8 @@ PHP_FUNCTION(pg_lo_export) RETURN_FALSE; } oid = (Oid)oid_long; - id = FETCH_DEFAULT_LINK(); - CHECK_DEFAULT_LINK(id); + link = FETCH_DEFAULT_LINK(); + CHECK_DEFAULT_LINK(link); } else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc, "sp", &oid_string, &oid_strlen, &file_out, &name_len) == SUCCESS) { @@ -3692,8 +3728,8 @@ PHP_FUNCTION(pg_lo_export) php_error_docref(NULL, E_NOTICE, "Wrong OID value passed"); RETURN_FALSE; } - id = FETCH_DEFAULT_LINK(); - CHECK_DEFAULT_LINK(id); + link = FETCH_DEFAULT_LINK(); + CHECK_DEFAULT_LINK(link); } else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc, "spr", &oid_string, &oid_strlen, &file_out, &name_len, &pgsql_link) == SUCCESS) { @@ -3703,6 +3739,7 @@ PHP_FUNCTION(pg_lo_export) php_error_docref(NULL, E_NOTICE, "Wrong OID value passed"); RETURN_FALSE; } + link = Z_RES_P(pgsql_link); } else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc, "lpr", &oid_long, &file_out, &name_len, &pgsql_link) == SUCCESS) { @@ -3712,6 +3749,7 @@ PHP_FUNCTION(pg_lo_export) RETURN_FALSE; } oid = (Oid)oid_long; + link = Z_RES_P(pgsql_link); } else { php_error_docref(NULL, E_WARNING, "Requires 2 or 3 arguments"); @@ -3722,12 +3760,10 @@ PHP_FUNCTION(pg_lo_export) RETURN_FALSE; } - if (pgsql_link == NULL && id == -1) { + if ((pgsql = (PGconn *)zend_fetch_resource2(link, "PostgreSQL link", le_link, le_plink)) == NULL) { RETURN_FALSE; } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); - if (lo_export(pgsql, oid, file_out) == -1) { RETURN_FALSE; } @@ -3752,7 +3788,9 @@ PHP_FUNCTION(pg_lo_seek) return; } - ZEND_FETCH_RESOURCE(pgsql, pgLofp *, pgsql_id, -1, "PostgreSQL large object", le_lofp); + if ((pgsql = (pgLofp *)zend_fetch_resource(Z_RES_P(pgsql_id), "PostgreSQL large object", le_lofp)) == NULL) { + RETURN_FALSE; + } #if HAVE_PG_LO64 if (PQserverVersion((PGconn *)pgsql->conn) >= 90300) { @@ -3784,7 +3822,9 @@ PHP_FUNCTION(pg_lo_tell) return; } - ZEND_FETCH_RESOURCE(pgsql, pgLofp *, pgsql_id, -1, "PostgreSQL large object", le_lofp); + if ((pgsql = (pgLofp *)zend_fetch_resource(Z_RES_P(pgsql_id), "PostgreSQL large object", le_lofp)) == NULL) { + RETURN_FALSE; + } #if HAVE_PG_LO64 if (PQserverVersion((PGconn *)pgsql->conn) >= 90300) { @@ -3814,7 +3854,9 @@ PHP_FUNCTION(pg_lo_truncate) return; } - ZEND_FETCH_RESOURCE(pgsql, pgLofp *, pgsql_id, -1, "PostgreSQL large object", le_lofp); + if ((pgsql = (pgLofp *)zend_fetch_resource(Z_RES_P(pgsql_id), "PostgreSQL large object", le_lofp)) == NULL) { + RETURN_FALSE; + } #if HAVE_PG_LO64 if (PQserverVersion((PGconn *)pgsql->conn) >= 90300) { @@ -3841,27 +3883,27 @@ PHP_FUNCTION(pg_set_error_verbosity) { zval *pgsql_link = NULL; zend_long verbosity; - int id = -1, argc = ZEND_NUM_ARGS(); + int argc = ZEND_NUM_ARGS(); PGconn *pgsql; + zend_resource *link; if (argc == 1) { if (zend_parse_parameters(argc, "l", &verbosity) == FAILURE) { return; } - id = FETCH_DEFAULT_LINK(); - CHECK_DEFAULT_LINK(id); + link = FETCH_DEFAULT_LINK(); + CHECK_DEFAULT_LINK(link); } else { if (zend_parse_parameters(argc, "rl", &pgsql_link, &verbosity) == FAILURE) { return; } + link = Z_RES_P(pgsql_link); } - if (pgsql_link == NULL && id == -1) { + if ((pgsql = (PGconn *)zend_fetch_resource2(link, "PostgreSQL link", le_link, le_plink)) == NULL) { RETURN_FALSE; } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); - if (verbosity & (PQERRORS_TERSE|PQERRORS_DEFAULT|PQERRORS_VERBOSE)) { RETURN_LONG(PQsetErrorVerbosity(pgsql, verbosity)); } else { @@ -3879,27 +3921,27 @@ PHP_FUNCTION(pg_set_client_encoding) char *encoding; size_t encoding_len; zval *pgsql_link = NULL; - int id = -1, argc = ZEND_NUM_ARGS(); + int argc = ZEND_NUM_ARGS(); PGconn *pgsql; + zend_resource *link; if (argc == 1) { if (zend_parse_parameters(argc, "s", &encoding, &encoding_len) == FAILURE) { return; } - id = FETCH_DEFAULT_LINK(); - CHECK_DEFAULT_LINK(id); + link = FETCH_DEFAULT_LINK(); + CHECK_DEFAULT_LINK(link); } else { if (zend_parse_parameters(argc, "rs", &pgsql_link, &encoding, &encoding_len) == FAILURE) { return; } + link = Z_RES_P(pgsql_link); } - if (pgsql_link == NULL && id == -1) { + if ((pgsql = (PGconn *)zend_fetch_resource2(link, "PostgreSQL link", le_link, le_plink)) == NULL) { RETURN_FALSE; } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); - RETURN_LONG(PQsetClientEncoding(pgsql, encoding)); } /* }}} */ @@ -3909,24 +3951,25 @@ PHP_FUNCTION(pg_set_client_encoding) PHP_FUNCTION(pg_client_encoding) { zval *pgsql_link = NULL; - int id = -1, argc = ZEND_NUM_ARGS(); + int argc = ZEND_NUM_ARGS(); PGconn *pgsql; + zend_resource *link; if (zend_parse_parameters(argc, "|r", &pgsql_link) == FAILURE) { return; } if (argc == 0) { - id = FETCH_DEFAULT_LINK(); - CHECK_DEFAULT_LINK(id); + link = FETCH_DEFAULT_LINK(); + CHECK_DEFAULT_LINK(link); + } else { + link = Z_RES_P(pgsql_link); } - if (pgsql_link == NULL && id == -1) { + if ((pgsql = (PGconn *)zend_fetch_resource2(link, "PostgreSQL link", le_link, le_plink)) == NULL) { RETURN_FALSE; } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); - /* Just do the same as found in PostgreSQL sources... */ RETURN_STRING((char *) pg_encoding_to_char(PQclientEncoding(pgsql))); @@ -3943,25 +3986,26 @@ PHP_FUNCTION(pg_client_encoding) PHP_FUNCTION(pg_end_copy) { zval *pgsql_link = NULL; - int id = -1, argc = ZEND_NUM_ARGS(); + int argc = ZEND_NUM_ARGS(); PGconn *pgsql; int result = 0; + zend_resource *link; if (zend_parse_parameters(argc, "|r", &pgsql_link) == FAILURE) { return; } if (argc == 0) { - id = FETCH_DEFAULT_LINK(); - CHECK_DEFAULT_LINK(id); + link = FETCH_DEFAULT_LINK(); + CHECK_DEFAULT_LINK(link); + } else { + link = Z_RES_P(pgsql_link); } - if (pgsql_link == NULL && id == -1) { + if ((pgsql = (PGconn *)zend_fetch_resource2(link, "PostgreSQL link", le_link, le_plink)) == NULL) { RETURN_FALSE; } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); - result = PQendcopy(pgsql); if (result!=0) { @@ -3979,28 +4023,27 @@ PHP_FUNCTION(pg_put_line) char *query; zval *pgsql_link = NULL; size_t query_len; - int id = -1; PGconn *pgsql; + zend_resource *link; int result = 0, argc = ZEND_NUM_ARGS(); if (argc == 1) { if (zend_parse_parameters(argc, "s", &query, &query_len) == FAILURE) { return; } - id = FETCH_DEFAULT_LINK(); - CHECK_DEFAULT_LINK(id); + link = FETCH_DEFAULT_LINK(); + CHECK_DEFAULT_LINK(link); } else { if (zend_parse_parameters(argc, "rs", &pgsql_link, &query, &query_len) == FAILURE) { return; } + link = Z_RES_P(pgsql_link); } - if (pgsql_link == NULL && id == -1) { + if ((pgsql = (PGconn *)zend_fetch_resource2(link, "PostgreSQL link", le_link, le_plink)) == NULL) { RETURN_FALSE; } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); - result = PQputline(pgsql, query); if (result==EOF) { PHP_PQ_ERROR("Query failed: %s", pgsql); @@ -4018,7 +4061,6 @@ PHP_FUNCTION(pg_copy_to) char *table_name, *pg_delim = NULL, *pg_null_as = NULL; size_t table_name_len, pg_delim_len, pg_null_as_len, free_pg_null = 0; char *query; - int id = -1; PGconn *pgsql; PGresult *pgsql_result; ExecStatusType status; @@ -4039,7 +4081,9 @@ PHP_FUNCTION(pg_copy_to) pg_delim = "\t"; } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); + if ((pgsql = (PGconn *)zend_fetch_resource2(Z_RES_P(pgsql_link), "PostgreSQL link", le_link, le_plink)) == NULL) { + RETURN_FALSE; + } if (!pg_null_as) { pg_null_as = estrdup("\\\\N"); @@ -4156,7 +4200,6 @@ PHP_FUNCTION(pg_copy_from) size_t table_name_len, pg_delim_len, pg_null_as_len; int pg_null_as_free = 0; char *query; - int id = -1; PGconn *pgsql; PGresult *pgsql_result; ExecStatusType status; @@ -4175,7 +4218,9 @@ PHP_FUNCTION(pg_copy_from) pg_null_as_free = 1; } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); + if ((pgsql = (PGconn *)zend_fetch_resource2(Z_RES_P(pgsql_link), "PostgreSQL link", le_link, le_plink)) == NULL) { + RETURN_FALSE; + } spprintf(&query, 0, "COPY %s FROM STDIN DELIMITERS E'%c' WITH NULL AS E'%s'", table_name, *pg_delim, pg_null_as); while ((pgsql_result = PQgetResult(pgsql))) { @@ -4274,31 +4319,34 @@ PHP_FUNCTION(pg_escape_string) { zend_string *from = NULL, *to = NULL; zval *pgsql_link; + zend_resource *link; #ifdef HAVE_PQESCAPE_CONN PGconn *pgsql; #endif - int id = -1; switch (ZEND_NUM_ARGS()) { case 1: if (zend_parse_parameters(ZEND_NUM_ARGS(), "S", &from) == FAILURE) { return; } - pgsql_link = NULL; - id = FETCH_DEFAULT_LINK(); + link = FETCH_DEFAULT_LINK(); + CHECK_DEFAULT_LINK(link); break; default: if (zend_parse_parameters(ZEND_NUM_ARGS(), "rS", &pgsql_link, &from) == FAILURE) { return; } + link = Z_RES_P(pgsql_link); break; } to = zend_string_alloc(from->len * 2, 0); #ifdef HAVE_PQESCAPE_CONN - if (pgsql_link != NULL || id != -1) { - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); + if (link) { + if ((pgsql = (PGconn *)zend_fetch_resource2(link, "PostgreSQL link", le_link, le_plink)) == NULL) { + RETURN_FALSE; + } to->len = PQescapeStringConn(pgsql, to->val, from->val, from->len, NULL); } else #endif @@ -4318,31 +4366,34 @@ PHP_FUNCTION(pg_escape_bytea) char *from = NULL, *to = NULL; size_t to_len; size_t from_len; - int id = -1; #ifdef HAVE_PQESCAPE_BYTEA_CONN PGconn *pgsql; #endif zval *pgsql_link; + zend_resource *link; switch (ZEND_NUM_ARGS()) { case 1: if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &from, &from_len) == FAILURE) { return; } - pgsql_link = NULL; - id = FETCH_DEFAULT_LINK(); + link = FETCH_DEFAULT_LINK(); + CHECK_DEFAULT_LINK(link); break; default: if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &pgsql_link, &from, &from_len) == FAILURE) { return; } + link = Z_RES_P(pgsql_link); break; } #ifdef HAVE_PQESCAPE_BYTEA_CONN - if (pgsql_link != NULL || id != -1) { - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); + if (link) { + if ((pgsql = (PGconn *)zend_fetch_resource2(link, "PostgreSQL link", le_link, le_plink)) == NULL) { + RETURN_FALSE; + } to = (char *)PQescapeByteaConn(pgsql, (unsigned char *)from, (size_t)from_len, &to_len); } else #endif @@ -4494,31 +4545,30 @@ static void php_pgsql_escape_internal(INTERNAL_FUNCTION_PARAMETERS, int escape_l zval *pgsql_link = NULL; PGconn *pgsql; size_t from_len; - int id = -1; char *tmp; + zend_resource *link; switch (ZEND_NUM_ARGS()) { case 1: if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &from, &from_len) == FAILURE) { return; } - pgsql_link = NULL; - id = FETCH_DEFAULT_LINK(); + link = FETCH_DEFAULT_LINK(); + CHECK_DEFAULT_LINK(link); break; default: if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &pgsql_link, &from, &from_len) == FAILURE) { return; } + link = Z_RES_P(pgsql_link); break; } - if (pgsql_link == NULL && id == -1) { - php_error_docref(NULL, E_WARNING,"Cannot get default pgsql link"); + if ((pgsql = (PGconn *)zend_fetch_resource2(link, "PostgreSQL link", le_link, le_plink)) == NULL) { RETURN_FALSE; } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); if (pgsql == NULL) { php_error_docref(NULL, E_WARNING,"Cannot get pgsql link"); RETURN_FALSE; @@ -4570,7 +4620,9 @@ PHP_FUNCTION(pg_result_error) RETURN_FALSE; } - ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, result, -1, "PostgreSQL result", le_result); + if ((pg_result = (pgsql_result_handle *)zend_fetch_resource(Z_RES_P(result), "PostgreSQL result", le_result)) == NULL) { + RETURN_FALSE; + } pgsql_result = pg_result->result; if (!pgsql_result) { @@ -4597,7 +4649,9 @@ PHP_FUNCTION(pg_result_error_field) RETURN_FALSE; } - ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, result, -1, "PostgreSQL result", le_result); + if ((pg_result = (pgsql_result_handle *)zend_fetch_resource(Z_RES_P(result), "PostgreSQL result", le_result)) == NULL) { + RETURN_FALSE; + } pgsql_result = pg_result->result; if (!pgsql_result) { @@ -4631,7 +4685,6 @@ PHP_FUNCTION(pg_result_error_field) PHP_FUNCTION(pg_connection_status) { zval *pgsql_link = NULL; - int id = -1; PGconn *pgsql; if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "r", @@ -4639,7 +4692,9 @@ PHP_FUNCTION(pg_connection_status) RETURN_FALSE; } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); + if ((pgsql = (PGconn *)zend_fetch_resource2(Z_RES_P(pgsql_link), "PostgreSQL link", le_link, le_plink)) == NULL) { + RETURN_FALSE; + } RETURN_LONG(PQstatus(pgsql)); } @@ -4652,7 +4707,6 @@ PHP_FUNCTION(pg_connection_status) PHP_FUNCTION(pg_transaction_status) { zval *pgsql_link = NULL; - int id = -1; PGconn *pgsql; if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "r", @@ -4660,7 +4714,9 @@ PHP_FUNCTION(pg_transaction_status) RETURN_FALSE; } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); + if ((pgsql = (PGconn *)zend_fetch_resource2(Z_RES_P(pgsql_link), "PostgreSQL link", le_link, le_plink)) == NULL) { + RETURN_FALSE; + } RETURN_LONG(PQtransactionStatus(pgsql)); } @@ -4673,7 +4729,6 @@ PHP_FUNCTION(pg_transaction_status) PHP_FUNCTION(pg_connection_reset) { zval *pgsql_link; - int id = -1; PGconn *pgsql; if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "r", @@ -4681,7 +4736,9 @@ PHP_FUNCTION(pg_connection_reset) RETURN_FALSE; } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); + if ((pgsql = (PGconn *)zend_fetch_resource2(Z_RES_P(pgsql_link), "PostgreSQL link", le_link, le_plink)) == NULL) { + RETURN_FALSE; + } PQreset(pgsql); if (PQstatus(pgsql) == CONNECTION_BAD) { @@ -4719,7 +4776,6 @@ static int php_pgsql_flush_query(PGconn *pgsql) static void php_pgsql_do_async(INTERNAL_FUNCTION_PARAMETERS, int entry_type) { zval *pgsql_link; - int id = -1; PGconn *pgsql; PGresult *pgsql_result; @@ -4728,7 +4784,9 @@ static void php_pgsql_do_async(INTERNAL_FUNCTION_PARAMETERS, int entry_type) RETURN_FALSE; } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); + if ((pgsql = (PGconn *)zend_fetch_resource2(Z_RES_P(pgsql_link), "PostgreSQL link", le_link, le_plink)) == NULL) { + RETURN_FALSE; + } if (PQ_SETNONBLOCKING(pgsql, 1)) { php_error_docref(NULL, E_NOTICE, "Cannot set connection to nonblocking mode"); @@ -4790,7 +4848,6 @@ PHP_FUNCTION(pg_send_query) zval *pgsql_link; char *query; size_t len; - int id = -1; PGconn *pgsql; int is_non_blocking; int ret; @@ -4799,7 +4856,9 @@ PHP_FUNCTION(pg_send_query) return; } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); + if ((pgsql = (PGconn *)zend_fetch_resource2(Z_RES_P(pgsql_link), "PostgreSQL link", le_link, le_plink)) == NULL) { + RETURN_FALSE; + } is_non_blocking = PQisnonblocking(pgsql); @@ -4862,7 +4921,6 @@ PHP_FUNCTION(pg_send_query_params) char **params = NULL; char *query; size_t query_len; - int id = -1; PGconn *pgsql; int is_non_blocking; int ret; @@ -4871,12 +4929,10 @@ PHP_FUNCTION(pg_send_query_params) return; } - if (pgsql_link == NULL) { + if ((pgsql = (PGconn *)zend_fetch_resource2(Z_RES_P(pgsql_link), "PostgreSQL link", le_link, le_plink)) == NULL) { RETURN_FALSE; } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); - is_non_blocking = PQisnonblocking(pgsql); if (is_non_blocking == 0 && PQ_SETNONBLOCKING(pgsql, 1) == -1) { @@ -4967,7 +5023,6 @@ PHP_FUNCTION(pg_send_prepare) zval *pgsql_link; char *query, *stmtname; size_t stmtname_len, query_len; - int id = -1; PGconn *pgsql; int is_non_blocking; int ret; @@ -4976,12 +5031,10 @@ PHP_FUNCTION(pg_send_prepare) return; } - if (pgsql_link == NULL) { + if ((pgsql = (PGconn *)zend_fetch_resource2(Z_RES_P(pgsql_link), "PostgreSQL link", le_link, le_plink)) == NULL) { RETURN_FALSE; } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); - is_non_blocking = PQisnonblocking(pgsql); if (is_non_blocking == 0 && PQ_SETNONBLOCKING(pgsql, 1) == -1) { @@ -5045,7 +5098,6 @@ PHP_FUNCTION(pg_send_execute) char **params = NULL; char *stmtname; size_t stmtname_len; - int id = -1; PGconn *pgsql; int is_non_blocking; int ret; @@ -5054,12 +5106,10 @@ PHP_FUNCTION(pg_send_execute) return; } - if (pgsql_link == NULL) { + if ((pgsql = (PGconn *)zend_fetch_resource2(Z_RES_P(pgsql_link), "PostgreSQL link", le_link, le_plink)) == NULL) { RETURN_FALSE; } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); - is_non_blocking = PQisnonblocking(pgsql); if (is_non_blocking == 0 && PQ_SETNONBLOCKING(pgsql, 1) == -1) { @@ -5146,7 +5196,6 @@ PHP_FUNCTION(pg_send_execute) PHP_FUNCTION(pg_get_result) { zval *pgsql_link; - int id = -1; PGconn *pgsql; PGresult *pgsql_result; pgsql_result_handle *pg_result; @@ -5155,7 +5204,9 @@ PHP_FUNCTION(pg_get_result) RETURN_FALSE; } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); + if ((pgsql = (PGconn *)zend_fetch_resource2(Z_RES_P(pgsql_link), "PostgreSQL link", le_link, le_plink)) == NULL) { + RETURN_FALSE; + } pgsql_result = PQgetResult(pgsql); if (!pgsql_result) { @@ -5166,7 +5217,7 @@ PHP_FUNCTION(pg_get_result) pg_result->conn = pgsql; pg_result->result = pgsql_result; pg_result->row = 0; - ZEND_REGISTER_RESOURCE(return_value, pg_result, le_result); + RETURN_RES(zend_register_resource(pg_result, le_result)); } /* }}} */ @@ -5185,7 +5236,9 @@ PHP_FUNCTION(pg_result_status) RETURN_FALSE; } - ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, result, -1, "PostgreSQL result", le_result); + if ((pg_result = (pgsql_result_handle *)zend_fetch_resource(Z_RES_P(result), "PostgreSQL result", le_result)) == NULL) { + RETURN_FALSE; + } pgsql_result = pg_result->result; if (result_type == PGSQL_STATUS_LONG) { @@ -5207,7 +5260,6 @@ PHP_FUNCTION(pg_result_status) PHP_FUNCTION(pg_get_notify) { zval *pgsql_link; - int id = -1; zend_long result_type = PGSQL_ASSOC; PGconn *pgsql; PGnotify *pgsql_notify; @@ -5217,7 +5269,9 @@ PHP_FUNCTION(pg_get_notify) RETURN_FALSE; } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); + if ((pgsql = (PGconn *)zend_fetch_resource2(Z_RES_P(pgsql_link), "PostgreSQL link", le_link, le_plink)) == NULL) { + RETURN_FALSE; + } if (!(result_type & PGSQL_BOTH)) { php_error_docref(NULL, E_WARNING, "Invalid result type"); @@ -5266,7 +5320,6 @@ PHP_FUNCTION(pg_get_notify) PHP_FUNCTION(pg_get_pid) { zval *pgsql_link; - int id = -1; PGconn *pgsql; if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "r", @@ -5274,7 +5327,9 @@ PHP_FUNCTION(pg_get_pid) RETURN_FALSE; } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); + if ((pgsql = (PGconn *)zend_fetch_resource2(Z_RES_P(pgsql_link), "PostgreSQL link", le_link, le_plink)) == NULL) { + RETURN_FALSE; + } RETURN_LONG(PQbackendPID(pgsql)); } @@ -5347,13 +5402,14 @@ PHP_FUNCTION(pg_socket) zval *pgsql_link; php_stream *stream; PGconn *pgsql; - int id = -1; if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &pgsql_link) == FAILURE) { return; } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); + if ((pgsql = (PGconn *)zend_fetch_resource2(Z_RES_P(pgsql_link), "PostgreSQL link", le_link, le_plink)) == NULL) { + RETURN_FALSE; + } stream = php_stream_alloc(&php_stream_pgsql_fd_ops, pgsql, NULL, "r"); @@ -5371,14 +5427,15 @@ PHP_FUNCTION(pg_socket) PHP_FUNCTION(pg_consume_input) { zval *pgsql_link; - int id = -1; PGconn *pgsql; if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &pgsql_link) == FAILURE) { return; } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); + if ((pgsql = (PGconn *)zend_fetch_resource2(Z_RES_P(pgsql_link), "PostgreSQL link", le_link, le_plink)) == NULL) { + RETURN_FALSE; + } RETURN_BOOL(PQconsumeInput(pgsql)); } @@ -5389,7 +5446,6 @@ PHP_FUNCTION(pg_consume_input) PHP_FUNCTION(pg_flush) { zval *pgsql_link; - int id = -1; PGconn *pgsql; int ret; int is_non_blocking; @@ -5398,7 +5454,9 @@ PHP_FUNCTION(pg_flush) return; } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); + if ((pgsql = (PGconn *)zend_fetch_resource2(Z_RES_P(pgsql_link), "PostgreSQL link", le_link, le_plink)) == NULL) { + RETURN_FALSE; + } is_non_blocking = PQisnonblocking(pgsql); @@ -5540,14 +5598,15 @@ PHP_FUNCTION(pg_meta_data) size_t table_name_len; zend_bool extended=0; PGconn *pgsql; - int id = -1; if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs|b", &pgsql_link, &table_name, &table_name_len, &extended) == FAILURE) { return; } - ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); + if ((pgsql = (PGconn *)zend_fetch_resource2(Z_RES_P(pgsql_link), "PostgreSQL link", le_link, le_plink)) == NULL) { + RETURN_FALSE; + } array_init(return_value); if (php_pgsql_meta_data(pgsql, table_name, return_value, extended) == FAILURE) { @@ -6385,7 +6444,6 @@ PHP_FUNCTION(pg_convert) size_t table_name_len; zend_ulong option = 0; PGconn *pg_link; - int id = -1; if (zend_parse_parameters(ZEND_NUM_ARGS(), "rsa|l", &pgsql_link, &table_name, &table_name_len, &values, &option) == FAILURE) { @@ -6400,7 +6458,9 @@ PHP_FUNCTION(pg_convert) RETURN_FALSE; } - ZEND_FETCH_RESOURCE2(pg_link, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); + if ((pg_link = (PGconn *)zend_fetch_resource2(Z_RES_P(pgsql_link), "PostgreSQL link", le_link, le_plink)) == NULL) { + RETURN_FALSE; + } if (php_pgsql_flush_query(pg_link)) { php_error_docref(NULL, E_NOTICE, "Detected unhandled result(s) in connection"); @@ -6603,7 +6663,7 @@ PHP_FUNCTION(pg_insert) ExecStatusType status; pgsql_result_handle *pgsql_handle; zend_string *sql = NULL; - int id = -1, argc = ZEND_NUM_ARGS(); + int argc = ZEND_NUM_ARGS(); if (zend_parse_parameters(argc, "rsa|l", &pgsql_link, &table, &table_len, &values, &option) == FAILURE) { @@ -6614,7 +6674,9 @@ PHP_FUNCTION(pg_insert) RETURN_FALSE; } - ZEND_FETCH_RESOURCE2(pg_link, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); + if ((pg_link = (PGconn *)zend_fetch_resource2(Z_RES_P(pgsql_link), "PostgreSQL link", le_link, le_plink)) == NULL) { + RETURN_FALSE; + } if (php_pgsql_flush_query(pg_link)) { php_error_docref(NULL, E_NOTICE, "Detected unhandled result(s) in connection"); @@ -6656,8 +6718,7 @@ PHP_FUNCTION(pg_insert) pgsql_handle->conn = pg_link; pgsql_handle->result = pg_result; pgsql_handle->row = 0; - ZEND_REGISTER_RESOURCE(return_value, pgsql_handle, le_result); - return; + RETURN_RES(zend_register_resource(pgsql_handle, le_result)); } else { PQclear(pg_result); RETURN_FALSE; @@ -6816,7 +6877,7 @@ PHP_FUNCTION(pg_update) zend_ulong option = PGSQL_DML_EXEC; PGconn *pg_link; zend_string *sql = NULL; - int id = -1, argc = ZEND_NUM_ARGS(); + int argc = ZEND_NUM_ARGS(); if (zend_parse_parameters(argc, "rsaa|l", &pgsql_link, &table, &table_len, &values, &ids, &option) == FAILURE) { @@ -6827,7 +6888,9 @@ PHP_FUNCTION(pg_update) RETURN_FALSE; } - ZEND_FETCH_RESOURCE2(pg_link, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); + if ((pg_link = (PGconn *)zend_fetch_resource2(Z_RES_P(pgsql_link), "PostgreSQL link", le_link, le_plink)) == NULL) { + RETURN_FALSE; + } if (php_pgsql_flush_query(pg_link)) { php_error_docref(NULL, E_NOTICE, "Detected unhandled result(s) in connection"); @@ -6906,7 +6969,7 @@ PHP_FUNCTION(pg_delete) zend_ulong option = PGSQL_DML_EXEC; PGconn *pg_link; zend_string *sql; - int id = -1, argc = ZEND_NUM_ARGS(); + int argc = ZEND_NUM_ARGS(); if (zend_parse_parameters(argc, "rsa|l", &pgsql_link, &table, &table_len, &ids, &option) == FAILURE) { @@ -6917,7 +6980,9 @@ PHP_FUNCTION(pg_delete) RETURN_FALSE; } - ZEND_FETCH_RESOURCE2(pg_link, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); + if ((pg_link = (PGconn *)zend_fetch_resource2(Z_RES_P(pgsql_link), "PostgreSQL link", le_link, le_plink)) == NULL) { + RETURN_FALSE; + } if (php_pgsql_flush_query(pg_link)) { php_error_docref(NULL, E_NOTICE, "Detected unhandled result(s) in connection"); @@ -7036,7 +7101,7 @@ PHP_FUNCTION(pg_select) zend_ulong option = PGSQL_DML_EXEC; PGconn *pg_link; zend_string *sql = NULL; - int id = -1, argc = ZEND_NUM_ARGS(); + int argc = ZEND_NUM_ARGS(); if (zend_parse_parameters(argc, "rsa|l", &pgsql_link, &table, &table_len, &ids, &option) == FAILURE) { @@ -7047,7 +7112,9 @@ PHP_FUNCTION(pg_select) RETURN_FALSE; } - ZEND_FETCH_RESOURCE2(pg_link, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); + if ((pg_link = (PGconn *)zend_fetch_resource2(Z_RES_P(pgsql_link), "PostgreSQL link", le_link, le_plink)) == NULL) { + RETURN_FALSE; + } if (php_pgsql_flush_query(pg_link)) { php_error_docref(NULL, E_NOTICE, "Detected unhandled result(s) in connection"); |