Use OFFSET 0 instead of ORDER BY to stop subquery pullup
authorDavid Rowley
Tue, 24 Jan 2023 00:50:11 +0000 (13:50 +1300)
committerDavid Rowley
Tue, 24 Jan 2023 00:50:11 +0000 (13:50 +1300)
b762fed64 recently changed this test to prevent subquery pullup to allow
us to test Memoize with lateral_vars.  As pointed out by Tom Lane, OFFSET
0 is our standard way of preventing subquery pullups, so do it that way
instead.

Discussion: https://postgr.es/m/2144818.1674517061@sss.pgh.pa.us
Backpatch-through: 14, same as b762fed64

src/test/regress/expected/memoize.out
src/test/regress/sql/memoize.sql

index de26829cb4b7b4ee9d63ff7fe0b45747091034ae..7d8f3ca424022411f331eca3dd71a6965a328081 100644 (file)
@@ -64,7 +64,7 @@ WHERE t2.unique1 < 1000;
 SELECT explain_memoize('
 SELECT COUNT(*),AVG(t2.unique1) FROM tenk1 t1,
 LATERAL (SELECT t2.unique1 FROM tenk1 t2
-         WHERE t1.twenty = t2.unique1 ORDER BY 1) t2
+         WHERE t1.twenty = t2.unique1 OFFSET 0) t2
 WHERE t1.unique1 < 1000;', false);
                                       explain_memoize                                      
 -------------------------------------------------------------------------------------------
@@ -85,7 +85,7 @@ WHERE t1.unique1 < 1000;', false);
 -- And check we get the expected results.
 SELECT COUNT(*),AVG(t2.unique1) FROM tenk1 t1,
 LATERAL (SELECT t2.unique1 FROM tenk1 t2
-         WHERE t1.twenty = t2.unique1 ORDER BY 1) t2
+         WHERE t1.twenty = t2.unique1 OFFSET 0) t2
 WHERE t1.unique1 < 1000;
  count |        avg         
 -------+--------------------
index dcd0ec9af198ad70f0478d2284cc55190c2de7e7..10df997d6ca7814200f5e13c1ec6d135fdfb372a 100644 (file)
@@ -48,13 +48,13 @@ WHERE t2.unique1 < 1000;
 SELECT explain_memoize('
 SELECT COUNT(*),AVG(t2.unique1) FROM tenk1 t1,
 LATERAL (SELECT t2.unique1 FROM tenk1 t2
-         WHERE t1.twenty = t2.unique1 ORDER BY 1) t2
+         WHERE t1.twenty = t2.unique1 OFFSET 0) t2
 WHERE t1.unique1 < 1000;', false);
 
 -- And check we get the expected results.
 SELECT COUNT(*),AVG(t2.unique1) FROM tenk1 t1,
 LATERAL (SELECT t2.unique1 FROM tenk1 t2
-         WHERE t1.twenty = t2.unique1 ORDER BY 1) t2
+         WHERE t1.twenty = t2.unique1 OFFSET 0) t2
 WHERE t1.unique1 < 1000;
 
 -- Reduce work_mem so that we see some cache evictions