linkrs-query 0.1.0

Query engine, parser, and executor for Linkrs
Documentation
use super::*;

pub(super) fn convert_start(
    n: crate::planning::plan::logical::logical_nodes::access::LogicalStartNode,
) -> PlanNodeEnum {
    let mut node = crate::planning::plan::core::nodes::control_flow::start_node::StartNode::new();
    if let Some(var) = n.output_var {
        node.set_output_var(var);
    }
    node.set_col_names(n.col_names);
    node.set_column_types(n.column_types);
    PlanNodeEnum::Start(node)
}

pub(super) fn convert_get_vertices(
    n: crate::planning::plan::logical::logical_nodes::access::LogicalGetVerticesNode,
) -> PlanNodeEnum {
    let deps: Vec<PlanNodeEnum> = n
        .deps
        .into_iter()
        .map(convert_logical_to_physical)
        .collect();
    let mut node =
        crate::planning::plan::core::nodes::access::graph_scan_node::GetVerticesNode::new(
            n.space_id,
            &n.space_name,
            &n.src_vids,
        );
    node.set_deps(deps);
    node.set_tag_props(n.tag_props);
    if let Some(tag) = n.tag {
        node.set_tag(tag);
    }
    if let Some(expr) = n.expression {
        node.set_filter(expr);
    }
    node.set_dedup(n.dedup);
    if let Some(limit) = n.limit {
        node.set_limit(limit);
    }
    node.set_projected_properties(n.projected_properties);
    if let Some(var) = n.output_var {
        node.set_output_var(var);
    }
    node.set_col_names(n.col_names);
    node.set_column_types(n.column_types);
    PlanNodeEnum::GetVertices(node)
}

pub(super) fn convert_get_edges(
    n: crate::planning::plan::logical::logical_nodes::access::LogicalGetEdgesNode,
) -> PlanNodeEnum {
    let mut node = crate::planning::plan::core::nodes::access::graph_scan_node::GetEdgesNode::new(
        n.space_id,
        &n.src,
        &n.edge_type,
        &n.rank,
        &n.dst,
    );
    if let Some(expr) = n.expression {
        node.set_filter(expr);
    }
    if let Some(limit) = n.limit {
        node.set_limit(limit);
    }
    if let Some(var) = n.output_var {
        node.set_output_var(var);
    }
    node.set_col_names(n.col_names);
    node.set_column_types(n.column_types);
    PlanNodeEnum::GetEdges(node)
}

pub(super) fn convert_get_neighbors(
    n: crate::planning::plan::logical::logical_nodes::access::LogicalGetNeighborsNode,
) -> PlanNodeEnum {
    let deps: Vec<PlanNodeEnum> = n
        .deps
        .into_iter()
        .map(convert_logical_to_physical)
        .collect();
    let mut node =
        crate::planning::plan::core::nodes::access::graph_scan_node::GetNeighborsNode::new(
            n.space_id,
            &n.src_vids,
        );
    node.set_deps(deps);
    node.set_edge_types(n.edge_types);
    node.set_direction(&n.direction);
    if let Some(tag) = n.tag {
        node.set_tag(tag);
    }
    if let Some(expr) = n.expression {
        node.set_filter(expr);
    }
    node.set_dedup(n.dedup);
    if let Some(limit) = n.limit {
        node.set_limit(limit);
    }
    node.set_projected_properties(n.projected_properties);
    if let Some(var) = n.output_var {
        node.set_output_var(var);
    }
    node.set_col_names(n.col_names);
    node.set_column_types(n.column_types);
    PlanNodeEnum::GetNeighbors(node)
}

pub(super) fn convert_scan_vertices(
    n: crate::planning::plan::logical::logical_nodes::access::LogicalScanVerticesNode,
) -> PlanNodeEnum {
    let mut node =
        crate::planning::plan::core::nodes::access::graph_scan_node::ScanVerticesNode::new(
            n.space_id,
            &n.space_name,
        );
    if let Some(tag) = n.tag {
        node.set_tag(&tag);
    }
    if let Some(expr) = n.expression {
        node.set_filter(expr);
    }
    if let Some(limit) = n.limit {
        node.set_limit(limit);
    }
    node.set_projected_properties(n.projected_properties);
    if let Some(var) = n.output_var {
        node.set_output_var(var);
    }
    node.set_col_names(n.col_names);
    node.set_column_types(n.column_types);
    PlanNodeEnum::ScanVertices(node)
}

pub(super) fn convert_scan_edges(
    n: crate::planning::plan::logical::logical_nodes::access::LogicalScanEdgesNode,
) -> PlanNodeEnum {
    let edge_type = n.edge_type.unwrap_or_default();
    let mut node = crate::planning::plan::core::nodes::access::graph_scan_node::ScanEdgesNode::new(
        n.space_id, &edge_type,
    );
    if let Some(expr) = n.expression {
        node.set_filter(expr);
    }
    if let Some(limit) = n.limit {
        node.set_limit(limit);
    }
    node.set_projected_properties(n.projected_properties);
    if let Some(var) = n.output_var {
        node.set_output_var(var);
    }
    node.set_col_names(n.col_names);
    node.set_column_types(n.column_types);
    PlanNodeEnum::ScanEdges(node)
}