Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit e87465e

Browse files
committed
Fix the state:
AQO supports push-down of trivial JOIN and JOIN with mergejoinable clauses.
1 parent 30c8684 commit e87465e

File tree

2 files changed

+73
-13
lines changed

2 files changed

+73
-13
lines changed

expected/aqo_fdw.out

Lines changed: 48 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@ CREATE TABLE local (x int);
2121
CREATE FOREIGN TABLE frgn(x int) SERVER loopback OPTIONS (table_name 'local');
2222
INSERT INTO frgn (x) VALUES (1);
2323
ANALYZE local;
24-
EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF) SELECT x FROM frgn;
24+
-- Trivial foreign scan.s
25+
EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
26+
SELECT x FROM frgn;
2527
QUERY PLAN
2628
-------------------------------------------------------------
2729
Foreign Scan on frgn (actual rows=1 loops=1) (AQO not used)
@@ -30,7 +32,8 @@ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF) SELECT x FROM frgn;
3032
JOINS: 0
3133
(4 rows)
3234

33-
EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF) SELECT x FROM frgn;
35+
EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
36+
SELECT x FROM frgn;
3437
QUERY PLAN
3538
-----------------------------------------------------------------------------
3639
Foreign Scan on frgn (actual rows=1 loops=1) (AQO: cardinality=1, error=0%)
@@ -39,8 +42,9 @@ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF) SELECT x FROM frgn;
3942
JOINS: 0
4043
(4 rows)
4144

42-
-- Push down base filters.
43-
EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, VERBOSE) SELECT x FROM frgn WHERE x < 10;
45+
-- Push down base filters. Use verbose mode to see filters.
46+
EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, VERBOSE)
47+
SELECT x FROM frgn WHERE x < 10;
4448
QUERY PLAN
4549
--------------------------------------------------------------------
4650
Foreign Scan on public.frgn (actual rows=1 loops=1) (AQO not used)
@@ -51,7 +55,8 @@ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, VERBOSE) SELECT x FROM frg
5155
JOINS: 0
5256
(6 rows)
5357

54-
EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, VERBOSE) SELECT x FROM frgn WHERE x < 10;
58+
EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, VERBOSE)
59+
SELECT x FROM frgn WHERE x < 10;
5560
QUERY PLAN
5661
------------------------------------------------------------------------------------
5762
Foreign Scan on public.frgn (actual rows=1 loops=1) (AQO: cardinality=1, error=0%)
@@ -62,7 +67,8 @@ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, VERBOSE) SELECT x FROM frg
6267
JOINS: 0
6368
(6 rows)
6469

65-
EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF) SELECT x FROM frgn WHERE x < -10; -- AQO ignores constants
70+
EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
71+
SELECT x FROM frgn WHERE x < -10; -- AQO ignores constants
6672
QUERY PLAN
6773
-------------------------------------------------------------------------------
6874
Foreign Scan on frgn (actual rows=0 loops=1) (AQO: cardinality=1, error=100%)
@@ -71,4 +77,40 @@ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF) SELECT x FROM frgn WHERE x
7177
JOINS: 0
7278
(4 rows)
7379

80+
-- Trivial JOIN push-down.
81+
EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
82+
SELECT * FROM frgn AS a, frgn AS b WHERE a.x=b.x;
83+
QUERY PLAN
84+
---------------------------------------------------------------------------
85+
Merge Join (actual rows=1 loops=1) (AQO not used)
86+
Merge Cond: (a.x = b.x)
87+
-> Sort (actual rows=1 loops=1) (AQO not used)
88+
Sort Key: a.x
89+
Sort Method: quicksort Memory: 25kB
90+
-> Foreign Scan on frgn a (actual rows=1 loops=1) (AQO not used)
91+
-> Sort (actual rows=1 loops=1) (AQO not used)
92+
Sort Key: b.x
93+
Sort Method: quicksort Memory: 25kB
94+
-> Foreign Scan on frgn b (actual rows=1 loops=1) (AQO not used)
95+
Using aqo: true
96+
AQO mode: LEARN
97+
JOINS: 0
98+
(13 rows)
99+
100+
EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
101+
SELECT * FROM frgn AS a, frgn AS b WHERE a.x=b.x;
102+
QUERY PLAN
103+
---------------------------------------------------------------------
104+
Foreign Scan (actual rows=1 loops=1) (AQO: cardinality=1, error=0%)
105+
Relations: (frgn a) INNER JOIN (frgn b)
106+
Using aqo: true
107+
AQO mode: LEARN
108+
JOINS: 0
109+
(5 rows)
110+
111+
-- Non-mergejoinable join condition
112+
--EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, VERBOSE)
113+
--SELECT * FROM frgn AS a, frgn AS b WHERE a.x<b.x;
114+
--EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, VERBOSE)
115+
--SELECT * FROM frgn AS a, frgn AS b WHERE a.x<b.x;
74116
DROP EXTENSION aqo;

sql/aqo_fdw.sql

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,31 @@ CREATE FOREIGN TABLE frgn(x int) SERVER loopback OPTIONS (table_name 'local');
2626
INSERT INTO frgn (x) VALUES (1);
2727
ANALYZE local;
2828

29-
EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF) SELECT x FROM frgn;
30-
EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF) SELECT x FROM frgn;
31-
32-
-- Push down base filters.
33-
EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, VERBOSE) SELECT x FROM frgn WHERE x < 10;
34-
EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, VERBOSE) SELECT x FROM frgn WHERE x < 10;
35-
EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF) SELECT x FROM frgn WHERE x < -10; -- AQO ignores constants
29+
-- Trivial foreign scan.s
30+
EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
31+
SELECT x FROM frgn;
32+
EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
33+
SELECT x FROM frgn;
34+
35+
-- Push down base filters. Use verbose mode to see filters.
36+
EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, VERBOSE)
37+
SELECT x FROM frgn WHERE x < 10;
38+
EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, VERBOSE)
39+
SELECT x FROM frgn WHERE x < 10;
40+
EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
41+
SELECT x FROM frgn WHERE x < -10; -- AQO ignores constants
42+
43+
-- Trivial JOIN push-down.
44+
EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
45+
SELECT * FROM frgn AS a, frgn AS b WHERE a.x=b.x;
46+
EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, VERBOSE)
47+
SELECT * FROM frgn AS a, frgn AS b WHERE a.x=b.x;
48+
49+
-- TODO: Non-mergejoinable join condition.
50+
EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
51+
SELECT * FROM frgn AS a, frgn AS b WHERE a.x<b.x;
52+
EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, VERBOSE)
53+
SELECT * FROM frgn AS a, frgn AS b WHERE a.x<b.x;
3654

3755
DROP EXTENSION aqo;
3856

0 commit comments

Comments
 (0)