MCPcopy Create free account
hub / github.com/NodeDB-Lab/nodedb / extract_join_spec

Function extract_join_spec

nodedb-sql/src/planner/join/constraint.rs:16–50  ·  view source on GitHub ↗

Extract join type, equi-join keys, and non-equi condition.

(op: &ast::JoinOperator)

Source from the content-addressed store, hash-verified

14
15/// Extract join type, equi-join keys, and non-equi condition.
16pub(super) fn extract_join_spec(op: &ast::JoinOperator) -> Result<JoinSpec> {
17 match op {
18 ast::JoinOperator::Inner(constraint) | ast::JoinOperator::Join(constraint) => {
19 let (keys, cond) = extract_join_constraint(constraint)?;
20 Ok((JoinType::Inner, keys, cond))
21 }
22 ast::JoinOperator::Left(constraint) | ast::JoinOperator::LeftOuter(constraint) => {
23 let (keys, cond) = extract_join_constraint(constraint)?;
24 Ok((JoinType::Left, keys, cond))
25 }
26 ast::JoinOperator::Right(constraint) | ast::JoinOperator::RightOuter(constraint) => {
27 let (keys, cond) = extract_join_constraint(constraint)?;
28 Ok((JoinType::Right, keys, cond))
29 }
30 ast::JoinOperator::FullOuter(constraint) => {
31 let (keys, cond) = extract_join_constraint(constraint)?;
32 Ok((JoinType::Full, keys, cond))
33 }
34 ast::JoinOperator::CrossJoin(constraint) => {
35 let (keys, cond) = extract_join_constraint(constraint)?;
36 Ok((JoinType::Cross, keys, cond))
37 }
38 ast::JoinOperator::Semi(constraint) | ast::JoinOperator::LeftSemi(constraint) => {
39 let (keys, cond) = extract_join_constraint(constraint)?;
40 Ok((JoinType::Semi, keys, cond))
41 }
42 ast::JoinOperator::Anti(constraint) | ast::JoinOperator::LeftAnti(constraint) => {
43 let (keys, cond) = extract_join_constraint(constraint)?;
44 Ok((JoinType::Anti, keys, cond))
45 }
46 _ => Err(SqlError::Unsupported {
47 detail: format!("join type: {op:?}"),
48 }),
49 }
50}
51
52/// (equi_keys, non-equi condition)
53type JoinConstraintResult = (Vec<(String, String)>, Option<SqlExpr>);

Callers 1

plan_join_from_selectFunction · 0.85

Calls 1

extract_join_constraintFunction · 0.85

Tested by

no test coverage detected