Browse Source

Fix build failure with PostgreSQL 6.5.x

# I'll merge this to 4.2.0 branch later
experimental/new_ui_api
Yasuo Ohgaki 25 years ago
parent
commit
c7d72bb20d
  1. 1
      ext/pgsql/config.m4
  2. 39
      ext/pgsql/pgsql.c

1
ext/pgsql/config.m4

@ -50,6 +50,7 @@ if test "$PHP_PGSQL" != "no"; then
old_LDFLAGS=$LDFLAGS
LDFLAGS="$LDFLAGS -L$PGSQL_LIBDIR"
AC_CHECK_LIB(pq, PQescapeString,AC_DEFINE(HAVE_PQESCAPE,1,[ ]))
AC_CHECK_LIB(pq, PQsetnonblocking,AC_DEFINE(HAVE_PQSETNONBLOCKING,1,[ ]))
AC_CHECK_LIB(pq, PQcmdTuples,AC_DEFINE(HAVE_PQCMDTUPLES,1,[ ]))
AC_CHECK_LIB(pq, PQoidValue,AC_DEFINE(HAVE_PQOIDVALUE,1,[ ]))
AC_CHECK_LIB(pq, PQclientEncoding,AC_DEFINE(HAVE_PQCLIENTENCODING,1,[ ]))

39
ext/pgsql/pgsql.c

@ -48,6 +48,12 @@
#define PGSQL_ESCAPE_STRING 1
#define PGSQL_ESCAPE_BYTEA 2
#if HAVE_PQSETNONBLOCKING
#define PQ_SETNONBLOCKING(pg_link, flag) PQsetnonblocking(pg_link, flag)
#else
#define PQ_SETNONBLOCKING(pg_link, flag) 0
#endif
#define CHECK_DEFAULT_LINK(x) if (x == -1) { php_error(E_WARNING, "%s() no PostgreSQL link opened yet", get_active_function_name(TSRMLS_C)); }
/* {{{ pgsql_functions[]
@ -253,13 +259,18 @@ static int _rollback_transactions(zend_rsrc_list_entry *rsrc TSRMLS_DC)
return 0;
link = (PGconn *) rsrc->ptr;
if (PQ_SETNONBLOCKING(link, 0)) {
php_error(E_NOTICE,"PostgreSQL cannot set connection to blocking mode");
return -1;
}
PQsetnonblocking(link, 0);
while ((res = PQgetResult(link))) {
PQclear(res);
}
PGG(ignore_notices) = 1;
PQexec(link,"BEGIN;ROLLBACK;");
res = PQexec(link,"BEGIN;ROLLBACK;");
PQclear(res);
PGG(ignore_notices) = 0;
return 0;
@ -845,7 +856,11 @@ PHP_FUNCTION(pg_query)
ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink);
convert_to_string_ex(query);
PQsetnonblocking(pgsql, 0);
if (PQ_SETNONBLOCKING(pgsql, 0)) {
php_error(E_NOTICE,"%s() cannot set connection to blocking mode",
get_active_function_name(TSRMLS_C));
RETURN_FALSE;
}
while ((pgsql_result = PQgetResult(pgsql))) {
PQclear(pgsql_result);
leftover = 1;
@ -1418,7 +1433,7 @@ PHP_FUNCTION(pg_last_oid)
ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, result, -1, "PostgreSQL result", le_result);
pgsql_result = pg_result->result;
#if HAVE_PQOIDVALUE
#ifdef HAVE_PQOIDVALUE
Z_LVAL_P(return_value) = (int) PQoidValue(pgsql_result);
if (Z_LVAL_P(return_value) == InvalidOid) {
RETURN_FALSE;
@ -1985,7 +2000,7 @@ PHP_FUNCTION(pg_lo_tell)
}
/* }}} */
#if HAVE_PQCLIENTENCODING
#ifdef HAVE_PQCLIENTENCODING
/* {{{ proto int pg_set_client_encoding([resource connection,] string encoding)
Set client encoding */
PHP_FUNCTION(pg_set_client_encoding)
@ -2357,7 +2372,7 @@ PHP_FUNCTION(pg_copy_from)
}
/* }}} */
#if HAVE_PQESCAPE
#ifdef HAVE_PQESCAPE
/* {{{ proto string pg_escape_string(string data)
Escape string for text/char type */
PHP_FUNCTION(pg_escape_string)
@ -2404,6 +2419,7 @@ PHP_FUNCTION(pg_result_error)
zval *result;
PGresult *pgsql_result;
pgsql_result_handle *pg_result;
char *err = NULL;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r",
&result) == FAILURE) {
@ -2416,7 +2432,8 @@ PHP_FUNCTION(pg_result_error)
if (!pgsql_result) {
RETURN_FALSE;
}
RETURN_STRING(PQresultErrorMessage(pgsql_result),1);
err = (char *)PQresultErrorMessage(pgsql_result);
RETURN_STRING(err,1);
}
/* }}} */
@ -2483,7 +2500,7 @@ static void php_pgsql_do_async(INTERNAL_FUNCTION_PARAMETERS, int entry_type)
ZEND_FETCH_RESOURCE2(pgsql, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
if (PQsetnonblocking(pgsql, 1)) {
if (PQ_SETNONBLOCKING(pgsql, 1)) {
php_error(E_NOTICE,"%s() cannot set connection to nonblocking mode",
get_active_function_name(TSRMLS_C));
RETURN_FALSE;
@ -2506,7 +2523,7 @@ static void php_pgsql_do_async(INTERNAL_FUNCTION_PARAMETERS, int entry_type)
get_active_function_name(TSRMLS_C));
break;
}
if (PQsetnonblocking(pgsql, 0)) {
if (PQ_SETNONBLOCKING(pgsql, 0)) {
php_error(E_NOTICE,"%s() cannot set connection to blocking mode",
get_active_function_name(TSRMLS_C));
}
@ -2549,7 +2566,7 @@ PHP_FUNCTION(pg_send_query)
ZEND_FETCH_RESOURCE2(pgsql, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
if (PQsetnonblocking(pgsql, 1)) {
if (PQ_SETNONBLOCKING(pgsql, 1)) {
php_error(E_NOTICE,"%s() cannot set connection to nonblocking mode",
get_active_function_name(TSRMLS_C));
RETURN_FALSE;
@ -2565,7 +2582,7 @@ PHP_FUNCTION(pg_send_query)
if (!PQsendQuery(pgsql, query)) {
RETURN_FALSE;
}
if (PQsetnonblocking(pgsql, 0)) {
if (PQ_SETNONBLOCKING(pgsql, 0)) {
php_error(E_NOTICE,"%s() cannot set connection to blocking mode",
get_active_function_name(TSRMLS_C));
}

Loading…
Cancel
Save