use crate::define_logical_binary_input_node;
use crate::define_logical_plan_node;
use crate::define_logical_plan_node_with_deps;
use crate::planning::plan::core::common::{EdgeProp, TagProp};
use linkrs_core::types::expr::contextual::ContextualExpression;
use linkrs_core::types::EdgeDirection;
use linkrs_core::Value;
define_logical_plan_node! {
pub struct LogicalExpandNode {
space_id: u64,
edge_types: Vec<String>,
direction: EdgeDirection,
step_limit: Option<u32>,
filter: Option<ContextualExpression>,
dst_tag: Option<String>,
}
enum: Expand
input: MultipleInputNode
}
define_logical_plan_node! {
pub struct LogicalExpandAllNode {
space_id: u64,
edge_types: Vec<String>,
direction: String,
any_edge_type: bool,
step_limit: Option<u32>,
step_limits: Option<Vec<u32>>,
join_input: bool,
sample: bool,
edge_props: Vec<EdgeProp>,
vertex_props: Vec<TagProp>,
filter: Option<ContextualExpression>,
src_vids: Vec<Value>,
include_empty_paths: bool,
input_var: Option<String>,
path_semantic: Option<crate::parser::ast::pattern::PathSemantic>,
dst_tag: Option<String>,
}
enum: ExpandAll
input: MultipleInputNode
}
define_logical_plan_node_with_deps! {
pub struct LogicalTraverseNode {
space_id: u64,
start_vids: String,
end_vids: Option<String>,
edge_types: Vec<String>,
direction: EdgeDirection,
min_steps: u32,
max_steps: u32,
edge_alias: Option<String>,
vertex_alias: Option<String>,
e_filter: Option<ContextualExpression>,
v_filter: Option<ContextualExpression>,
first_step_filter: Option<ContextualExpression>,
path_semantic: Option<crate::parser::ast::pattern::PathSemantic>,
dst_tag: Option<String>,
}
enum: Traverse
input: SingleInputNode
}
define_logical_plan_node! {
pub struct LogicalAppendVerticesNode {
space_id: u64,
vertex_tag: String,
vertex_props: Vec<TagProp>,
filter: Option<ContextualExpression>,
input_var: Option<String>,
src_expression: Option<ContextualExpression>,
dedup: bool,
need_fetch_prop: bool,
vids: Vec<String>,
tag_ids: Vec<i32>,
v_filter: Option<ContextualExpression>,
node_alias: Option<String>,
}
enum: AppendVertices
input: MultipleInputNode
}
define_logical_binary_input_node! {
pub struct LogicalBiExpandNode {
space_id: u64,
left_direction: EdgeDirection,
right_direction: EdgeDirection,
edge_types: Vec<String>,
max_hops: usize,
meeting_point_var: Option<String>,
dst_tag: Option<String>,
}
enum: BiExpand
input: BinaryInputNode
}
define_logical_binary_input_node! {
pub struct LogicalBiTraverseNode {
space_id: u64,
left_src_var: String,
right_src_var: String,
edge_types: Vec<String>,
left_direction: EdgeDirection,
right_direction: EdgeDirection,
min_hops: usize,
max_hops: usize,
path_var: String,
edge_alias: Option<String>,
vertex_alias: Option<String>,
dst_tag: Option<String>,
}
enum: BiTraverse
input: BinaryInputNode
}