Commit:    19ead23e8ec1e09bce080139a92d372ff1a8416b
Author:    Matteo Beccati <mbecc...@php.net>         Fri, 7 Jun 2013 09:23:00 
+0200
Parents:   2f7f34374c3a39a4664d1a80c530c7edb52bb97c
Branches:  master

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

Log:
Fixed bug #63657 (pgsqlCopyFrom/To methods use Postgres < 7.3 syntax)

Although still supported (for now), I've replaced with pre-9.0 syntax.
Still not cutting edge, but it works with any version PDO_pgsql is
compatible with (7.4+) and will possibly keep working for longer than
what we already had.

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

Changed paths:
  M  ext/pdo_pgsql/pgsql_driver.c


Diff:
diff --git a/ext/pdo_pgsql/pgsql_driver.c b/ext/pdo_pgsql/pgsql_driver.c
index fab06d7..03cc5a0 100644
--- a/ext/pdo_pgsql/pgsql_driver.c
+++ b/ext/pdo_pgsql/pgsql_driver.c
@@ -542,10 +542,11 @@ static PHP_METHOD(PDO, pgsqlCopyFromArray)
        PDO_CONSTRUCT_CHECK;
        PDO_DBH_CLEAR_ERR();
 
+       /* using pre-9.0 syntax as PDO_pgsql is 7.4+ compatible */
        if (pg_fields) {
-               spprintf(&query, 0, "COPY %s (%s) FROM STDIN DELIMITERS E'%c' 
WITH NULL AS E'%s'", table_name, pg_fields, (pg_delim_len ? *pg_delim : '\t'), 
(pg_null_as_len ? pg_null_as : "\\\\N"));
+               spprintf(&query, 0, "COPY %s (%s) FROM STDIN WITH DELIMITER 
E'%c' NULL AS E'%s'", table_name, pg_fields, (pg_delim_len ? *pg_delim : '\t'), 
(pg_null_as_len ? pg_null_as : "\\\\N"));
        } else {
-               spprintf(&query, 0, "COPY %s FROM STDIN DELIMITERS E'%c' WITH 
NULL AS E'%s'", table_name, (pg_delim_len ? *pg_delim : '\t'), (pg_null_as_len 
? pg_null_as : "\\\\N"));
+               spprintf(&query, 0, "COPY %s FROM STDIN WITH DELIMITER E'%c' 
NULL AS E'%s'", table_name, (pg_delim_len ? *pg_delim : '\t'), (pg_null_as_len 
? pg_null_as : "\\\\N"));
        }
 
        /* Obtain db Handle */
@@ -656,10 +657,11 @@ static PHP_METHOD(PDO, pgsqlCopyFromFile)
                RETURN_FALSE;
        }
 
+       /* using pre-9.0 syntax as PDO_pgsql is 7.4+ compatible */
        if (pg_fields) {
-               spprintf(&query, 0, "COPY %s (%s) FROM STDIN DELIMITERS E'%c' 
WITH NULL AS E'%s'", table_name, pg_fields, (pg_delim_len ? *pg_delim : '\t'), 
(pg_null_as_len ? pg_null_as : "\\\\N"));
+               spprintf(&query, 0, "COPY %s (%s) FROM STDIN WITH DELIMITER 
E'%c' NULL AS E'%s'", table_name, pg_fields, (pg_delim_len ? *pg_delim : '\t'), 
(pg_null_as_len ? pg_null_as : "\\\\N"));
        } else {
-               spprintf(&query, 0, "COPY %s FROM STDIN DELIMITERS E'%c' WITH 
NULL AS E'%s'", table_name, (pg_delim_len ? *pg_delim : '\t'), (pg_null_as_len 
? pg_null_as : "\\\\N"));
+               spprintf(&query, 0, "COPY %s FROM STDIN WITH DELIMITER E'%c' 
NULL AS E'%s'", table_name, (pg_delim_len ? *pg_delim : '\t'), (pg_null_as_len 
? pg_null_as : "\\\\N"));
        }
 
        H = (pdo_pgsql_db_handle *)dbh->driver_data;
@@ -761,10 +763,11 @@ static PHP_METHOD(PDO, pgsqlCopyToFile)
                PQclear(pgsql_result);
        }
 
+       /* using pre-9.0 syntax as PDO_pgsql is 7.4+ compatible */
        if (pg_fields) {
-               spprintf(&query, 0, "COPY %s (%s) TO STDIN DELIMITERS E'%c' 
WITH NULL AS E'%s'", table_name, pg_fields, (pg_delim_len ? *pg_delim : '\t'), 
(pg_null_as_len ? pg_null_as : "\\\\N"));
+               spprintf(&query, 0, "COPY %s (%s) TO STDIN WITH DELIMITER E'%c' 
NULL AS E'%s'", table_name, pg_fields, (pg_delim_len ? *pg_delim : '\t'), 
(pg_null_as_len ? pg_null_as : "\\\\N"));
        } else {
-               spprintf(&query, 0, "COPY %s TO STDIN DELIMITERS E'%c' WITH 
NULL AS E'%s'", table_name, (pg_delim_len ? *pg_delim : '\t'), (pg_null_as_len 
? pg_null_as : "\\\\N"));
+               spprintf(&query, 0, "COPY %s TO STDIN WITH DELIMITER E'%c' NULL 
AS E'%s'", table_name, (pg_delim_len ? *pg_delim : '\t'), (pg_null_as_len ? 
pg_null_as : "\\\\N"));
        }
        pgsql_result = PQexec(H->server, query);
        efree(query);
@@ -846,10 +849,11 @@ static PHP_METHOD(PDO, pgsqlCopyToArray)
                PQclear(pgsql_result);
        }
 
+       /* using pre-9.0 syntax as PDO_pgsql is 7.4+ compatible */
        if (pg_fields) {
-               spprintf(&query, 0, "COPY %s (%s) TO STDIN DELIMITERS E'%c' 
WITH NULL AS E'%s'", table_name, pg_fields, (pg_delim_len ? *pg_delim : '\t'), 
(pg_null_as_len ? pg_null_as : "\\\\N"));
+               spprintf(&query, 0, "COPY %s (%s) TO STDIN WITH DELIMITER E'%c' 
NULL AS E'%s'", table_name, pg_fields, (pg_delim_len ? *pg_delim : '\t'), 
(pg_null_as_len ? pg_null_as : "\\\\N"));
        } else {
-               spprintf(&query, 0, "COPY %s TO STDIN DELIMITERS E'%c' WITH 
NULL AS E'%s'", table_name, (pg_delim_len ? *pg_delim : '\t'), (pg_null_as_len 
? pg_null_as : "\\\\N"));
+               spprintf(&query, 0, "COPY %s TO STDIN WITH DELIMITER E'%c' NULL 
AS E'%s'", table_name, (pg_delim_len ? *pg_delim : '\t'), (pg_null_as_len ? 
pg_null_as : "\\\\N"));
        }
        pgsql_result = PQexec(H->server, query);
        efree(query);


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

Reply via email to