mirror of
https://github.com/postgres/postgres.git
synced 2025-06-11 20:28:21 +03:00
Pull up ANY-SUBLINK with the necessary lateral support.
For ANY-SUBLINK, we adopted a two-stage pull-up approach to handle different types of scenarios. In the first stage, the sublink is pulled up as a subquery. Because of this, when writing this code, we did not have the ability to perform lateral joins, and therefore, we were unable to pull up Var with varlevelsup=1. Now that we have the ability to use lateral joins, we can eliminate this limitation. Author: Andy Fan <zhihui.fan1213@gmail.com> Author: Tom Lane <tgl@sss.pgh.pa.us> Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> Reviewed-by: Richard Guo <guofenglinux@gmail.com> Reviewed-by: Alena Rybakina <lena.ribackina@yandex.ru> Reviewed-by: Andrey Lepikhov <a.lepikhov@postgrespro.ru>
This commit is contained in:
@ -11894,7 +11894,7 @@ CREATE FOREIGN TABLE foreign_tbl (b int)
|
||||
CREATE FOREIGN TABLE foreign_tbl2 () INHERITS (foreign_tbl)
|
||||
SERVER loopback OPTIONS (table_name 'base_tbl');
|
||||
EXPLAIN (VERBOSE, COSTS OFF)
|
||||
SELECT a FROM base_tbl WHERE a IN (SELECT a FROM foreign_tbl);
|
||||
SELECT a FROM base_tbl WHERE (a, random() > 0) IN (SELECT a, random() > 0 FROM foreign_tbl);
|
||||
QUERY PLAN
|
||||
-----------------------------------------------------------------------------
|
||||
Seq Scan on public.base_tbl
|
||||
@ -11902,7 +11902,7 @@ SELECT a FROM base_tbl WHERE a IN (SELECT a FROM foreign_tbl);
|
||||
Filter: (SubPlan 1)
|
||||
SubPlan 1
|
||||
-> Result
|
||||
Output: base_tbl.a
|
||||
Output: base_tbl.a, (random() > '0'::double precision)
|
||||
-> Append
|
||||
-> Async Foreign Scan on public.foreign_tbl foreign_tbl_1
|
||||
Remote SQL: SELECT NULL FROM public.base_tbl
|
||||
@ -11910,7 +11910,7 @@ SELECT a FROM base_tbl WHERE a IN (SELECT a FROM foreign_tbl);
|
||||
Remote SQL: SELECT NULL FROM public.base_tbl
|
||||
(11 rows)
|
||||
|
||||
SELECT a FROM base_tbl WHERE a IN (SELECT a FROM foreign_tbl);
|
||||
SELECT a FROM base_tbl WHERE (a, random() > 0) IN (SELECT a, random() > 0 FROM foreign_tbl);
|
||||
a
|
||||
---
|
||||
1
|
||||
|
Reference in New Issue
Block a user