]> granicus.if.org Git - php/commitdiff
Make pg_escape_bytea() use PQescapeByteaConn() whenever possible.
authorIlia Alshanetsky <iliaa@php.net>
Fri, 6 Oct 2006 21:45:10 +0000 (21:45 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Fri, 6 Oct 2006 21:45:10 +0000 (21:45 +0000)
ext/pgsql/config.m4
ext/pgsql/pgsql.c

index 38dd3813d4fbd8ffc0972e1d06a28f616b0f9896..1ba1490cdf6fa2c5ee032720fd9a2a93e89b588b 100644 (file)
@@ -91,7 +91,8 @@ if test "$PHP_PGSQL" != "no"; then
   AC_CHECK_LIB(pq, PQgetCopyData,AC_DEFINE(HAVE_PQGETCOPYDATA,1,[PostgreSQL 7.4 or later]))
   AC_CHECK_LIB(pq, PQsetErrorVerbosity,AC_DEFINE(HAVE_PQSETERRORVERBOSITY,1,[PostgreSQL 7.4 or later]))
   AC_CHECK_LIB(pq, PQftable,AC_DEFINE(HAVE_PQFTABLE,1,[PostgreSQL 7.4 or later]))
-  AC_CHECK_LIB(pq, PQescapeStringConn, AC_DEFINE(HAVE_PQESCAPE_CONN,1,[PostgreSQL 8.1 or later]))
+  AC_CHECK_LIB(pq, PQescapeStringConn, AC_DEFINE(HAVE_PQESCAPE_CONN,1,[PostgreSQL 8.1.4 or later]))
+  AC_CHECK_LIB(pq, PQescapeByteaConn, AC_DEFINE(HAVE_PQESCAPE_BYTEA_CONN,1,[PostgreSQL 8.1.4 or later]))
   AC_CHECK_LIB(pq, pg_encoding_to_char,AC_DEFINE(HAVE_PGSQL_WITH_MULTIBYTE_SUPPORT,1,[Whether libpq is compiled with --enable-multibyte]))
   LIBS=$old_LIBS
   LDFLAGS=$old_LDFLAGS
index 9f6f00c35c1c382d61d229d2adaf6215000c0be4..7f069e2d06243f97ef4446a2cf43e98f6ffb3a61 100644 (file)
@@ -3581,19 +3581,33 @@ PHP_FUNCTION(pg_escape_string)
 }
 /* }}} */
 
-/* {{{ proto string pg_escape_bytea(string data)
+/* {{{ proto string pg_escape_bytea([resource connection,] string data)
    Escape binary for bytea type  */
 PHP_FUNCTION(pg_escape_bytea)
 {
        char *from = NULL, *to = NULL;
        size_t to_len;
-       int from_len;
-       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",
-                                                         &from, &from_len) == FAILURE) {
+       int from_len, id = -1;
+#ifdef HAVE_PQESCAPE_BYTEA_CONN
+       PGconn *pgsql;
+#endif
+       zval *pgsql_link;
+
+       if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "s", &from, &from_len) == SUCCESS) {
+               pgsql_link = NULL;
+               id = PGG(default_link);
+       } else if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &pgsql_link, &from, &from_len) == FAILURE) {
                return;
        }
 
-       to = (char *)PQescapeBytea((unsigned char*)from, from_len, &to_len);
+#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);
+               to = (char *)PQescapeByteaConn(pgsql, from, (size_t)from_len, &to_len);
+       } else
+#endif
+               to = (char *)PQescapeBytea((unsigned char*)from, from_len, &to_len);
+
        RETVAL_STRINGL(to, to_len-1, 1); /* to_len includes addtional '\0' */
        free(to);
 }
@@ -5129,7 +5143,11 @@ PHP_PGSQL_API int php_pgsql_convert(PGconn *pg_link, const char *table_name, con
                                                else {
                                                        unsigned char *tmp;
                                                        size_t to_len;
+#ifdef HAVE_PQESCAPE_BYTEA_CONN
+                                                       tmp = PQescapeByteaConn(pg_link, Z_STRVAL_PP(val), Z_STRLEN_PP(val), &to_len);
+#else
                                                        tmp = PQescapeBytea(Z_STRVAL_PP(val), Z_STRLEN_PP(val), &to_len);
+#endif
                                                        Z_TYPE_P(new_val) = IS_STRING;
                                                        Z_STRLEN_P(new_val) = to_len-1; /* PQescapeBytea's to_len includes additional '\0' */
                                                        Z_STRVAL_P(new_val) = emalloc(to_len);