ext/pgsql: pg_fetch_all_columns/pg_copy_to arrays optimisations. (#18374)

changes to packed arrays for output userland values.
This commit is contained in:
David CARLIER 2025-04-21 13:43:44 +01:00 committed by GitHub
parent 23e9d8bd88
commit 8f6bc97a36
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -2186,17 +2186,18 @@ PHP_FUNCTION(pg_fetch_all_columns)
RETURN_THROWS(); RETURN_THROWS();
} }
array_init(return_value);
if ((pg_numrows = PQntuples(pgsql_result)) <= 0) { if ((pg_numrows = PQntuples(pgsql_result)) <= 0) {
return; RETURN_EMPTY_ARRAY();
} }
array_init_size(return_value, pg_numrows);
zend_hash_real_init_packed(Z_ARRVAL_P(return_value));
for (pg_row = 0; pg_row < pg_numrows; pg_row++) { for (pg_row = 0; pg_row < pg_numrows; pg_row++) {
if (PQgetisnull(pgsql_result, pg_row, (int)colno)) { if (PQgetisnull(pgsql_result, pg_row, (int)colno)) {
add_next_index_null(return_value); add_index_null(return_value, pg_row);
} else { } else {
add_next_index_string(return_value, PQgetvalue(pgsql_result, pg_row, (int)colno)); add_index_string(return_value, pg_row, PQgetvalue(pgsql_result, pg_row, (int)colno));
} }
} }
} }
@ -3363,6 +3364,7 @@ PHP_FUNCTION(pg_copy_to)
PQclear(pgsql_result); PQclear(pgsql_result);
array_init(return_value); array_init(return_value);
zend_hash_real_init_packed(Z_ARRVAL_P(return_value));
while (!copydone) while (!copydone)
{ {
int ret = PQgetCopyData(pgsql, &csv, 0); int ret = PQgetCopyData(pgsql, &csv, 0);