use std::sync::Arc;
use linkrs_core::{EdgeDirection, Value};
use crate::executor::streaming::plan::types::PhysicalPlan;
#[derive(Debug, Clone)]
pub enum RecursiveFragmentSpec {
ShortestPath {
edge_types: Vec<String>,
direction: EdgeDirection,
max_depth: usize,
start_vertices: Vec<Value>,
target_vertices: Vec<Value>,
vertex_tag: String,
weight: Option<String>,
},
MultiShortestPath {
edge_types: Vec<String>,
direction: EdgeDirection,
max_depth: usize,
left_vertex_column: String,
right_vertex_column: String,
single_shortest: bool,
vertex_tag: String,
},
BFSShortest {
edge_types: Vec<String>,
direction: EdgeDirection,
max_depth: usize,
allow_loops: bool,
vertex_tag: String,
},
AllPaths {
edge_types: Vec<String>,
direction: EdgeDirection,
min_depth: usize,
max_depth: usize,
path_uniqueness:
crate::planning::plan::core::nodes::traversal::path_algorithms::PathUniqueness,
limit: Option<usize>,
offset: usize,
start_vertices: Vec<Value>,
target_vertices: Vec<Value>,
vertex_tag: String,
},
Fixpoint {
cte_name: String,
anchor: Arc<PhysicalPlan>,
step: Option<Arc<PhysicalPlan>>,
max_iterations: u64,
col_names: Vec<String>,
},
}