From ae3360e71ff34aeaed946d0c084d03310af335d2 Mon Sep 17 00:00:00 2001 From: Onder Kalaci Date: Tue, 2 Aug 2022 14:09:08 +0200 Subject: [PATCH] Support multi-shard JSON_TABLE --- .../distributed/planner/multi_logical_planner.c | 3 ++- .../planner/query_pushdown_planning.c | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/backend/distributed/planner/multi_logical_planner.c b/src/backend/distributed/planner/multi_logical_planner.c index 7e665b567..be73a1433 100644 --- a/src/backend/distributed/planner/multi_logical_planner.c +++ b/src/backend/distributed/planner/multi_logical_planner.c @@ -1154,7 +1154,8 @@ HasComplexRangeTableType(Query *queryTree) if (rangeTableEntry->rtekind != RTE_RELATION && rangeTableEntry->rtekind != RTE_SUBQUERY && rangeTableEntry->rtekind != RTE_FUNCTION && - rangeTableEntry->rtekind != RTE_VALUES) + rangeTableEntry->rtekind != RTE_VALUES && + rangeTableEntry->rtekind != RTE_TABLEFUNC) { hasComplexRangeTableType = true; } diff --git a/src/backend/distributed/planner/query_pushdown_planning.c b/src/backend/distributed/planner/query_pushdown_planning.c index 5ad7887e9..7f3bf82de 100644 --- a/src/backend/distributed/planner/query_pushdown_planning.c +++ b/src/backend/distributed/planner/query_pushdown_planning.c @@ -349,6 +349,13 @@ IsFunctionOrValuesRTE(Node *node) { return true; } + else if (rangeTblEntry->rtekind == RTE_TABLEFUNC) + { + TableFunc *tablefunc = rangeTblEntry->tablefunc; + + + return tablefunc->functype == TFT_JSON_TABLE; + } } return false; @@ -1836,6 +1843,15 @@ HasRecurringTuples(Node *node, RecurringTuplesType *recurType) *recurType = RECURRING_TUPLES_VALUES; return true; } + else if (rangeTableEntry->rtekind == RTE_TABLEFUNC) + { + TableFunc *tablefunc = rangeTableEntry->tablefunc; + if (tablefunc->functype == TFT_JSON_TABLE) + { + *recurType = RECURRING_TUPLES_FUNCTION; + return true; + } + } return false; }