summaryrefslogtreecommitdiff
path: root/ext/pdo_pgsql/pgsql_driver.c
diff options
context:
space:
mode:
authorMatteo Beccati <mbeccati@php.net>2020-08-31 10:45:36 +0200
committerMatteo Beccati <mbeccati@php.net>2020-08-31 11:02:34 +0200
commitee2506cc027c97c86db51173ec7019c58b161204 (patch)
treeceafe73102c7b86da0b961f8edbf13cbb2eb9387 /ext/pdo_pgsql/pgsql_driver.c
parentad97739eac2f054d4ce3c3f492fefb0daaabaa25 (diff)
downloadphp-git-ee2506cc027c97c86db51173ec7019c58b161204.tar.gz
Fix #80027 Terrible performance using $query->fetch on queries with many bind parameters
Added new flags that allow skipping param_evt(s) that are not used by drivers, in a backwards and forward compatible manner. Updated the pgsql, mysql, sqlite and oci drivers to properly use the new flags. I've left out pdo_dblib, which doesn't have a param_hook, and pdo_firebird, which seems to be using PARAM_EVT_NORMALIZE in a wrong context (param type vs event type).
Diffstat (limited to 'ext/pdo_pgsql/pgsql_driver.c')
-rw-r--r--ext/pdo_pgsql/pgsql_driver.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/ext/pdo_pgsql/pgsql_driver.c b/ext/pdo_pgsql/pgsql_driver.c
index 27af12544e..38ea304a30 100644
--- a/ext/pdo_pgsql/pgsql_driver.c
+++ b/ext/pdo_pgsql/pgsql_driver.c
@@ -1192,6 +1192,11 @@ static int pdo_pgsql_handle_factory(pdo_dbh_t *dbh, zval *driver_options) /* {{{
H = pecalloc(1, sizeof(pdo_pgsql_db_handle), dbh->is_persistent);
dbh->driver_data = H;
+ dbh->skip_param_evt =
+ 1 << PDO_PARAM_EVT_EXEC_POST |
+ 1 << PDO_PARAM_EVT_FETCH_PRE |
+ 1 << PDO_PARAM_EVT_FETCH_POST;
+
H->einfo.errcode = 0;
H->einfo.errmsg = NULL;