featherdb_query/planner/
types.rs1use featherdb_core::Value;
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq)]
7pub enum SortOrder {
8 Asc,
9 Desc,
10}
11
12#[derive(Debug, Clone, Copy, PartialEq, Eq)]
14pub enum JoinType {
15 Inner,
16 Left,
17 Right,
18 Full,
19}
20
21#[derive(Debug, Clone, PartialEq)]
23pub enum IndexBound {
24 Unbounded,
26 Inclusive(Value),
28 Exclusive(Value),
30}
31
32#[derive(Debug, Clone)]
34pub struct IndexRange {
35 pub start: IndexBound,
37 pub end: IndexBound,
39}
40
41impl IndexRange {
42 pub fn point(value: Value) -> Self {
44 IndexRange {
45 start: IndexBound::Inclusive(value.clone()),
46 end: IndexBound::Inclusive(value),
47 }
48 }
49
50 pub fn between(start: Value, end: Value) -> Self {
52 IndexRange {
53 start: IndexBound::Inclusive(start),
54 end: IndexBound::Inclusive(end),
55 }
56 }
57
58 pub fn from_inclusive(value: Value) -> Self {
60 IndexRange {
61 start: IndexBound::Inclusive(value),
62 end: IndexBound::Unbounded,
63 }
64 }
65
66 pub fn from_exclusive(value: Value) -> Self {
68 IndexRange {
69 start: IndexBound::Exclusive(value),
70 end: IndexBound::Unbounded,
71 }
72 }
73
74 pub fn to_inclusive(value: Value) -> Self {
76 IndexRange {
77 start: IndexBound::Unbounded,
78 end: IndexBound::Inclusive(value),
79 }
80 }
81
82 pub fn to_exclusive(value: Value) -> Self {
84 IndexRange {
85 start: IndexBound::Unbounded,
86 end: IndexBound::Exclusive(value),
87 }
88 }
89
90 pub fn full() -> Self {
92 IndexRange {
93 start: IndexBound::Unbounded,
94 end: IndexBound::Unbounded,
95 }
96 }
97
98 pub fn is_point_lookup(&self) -> bool {
100 match (&self.start, &self.end) {
101 (IndexBound::Inclusive(s), IndexBound::Inclusive(e)) => s == e,
102 _ => false,
103 }
104 }
105}