Skip to main content

surrealdb_expr/expr/convert/
operator.rs

1//! `sql` -> `expr` conversions for [`crate::sql::operator`].
2//!
3//! Lives in core rather than beside the AST: `surrealdb-sql` sits below
4//! core, so it cannot name `expr` types.
5
6use crate::sql::operator::*;
7
8impl From<PrefixOperator> for crate::expr::PrefixOperator {
9	fn from(value: PrefixOperator) -> Self {
10		match value {
11			PrefixOperator::Not => crate::expr::PrefixOperator::Not,
12			PrefixOperator::Positive => crate::expr::PrefixOperator::Positive,
13			PrefixOperator::Negate => crate::expr::PrefixOperator::Negate,
14			PrefixOperator::Range => crate::expr::PrefixOperator::Range,
15			PrefixOperator::RangeInclusive => crate::expr::PrefixOperator::RangeInclusive,
16			PrefixOperator::Cast(k) => crate::expr::PrefixOperator::Cast(k.into()),
17		}
18	}
19}
20
21impl From<crate::expr::PrefixOperator> for PrefixOperator {
22	fn from(value: crate::expr::PrefixOperator) -> Self {
23		match value {
24			crate::expr::PrefixOperator::Not => PrefixOperator::Not,
25			crate::expr::PrefixOperator::Positive => PrefixOperator::Positive,
26			crate::expr::PrefixOperator::Negate => PrefixOperator::Negate,
27			crate::expr::PrefixOperator::Range => PrefixOperator::Range,
28			crate::expr::PrefixOperator::RangeInclusive => PrefixOperator::RangeInclusive,
29			crate::expr::PrefixOperator::Cast(k) => PrefixOperator::Cast(k.into()),
30		}
31	}
32}
33
34impl From<PostfixOperator> for crate::expr::PostfixOperator {
35	fn from(value: PostfixOperator) -> Self {
36		match value {
37			PostfixOperator::Range => crate::expr::PostfixOperator::Range,
38			PostfixOperator::RangeSkip => crate::expr::PostfixOperator::RangeSkip,
39			PostfixOperator::MethodCall(name, x) => crate::expr::PostfixOperator::MethodCall(
40				name,
41				x.into_iter().map(From::from).collect(),
42			),
43			PostfixOperator::Call(x) => {
44				crate::expr::PostfixOperator::Call(x.into_iter().map(From::from).collect())
45			}
46		}
47	}
48}
49
50impl From<crate::expr::PostfixOperator> for PostfixOperator {
51	fn from(value: crate::expr::PostfixOperator) -> Self {
52		match value {
53			crate::expr::PostfixOperator::Range => PostfixOperator::Range,
54			crate::expr::PostfixOperator::RangeSkip => PostfixOperator::RangeSkip,
55			crate::expr::PostfixOperator::MethodCall(name, args) => {
56				PostfixOperator::MethodCall(name, args.into_iter().map(From::from).collect())
57			}
58			crate::expr::PostfixOperator::Call(args) => {
59				PostfixOperator::Call(args.into_iter().map(From::from).collect())
60			}
61		}
62	}
63}
64
65impl From<MatchesOperator> for crate::expr::operator::MatchesOperator {
66	fn from(value: MatchesOperator) -> Self {
67		crate::expr::operator::MatchesOperator {
68			rf: value.rf,
69			operator: value
70				.operator
71				.map(From::from)
72				.unwrap_or(crate::expr::operator::BooleanOperator::And),
73		}
74	}
75}
76
77impl From<crate::expr::operator::MatchesOperator> for MatchesOperator {
78	fn from(value: crate::expr::operator::MatchesOperator) -> Self {
79		MatchesOperator {
80			rf: value.rf,
81			operator: Some(value.operator.into()),
82		}
83	}
84}
85
86impl From<BooleanOperator> for crate::expr::operator::BooleanOperator {
87	fn from(value: BooleanOperator) -> Self {
88		match value {
89			BooleanOperator::And => crate::expr::operator::BooleanOperator::And,
90			BooleanOperator::Or => crate::expr::operator::BooleanOperator::Or,
91		}
92	}
93}
94
95impl From<crate::expr::operator::BooleanOperator> for BooleanOperator {
96	fn from(value: crate::expr::operator::BooleanOperator) -> Self {
97		match value {
98			crate::expr::operator::BooleanOperator::And => BooleanOperator::And,
99			crate::expr::operator::BooleanOperator::Or => BooleanOperator::Or,
100		}
101	}
102}
103
104impl From<BinaryOperator> for crate::expr::BinaryOperator {
105	fn from(value: BinaryOperator) -> Self {
106		match value {
107			BinaryOperator::Subtract => crate::expr::BinaryOperator::Subtract,
108			BinaryOperator::Add => crate::expr::BinaryOperator::Add,
109			BinaryOperator::Multiply => crate::expr::BinaryOperator::Multiply,
110			BinaryOperator::Divide => crate::expr::BinaryOperator::Divide,
111			BinaryOperator::Remainder => crate::expr::BinaryOperator::Remainder,
112			BinaryOperator::Power => crate::expr::BinaryOperator::Power,
113			BinaryOperator::Equal => crate::expr::BinaryOperator::Equal,
114			BinaryOperator::ExactEqual => crate::expr::BinaryOperator::ExactEqual,
115			BinaryOperator::NotEqual => crate::expr::BinaryOperator::NotEqual,
116			BinaryOperator::AllEqual => crate::expr::BinaryOperator::AllEqual,
117			BinaryOperator::AnyEqual => crate::expr::BinaryOperator::AnyEqual,
118			BinaryOperator::Or => crate::expr::BinaryOperator::Or,
119			BinaryOperator::And => crate::expr::BinaryOperator::And,
120			BinaryOperator::NullCoalescing => crate::expr::BinaryOperator::NullCoalescing,
121			BinaryOperator::TenaryCondition => crate::expr::BinaryOperator::TenaryCondition,
122			BinaryOperator::LessThan => crate::expr::BinaryOperator::LessThan,
123			BinaryOperator::LessThanEqual => crate::expr::BinaryOperator::LessThanEqual,
124			BinaryOperator::MoreThan => crate::expr::BinaryOperator::MoreThan,
125			BinaryOperator::MoreThanEqual => crate::expr::BinaryOperator::MoreThanEqual,
126			BinaryOperator::Contain => crate::expr::BinaryOperator::Contain,
127			BinaryOperator::NotContain => crate::expr::BinaryOperator::NotContain,
128			BinaryOperator::ContainAll => crate::expr::BinaryOperator::ContainAll,
129			BinaryOperator::ContainAny => crate::expr::BinaryOperator::ContainAny,
130			BinaryOperator::ContainNone => crate::expr::BinaryOperator::ContainNone,
131			BinaryOperator::Inside => crate::expr::BinaryOperator::Inside,
132			BinaryOperator::NotInside => crate::expr::BinaryOperator::NotInside,
133			BinaryOperator::AllInside => crate::expr::BinaryOperator::AllInside,
134			BinaryOperator::AnyInside => crate::expr::BinaryOperator::AnyInside,
135			BinaryOperator::NoneInside => crate::expr::BinaryOperator::NoneInside,
136			BinaryOperator::Outside => crate::expr::BinaryOperator::Outside,
137			BinaryOperator::Intersects => crate::expr::BinaryOperator::Intersects,
138			BinaryOperator::Range => crate::expr::BinaryOperator::Range,
139			BinaryOperator::RangeInclusive => crate::expr::BinaryOperator::RangeInclusive,
140			BinaryOperator::RangeSkip => crate::expr::BinaryOperator::RangeSkip,
141			BinaryOperator::RangeSkipInclusive => crate::expr::BinaryOperator::RangeSkipInclusive,
142			BinaryOperator::Matches(m) => crate::expr::BinaryOperator::Matches(m.into()),
143			BinaryOperator::NearestNeighbor(n) => {
144				crate::expr::BinaryOperator::NearestNeighbor(Box::new((*n).into()))
145			}
146		}
147	}
148}
149
150impl From<crate::expr::BinaryOperator> for BinaryOperator {
151	fn from(value: crate::expr::BinaryOperator) -> Self {
152		match value {
153			crate::expr::BinaryOperator::Subtract => BinaryOperator::Subtract,
154			crate::expr::BinaryOperator::Add => BinaryOperator::Add,
155			crate::expr::BinaryOperator::Multiply => BinaryOperator::Multiply,
156			crate::expr::BinaryOperator::Divide => BinaryOperator::Divide,
157			crate::expr::BinaryOperator::Remainder => BinaryOperator::Remainder,
158			crate::expr::BinaryOperator::Power => BinaryOperator::Power,
159			crate::expr::BinaryOperator::Equal => BinaryOperator::Equal,
160			crate::expr::BinaryOperator::ExactEqual => BinaryOperator::ExactEqual,
161			crate::expr::BinaryOperator::NotEqual => BinaryOperator::NotEqual,
162			crate::expr::BinaryOperator::AllEqual => BinaryOperator::AllEqual,
163			crate::expr::BinaryOperator::AnyEqual => BinaryOperator::AnyEqual,
164			crate::expr::BinaryOperator::Or => BinaryOperator::Or,
165			crate::expr::BinaryOperator::And => BinaryOperator::And,
166			crate::expr::BinaryOperator::NullCoalescing => BinaryOperator::NullCoalescing,
167			crate::expr::BinaryOperator::TenaryCondition => BinaryOperator::TenaryCondition,
168			crate::expr::BinaryOperator::LessThan => BinaryOperator::LessThan,
169			crate::expr::BinaryOperator::LessThanEqual => BinaryOperator::LessThanEqual,
170			crate::expr::BinaryOperator::MoreThan => BinaryOperator::MoreThan,
171			crate::expr::BinaryOperator::MoreThanEqual => BinaryOperator::MoreThanEqual,
172			crate::expr::BinaryOperator::Contain => BinaryOperator::Contain,
173			crate::expr::BinaryOperator::NotContain => BinaryOperator::NotContain,
174			crate::expr::BinaryOperator::ContainAll => BinaryOperator::ContainAll,
175			crate::expr::BinaryOperator::ContainAny => BinaryOperator::ContainAny,
176			crate::expr::BinaryOperator::ContainNone => BinaryOperator::ContainNone,
177			crate::expr::BinaryOperator::Inside => BinaryOperator::Inside,
178			crate::expr::BinaryOperator::NotInside => BinaryOperator::NotInside,
179			crate::expr::BinaryOperator::AllInside => BinaryOperator::AllInside,
180			crate::expr::BinaryOperator::AnyInside => BinaryOperator::AnyInside,
181			crate::expr::BinaryOperator::NoneInside => BinaryOperator::NoneInside,
182			crate::expr::BinaryOperator::Outside => BinaryOperator::Outside,
183			crate::expr::BinaryOperator::Intersects => BinaryOperator::Intersects,
184			crate::expr::BinaryOperator::Range => BinaryOperator::Range,
185			crate::expr::BinaryOperator::RangeInclusive => BinaryOperator::RangeInclusive,
186			crate::expr::BinaryOperator::RangeSkip => BinaryOperator::RangeSkip,
187			crate::expr::BinaryOperator::RangeSkipInclusive => BinaryOperator::RangeSkipInclusive,
188			crate::expr::BinaryOperator::Matches(m) => BinaryOperator::Matches(m.into()),
189			crate::expr::BinaryOperator::NearestNeighbor(n) => {
190				BinaryOperator::NearestNeighbor(Box::new((*n).into()))
191			}
192		}
193	}
194}
195
196impl From<NearestNeighbor> for crate::expr::operator::NearestNeighbor {
197	fn from(value: NearestNeighbor) -> Self {
198		match value {
199			NearestNeighbor::K(k, d) => crate::expr::operator::NearestNeighbor::K(k, d),
200			NearestNeighbor::KTree(k) => crate::expr::operator::NearestNeighbor::KTree(k),
201			NearestNeighbor::Approximate(k, ef) => {
202				crate::expr::operator::NearestNeighbor::Approximate(k, ef)
203			}
204		}
205	}
206}
207
208impl From<crate::expr::operator::NearestNeighbor> for NearestNeighbor {
209	fn from(value: crate::expr::operator::NearestNeighbor) -> Self {
210		match value {
211			crate::expr::operator::NearestNeighbor::K(k, d) => NearestNeighbor::K(k, d),
212			crate::expr::operator::NearestNeighbor::KTree(k) => NearestNeighbor::KTree(k),
213			crate::expr::operator::NearestNeighbor::Approximate(k, ef) => {
214				NearestNeighbor::Approximate(k, ef)
215			}
216		}
217	}
218}
219
220impl From<AssignOperator> for crate::expr::AssignOperator {
221	fn from(value: AssignOperator) -> Self {
222		match value {
223			AssignOperator::Assign => crate::expr::AssignOperator::Assign,
224			AssignOperator::Add => crate::expr::AssignOperator::Add,
225			AssignOperator::Extend => crate::expr::AssignOperator::Extend,
226			AssignOperator::Subtract => crate::expr::AssignOperator::Subtract,
227		}
228	}
229}
230
231impl From<crate::expr::AssignOperator> for AssignOperator {
232	fn from(value: crate::expr::AssignOperator) -> Self {
233		match value {
234			crate::expr::AssignOperator::Assign => AssignOperator::Assign,
235			crate::expr::AssignOperator::Add => AssignOperator::Add,
236			crate::expr::AssignOperator::Extend => AssignOperator::Extend,
237			crate::expr::AssignOperator::Subtract => AssignOperator::Subtract,
238		}
239	}
240}