Commit:    48033ed48d235be7dcfa8894e7dee6966cd4d2d7
Author:    Yasuo Ohgaki <yohg...@ohgaki.net>         Thu, 29 Mar 2012 20:06:00 
+0900
Parents:   dde1bff4c6463a0ff8ed70449eea0e50451e99e8 
aecf5485e3af6a1e405f29f653353ae1237dbb3e
Branches:  master

Link:       
http://git.php.net/?p=php-src.git;a=commitdiff;h=48033ed48d235be7dcfa8894e7dee6966cd4d2d7

Log:
Merge branch 'PHP-5.4'

* PHP-5.4:
  Fixed bug #60718 Complie problem with libpq (PostgreSQL 7.3 or less)

Bugs:
https://bugs.php.net/60718

Changed paths:
  MM  ext/pgsql/pgsql.c


Diff:
48033ed48d235be7dcfa8894e7dee6966cd4d2d7
diff --combined ext/pgsql/pgsql.c
index 327ce07,d8127af..e54b824
--- a/ext/pgsql/pgsql.c
+++ b/ext/pgsql/pgsql.c
@@@ -422,17 -422,6 +422,17 @@@ ZEND_BEGIN_ARG_INFO_EX(arginfo_pg_unesc
  ZEND_END_ARG_INFO()
  #endif
  
 +#if HAVE_PQESCAPE
 +ZEND_BEGIN_ARG_INFO_EX(arginfo_pg_escape_literal, 0, 0, 0)
 +      ZEND_ARG_INFO(0, connection)
 +      ZEND_ARG_INFO(0, data)
 +ZEND_END_ARG_INFO()
 +ZEND_BEGIN_ARG_INFO_EX(arginfo_pg_escape_identifier, 0, 0, 0)
 +      ZEND_ARG_INFO(0, connection)
 +      ZEND_ARG_INFO(0, data)
 +ZEND_END_ARG_INFO()
 +#endif
 +
  ZEND_BEGIN_ARG_INFO_EX(arginfo_pg_result_error, 0, 0, 1)
        ZEND_ARG_INFO(0, result)
  ZEND_END_ARG_INFO()
@@@ -663,8 -652,6 +663,8 @@@ const zend_function_entry pgsql_functio
        PHP_FE(pg_escape_string,        arginfo_pg_escape_string)
        PHP_FE(pg_escape_bytea,         arginfo_pg_escape_bytea)
        PHP_FE(pg_unescape_bytea,       arginfo_pg_unescape_bytea)
 +      PHP_FE(pg_escape_literal,       arginfo_pg_escape_literal)
 +      PHP_FE(pg_escape_identifier,    arginfo_pg_escape_identifier)
  #endif
  #if HAVE_PQSETERRORVERBOSITY
        PHP_FE(pg_set_error_verbosity,  arginfo_pg_set_error_verbosity)
@@@ -828,7 -815,7 +828,7 @@@ static void _php_pgsql_notice_handler(v
        TSRMLS_FETCH();
        if (! PGG(ignore_notices)) {
                notice = (php_pgsql_notice *)emalloc(sizeof(php_pgsql_notice));
 -              notice->message = _php_pgsql_trim_message(message, 
&notice->len);
 +              notice->message = _php_pgsql_trim_message(message, (int 
*)&notice->len);
                if (PGG(log_notices)) {
                        php_error_docref(NULL TSRMLS_CC, E_NOTICE, "%s", 
notice->message);
                }
@@@ -4213,130 -4200,6 +4213,130 @@@ PHP_FUNCTION(pg_unescape_bytea
  /* }}} */
  #endif
  
 +#ifdef HAVE_PQESCAPE
 +#if !HAVE_PQESCAPELITERAL
 +/* emulate libpq's PQescapeInternal() 9.0 or later */
 +static char* php_pgsql_PQescapeInternal(PGconn *conn, const char *str, size_t 
len, int escape_literal) {
 +      char *result, *rp;
 +      const char *s;
 +      size_t tmp_len;
 +      int input_len = len;
 +      char quote_char = escape_literal ? '\'' : '"';
 +
 +      if (!conn) {
 +              return NULL;
 +      }
 +
 +      /*
 +       * NOTE: multibyte strings that could cointain slashes should be 
considered.
 +       * (e.g. SJIS, BIG5) However, it cannot be done without valid PGconn 
and mbstring. 
 +       * Therefore, this function does not support such encodings currently.
 +       * FIXME: add encoding check and skip multibyte char bytes if there is 
vaild PGconn.
 +       */
 +
 +      /* allocate enough memory */
 +      rp = result = (char *)emalloc(len*2 + 5); /* leading " E" needs extra 2 
bytes + quote_chars on both end for 2 bytes + NULL */
 +
 +      if (escape_literal) {
 +              /* check backslashes */
 +              tmp_len = strspn(str, "\\");
 +              if (tmp_len != len) {
 +                      /* add " E" for escaping slashes */
 +                      *rp++ = ' ';
 +                      *rp++ = 'E';
 +              }
 +      }
 +      /* open quote */
 +      *rp++ = quote_char;
 +      for (s = str; s - str < input_len; ++s) {
 +              if (*s == quote_char || (escape_literal && *s == '\\')) {
 +                      *rp++ = *s;
 +                      *rp++ = *s;
 +              } else {
 +                      *rp++ = *s;
 +              }
 +      }
 +      *rp++ = quote_char;
 +      *rp = '\0';
 +      
 +      return result;
 +}
 +#endif
 +
 +static void php_pgsql_escape_internal(INTERNAL_FUNCTION_PARAMETERS, int 
escape_literal) {
 +      char *from = NULL, *to = NULL, *tmp = NULL;
 +      zval *pgsql_link = NULL;
 +      PGconn *pgsql;
 +      int to_len;
 +      int from_len;
 +      int id = -1;
 +
 +      switch (ZEND_NUM_ARGS()) {
 +              case 1:
 +                      if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, 
"s", &from, &from_len) == FAILURE) {
 +                              return;
 +                      }
 +                      pgsql_link = NULL;
 +                      id = PGG(default_link);
 +                      break;
 +
 +              default:
 +                      if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, 
"rs", &pgsql_link, &from, &from_len) == FAILURE) {
 +                              return;
 +                      }
 +                      break;
 +      }
 +
 +      if (pgsql_link == NULL && id == -1) {
 +              RETURN_FALSE;
 +      }
 +
 +      ZEND_FETCH_RESOURCE2(pgsql, PGconn *, &pgsql_link, id, "PostgreSQL 
link", le_link, le_plink);
 +      if (pgsql == NULL) {
 +              php_error_docref(NULL TSRMLS_CC, E_WARNING,"Cannot get default 
pgsql link");
 +              RETURN_FALSE;
 +      }
 +#ifdef HAVE_PQESCAPELITERAL
 +      if (escape_literal) {
 +              tmp = PQescapeLiteral(pgsql, from, (size_t)from_len);
 +      } else {
 +              tmp = PQescapeIdentifier(pgsql, from, (size_t)from_len);
 +      }
 +      if (!tmp) {
 +              php_error_docref(NULL TSRMLS_CC, E_WARNING,"Failed to escape");
 +              RETURN_FALSE;
 +      }
 +      to = estrdup(tmp);
 +      PQfreemem(tmp);
 +#else 
 +      to = php_pgsql_PQescapeInternal(pgsql, from, (size_t)from_len, 
escape_literal);
 +      if (!to) {
 +              php_error_docref(NULL TSRMLS_CC, E_WARNING,"Failed to escape");
 +              RETURN_FALSE;
 +      }
 +#endif
 +
 +      RETURN_STRING(to, 0);
 +}
 +
 +/* {{{ proto string pg_escape_literal([resource connection,] string data)
 +   Escape parameter as string literal (i.e. parameter)        */
 +PHP_FUNCTION(pg_escape_literal)
 +{
 +      php_pgsql_escape_internal(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
 +}
 +/* }}} */
 +
 +/* {{{ proto string pg_escape_identifier([resource connection,] string data)
 +   Escape identifier (i.e. table name, field name)    */
 +PHP_FUNCTION(pg_escape_identifier)
 +{
 +      php_pgsql_escape_internal(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
 +}
 +/* }}} */
 +#endif
 +
 +
  /* {{{ proto string pg_result_error(resource result)
     Get error message associated with result */
  PHP_FUNCTION(pg_result_error)
@@@ -4924,7 -4787,9 +4924,9 @@@ PHP_FUNCTION(pg_get_notify
  #else 
                if (atof(PG_VERSION) >= 9.0) {
  #endif 
+ #if HAVE_PQPARAMETERSTATUS
                        add_index_string(return_value, 2, pgsql_notify->extra, 
1);
+ #endif
                }
        }
        if (result_type & PGSQL_ASSOC) {
@@@ -4935,7 -4800,9 +4937,9 @@@
  #else 
                if (atof(PG_VERSION) >= 9.0) {
  #endif 
+ #if HAVE_PQPARAMETERSTATUS
                        add_assoc_string(return_value, "payload", 
pgsql_notify->extra, 1);
+ #endif
                }
        }
        PQfreemem(pgsql_notify);


--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to