]> granicus.if.org Git - php/commitdiff
Finalized pgsql LOB support using native pgsql bytea type.
authorEdin Kadribasic <edink@php.net>
Sun, 6 Feb 2005 01:27:27 +0000 (01:27 +0000)
committerEdin Kadribasic <edink@php.net>
Sun, 6 Feb 2005 01:27:27 +0000 (01:27 +0000)
If paramater is bound with type PDO_PARAM_LOB the quoter function
gets a hint that specific LOB type quoting should be used:

$stmt->bindParam(":lob", $lob, PDO_PARAM_LOB);

ext/pdo_pgsql/pgsql_driver.c

index 5fc582099373a55b4783be5338e6692a53b80cab..ca14b2c1b543bdcc21ba1a8b14ad4c19a9e132de 100644 (file)
@@ -169,12 +169,28 @@ static long pgsql_handle_doer(pdo_dbh_t *dbh, const char *sql, long sql_len TSRM
 
 static int pgsql_handle_quoter(pdo_dbh_t *dbh, const char *unquoted, int unquotedlen, char **quoted, int *quotedlen, enum pdo_param_type paramtype TSRMLS_DC)
 {
-       *quoted = emalloc(2*unquotedlen + 3);
-       (*quoted)[0] = '\'';
-       *quotedlen = PQescapeString(*quoted + 1, unquoted, unquotedlen);
-       (*quoted)[*quotedlen + 1] = '\'';
-       (*quoted)[*quotedlen + 2] = '\0';
-       *quotedlen += 2;
+       unsigned char *escaped;
+       
+       switch (paramtype) {
+               case PDO_PARAM_LOB:
+                       /* escapedlen returned by PQescapeBytea() accounts for trailing 0 */
+                       escaped = PQescapeBytea(unquoted, unquotedlen, quotedlen);
+                       *quotedlen += 1;
+                       *quoted = emalloc(*quotedlen + 1);
+                       memcpy((*quoted)+1, escaped, *quotedlen-2);
+                       (*quoted)[0] = '\'';
+                       (*quoted)[*quotedlen-1] = '\'';
+                       (*quoted)[*quotedlen] = '\0';
+                       free(escaped);
+                       break;
+               default:
+                       *quoted = emalloc(2*unquotedlen + 3);
+                       (*quoted)[0] = '\'';
+                       *quotedlen = PQescapeString(*quoted + 1, unquoted, unquotedlen);
+                       (*quoted)[*quotedlen + 1] = '\'';
+                       (*quoted)[*quotedlen + 2] = '\0';
+                       *quotedlen += 2;
+       }
        return 1;
 }