plexus-engine 0.3.6

Engine integration traits for consuming Plexus plans
Documentation
use serde::{Deserialize, Serialize};

use crate::capabilities::types::OpKind;

#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum OpOrderingContract {
    EngineDefinedStable,
    StablePassThrough,
    FanOutDeterministicPerInput,
    DeterministicSortStableTies,
    UnspecifiedWithoutSort,
    StableConcatOrUnspecifiedDistinct,
    ScoreDescStableTies,
}

pub fn op_ordering_contract(kind: OpKind) -> OpOrderingContract {
    match kind {
        OpKind::ScanNodes | OpKind::ScanRels | OpKind::ConstRow => {
            OpOrderingContract::EngineDefinedStable
        }
        OpKind::Expand | OpKind::OptionalExpand | OpKind::SemiExpand | OpKind::ExpandVarLen => {
            OpOrderingContract::FanOutDeterministicPerInput
        }
        OpKind::Filter
        | OpKind::Project
        | OpKind::Limit
        | OpKind::Unwind
        | OpKind::PathConstruct
        | OpKind::BlockMarker
        | OpKind::Return
        | OpKind::CreateNode
        | OpKind::CreateRel
        | OpKind::Merge
        | OpKind::Delete
        | OpKind::SetProperty
        | OpKind::RemoveProperty => OpOrderingContract::StablePassThrough,
        OpKind::Rerank => OpOrderingContract::ScoreDescStableTies,
        OpKind::Aggregate | OpKind::VectorScan => OpOrderingContract::UnspecifiedWithoutSort,
        OpKind::Sort => OpOrderingContract::DeterministicSortStableTies,
        OpKind::Union => OpOrderingContract::StableConcatOrUnspecifiedDistinct,
    }
}