plexus_engine/capabilities/
ordering.rs1use serde::{Deserialize, Serialize};
2
3use crate::capabilities::types::OpKind;
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
6pub enum OpOrderingContract {
7 EngineDefinedStable,
8 StablePassThrough,
9 FanOutDeterministicPerInput,
10 DeterministicSortStableTies,
11 UnspecifiedWithoutSort,
12 StableConcatOrUnspecifiedDistinct,
13 ScoreDescStableTies,
14}
15
16pub fn op_ordering_contract(kind: OpKind) -> OpOrderingContract {
17 match kind {
18 OpKind::ScanNodes | OpKind::ScanRels | OpKind::ConstRow => {
19 OpOrderingContract::EngineDefinedStable
20 }
21 OpKind::Expand | OpKind::OptionalExpand | OpKind::SemiExpand | OpKind::ExpandVarLen => {
22 OpOrderingContract::FanOutDeterministicPerInput
23 }
24 OpKind::Filter
25 | OpKind::Project
26 | OpKind::Limit
27 | OpKind::Unwind
28 | OpKind::PathConstruct
29 | OpKind::BlockMarker
30 | OpKind::Return
31 | OpKind::CreateNode
32 | OpKind::CreateRel
33 | OpKind::Merge
34 | OpKind::Delete
35 | OpKind::SetProperty
36 | OpKind::RemoveProperty => OpOrderingContract::StablePassThrough,
37 OpKind::Rerank => OpOrderingContract::ScoreDescStableTies,
38 OpKind::Aggregate | OpKind::VectorScan => OpOrderingContract::UnspecifiedWithoutSort,
39 OpKind::Sort => OpOrderingContract::DeterministicSortStableTies,
40 OpKind::Union => OpOrderingContract::StableConcatOrUnspecifiedDistinct,
41 }
42}