Skip to main content

linkrs_query/executor/streaming/operators/spec/
join.rs

1//! Immutable configuration for binary join operators.
2
3use linkrs_core::types::expr::Expression;
4
5/// Which physical child of a hash join provides the build side.
6///
7/// The logical plan always builds from the right child (the default); a left
8/// build side is a physical alternative selected by the plan conversion when
9/// the right child is not hashable but the left child is.
10#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
11pub enum BuildSide {
12    Left,
13    #[default]
14    Right,
15}
16
17/// Immutable config for binary join operators.
18#[derive(Debug, Clone)]
19pub enum JoinSpec {
20    InnerJoin {
21        join_condition: Option<Expression>,
22    },
23    LeftJoin {
24        join_condition: Option<Expression>,
25    },
26    RightJoin {
27        join_condition: Option<Expression>,
28    },
29    FullOuterJoin {
30        join_condition: Option<Expression>,
31    },
32    CrossJoin,
33    SemiJoin {
34        join_condition: Option<Expression>,
35        // Whether this is a NOT EXISTS (anti) semi join: keep left rows
36        // with NO matching right row.
37        anti: bool,
38    },
39    HashJoin {
40        join_condition: Option<Expression>,
41        hash_keys: Vec<Expression>,
42        probe_keys: Vec<Expression>,
43        build_side: BuildSide,
44    },
45    HashLeftJoin {
46        join_condition: Option<Expression>,
47        hash_keys: Vec<Expression>,
48        probe_keys: Vec<Expression>,
49        build_side: BuildSide,
50    },
51    NestedLoopJoin {
52        join_condition: Option<Expression>,
53    },
54}