mirror of https://github.com/citusdata/citus.git
DESCRIPTION: Expression in reference join Fixed: #2582 This patch allows arbitrary expressions in the join clause when joining to a reference table. An example of such joins could be found in CHbenCHmark queries 7, 8, 9 and 11; `mod((s_w_id * s_i_id),10000) = su_suppkey` and `ascii(substr(c_state,1,1)) = n2.n_nationkey`. Since the join is on a reference table these queries are able to be pushed down to the workers. To implement these queries we will widen the `IsJoinClause` predicate to not check if the expressions are a type `Var` after stripping the implicit coerciens. Instead we define a join clause when the `Var`'s in a clause come from more than 1 table. This allows more clauses to pass into the logical planner's `MultiNodeTree(...)` planning function. To compensate for this we tighten down the `LocalJoin`, `SinglePartitionJoin` and `DualPartitionJoin` to check for direct column references when planning. This allows the planner to work with arbitrary join expressions on reference tables. |
||
---|---|---|
.. | ||
deparse_shard_query.c | ||
distributed_planner.c | ||
extended_op_node_utils.c | ||
fast_path_router_planner.c | ||
function_call_delegation.c | ||
insert_select_planner.c | ||
multi_explain.c | ||
multi_join_order.c | ||
multi_logical_optimizer.c | ||
multi_logical_planner.c | ||
multi_master_planner.c | ||
multi_physical_planner.c | ||
multi_router_planner.c | ||
planner_readme.md | ||
postgres_planning_functions.c | ||
query_colocation_checker.c | ||
query_pushdown_planning.c | ||
recursive_planning.c | ||
relation_restriction_equivalence.c | ||
shard_pruning.c |