Anthonin Bonnefoy wrote: > So if I understand correctly, you want to automatically convert a > simple query into an extended query when we're within a pipeline. That > would be doable with: > > --- a/src/bin/psql/common.c > +++ b/src/bin/psql/common.c > @@ -1668,7 +1668,16 @@ ExecQueryAndProcessResults(const char *query, > } > break; > case PSQL_SEND_QUERY: > - success = PQsendQuery(pset.db, query); > + if (PQpipelineStatus(pset.db) != PQ_PIPELINE_OFF) { > + success = PQsendQueryParams(pset.db, query, > + > pset.bind_nparams, NULL, > + (const > char *const *) pset.bind_params, > + NULL, NULL, > 0); > + if (success) > + pset.piped_commands++; > + } > + else > + success = PQsendQuery(pset.db, query); > break; > }
Yes, except that the bind parameters need to be cleared after this, as done in clean_extended_state() > I do see the idea to make it easier to convert existing scripts into > using pipelining. The main focus of the initial implementation was > more on protocol regression tests with psql, so that's not necessarily > something I had in mind. Understood. Yet pipelining can accelerate considerably certain scripts when client-server latency is an issue. We should expect end users to benefit from it too. > I have some reservation as it will push all > parameters in the query string which may not be the desired > behaviour. I don't follow. For me the change discussed here is about simplifying the syntax when there is no out-of-query $N-style parameters, it does not change anything for queries that actually use them, nor does it forbid a \bind without parameters. Best regards, -- Daniel Vérité https://postgresql.verite.pro/