mirror of https://github.com/citusdata/citus.git
fix style
parent
a79b4b31c9
commit
c2c6f7b910
|
|
@ -2801,23 +2801,24 @@ JoinTreeContainsLateral(Node *node, List *rtable)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IsA(node, RangeTblRef))
|
if (IsA(node, RangeTblRef))
|
||||||
{
|
{
|
||||||
RangeTblEntry *rte = rt_fetch(((RangeTblRef *) node)->rtindex, rtable);
|
RangeTblEntry *rte = rt_fetch(((RangeTblRef *) node)->rtindex, rtable);
|
||||||
if (rte == NULL)
|
if (rte == NULL)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rte->lateral)
|
if (rte->lateral)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(rte->rtekind == RTE_SUBQUERY)
|
if (rte->rtekind == RTE_SUBQUERY)
|
||||||
{
|
{
|
||||||
if (rte->subquery)
|
if (rte->subquery)
|
||||||
{
|
{
|
||||||
return JoinTreeContainsLateral((Node *) rte->subquery->jointree, rte->subquery->rtable);
|
return JoinTreeContainsLateral((Node *) rte->subquery->jointree,
|
||||||
|
rte->subquery->rtable);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -2826,7 +2827,7 @@ JoinTreeContainsLateral(Node *node, List *rtable)
|
||||||
{
|
{
|
||||||
JoinExpr *join = (JoinExpr *) node;
|
JoinExpr *join = (JoinExpr *) node;
|
||||||
return JoinTreeContainsLateral(join->larg, rtable) ||
|
return JoinTreeContainsLateral(join->larg, rtable) ||
|
||||||
JoinTreeContainsLateral(join->rarg, rtable);
|
JoinTreeContainsLateral(join->rarg, rtable);
|
||||||
}
|
}
|
||||||
else if (IsA(node, FromExpr))
|
else if (IsA(node, FromExpr))
|
||||||
{
|
{
|
||||||
|
|
@ -2844,7 +2845,6 @@ JoinTreeContainsLateral(Node *node, List *rtable)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* CheckPushDownFeasibilityAndComputeIndexes checks if the given join expression
|
* CheckPushDownFeasibilityAndComputeIndexes checks if the given join expression
|
||||||
* is a left outer join and if it is feasible to push down the join. If feasible,
|
* is a left outer join and if it is feasible to push down the join. If feasible,
|
||||||
|
|
@ -2903,11 +2903,12 @@ CheckPushDownFeasibilityAndComputeIndexes(JoinExpr *joinExpr, Query *query,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* For now if we see any lateral join in the join tree, we return false.
|
/* For now if we see any lateral join in the join tree, we return false.
|
||||||
* This check can be improved to support the cases where the lateral reference
|
* This check can be improved to support the cases where the lateral reference
|
||||||
* does not cause an error in the final planner checks.
|
* does not cause an error in the final planner checks.
|
||||||
*/
|
*/
|
||||||
if (JoinTreeContainsLateral(joinExpr->rarg, query->rtable) || JoinTreeContainsLateral(joinExpr->larg, query->rtable))
|
if (JoinTreeContainsLateral(joinExpr->rarg, query->rtable) || JoinTreeContainsLateral(
|
||||||
|
joinExpr->larg, query->rtable))
|
||||||
{
|
{
|
||||||
ereport(DEBUG5, (errmsg(
|
ereport(DEBUG5, (errmsg(
|
||||||
"Lateral join is not supported for pushdown in this path.")));
|
"Lateral join is not supported for pushdown in this path.")));
|
||||||
|
|
|
||||||
|
|
@ -170,16 +170,16 @@ SET client_min_messages TO DEBUG3;
|
||||||
CREATE TABLE users_ref(user_id int, dept int);
|
CREATE TABLE users_ref(user_id int, dept int);
|
||||||
SELECT create_reference_table('users_ref');
|
SELECT create_reference_table('users_ref');
|
||||||
INSERT INTO users_ref VALUES (1, 3), (2, 4), (3, 3), (4, 4);
|
INSERT INTO users_ref VALUES (1, 3), (2, 4), (3, 3), (4, 4);
|
||||||
-- In PG17, the planner can pull up a correlated ANY subquery to a join, resulting
|
-- In PG17, the planner can pull up a correlated ANY subquery to a join, resulting
|
||||||
-- in a different query plan compared to PG16. Specifically, for the following query
|
-- in a different query plan compared to PG16. Specifically, for the following query
|
||||||
-- the rewritten query has a lateral recurring outer join, which requires recursive
|
-- the rewritten query has a lateral recurring outer join, which requires recursive
|
||||||
-- computation of the inner part. However, this join is not analyzed during the recursive
|
-- computation of the inner part. However, this join is not analyzed during the recursive
|
||||||
-- planning step, as it is performed on the original query structure. As a result,
|
-- planning step, as it is performed on the original query structure. As a result,
|
||||||
-- the lateral join is not recursively planned, and a lateral join error is raised
|
-- the lateral join is not recursively planned, and a lateral join error is raised
|
||||||
-- at a later stage.
|
-- at a later stage.
|
||||||
SELECT user_id FROM
|
SELECT user_id FROM
|
||||||
users RIGHT JOIN users_ref USING (user_id)
|
users RIGHT JOIN users_ref USING (user_id)
|
||||||
WHERE users_ref.dept IN
|
WHERE users_ref.dept IN
|
||||||
(
|
(
|
||||||
SELECT events.event_type FROM events WHERE events.user_id = users.user_id
|
SELECT events.event_type FROM events WHERE events.user_id = users.user_id
|
||||||
) ORDER BY 1 LIMIT 1;
|
) ORDER BY 1 LIMIT 1;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue