]> granicus.if.org Git - php/commitdiff
Added pg_ping()
authorYasuo Ohgaki <yohgaki@php.net>
Wed, 2 Oct 2002 02:41:21 +0000 (02:41 +0000)
committerYasuo Ohgaki <yohgaki@php.net>
Wed, 2 Oct 2002 02:41:21 +0000 (02:41 +0000)
NEWS
ext/pgsql/pgsql.c
ext/pgsql/php_pgsql.h

diff --git a/NEWS b/NEWS
index 11397aae224a135681c5644b1d6d2e43b6ee932e..d8c1efec9a03b12458d6d60d04ff4afb2a5fa85f 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -7,7 +7,7 @@ PHP 4                                                                      NEWS
 - Fixed bug #17825 (ob_start() chunk size option didn't work well). (Yasuo)
 - Fixed output buffering implicit flush. (Yasuo) 
 - Added getopt() for parsing command line options and arguments. (Jon)
-- Added pg_fetch_assoc(), pg_fetch_all(), pg_meta_data(), pg_convert(), 
+- Added pg_fetch_assoc(), pg_fetch_all(), pg_ping(), pg_meta_data(), pg_convert(), 
   pg_insert(), pg_select(), pg_update() and pg_delete(). (Yasuo)
 - Fixed bug #17281 (Sanity checks for encoding sessions). (Ilia)
 - Fixed bug #16995 and #19392 (Prevent crash if $HTTP_SESSION_VARS != ARRAY).
index 4b3e4a2d0016aa86c83228dfe4701e5c00cbec1e..0e7cd398ef724f2b30719009ff08c488775319a2 100644 (file)
@@ -88,6 +88,7 @@ function_entry pgsql_functions[] = {
        PHP_FE(pg_port,                 NULL)
        PHP_FE(pg_tty,                  NULL)
        PHP_FE(pg_options,              NULL)
+       PHP_FE(pg_ping,                 NULL)
        /* query functions */
        PHP_FE(pg_query,                NULL)
        PHP_FE(pg_send_query,   NULL)
@@ -146,7 +147,7 @@ function_entry pgsql_functions[] = {
        PHP_FE(pg_set_client_encoding,  NULL)
 #endif
        /* misc function */
-       PHP_FE(pg_meta_data,     NULL)
+       PHP_FE(pg_meta_data,    NULL)
        PHP_FE(pg_convert,      NULL)
        PHP_FE(pg_insert,       NULL)
        PHP_FE(pg_update,       NULL)
@@ -840,6 +841,37 @@ PHP_FUNCTION(pg_host)
 }
 /* }}} */
 
+/* {{{ proto bool pg_ping([resource connection])
+   Ping database. If connection is bad, try to reconnect. */
+PHP_FUNCTION(pg_ping)
+{
+       zval *pgsql_link = NULL;
+       int id = -1;
+       PGconn *pgsql;
+
+       if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "r",
+                                                                &pgsql_link) == FAILURE) {
+               RETURN_FALSE;
+       }
+
+       ZEND_FETCH_RESOURCE2(pgsql, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
+
+       /* ping connection */
+       PQexec(pgsql, "SELECT 1;");
+
+       /* check status. */
+       if (PQstatus(pgsql) == CONNECTION_OK)
+               RETURN_TRUE;
+
+       /* reset connection if it's broken */
+       PQreset(pgsql);
+       if (PQstatus(pgsql) == CONNECTION_OK) {
+               RETURN_TRUE;
+       }
+       RETURN_FALSE;
+}
+/* }}} */
+
 /* {{{ proto resource pg_query([resource connection,] string query)
    Execute a query */
 PHP_FUNCTION(pg_query)
index 644ec7d5ac9aee31d48be00c10dd13f66e49eeed..11187ece5d05d4be87a9475972b7d500ec9dfdba 100644 (file)
@@ -71,6 +71,7 @@ PHP_FUNCTION(pg_dbname);
 PHP_FUNCTION(pg_port);
 PHP_FUNCTION(pg_tty);
 PHP_FUNCTION(pg_options);
+PHP_FUNCTION(pg_ping);
 /* query functions */
 PHP_FUNCTION(pg_query);
 PHP_FUNCTION(pg_send_query);