Allow asynchronous execution in more cases.
authorEtsuro Fujita <efujita@postgresql.org>
Wed, 6 Apr 2022 06:45:00 +0000 (15:45 +0900)
committerEtsuro Fujita <efujita@postgresql.org>
Wed, 6 Apr 2022 06:45:00 +0000 (15:45 +0900)
commitc2bb02bc2e858ba345b8b33f1f3a54628f719d93
treefe742ab96982b0a74ed615d0c1e4c0982715a6e6
parent376dc437de40bd17e99a37f72f88627a16d7f200
Allow asynchronous execution in more cases.

In commit 27e1f1456, create_append_plan() only allowed the subplan
created from a given subpath to be executed asynchronously when it was
an async-capable ForeignPath.  To extend coverage, this patch handles
cases when the given subpath includes some other Path types as well that
can be omitted in the plan processing, such as a ProjectionPath directly
atop an async-capable ForeignPath, allowing asynchronous execution in
partitioned-scan/partitioned-join queries with non-Var tlist expressions
and more UNION queries.

Andrey Lepikhov and Etsuro Fujita, reviewed by Alexander Pyhalov and
Zhihong Yu.

Discussion: https://postgr.es/m/659c37a8-3e71-0ff2-394c-f04428c76f08%40postgrespro.ru
contrib/postgres_fdw/expected/postgres_fdw.out
contrib/postgres_fdw/sql/postgres_fdw.sql
src/backend/nodes/copyfuncs.c
src/backend/nodes/outfuncs.c
src/backend/nodes/readfuncs.c
src/backend/optimizer/plan/createplan.c
src/backend/optimizer/plan/setrefs.c
src/include/nodes/plannodes.h
src/include/optimizer/planmain.h