update cte inline output for pg13

Make some macros in version_compat more robust
Remove commented code in ruleutils
Remove unnecessary variable assignments
pull/3900/head
Sait Talha Nisanci 2020-06-15 13:25:35 +03:00
parent 157af140e4
commit 1070828465
8 changed files with 176 additions and 1742 deletions

1
.gitattributes vendored
View File

@ -27,7 +27,6 @@ configure -whitespace
# except these exceptions...
src/backend/distributed/utils/citus_outfuncs.c -citus-style
src/backend/distributed/utils/pg11_snprintf.c -citus-style
src/backend/distributed/deparser/ruleutils_10.c -citus-style
src/backend/distributed/deparser/ruleutils_11.c -citus-style
src/backend/distributed/deparser/ruleutils_12.c -citus-style
src/backend/distributed/deparser/ruleutils_13.c -citus-style

View File

@ -16,8 +16,6 @@
*/
#include "distributed/pg_version_constants.h"
#pragma GCC optimize ("O0")
#include "pg_config.h"
#if (PG_VERSION_NUM >= PG_VERSION_13) && (PG_VERSION_NUM < PG_VERSION_14)
@ -3964,21 +3962,22 @@ get_name_for_var_field(Var *var, int fieldno,
var->varlevelsup, levelsup);
dpns = (deparse_namespace *) list_nth(context->namespaces,
netlevelsup);
/*
* If we have a syntactic referent for the Var, and we're working from a
* parse tree, prefer to use the syntactic referent. Otherwise, fall back
* on the semantic referent. (See comments in get_variable().)
*/
// if (var->varnosyn > 0 && dpns->plan == NULL)
// {
// varno = var->varnosyn;
// varattno = var->varattnosyn;
// }
// else
// {
varno = var->varno;
varattno = var->varattno;
// }
if (var->varnosyn > 0 && var->varnosyn <= list_length(dpns->rtable) && dpns->plan == NULL) {
rte = rt_fetch(var->varnosyn, dpns->rtable);
// if the rte var->varnosync points to is not a regular table and it is a join
// then the correct relname will be found with var->varnosync and var->varattnosync
// TODO:: this is a workaround and it can be simplified.
if (rte->rtekind == RTE_JOIN && rte->relid == 0 && var->varnosyn != var->varno) {
varno = var->varnosyn;
varattno = var->varattnosyn;
}
}
/*
* Try to find the relevant RTE in this rtable. In a plan tree, it's
* likely that varno is OUTER_VAR or INNER_VAR, in which case we must dig

View File

@ -1377,7 +1377,7 @@ RangeTableOffsetCompat(PlannerInfo *root, AppendRelInfo *appendRelInfo)
{
#if PG_VERSION_NUM >= PG_VERSION_13
int i = 1;
for (i = 1; i < root->simple_rel_array_size; i++)
for (; i < root->simple_rel_array_size; i++)
{
RangeTblEntry *rte = root->simple_rte_array[i];
if (rte->inh)

View File

@ -42,8 +42,8 @@
h)
#define varoattno varattnosyn
#define varnoold varnosyn
#define Set_ptr_value(a, b) a->ptr_value = b
#define RangeTableEntryFromNSItem(a) a->p_rte
#define Set_ptr_value(a, b) ((a)->ptr_value = (b))
#define RangeTableEntryFromNSItem(a) ((a)->p_rte)
#define QueryCompletionCompat QueryCompletion
#else /* pre PG13 */
#define lnext_compat(l, r) lnext(r)
@ -55,8 +55,8 @@
e, f)
#define getOwnedSequencesCompat(a, b) getOwnedSequences(a, b)
#define ExplainOnePlanCompat(a, b, c, d, e, f, g, h) ExplainOnePlan(a, b, c, d, e, f, g)
#define Set_ptr_value(a, b) a->data.ptr_value = b
#define RangeTableEntryFromNSItem(a) a
#define Set_ptr_value(a, b) ((a)->data.ptr_value = (b))
#define RangeTableEntryFromNSItem(a) (a)
#define QueryCompletionCompat char
#endif
#if PG_VERSION_NUM >= PG_VERSION_12

View File

@ -12,10 +12,10 @@ INSERT INTO test_table SELECT i % 10, 'test' || i, row_to_json(row(i, i*18, 'tes
-- server version because CTE inlining might produce
-- different debug messages in PG 11 vs PG 12
SHOW server_version \gset
SELECT substring(:'server_version', '\d+')::int;
substring
SELECT substring(:'server_version', '\d+')::int >= 12;
?column?
---------------------------------------------------------------------
13
t
(1 row)
SET client_min_messages TO DEBUG;
@ -725,7 +725,8 @@ WITH cte_1 AS (SELECT * FROM test_table),
cte_2 AS (SELECT * FROM test_table ORDER BY 1 DESC LIMIT 3)
(SELECT *, (SELECT 1) FROM cte_1 EXCEPT SELECT *, 1 FROM test_table)
UNION
(SELECT *, 1 FROM cte_2);
(SELECT *, 1 FROM cte_2)
ORDER BY 1,2;
DEBUG: CTE cte_1 is going to be inlined via distributed planning
DEBUG: CTE cte_2 is going to be inlined via distributed planning
DEBUG: Router planner cannot handle multi-shard select queries
@ -743,13 +744,13 @@ DEBUG: Creating router plan
DEBUG: generating subplan XXX_3 for subquery SELECT key, value, other_value, (SELECT 1) FROM (SELECT intermediate_result.key, intermediate_result.value, intermediate_result.other_value FROM read_intermediate_result('XXX_1'::text, 'binary'::citus_copy_format) intermediate_result(key integer, value text, other_value jsonb)) cte_1
DEBUG: Router planner cannot handle multi-shard select queries
DEBUG: generating subplan XXX_4 for subquery SELECT key, value, other_value, 1 FROM cte_inline.test_table
DEBUG: Plan XXX query after replacing subqueries and CTEs: (SELECT intermediate_result.key, intermediate_result.value, intermediate_result.other_value, intermediate_result."?column?" FROM read_intermediate_result('XXX_3'::text, 'binary'::citus_copy_format) intermediate_result(key integer, value text, other_value jsonb, "?column?" integer) EXCEPT SELECT intermediate_result.key, intermediate_result.value, intermediate_result.other_value, intermediate_result."?column?" FROM read_intermediate_result('XXX_4'::text, 'binary'::citus_copy_format) intermediate_result(key integer, value text, other_value jsonb, "?column?" integer)) UNION SELECT cte_2.key, cte_2.value, cte_2.other_value, 1 FROM (SELECT intermediate_result.key, intermediate_result.value, intermediate_result.other_value FROM read_intermediate_result('XXX_2'::text, 'binary'::citus_copy_format) intermediate_result(key integer, value text, other_value jsonb)) cte_2
DEBUG: Plan XXX query after replacing subqueries and CTEs: (SELECT intermediate_result.key, intermediate_result.value, intermediate_result.other_value, intermediate_result."?column?" FROM read_intermediate_result('XXX_3'::text, 'binary'::citus_copy_format) intermediate_result(key integer, value text, other_value jsonb, "?column?" integer) EXCEPT SELECT intermediate_result.key, intermediate_result.value, intermediate_result.other_value, intermediate_result."?column?" FROM read_intermediate_result('XXX_4'::text, 'binary'::citus_copy_format) intermediate_result(key integer, value text, other_value jsonb, "?column?" integer)) UNION SELECT cte_2.key, cte_2.value, cte_2.other_value, 1 FROM (SELECT intermediate_result.key, intermediate_result.value, intermediate_result.other_value FROM read_intermediate_result('XXX_2'::text, 'binary'::citus_copy_format) intermediate_result(key integer, value text, other_value jsonb)) cte_2 ORDER BY 1, 2
DEBUG: Creating router plan
key | value | other_value | ?column?
---------------------------------------------------------------------
9 | test9 | {"f1": 9, "f2": 162, "f3": "test9"} | 1
9 | test29 | {"f1": 29, "f2": 522, "f3": "test29"} | 1
9 | test19 | {"f1": 19, "f2": 342, "f3": "test19"} | 1
9 | test29 | {"f1": 29, "f2": 522, "f3": "test29"} | 1
9 | test9 | {"f1": 9, "f2": 162, "f3": "test9"} | 1
(3 rows)
-- cte_1 is safe to inline, even if because after inlining

View File

@ -12,10 +12,10 @@ INSERT INTO test_table SELECT i % 10, 'test' || i, row_to_json(row(i, i*18, 'tes
-- server version because CTE inlining might produce
-- different debug messages in PG 11 vs PG 12
SHOW server_version \gset
SELECT substring(:'server_version', '\d+')::int;
substring
SELECT substring(:'server_version', '\d+')::int >= 12;
?column?
---------------------------------------------------------------------
12
f
(1 row)
SET client_min_messages TO DEBUG;
@ -48,19 +48,7 @@ SELECT
FROM
cte_1
ORDER BY 2 DESC LIMIT 1;
DEBUG: CTE cte_1 is going to be inlined via distributed planning
DEBUG: Router planner cannot handle multi-shard select queries
DEBUG: Router planner cannot handle multi-shard select queries
DEBUG: generating subplan XXX_1 for CTE cte_1: SELECT key, value, other_value FROM cte_inline.test_table
DEBUG: Router planner cannot handle multi-shard select queries
DEBUG: Plan XXX query after replacing subqueries and CTEs: SELECT key, value, other_value, (SELECT 1) FROM (SELECT intermediate_result.key, intermediate_result.value, intermediate_result.other_value FROM read_intermediate_result('XXX_1'::text, 'binary'::citus_copy_format) intermediate_result(key integer, value text, other_value jsonb)) cte_1 ORDER BY value DESC LIMIT 1
DEBUG: Creating router plan
DEBUG: Plan is router executable
key | value | other_value | ?column?
---------------------------------------------------------------------
9 | test99 | {"f1": 99, "f2": 1782, "f3": "test99"} | 1
(1 row)
ERROR: syntax error at or near "NOT"
-- the cte can be inlined because the unsupported
-- part of the query (subquery in WHERE clause)
-- doesn't access the cte
@ -304,9 +292,7 @@ FROM
WHERE
key = 1;
DEBUG: CTE a is going to be inlined via distributed planning
DEBUG: Creating router plan
DEBUG: Plan is router executable
DETAIL: distribution column value: 1
DEBUG: Router planner cannot handle multi-shard select queries
count
---------------------------------------------------------------------
10
@ -320,15 +306,7 @@ FROM
a
WHERE
key = 1;
DEBUG: CTE a is going to be inlined via distributed planning
DEBUG: Creating router plan
DEBUG: Plan is router executable
DETAIL: distribution column value: 1
count
---------------------------------------------------------------------
10
(1 row)
ERROR: syntax error at or near "NOT"
-- using MATERIALIZED should cause inlining not to happen
WITH a AS MATERIALIZED (SELECT * FROM test_table)
SELECT
@ -337,17 +315,7 @@ FROM
a
WHERE
key = 1;
DEBUG: Router planner cannot handle multi-shard select queries
DEBUG: generating subplan XXX_1 for CTE a: SELECT key, value, other_value FROM cte_inline.test_table
DEBUG: Router planner cannot handle multi-shard select queries
DEBUG: Plan XXX query after replacing subqueries and CTEs: SELECT count(*) AS count FROM (SELECT intermediate_result.key, intermediate_result.value, intermediate_result.other_value FROM read_intermediate_result('XXX_1'::text, 'binary'::citus_copy_format) intermediate_result(key integer, value text, other_value jsonb)) a WHERE (key OPERATOR(pg_catalog.=) 1)
DEBUG: Creating router plan
DEBUG: Plan is router executable
count
---------------------------------------------------------------------
10
(1 row)
ERROR: syntax error at or near "MATERIALIZED"
-- EXPLAIN should show the difference between materialized an not materialized
EXPLAIN (COSTS OFF) WITH a AS (SELECT * FROM test_table)
SELECT
@ -357,20 +325,19 @@ FROM
WHERE
key = 1;
DEBUG: CTE a is going to be inlined via distributed planning
DEBUG: Creating router plan
DEBUG: Plan is router executable
DETAIL: distribution column value: 1
DEBUG: Router planner cannot handle multi-shard select queries
QUERY PLAN
---------------------------------------------------------------------
Custom Scan (Citus Adaptive)
Task Count: 1
Tasks Shown: All
Aggregate
-> Custom Scan (Citus Adaptive)
Task Count: 4
Tasks Shown: One of 4
-> Task
Node: host=localhost port=xxxxx dbname=regression
-> Aggregate
-> Seq Scan on test_table_1960000 test_table
Filter: (key = 1)
(8 rows)
(9 rows)
EXPLAIN (COSTS OFF) WITH a AS MATERIALIZED (SELECT * FROM test_table)
SELECT
@ -379,31 +346,7 @@ FROM
a
WHERE
key = 1;
DEBUG: Router planner cannot handle multi-shard select queries
DEBUG: generating subplan XXX_1 for CTE a: SELECT key, value, other_value FROM cte_inline.test_table
DEBUG: Router planner cannot handle multi-shard select queries
DEBUG: Plan XXX query after replacing subqueries and CTEs: SELECT count(*) AS count FROM (SELECT intermediate_result.key, intermediate_result.value, intermediate_result.other_value FROM read_intermediate_result('XXX_1'::text, 'binary'::citus_copy_format) intermediate_result(key integer, value text, other_value jsonb)) a WHERE (key OPERATOR(pg_catalog.=) 1)
DEBUG: Creating router plan
DEBUG: Plan is router executable
QUERY PLAN
---------------------------------------------------------------------
Custom Scan (Citus Adaptive)
-> Distributed Subplan XXX_1
-> Custom Scan (Citus Adaptive)
Task Count: 4
Tasks Shown: One of 4
-> Task
Node: host=localhost port=xxxxx dbname=regression
-> Seq Scan on test_table_1960000 test_table
Task Count: 1
Tasks Shown: All
-> Task
Node: host=localhost port=xxxxx dbname=regression
-> Aggregate
-> Function Scan on read_intermediate_result intermediate_result
Filter: (key = 1)
(15 rows)
ERROR: syntax error at or near "MATERIALIZED"
-- citus should not inline the CTE because it is used multiple times
WITH cte_1 AS (SELECT * FROM test_table)
SELECT
@ -432,25 +375,7 @@ FROM
JOIN
cte_1 as second_entry
USING (key);
DEBUG: CTE cte_1 is going to be inlined via distributed planning
DEBUG: Router planner cannot handle multi-shard select queries
DEBUG: join prunable for intervals [-2147483648,-1073741825] and [-1073741824,-1]
DEBUG: join prunable for intervals [-2147483648,-1073741825] and [0,1073741823]
DEBUG: join prunable for intervals [-2147483648,-1073741825] and [1073741824,2147483647]
DEBUG: join prunable for intervals [-1073741824,-1] and [-2147483648,-1073741825]
DEBUG: join prunable for intervals [-1073741824,-1] and [0,1073741823]
DEBUG: join prunable for intervals [-1073741824,-1] and [1073741824,2147483647]
DEBUG: join prunable for intervals [0,1073741823] and [-2147483648,-1073741825]
DEBUG: join prunable for intervals [0,1073741823] and [-1073741824,-1]
DEBUG: join prunable for intervals [0,1073741823] and [1073741824,2147483647]
DEBUG: join prunable for intervals [1073741824,2147483647] and [-2147483648,-1073741825]
DEBUG: join prunable for intervals [1073741824,2147483647] and [-1073741824,-1]
DEBUG: join prunable for intervals [1073741824,2147483647] and [0,1073741823]
count
---------------------------------------------------------------------
1021
(1 row)
ERROR: syntax error at or near "NOT"
-- EXPLAIN should show the differences between MATERIALIZED and NOT MATERIALIZED
EXPLAIN (COSTS OFF) WITH cte_1 AS (SELECT * FROM test_table)
SELECT
@ -498,36 +423,7 @@ FROM
JOIN
cte_1 as second_entry
USING (key);
DEBUG: CTE cte_1 is going to be inlined via distributed planning
DEBUG: Router planner cannot handle multi-shard select queries
DEBUG: join prunable for intervals [-2147483648,-1073741825] and [-1073741824,-1]
DEBUG: join prunable for intervals [-2147483648,-1073741825] and [0,1073741823]
DEBUG: join prunable for intervals [-2147483648,-1073741825] and [1073741824,2147483647]
DEBUG: join prunable for intervals [-1073741824,-1] and [-2147483648,-1073741825]
DEBUG: join prunable for intervals [-1073741824,-1] and [0,1073741823]
DEBUG: join prunable for intervals [-1073741824,-1] and [1073741824,2147483647]
DEBUG: join prunable for intervals [0,1073741823] and [-2147483648,-1073741825]
DEBUG: join prunable for intervals [0,1073741823] and [-1073741824,-1]
DEBUG: join prunable for intervals [0,1073741823] and [1073741824,2147483647]
DEBUG: join prunable for intervals [1073741824,2147483647] and [-2147483648,-1073741825]
DEBUG: join prunable for intervals [1073741824,2147483647] and [-1073741824,-1]
DEBUG: join prunable for intervals [1073741824,2147483647] and [0,1073741823]
QUERY PLAN
---------------------------------------------------------------------
Aggregate
-> Custom Scan (Citus Adaptive)
Task Count: 4
Tasks Shown: One of 4
-> Task
Node: host=localhost port=xxxxx dbname=regression
-> Aggregate
-> Hash Join
Hash Cond: (test_table.key = test_table_1.key)
-> Seq Scan on test_table_1960000 test_table
-> Hash
-> Seq Scan on test_table_1960000 test_table_1
(12 rows)
ERROR: syntax error at or near "NOT"
-- ctes with volatile functions are not
-- inlined
WITH cte_1 AS (SELECT *, random() FROM test_table)
@ -552,17 +448,7 @@ SELECT
count(*)
FROM
cte_1;
DEBUG: Router planner cannot handle multi-shard select queries
DEBUG: generating subplan XXX_1 for CTE cte_1: SELECT key, value, other_value, random() AS random FROM cte_inline.test_table
DEBUG: Router planner cannot handle multi-shard select queries
DEBUG: Plan XXX query after replacing subqueries and CTEs: SELECT count(*) AS count FROM (SELECT intermediate_result.key, intermediate_result.value, intermediate_result.other_value, intermediate_result.random FROM read_intermediate_result('XXX_1'::text, 'binary'::citus_copy_format) intermediate_result(key integer, value text, other_value jsonb, random double precision)) cte_1
DEBUG: Creating router plan
DEBUG: Plan is router executable
count
---------------------------------------------------------------------
101
(1 row)
ERROR: syntax error at or near "NOT"
-- cte_1 should be able to inlined even if
-- it is used one level below
WITH cte_1 AS (SELECT * FROM test_table)
@ -618,11 +504,11 @@ SELECT count(*)
LEFT JOIN test_table u2 ON u2.key = bar.key) AS foo ON TRUE;
DEBUG: CTE bar is going to be inlined via distributed planning
DEBUG: Router planner cannot handle multi-shard select queries
count
---------------------------------------------------------------------
10331
(1 row)
DEBUG: skipping recursive planning for the subquery since it contains references to outer queries
DEBUG: skipping recursive planning for the subquery since it contains references to outer queries
DEBUG: skipping recursive planning for the subquery since it contains references to outer queries
DEBUG: Router planner cannot handle multi-shard select queries
ERROR: CTEs that refer to other subqueries are not supported in multi-shard queries
-- inlined CTE contains a reference to outer query
-- should be fine (even if the recursive planning fails
-- to recursively plan the query)
@ -695,9 +581,7 @@ DEBUG: CTE cte_1 is going to be inlined via distributed planning
DEBUG: CTE cte_1 is going to be inlined via distributed planning
DEBUG: CTE cte_1 is going to be inlined via distributed planning
DEBUG: CTE cte_1 is going to be inlined via distributed planning
DEBUG: Creating router plan
DEBUG: Plan is router executable
DETAIL: distribution column value: 1
DEBUG: Router planner cannot handle multi-shard select queries
count | key
---------------------------------------------------------------------
(0 rows)
@ -733,7 +617,8 @@ WITH cte_1 AS (SELECT * FROM test_table),
cte_2 AS (SELECT * FROM test_table ORDER BY 1 DESC LIMIT 3)
(SELECT *, (SELECT 1) FROM cte_1 EXCEPT SELECT *, 1 FROM test_table)
UNION
(SELECT *, 1 FROM cte_2);
(SELECT *, 1 FROM cte_2)
ORDER BY 1,2;
DEBUG: CTE cte_1 is going to be inlined via distributed planning
DEBUG: CTE cte_2 is going to be inlined via distributed planning
DEBUG: Router planner cannot handle multi-shard select queries
@ -751,13 +636,13 @@ DEBUG: Creating router plan
DEBUG: generating subplan XXX_3 for subquery SELECT key, value, other_value, (SELECT 1) FROM (SELECT intermediate_result.key, intermediate_result.value, intermediate_result.other_value FROM read_intermediate_result('XXX_1'::text, 'binary'::citus_copy_format) intermediate_result(key integer, value text, other_value jsonb)) cte_1
DEBUG: Router planner cannot handle multi-shard select queries
DEBUG: generating subplan XXX_4 for subquery SELECT key, value, other_value, 1 FROM cte_inline.test_table
DEBUG: Plan XXX query after replacing subqueries and CTEs: (SELECT intermediate_result.key, intermediate_result.value, intermediate_result.other_value, intermediate_result."?column?" FROM read_intermediate_result('XXX_3'::text, 'binary'::citus_copy_format) intermediate_result(key integer, value text, other_value jsonb, "?column?" integer) EXCEPT SELECT intermediate_result.key, intermediate_result.value, intermediate_result.other_value, intermediate_result."?column?" FROM read_intermediate_result('XXX_4'::text, 'binary'::citus_copy_format) intermediate_result(key integer, value text, other_value jsonb, "?column?" integer)) UNION SELECT cte_2.key, cte_2.value, cte_2.other_value, 1 FROM (SELECT intermediate_result.key, intermediate_result.value, intermediate_result.other_value FROM read_intermediate_result('XXX_2'::text, 'binary'::citus_copy_format) intermediate_result(key integer, value text, other_value jsonb)) cte_2
DEBUG: Plan XXX query after replacing subqueries and CTEs: (SELECT intermediate_result.key, intermediate_result.value, intermediate_result.other_value, intermediate_result."?column?" FROM read_intermediate_result('XXX_3'::text, 'binary'::citus_copy_format) intermediate_result(key integer, value text, other_value jsonb, "?column?" integer) EXCEPT SELECT intermediate_result.key, intermediate_result.value, intermediate_result.other_value, intermediate_result."?column?" FROM read_intermediate_result('XXX_4'::text, 'binary'::citus_copy_format) intermediate_result(key integer, value text, other_value jsonb, "?column?" integer)) UNION SELECT cte_2.key, cte_2.value, cte_2.other_value, 1 FROM (SELECT intermediate_result.key, intermediate_result.value, intermediate_result.other_value FROM read_intermediate_result('XXX_2'::text, 'binary'::citus_copy_format) intermediate_result(key integer, value text, other_value jsonb)) cte_2 ORDER BY 1, 2
DEBUG: Creating router plan
key | value | other_value | ?column?
---------------------------------------------------------------------
9 | test19 | {"f1": 19, "f2": 342, "f3": "test19"} | 1
9 | test29 | {"f1": 29, "f2": 522, "f3": "test29"} | 1
9 | test9 | {"f1": 9, "f2": 162, "f3": "test9"} | 1
9 | test19 | {"f1": 19, "f2": 342, "f3": "test19"} | 1
(3 rows)
-- cte_1 is safe to inline, even if because after inlining
@ -811,11 +696,17 @@ FROM
cte LEFT JOIN test_table USING (key);
DEBUG: CTE cte is going to be inlined via distributed planning
DEBUG: Router planner cannot handle multi-shard select queries
count
---------------------------------------------------------------------
1021
(1 row)
DEBUG: Router planner cannot handle multi-shard select queries
DEBUG: generating subplan XXX_1 for subquery SELECT key, value, other_value FROM cte_inline.test_table
DEBUG: Plan XXX query after replacing subqueries and CTEs: SELECT count(*) AS count FROM ((SELECT intermediate_result.key, intermediate_result.value, intermediate_result.other_value FROM read_intermediate_result('XXX_1'::text, 'binary'::citus_copy_format) intermediate_result(key integer, value text, other_value jsonb)) cte LEFT JOIN cte_inline.test_table USING (key))
DEBUG: Router planner cannot handle multi-shard select queries
DEBUG: Router planner cannot handle multi-shard select queries
DEBUG: generating subplan XXX_1 for CTE cte: SELECT key, value, other_value FROM cte_inline.test_table
DEBUG: Router planner cannot handle multi-shard select queries
DEBUG: Plan XXX query after replacing subqueries and CTEs: SELECT count(*) AS count FROM ((SELECT intermediate_result.key, intermediate_result.value, intermediate_result.other_value FROM read_intermediate_result('XXX_1'::text, 'binary'::citus_copy_format) intermediate_result(key integer, value text, other_value jsonb)) cte LEFT JOIN cte_inline.test_table USING (key))
DEBUG: Router planner cannot handle multi-shard select queries
ERROR: cannot pushdown the subquery
DETAIL: Complex subqueries and CTEs cannot be in the outer part of the outer join
-- the CTEs are very simple, so postgres
-- can pull-up the subqueries after inlining
-- the CTEs, and the query that we send to workers
@ -829,18 +720,10 @@ FROM
DEBUG: CTE cte_1 is going to be inlined via distributed planning
DEBUG: CTE cte_2 is going to be inlined via distributed planning
DEBUG: Router planner cannot handle multi-shard select queries
DEBUG: join prunable for intervals [-2147483648,-1073741825] and [-1073741824,-1]
DEBUG: join prunable for intervals [-2147483648,-1073741825] and [0,1073741823]
DEBUG: join prunable for intervals [-2147483648,-1073741825] and [1073741824,2147483647]
DEBUG: join prunable for intervals [-1073741824,-1] and [-2147483648,-1073741825]
DEBUG: join prunable for intervals [-1073741824,-1] and [0,1073741823]
DEBUG: join prunable for intervals [-1073741824,-1] and [1073741824,2147483647]
DEBUG: join prunable for intervals [0,1073741823] and [-2147483648,-1073741825]
DEBUG: join prunable for intervals [0,1073741823] and [-1073741824,-1]
DEBUG: join prunable for intervals [0,1073741823] and [1073741824,2147483647]
DEBUG: join prunable for intervals [1073741824,2147483647] and [-2147483648,-1073741825]
DEBUG: join prunable for intervals [1073741824,2147483647] and [-1073741824,-1]
DEBUG: join prunable for intervals [1073741824,2147483647] and [0,1073741823]
DEBUG: Router planner cannot handle multi-shard select queries
DEBUG: generating subplan XXX_1 for subquery SELECT key FROM cte_inline.test_table
DEBUG: Plan XXX query after replacing subqueries and CTEs: SELECT count(*) AS count FROM ((SELECT test_table.key FROM cte_inline.test_table) cte_1 JOIN (SELECT intermediate_result.key FROM read_intermediate_result('XXX_1'::text, 'binary'::citus_copy_format) intermediate_result(key integer)) cte_2 USING (key))
DEBUG: Router planner cannot handle multi-shard select queries
count
---------------------------------------------------------------------
1021
@ -896,12 +779,7 @@ DEBUG: Creating router plan
-- we de still don't support it
WITH cte_1 AS NOT MATERIALIZED (SELECT * FROM test_table)
DELETE FROM test_table WHERE key NOT IN (SELECT key FROM cte_1);
DEBUG: complex joins are only supported when all distributed tables are co-located and joined on their distribution columns
DEBUG: generating subplan XXX_1 for CTE cte_1: SELECT key, value, other_value FROM cte_inline.test_table
DEBUG: Router planner cannot handle multi-shard select queries
DEBUG: Plan XXX query after replacing subqueries and CTEs: DELETE FROM cte_inline.test_table WHERE (NOT (key OPERATOR(pg_catalog.=) ANY (SELECT cte_1.key FROM (SELECT intermediate_result.key, intermediate_result.value, intermediate_result.other_value FROM read_intermediate_result('XXX_1'::text, 'binary'::citus_copy_format) intermediate_result(key integer, value text, other_value jsonb)) cte_1)))
DEBUG: Creating router plan
DEBUG: Plan is router executable
ERROR: syntax error at or near "NOT"
-- we don't inline CTEs if they are modifying CTEs
WITH cte_1 AS (DELETE FROM test_table WHERE key % 3 = 1 RETURNING key)
SELECT * FROM cte_1 ORDER BY 1 DESC LIMIT 3;
@ -920,18 +798,7 @@ DEBUG: Creating router plan
-- NOT MATERIALIZED should not affect modifying CTEs
WITH cte_1 AS NOT MATERIALIZED (DELETE FROM test_table WHERE key % 3 = 0 RETURNING key)
SELECT count(*) FROM cte_1;
DEBUG: data-modifying statements are not supported in the WITH clauses of distributed queries
DEBUG: generating subplan XXX_1 for CTE cte_1: DELETE FROM cte_inline.test_table WHERE ((key OPERATOR(pg_catalog.%) 3) OPERATOR(pg_catalog.=) 0) RETURNING key
DEBUG: Creating router plan
DEBUG: Plan is router executable
DEBUG: Plan XXX query after replacing subqueries and CTEs: SELECT count(*) AS count FROM (SELECT intermediate_result.key FROM read_intermediate_result('XXX_1'::text, 'binary'::citus_copy_format) intermediate_result(key integer)) cte_1
DEBUG: Creating router plan
DEBUG: Plan is router executable
count
---------------------------------------------------------------------
164
(1 row)
ERROR: syntax error at or near "NOT"
-- cte with column aliases
SELECT * FROM test_table,
(WITH cte_1 (x,y) AS (SELECT * FROM test_table),
@ -949,11 +816,11 @@ DEBUG: Router planner cannot handle multi-shard select queries
DEBUG: push down of limit count: 5
key | value | other_value | z | y | key | t | m | cte_2_key
---------------------------------------------------------------------
2 | test12 | {"f1": 12, "f2": 216, "f3": "test12"} | test12 | {"f1": 12, "f2": 216, "f3": "test12"} | 2 | test12 | {"f1": 12, "f2": 216, "f3": "test12"} | 2
2 | test12 | {"f1": 12, "f2": 216, "f3": "test12"} | test12 | {"f1": 12, "f2": 216, "f3": "test12"} | 2 | test12 | | 2
2 | test12 | {"f1": 12, "f2": 216, "f3": "test12"} | test12 | {"f1": 12, "f2": 216, "f3": "test12"} | 2 | test12 | | 2
2 | test12 | {"f1": 12, "f2": 216, "f3": "test12"} | test12 | {"f1": 12, "f2": 216, "f3": "test12"} | 2 | test12 | | 2
2 | test12 | {"f1": 12, "f2": 216, "f3": "test12"} | test12 | {"f1": 12, "f2": 216, "f3": "test12"} | 2 | test15 | {"f1": 15, "f2": 270, "f3": "test15"} | 5
0 | test0 | {"f1": 0, "f2": 0, "f3": "test0"} | test0 | {"f1": 0, "f2": 0, "f3": "test0"} | 0 | test0 | {"f1": 0, "f2": 0, "f3": "test0"} | 0
0 | test0 | {"f1": 0, "f2": 0, "f3": "test0"} | test0 | {"f1": 0, "f2": 0, "f3": "test0"} | 0 | test0 | | 0
0 | test0 | {"f1": 0, "f2": 0, "f3": "test0"} | test0 | {"f1": 0, "f2": 0, "f3": "test0"} | 0 | test0 | | 0
0 | test0 | {"f1": 0, "f2": 0, "f3": "test0"} | test0 | {"f1": 0, "f2": 0, "f3": "test0"} | 0 | test0 | | 0
0 | test0 | {"f1": 0, "f2": 0, "f3": "test0"} | test0 | {"f1": 0, "f2": 0, "f3": "test0"} | 0 | test10 | {"f1": 10, "f2": 180, "f3": "test10"} | 0
(5 rows)
-- cte used in HAVING subquery just works fine
@ -977,10 +844,12 @@ DEBUG: Plan XXX query after replacing subqueries and CTEs: SELECT key, count(*)
DEBUG: Router planner cannot handle multi-shard select queries
key | count
---------------------------------------------------------------------
0 | 44
9 | 40
8 | 40
6 | 40
5 | 40
2 | 40
(3 rows)
(5 rows)
-- cte used in ORDER BY just works fine
-- even if it is inlined
@ -1001,9 +870,9 @@ DEBUG: Router planner cannot handle multi-shard select queries
DEBUG: push down of limit count: 3
key
---------------------------------------------------------------------
8
8
8
9
9
9
(3 rows)
PREPARE inlined_cte_without_params AS
@ -1036,7 +905,7 @@ DEBUG: Router planner cannot handle multi-shard select queries
DEBUG: push down of limit count: 3
count
---------------------------------------------------------------------
40
44
40
40
(3 rows)
@ -1044,7 +913,7 @@ DEBUG: push down of limit count: 3
EXECUTE inlined_cte_without_params;
count
---------------------------------------------------------------------
40
44
40
40
(3 rows)
@ -1052,7 +921,7 @@ EXECUTE inlined_cte_without_params;
EXECUTE inlined_cte_without_params;
count
---------------------------------------------------------------------
40
44
40
40
(3 rows)
@ -1060,7 +929,7 @@ EXECUTE inlined_cte_without_params;
EXECUTE inlined_cte_without_params;
count
---------------------------------------------------------------------
40
44
40
40
(3 rows)
@ -1068,7 +937,7 @@ EXECUTE inlined_cte_without_params;
EXECUTE inlined_cte_without_params;
count
---------------------------------------------------------------------
40
44
40
40
(3 rows)
@ -1076,7 +945,7 @@ EXECUTE inlined_cte_without_params;
EXECUTE inlined_cte_without_params;
count
---------------------------------------------------------------------
40
44
40
40
(3 rows)
@ -1091,49 +960,49 @@ DEBUG: Plan XXX query after replacing subqueries and CTEs: SELECT key, value, o
DEBUG: Creating router plan
key | value | other_value | ?column?
---------------------------------------------------------------------
8 | test98 | | 1
8 | test98 | | 1
8 | test98 | | 1
9 | test99 | | 1
9 | test99 | | 1
9 | test99 | | 1
(3 rows)
EXECUTE non_inlined_cte_without_params;
key | value | other_value | ?column?
---------------------------------------------------------------------
8 | test98 | | 1
8 | test98 | | 1
8 | test98 | | 1
9 | test99 | | 1
9 | test99 | | 1
9 | test99 | | 1
(3 rows)
EXECUTE non_inlined_cte_without_params;
key | value | other_value | ?column?
---------------------------------------------------------------------
8 | test98 | | 1
8 | test98 | | 1
8 | test98 | | 1
9 | test99 | | 1
9 | test99 | | 1
9 | test99 | | 1
(3 rows)
EXECUTE non_inlined_cte_without_params;
key | value | other_value | ?column?
---------------------------------------------------------------------
8 | test98 | | 1
8 | test98 | | 1
8 | test98 | | 1
9 | test99 | | 1
9 | test99 | | 1
9 | test99 | | 1
(3 rows)
EXECUTE non_inlined_cte_without_params;
key | value | other_value | ?column?
---------------------------------------------------------------------
8 | test98 | | 1
8 | test98 | | 1
8 | test98 | | 1
9 | test99 | | 1
9 | test99 | | 1
9 | test99 | | 1
(3 rows)
EXECUTE non_inlined_cte_without_params;
key | value | other_value | ?column?
---------------------------------------------------------------------
8 | test98 | | 1
8 | test98 | | 1
8 | test98 | | 1
9 | test99 | | 1
9 | test99 | | 1
9 | test99 | | 1
(3 rows)
EXECUTE inlined_cte_has_parameter_on_non_dist_key('test1');
@ -1159,7 +1028,8 @@ DEBUG: Router planner cannot handle multi-shard select queries
DEBUG: push down of limit count: 3
count
---------------------------------------------------------------------
(0 rows)
4
(1 row)
EXECUTE inlined_cte_has_parameter_on_non_dist_key('test4');
DEBUG: CTE cte_1 is going to be inlined via distributed planning
@ -1186,7 +1056,8 @@ DEBUG: Router planner cannot handle multi-shard select queries
DEBUG: push down of limit count: 3
count
---------------------------------------------------------------------
(0 rows)
4
(1 row)
EXECUTE inlined_cte_has_parameter_on_dist_key(1);
DEBUG: CTE cte_1 is going to be inlined via distributed planning
@ -1207,7 +1078,8 @@ DEBUG: push down of limit count: 3
---------------------------------------------------------------------
40
40
(2 rows)
40
(3 rows)
EXECUTE inlined_cte_has_parameter_on_dist_key(3);
DEBUG: CTE cte_1 is going to be inlined via distributed planning
@ -1217,7 +1089,8 @@ DEBUG: push down of limit count: 3
---------------------------------------------------------------------
40
40
(2 rows)
40
(3 rows)
EXECUTE inlined_cte_has_parameter_on_dist_key(4);
DEBUG: CTE cte_1 is going to be inlined via distributed planning
@ -1227,7 +1100,8 @@ DEBUG: push down of limit count: 3
---------------------------------------------------------------------
40
40
(2 rows)
40
(3 rows)
EXECUTE inlined_cte_has_parameter_on_dist_key(5);
DEBUG: CTE cte_1 is going to be inlined via distributed planning
@ -1236,7 +1110,9 @@ DEBUG: push down of limit count: 3
count
---------------------------------------------------------------------
40
(1 row)
40
40
(3 rows)
EXECUTE inlined_cte_has_parameter_on_dist_key(6);
DEBUG: CTE cte_1 is going to be inlined via distributed planning
@ -1247,7 +1123,8 @@ DEBUG: push down of limit count: 3
count
---------------------------------------------------------------------
40
(1 row)
40
(2 rows)
EXECUTE non_inlined_cte_has_parameter_on_dist_key(1);
DEBUG: CTE cte_1 is going to be inlined via distributed planning
@ -1259,9 +1136,9 @@ DEBUG: Plan XXX query after replacing subqueries and CTEs: SELECT key, value, o
DEBUG: Creating router plan
key | value | other_value | ?column?
---------------------------------------------------------------------
8 | test98 | | 1
8 | test98 | | 1
8 | test98 | | 1
9 | test99 | | 1
9 | test99 | | 1
9 | test99 | | 1
(3 rows)
EXECUTE non_inlined_cte_has_parameter_on_dist_key(2);
@ -1274,9 +1151,9 @@ DEBUG: Plan XXX query after replacing subqueries and CTEs: SELECT key, value, o
DEBUG: Creating router plan
key | value | other_value | ?column?
---------------------------------------------------------------------
8 | test98 | | 1
8 | test98 | | 1
8 | test98 | | 1
9 | test99 | | 1
9 | test99 | | 1
9 | test99 | | 1
(3 rows)
EXECUTE non_inlined_cte_has_parameter_on_dist_key(3);
@ -1289,9 +1166,9 @@ DEBUG: Plan XXX query after replacing subqueries and CTEs: SELECT key, value, o
DEBUG: Creating router plan
key | value | other_value | ?column?
---------------------------------------------------------------------
8 | test98 | | 1
8 | test98 | | 1
8 | test98 | | 1
9 | test99 | | 1
9 | test99 | | 1
9 | test99 | | 1
(3 rows)
EXECUTE non_inlined_cte_has_parameter_on_dist_key(4);
@ -1304,9 +1181,9 @@ DEBUG: Plan XXX query after replacing subqueries and CTEs: SELECT key, value, o
DEBUG: Creating router plan
key | value | other_value | ?column?
---------------------------------------------------------------------
8 | test98 | | 1
8 | test98 | | 1
8 | test98 | | 1
9 | test99 | | 1
9 | test99 | | 1
9 | test99 | | 1
(3 rows)
EXECUTE non_inlined_cte_has_parameter_on_dist_key(5);
@ -1319,9 +1196,9 @@ DEBUG: Plan XXX query after replacing subqueries and CTEs: SELECT key, value, o
DEBUG: Creating router plan
key | value | other_value | ?column?
---------------------------------------------------------------------
8 | test98 | | 1
8 | test98 | | 1
8 | test98 | | 1
9 | test99 | | 1
9 | test99 | | 1
9 | test99 | | 1
(3 rows)
EXECUTE non_inlined_cte_has_parameter_on_dist_key(6);
@ -1336,9 +1213,9 @@ DEBUG: Plan XXX query after replacing subqueries and CTEs: SELECT key, value, o
DEBUG: Creating router plan
key | value | other_value | ?column?
---------------------------------------------------------------------
8 | test98 | | 1
8 | test98 | | 1
8 | test98 | | 1
9 | test99 | | 1
9 | test99 | | 1
9 | test99 | | 1
(3 rows)
EXECUTE retry_planning(1);
@ -1346,7 +1223,7 @@ DEBUG: CTE cte_1 is going to be inlined via distributed planning
DEBUG: Router planner cannot handle multi-shard select queries
json_object_agg
---------------------------------------------------------------------
{ "2" : "test12", "2" : "test2", "2" : "test22", "2" : "test32", "2" : "test42", "2" : "test52", "2" : "test62", "2" : "test72", "2" : "test82", "2" : "test92", "5" : "test15", "5" : "test25", "5" : "test35", "5" : "test45", "5" : "test5", "5" : "test55", "5" : "test65", "5" : "test75", "5" : "test85", "5" : "test95", "8" : "test18", "8" : "test28", "8" : "test38", "8" : "test48", "8" : "test58", "8" : "test68", "8" : "test78", "8" : "test8", "8" : "test88", "8" : "test98" }
{ "2" : "test12", "2" : "test2", "2" : "test22", "2" : "test32", "2" : "test42", "2" : "test52", "2" : "test62", "2" : "test72", "2" : "test82", "2" : "test92", "3" : "test13", "3" : "test23", "3" : "test3", "3" : "test33", "3" : "test43", "3" : "test53", "3" : "test63", "3" : "test73", "3" : "test83", "3" : "test93", "5" : "test15", "5" : "test25", "5" : "test35", "5" : "test45", "5" : "test5", "5" : "test55", "5" : "test65", "5" : "test75", "5" : "test85", "5" : "test95", "6" : "test16", "6" : "test26", "6" : "test36", "6" : "test46", "6" : "test56", "6" : "test6", "6" : "test66", "6" : "test76", "6" : "test86", "6" : "test96", "8" : "test18", "8" : "test28", "8" : "test38", "8" : "test48", "8" : "test58", "8" : "test68", "8" : "test78", "8" : "test8", "8" : "test88", "8" : "test98", "9" : "test19", "9" : "test29", "9" : "test39", "9" : "test49", "9" : "test59", "9" : "test69", "9" : "test79", "9" : "test89", "9" : "test9", "9" : "test99" }
(1 row)
EXECUTE retry_planning(2);
@ -1354,7 +1231,7 @@ DEBUG: CTE cte_1 is going to be inlined via distributed planning
DEBUG: Router planner cannot handle multi-shard select queries
json_object_agg
---------------------------------------------------------------------
{ "5" : "test15", "5" : "test25", "5" : "test35", "5" : "test45", "5" : "test5", "5" : "test55", "5" : "test65", "5" : "test75", "5" : "test85", "5" : "test95", "8" : "test18", "8" : "test28", "8" : "test38", "8" : "test48", "8" : "test58", "8" : "test68", "8" : "test78", "8" : "test8", "8" : "test88", "8" : "test98" }
{ "3" : "test13", "3" : "test23", "3" : "test3", "3" : "test33", "3" : "test43", "3" : "test53", "3" : "test63", "3" : "test73", "3" : "test83", "3" : "test93", "5" : "test15", "5" : "test25", "5" : "test35", "5" : "test45", "5" : "test5", "5" : "test55", "5" : "test65", "5" : "test75", "5" : "test85", "5" : "test95", "6" : "test16", "6" : "test26", "6" : "test36", "6" : "test46", "6" : "test56", "6" : "test6", "6" : "test66", "6" : "test76", "6" : "test86", "6" : "test96", "8" : "test18", "8" : "test28", "8" : "test38", "8" : "test48", "8" : "test58", "8" : "test68", "8" : "test78", "8" : "test8", "8" : "test88", "8" : "test98", "9" : "test19", "9" : "test29", "9" : "test39", "9" : "test49", "9" : "test59", "9" : "test69", "9" : "test79", "9" : "test89", "9" : "test9", "9" : "test99" }
(1 row)
EXECUTE retry_planning(3);
@ -1362,7 +1239,7 @@ DEBUG: CTE cte_1 is going to be inlined via distributed planning
DEBUG: Router planner cannot handle multi-shard select queries
json_object_agg
---------------------------------------------------------------------
{ "5" : "test15", "5" : "test25", "5" : "test35", "5" : "test45", "5" : "test5", "5" : "test55", "5" : "test65", "5" : "test75", "5" : "test85", "5" : "test95", "8" : "test18", "8" : "test28", "8" : "test38", "8" : "test48", "8" : "test58", "8" : "test68", "8" : "test78", "8" : "test8", "8" : "test88", "8" : "test98" }
{ "5" : "test15", "5" : "test25", "5" : "test35", "5" : "test45", "5" : "test5", "5" : "test55", "5" : "test65", "5" : "test75", "5" : "test85", "5" : "test95", "6" : "test16", "6" : "test26", "6" : "test36", "6" : "test46", "6" : "test56", "6" : "test6", "6" : "test66", "6" : "test76", "6" : "test86", "6" : "test96", "8" : "test18", "8" : "test28", "8" : "test38", "8" : "test48", "8" : "test58", "8" : "test68", "8" : "test78", "8" : "test8", "8" : "test88", "8" : "test98", "9" : "test19", "9" : "test29", "9" : "test39", "9" : "test49", "9" : "test59", "9" : "test69", "9" : "test79", "9" : "test89", "9" : "test9", "9" : "test99" }
(1 row)
EXECUTE retry_planning(4);
@ -1370,7 +1247,7 @@ DEBUG: CTE cte_1 is going to be inlined via distributed planning
DEBUG: Router planner cannot handle multi-shard select queries
json_object_agg
---------------------------------------------------------------------
{ "5" : "test15", "5" : "test25", "5" : "test35", "5" : "test45", "5" : "test5", "5" : "test55", "5" : "test65", "5" : "test75", "5" : "test85", "5" : "test95", "8" : "test18", "8" : "test28", "8" : "test38", "8" : "test48", "8" : "test58", "8" : "test68", "8" : "test78", "8" : "test8", "8" : "test88", "8" : "test98" }
{ "5" : "test15", "5" : "test25", "5" : "test35", "5" : "test45", "5" : "test5", "5" : "test55", "5" : "test65", "5" : "test75", "5" : "test85", "5" : "test95", "6" : "test16", "6" : "test26", "6" : "test36", "6" : "test46", "6" : "test56", "6" : "test6", "6" : "test66", "6" : "test76", "6" : "test86", "6" : "test96", "8" : "test18", "8" : "test28", "8" : "test38", "8" : "test48", "8" : "test58", "8" : "test68", "8" : "test78", "8" : "test8", "8" : "test88", "8" : "test98", "9" : "test19", "9" : "test29", "9" : "test39", "9" : "test49", "9" : "test59", "9" : "test69", "9" : "test79", "9" : "test89", "9" : "test9", "9" : "test99" }
(1 row)
EXECUTE retry_planning(5);
@ -1378,7 +1255,7 @@ DEBUG: CTE cte_1 is going to be inlined via distributed planning
DEBUG: Router planner cannot handle multi-shard select queries
json_object_agg
---------------------------------------------------------------------
{ "8" : "test18", "8" : "test28", "8" : "test38", "8" : "test48", "8" : "test58", "8" : "test68", "8" : "test78", "8" : "test8", "8" : "test88", "8" : "test98" }
{ "6" : "test16", "6" : "test26", "6" : "test36", "6" : "test46", "6" : "test56", "6" : "test6", "6" : "test66", "6" : "test76", "6" : "test86", "6" : "test96", "8" : "test18", "8" : "test28", "8" : "test38", "8" : "test48", "8" : "test58", "8" : "test68", "8" : "test78", "8" : "test8", "8" : "test88", "8" : "test98", "9" : "test19", "9" : "test29", "9" : "test39", "9" : "test49", "9" : "test59", "9" : "test69", "9" : "test79", "9" : "test89", "9" : "test9", "9" : "test99" }
(1 row)
EXECUTE retry_planning(6);
@ -1388,7 +1265,7 @@ DEBUG: CTE cte_1 is going to be inlined via distributed planning
DEBUG: Router planner cannot handle multi-shard select queries
json_object_agg
---------------------------------------------------------------------
{ "8" : "test18", "8" : "test28", "8" : "test38", "8" : "test48", "8" : "test58", "8" : "test68", "8" : "test78", "8" : "test8", "8" : "test88", "8" : "test98" }
{ "8" : "test18", "8" : "test28", "8" : "test38", "8" : "test48", "8" : "test58", "8" : "test68", "8" : "test78", "8" : "test8", "8" : "test88", "8" : "test98", "9" : "test19", "9" : "test29", "9" : "test39", "9" : "test49", "9" : "test59", "9" : "test69", "9" : "test79", "9" : "test89", "9" : "test9", "9" : "test99" }
(1 row)
-- this test can only work if the CTE is recursively
@ -1410,7 +1287,7 @@ DEBUG: Plan XXX query after replacing subqueries and CTEs: SELECT count(*) AS c
DEBUG: Creating router plan
count
---------------------------------------------------------------------
4800
11536
(1 row)
-- this becomes a non-colocated subquery join
@ -1428,7 +1305,7 @@ DEBUG: Plan XXX query after replacing subqueries and CTEs: SELECT count(*) AS c
DEBUG: Router planner cannot handle multi-shard select queries
count
---------------------------------------------------------------------
480
1136
(1 row)
-- cte a has to be recursively planned because of OFFSET 0
@ -1452,7 +1329,7 @@ DEBUG: Plan XXX query after replacing subqueries and CTEs: SELECT min(a.key) AS
DEBUG: Creating router plan
min
---------------------------------------------------------------------
2
0
(1 row)
-- after both CTEs are inlined, this becomes non-colocated subquery join
@ -1469,9 +1346,9 @@ DEBUG: Router planner cannot handle multi-shard select queries
DEBUG: push down of limit count: 3
key | value | other_value | key | value | other_value
---------------------------------------------------------------------
2 | test2 | {"f1": 2, "f2": 36, "f3": "test2"} | 2 | test12 |
2 | test2 | {"f1": 2, "f2": 36, "f3": "test2"} | 2 | test12 |
2 | test2 | {"f1": 2, "f2": 36, "f3": "test2"} | 2 | test12 |
0 | test10 | {"f1": 10, "f2": 180, "f3": "test10"} | 0 | test0 |
0 | test10 | {"f1": 10, "f2": 180, "f3": "test10"} | 0 | test0 |
0 | test10 | {"f1": 10, "f2": 180, "f3": "test10"} | 0 | test0 |
(3 rows)
-- full join is only supported when both sides are
@ -1495,9 +1372,9 @@ DEBUG: Plan XXX query after replacing subqueries and CTEs: SELECT value FROM ((
DEBUG: Creating router plan
value
---------------------------------------------------------------------
test98
test98
test98
test99
test99
test99
(3 rows)
-- an unsupported agg. for multi-shard queries
@ -1508,7 +1385,7 @@ DEBUG: CTE cte_1 is going to be inlined via distributed planning
DEBUG: Router planner cannot handle multi-shard select queries
json_object_agg
---------------------------------------------------------------------
{ "2" : "test12", "2" : "test2", "2" : "test22", "2" : "test32", "2" : "test42", "2" : "test52", "2" : "test62", "2" : "test72", "2" : "test82", "2" : "test92", "5" : "test15", "5" : "test25", "5" : "test35", "5" : "test45", "5" : "test5", "5" : "test55", "5" : "test65", "5" : "test75", "5" : "test85", "5" : "test95", "8" : "test18", "8" : "test28", "8" : "test38", "8" : "test48", "8" : "test58", "8" : "test68", "8" : "test78", "8" : "test8", "8" : "test88", "8" : "test98" }
{ "2" : "test12", "2" : "test2", "2" : "test22", "2" : "test32", "2" : "test42", "2" : "test52", "2" : "test62", "2" : "test72", "2" : "test82", "2" : "test92", "3" : "test13", "3" : "test23", "3" : "test3", "3" : "test33", "3" : "test43", "3" : "test53", "3" : "test63", "3" : "test73", "3" : "test83", "3" : "test93", "5" : "test15", "5" : "test25", "5" : "test35", "5" : "test45", "5" : "test5", "5" : "test55", "5" : "test65", "5" : "test75", "5" : "test85", "5" : "test95", "6" : "test16", "6" : "test26", "6" : "test36", "6" : "test46", "6" : "test56", "6" : "test6", "6" : "test66", "6" : "test76", "6" : "test86", "6" : "test96", "8" : "test18", "8" : "test28", "8" : "test38", "8" : "test48", "8" : "test58", "8" : "test68", "8" : "test78", "8" : "test8", "8" : "test88", "8" : "test98", "9" : "test19", "9" : "test29", "9" : "test39", "9" : "test49", "9" : "test59", "9" : "test69", "9" : "test79", "9" : "test89", "9" : "test9", "9" : "test99" }
(1 row)
-- both cte_1 and cte_2 are going to be inlined.

File diff suppressed because it is too large Load Diff

View File

@ -9,7 +9,7 @@ INSERT INTO test_table SELECT i % 10, 'test' || i, row_to_json(row(i, i*18, 'tes
-- server version because CTE inlining might produce
-- different debug messages in PG 11 vs PG 12
SHOW server_version \gset
SELECT substring(:'server_version', '\d+')::int;
SELECT substring(:'server_version', '\d+')::int >= 12;
SET client_min_messages TO DEBUG;
@ -363,7 +363,8 @@ WITH cte_1 AS (SELECT * FROM test_table),
cte_2 AS (SELECT * FROM test_table ORDER BY 1 DESC LIMIT 3)
(SELECT *, (SELECT 1) FROM cte_1 EXCEPT SELECT *, 1 FROM test_table)
UNION
(SELECT *, 1 FROM cte_2);
(SELECT *, 1 FROM cte_2)
ORDER BY 1,2;
-- cte_1 is safe to inline, even if because after inlining