Skip to content

Commit 5fa7c8f

Browse files
authored
experimental: add a converter for logical plan to sql (#18)
* (experimental): add a converter for logical plan to sql * format code * feat(logical): add relationship variables in logical plan * format code * fix warnings * format code * fix warning
1 parent 752bc21 commit 5fa7c8f

4 files changed

Lines changed: 438 additions & 0 deletions

File tree

rust/lance-graph/src/datafusion_planner.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,7 @@ mod tests {
468468
target_variable: "b".to_string(),
469469
relationship_types: vec!["KNOWS".to_string()],
470470
direction: crate::ast::RelationshipDirection::Outgoing,
471+
relationship_variable: None,
471472
properties: Default::default(),
472473
};
473474
let project = LogicalOperator::Project {

rust/lance-graph/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ pub mod query;
4646
pub mod query_processor;
4747
pub mod semantic;
4848
pub mod source_catalog;
49+
pub mod sql_converter;
4950

5051
/// Maximum allowed hops for variable-length relationship expansion (e.g., *1..N)
5152
pub const MAX_VARIABLE_LENGTH_HOPS: u32 = 20;

rust/lance-graph/src/logical_plan.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ pub enum LogicalOperator {
3636
target_variable: String,
3737
relationship_types: Vec<String>,
3838
direction: RelationshipDirection,
39+
relationship_variable: Option<String>,
3940
properties: HashMap<String, PropertyValue>,
4041
},
4142

@@ -46,6 +47,7 @@ pub enum LogicalOperator {
4647
target_variable: String,
4748
relationship_types: Vec<String>,
4849
direction: RelationshipDirection,
50+
relationship_variable: Option<String>,
4951
min_length: Option<u32>,
5052
max_length: Option<u32>,
5153
},
@@ -308,6 +310,7 @@ impl LogicalPlanner {
308310
target_variable: target_variable.clone(),
309311
relationship_types: segment.relationship.types.clone(),
310312
direction: segment.relationship.direction.clone(),
313+
relationship_variable: segment.relationship.variable.clone(),
311314
properties: segment.relationship.properties.clone(),
312315
}
313316
}
@@ -317,6 +320,7 @@ impl LogicalPlanner {
317320
target_variable: target_variable.clone(),
318321
relationship_types: segment.relationship.types.clone(),
319322
direction: segment.relationship.direction.clone(),
323+
relationship_variable: segment.relationship.variable.clone(),
320324
min_length: length_range.min,
321325
max_length: length_range.max,
322326
},
@@ -326,6 +330,7 @@ impl LogicalPlanner {
326330
target_variable: target_variable.clone(),
327331
relationship_types: segment.relationship.types.clone(),
328332
direction: segment.relationship.direction.clone(),
333+
relationship_variable: segment.relationship.variable.clone(),
329334
properties: segment.relationship.properties.clone(),
330335
},
331336
};

0 commit comments

Comments
 (0)