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; }