Fix contrib/postgres_fdw's remote-estimate representation of array Params.
Tom Lane <tgl@sss.pgh.pa.us>
Fix contrib/postgres_fdw's remote-estimate representation of array Params. We were emitting "(SELECT null::typename)", which is usually interpreted as a scalar subselect, but not so much in the context "x = ANY(...)". This led to remote-side parsing failures when remote_estimate is enabled. A quick and ugly fix is to stick in an extra cast step, "((SELECT null::typename)::typename)". The cast will be thrown away as redundant by parse analysis, but not before it's done its job of making sure the grammar sees the ANY argument as an a_expr rather than a select_with_parens. Per an example from Hannu Krosing.
Files
| Path | Change | +/− |
|---|---|---|
| contrib/postgres_fdw/deparse.c | modified | +54 −30 |
| contrib/postgres_fdw/expected/postgres_fdw.out | modified | +19 −0 |
| contrib/postgres_fdw/sql/postgres_fdw.sql | modified | +3 −0 |