]> granicus.if.org Git - php/commitdiff
Fix build failure with PostgreSQL 6.5.x
authorYasuo Ohgaki <yohgaki@php.net>
Fri, 29 Mar 2002 11:24:54 +0000 (11:24 +0000)
committerYasuo Ohgaki <yohgaki@php.net>
Fri, 29 Mar 2002 11:24:54 +0000 (11:24 +0000)
# I'll merge this to 4.2.0 branch later

ext/pgsql/config.m4
ext/pgsql/pgsql.c

index 2c8f8d71a9198109a9cdcc388414b533d39bf86e..85f85685107097382771e254ae2be8a7f5459de4 100644 (file)
@@ -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,[ ]))
index 850365a0644aa5b803121b93586fbb55615b7822..2d71c17507960a7324dbbec8503bb324c31647b0 100644 (file)
 #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));
        }