1use super::super::BuiltinFunction;
2use super::{FunctionRegistry, RegistryEntry};
3use linkrs_core::DataType;
4
5impl FunctionRegistry {
6 pub fn register_builtin(&mut self, function: BuiltinFunction) {
8 let upper_name = function.name().to_uppercase();
9 let return_type = builtin_return_type(&function);
10 self.builtin_functions.insert(
11 upper_name,
12 RegistryEntry {
13 function,
14 return_type,
15 },
16 );
17 }
18
19 pub fn register_alias(&mut self, alias: &str, function: BuiltinFunction) {
25 let return_type = builtin_return_type(&function);
26 self.builtin_functions.insert(
27 alias.to_uppercase(),
28 RegistryEntry {
29 function,
30 return_type,
31 },
32 );
33 }
34
35 pub fn get_return_type(&self, name: &str) -> Option<&DataType> {
37 self.resolve_entry(name).map(|e| &e.return_type)
38 }
39
40 pub fn get_builtin(&self, name: &str) -> Option<&BuiltinFunction> {
42 self.resolve_entry(name).map(|e| &e.function)
43 }
44
45 pub fn get_entry(&self, name: &str) -> Option<&RegistryEntry> {
47 self.resolve_entry(name)
48 }
49 pub(super) fn register_all_builtin_functions(&mut self) {
51 use super::super::ConversionFunction;
52 use super::super::DateTimeFunction;
53 use super::super::MathFunction;
54 use super::super::RegexFunction;
55 use super::super::StringFunction;
56
57 self.register_builtin(BuiltinFunction::Math(MathFunction::Abs));
59 self.register_builtin(BuiltinFunction::Math(MathFunction::Sqrt));
60 self.register_builtin(BuiltinFunction::Math(MathFunction::Pow));
61 self.register_builtin(BuiltinFunction::Math(MathFunction::Log));
62 self.register_builtin(BuiltinFunction::Math(MathFunction::Log10));
63 self.register_builtin(BuiltinFunction::Math(MathFunction::Sin));
64 self.register_builtin(BuiltinFunction::Math(MathFunction::Cos));
65 self.register_builtin(BuiltinFunction::Math(MathFunction::Tan));
66 self.register_builtin(BuiltinFunction::Math(MathFunction::Round));
67 self.register_builtin(BuiltinFunction::Math(MathFunction::Ceil));
68 self.register_builtin(BuiltinFunction::Math(MathFunction::Floor));
69 self.register_builtin(BuiltinFunction::Math(MathFunction::Asin));
70 self.register_builtin(BuiltinFunction::Math(MathFunction::Acos));
71 self.register_builtin(BuiltinFunction::Math(MathFunction::Atan));
72 self.register_builtin(BuiltinFunction::Math(MathFunction::Cbrt));
73 self.register_builtin(BuiltinFunction::Math(MathFunction::Hypot));
74 self.register_builtin(BuiltinFunction::Math(MathFunction::Sign));
75 self.register_builtin(BuiltinFunction::Math(MathFunction::Rand));
76 self.register_builtin(BuiltinFunction::Math(MathFunction::Rand32));
77 self.register_builtin(BuiltinFunction::Math(MathFunction::Rand64));
78 self.register_builtin(BuiltinFunction::Math(MathFunction::E));
79 self.register_builtin(BuiltinFunction::Math(MathFunction::Pi));
80 self.register_builtin(BuiltinFunction::Math(MathFunction::Exp2));
81 self.register_builtin(BuiltinFunction::Math(MathFunction::Log2));
82 self.register_builtin(BuiltinFunction::Math(MathFunction::Radians));
83 self.register_builtin(BuiltinFunction::Math(MathFunction::BitAnd));
84 self.register_builtin(BuiltinFunction::Math(MathFunction::BitOr));
85 self.register_builtin(BuiltinFunction::Math(MathFunction::BitXor));
86 self.register_builtin(BuiltinFunction::Math(MathFunction::Atan2));
87 self.register_builtin(BuiltinFunction::Math(MathFunction::Sinh));
88 self.register_builtin(BuiltinFunction::Math(MathFunction::Cosh));
89 self.register_builtin(BuiltinFunction::Math(MathFunction::Tanh));
90 self.register_builtin(BuiltinFunction::Math(MathFunction::Degrees));
91 self.register_builtin(BuiltinFunction::Math(MathFunction::Gcd));
92 self.register_builtin(BuiltinFunction::Math(MathFunction::Lcm));
93
94 self.register_builtin(BuiltinFunction::Math(MathFunction::Factorial));
95 self.register_builtin(BuiltinFunction::Math(MathFunction::Gamma));
96 self.register_builtin(BuiltinFunction::Math(MathFunction::Lgamma));
97 self.register_builtin(BuiltinFunction::Math(MathFunction::Negate));
98 self.register_builtin(BuiltinFunction::Math(MathFunction::Even));
99 self.register_builtin(BuiltinFunction::Math(MathFunction::SetSeed));
100 self.register_builtin(BuiltinFunction::Math(MathFunction::BitShiftLeft));
101 self.register_builtin(BuiltinFunction::Math(MathFunction::BitShiftRight));
102
103 self.register_builtin(BuiltinFunction::String(StringFunction::Upper));
105 self.register_builtin(BuiltinFunction::String(StringFunction::Lower));
106 self.register_builtin(BuiltinFunction::String(StringFunction::Trim));
107 self.register_builtin(BuiltinFunction::String(StringFunction::Substring));
108 self.register_builtin(BuiltinFunction::String(StringFunction::Concat));
109 self.register_builtin(BuiltinFunction::String(StringFunction::Replace));
110 self.register_builtin(BuiltinFunction::String(StringFunction::Contains));
111 self.register_builtin(BuiltinFunction::String(StringFunction::StartsWith));
112 self.register_builtin(BuiltinFunction::String(StringFunction::EndsWith));
113 self.register_builtin(BuiltinFunction::String(StringFunction::Split));
114 self.register_builtin(BuiltinFunction::String(StringFunction::Lpad));
115 self.register_builtin(BuiltinFunction::String(StringFunction::Rpad));
116 self.register_builtin(BuiltinFunction::String(StringFunction::ConcatWs));
117 self.register_builtin(BuiltinFunction::String(StringFunction::Strcasecmp));
118 self.register_builtin(BuiltinFunction::String(StringFunction::Levenshtein));
119 self.register_builtin(BuiltinFunction::String(StringFunction::SplitPart));
120 self.register_builtin(BuiltinFunction::String(StringFunction::Initcap));
121 self.register_builtin(BuiltinFunction::String(StringFunction::Repeat));
122 self.register_builtin(BuiltinFunction::String(StringFunction::Position));
123 self.register_builtin(BuiltinFunction::String(StringFunction::Left));
124 self.register_builtin(BuiltinFunction::String(StringFunction::Right));
125 self.register_builtin(BuiltinFunction::String(StringFunction::StringInsert));
126 self.register_builtin(BuiltinFunction::String(StringFunction::Translate));
127 self.register_builtin(BuiltinFunction::String(StringFunction::Format));
128 self.register_builtin(BuiltinFunction::String(StringFunction::StringSplit));
129 self.register_builtin(BuiltinFunction::String(StringFunction::Reverse));
130
131 self.register_builtin(BuiltinFunction::Regex(RegexFunction::RegexMatch));
133 self.register_builtin(BuiltinFunction::Regex(RegexFunction::RegexReplace));
134 self.register_builtin(BuiltinFunction::Regex(RegexFunction::RegexFind));
135 self.register_builtin(BuiltinFunction::Regex(RegexFunction::RegexpFullMatch));
136 self.register_builtin(BuiltinFunction::Regex(RegexFunction::RegexpExtract));
137 self.register_builtin(BuiltinFunction::Regex(RegexFunction::RegexpExtractAll));
138 self.register_builtin(BuiltinFunction::Regex(RegexFunction::RegexpSplitToArray));
139
140 self.register_builtin(BuiltinFunction::Conversion(ConversionFunction::ToString));
142 self.register_builtin(BuiltinFunction::Conversion(ConversionFunction::ToInt));
143 self.register_builtin(BuiltinFunction::Conversion(ConversionFunction::ToFloat));
144 self.register_builtin(BuiltinFunction::Conversion(ConversionFunction::ToBool));
145
146 self.register_builtin(BuiltinFunction::DateTime(DateTimeFunction::Now));
148 self.register_builtin(BuiltinFunction::DateTime(DateTimeFunction::Date));
149 self.register_builtin(BuiltinFunction::DateTime(DateTimeFunction::Time));
150 self.register_builtin(BuiltinFunction::DateTime(DateTimeFunction::DateTime));
151 self.register_builtin(BuiltinFunction::DateTime(DateTimeFunction::Year));
152 self.register_builtin(BuiltinFunction::DateTime(DateTimeFunction::Month));
153 self.register_builtin(BuiltinFunction::DateTime(DateTimeFunction::Day));
154 self.register_builtin(BuiltinFunction::DateTime(DateTimeFunction::Hour));
155 self.register_builtin(BuiltinFunction::DateTime(DateTimeFunction::Minute));
156 self.register_builtin(BuiltinFunction::DateTime(DateTimeFunction::Second));
157 self.register_builtin(BuiltinFunction::DateTime(DateTimeFunction::TimeStamp));
158 self.register_builtin(BuiltinFunction::DateTime(DateTimeFunction::DateAdd));
159 self.register_builtin(BuiltinFunction::DateTime(DateTimeFunction::DateSub));
160 self.register_builtin(BuiltinFunction::DateTime(DateTimeFunction::DateDiff));
161 self.register_builtin(BuiltinFunction::DateTime(DateTimeFunction::DateTrunc));
162 self.register_builtin(BuiltinFunction::DateTime(DateTimeFunction::CurrentDate));
163 self.register_builtin(BuiltinFunction::DateTime(
164 DateTimeFunction::CurrentTimestamp,
165 ));
166 self.register_builtin(BuiltinFunction::DateTime(DateTimeFunction::ToChar));
167 self.register_builtin(BuiltinFunction::DateTime(DateTimeFunction::ToDate));
168 self.register_builtin(BuiltinFunction::DateTime(DateTimeFunction::Age));
169 self.register_builtin(BuiltinFunction::DateTime(DateTimeFunction::LastDay));
170 self.register_builtin(BuiltinFunction::DateTime(DateTimeFunction::GenerateSeries));
171 self.register_builtin(BuiltinFunction::DateTime(DateTimeFunction::ToYears));
172 self.register_builtin(BuiltinFunction::DateTime(DateTimeFunction::ToMonths));
173 self.register_builtin(BuiltinFunction::DateTime(DateTimeFunction::ToDays));
174 self.register_builtin(BuiltinFunction::DateTime(DateTimeFunction::ToHours));
175 self.register_builtin(BuiltinFunction::DateTime(DateTimeFunction::ToMinutes));
176 self.register_builtin(BuiltinFunction::DateTime(DateTimeFunction::ToSeconds));
177 self.register_builtin(BuiltinFunction::DateTime(DateTimeFunction::ToMilliseconds));
178 self.register_builtin(BuiltinFunction::DateTime(DateTimeFunction::ToMicroseconds));
179 self.register_builtin(BuiltinFunction::DateTime(DateTimeFunction::Century));
180 self.register_builtin(BuiltinFunction::DateTime(DateTimeFunction::EpochMs));
181 self.register_builtin(BuiltinFunction::DateTime(DateTimeFunction::ToTimestamp));
182 self.register_builtin(BuiltinFunction::DateTime(DateTimeFunction::ToEpochMs));
183 self.register_builtin(BuiltinFunction::DateTime(DateTimeFunction::DatePart));
184 self.register_builtin(BuiltinFunction::DateTime(DateTimeFunction::DayName));
185 self.register_builtin(BuiltinFunction::DateTime(DateTimeFunction::MonthName));
186
187 use super::super::GeographyFunction;
189 self.register_builtin(BuiltinFunction::Geography(GeographyFunction::StPoint));
190 self.register_builtin(BuiltinFunction::Geography(
191 GeographyFunction::StGeogFromText,
192 ));
193 self.register_builtin(BuiltinFunction::Geography(GeographyFunction::StAsText));
194 self.register_builtin(BuiltinFunction::Geography(GeographyFunction::StCentroid));
195 self.register_builtin(BuiltinFunction::Geography(GeographyFunction::StIsValid));
196 self.register_builtin(BuiltinFunction::Geography(GeographyFunction::StIntersects));
197 self.register_builtin(BuiltinFunction::Geography(GeographyFunction::StCovers));
198 self.register_builtin(BuiltinFunction::Geography(GeographyFunction::StCoveredBy));
199 self.register_builtin(BuiltinFunction::Geography(GeographyFunction::StDWithin));
200 self.register_builtin(BuiltinFunction::Geography(GeographyFunction::StDistance));
201 self.register_builtin(BuiltinFunction::Geography(GeographyFunction::StArea));
202 self.register_builtin(BuiltinFunction::Geography(GeographyFunction::StLength));
203 self.register_builtin(BuiltinFunction::Geography(GeographyFunction::StPerimeter));
204 self.register_builtin(BuiltinFunction::Geography(GeographyFunction::StNPoints));
205 self.register_builtin(BuiltinFunction::Geography(GeographyFunction::StStartPoint));
206 self.register_builtin(BuiltinFunction::Geography(GeographyFunction::StEndPoint));
207 self.register_builtin(BuiltinFunction::Geography(GeographyFunction::StIsRing));
208 self.register_builtin(BuiltinFunction::Geography(GeographyFunction::StIsClosed));
209 self.register_builtin(BuiltinFunction::Geography(
210 GeographyFunction::StGeometryType,
211 ));
212 self.register_builtin(BuiltinFunction::Geography(GeographyFunction::StContains));
213 self.register_builtin(BuiltinFunction::Geography(GeographyFunction::StWithin));
214 self.register_builtin(BuiltinFunction::Geography(GeographyFunction::StEnvelope));
215 self.register_builtin(BuiltinFunction::Geography(GeographyFunction::StBuffer));
216 self.register_builtin(BuiltinFunction::Geography(GeographyFunction::StBoundary));
217 self.register_builtin(BuiltinFunction::Geography(GeographyFunction::StCrosses));
218 self.register_builtin(BuiltinFunction::Geography(GeographyFunction::StTouches));
219 self.register_builtin(BuiltinFunction::Geography(GeographyFunction::StOverlaps));
220 self.register_builtin(BuiltinFunction::Geography(GeographyFunction::StEquals));
221 self.register_builtin(BuiltinFunction::Geography(GeographyFunction::StAsGeoJson));
222 self.register_builtin(BuiltinFunction::Geography(
223 GeographyFunction::StGeomFromGeoJson,
224 ));
225
226 use super::super::UtilityFunction;
228 self.register_builtin(BuiltinFunction::Utility(UtilityFunction::Coalesce));
229 self.register_builtin(BuiltinFunction::Utility(UtilityFunction::Hash));
230 self.register_builtin(BuiltinFunction::Utility(UtilityFunction::JsonExtract));
231 self.register_builtin(BuiltinFunction::Utility(UtilityFunction::NullIf));
232 self.register_builtin(BuiltinFunction::Utility(UtilityFunction::JsonBuildObject));
233 self.register_builtin(BuiltinFunction::Utility(UtilityFunction::JsonBuildArray));
234 self.register_builtin(BuiltinFunction::Utility(UtilityFunction::JsonObjectKeys));
235 self.register_builtin(BuiltinFunction::Utility(UtilityFunction::Greatest));
236 self.register_builtin(BuiltinFunction::Utility(UtilityFunction::Least));
237 self.register_builtin(BuiltinFunction::Utility(UtilityFunction::GenRandomUuid));
238 self.register_builtin(BuiltinFunction::Utility(UtilityFunction::JsonEach));
239 self.register_builtin(BuiltinFunction::Utility(UtilityFunction::JsonTypeOf));
240 self.register_builtin(BuiltinFunction::Utility(UtilityFunction::JsonStripNulls));
241 self.register_builtin(BuiltinFunction::Utility(UtilityFunction::IfNull));
242 self.register_builtin(BuiltinFunction::Utility(UtilityFunction::TypeOf));
243 self.register_builtin(BuiltinFunction::Utility(UtilityFunction::Version));
244 self.register_builtin(BuiltinFunction::Utility(UtilityFunction::CurrentUser));
245 self.register_builtin(BuiltinFunction::Utility(UtilityFunction::CurrentDatabase));
246 self.register_builtin(BuiltinFunction::Utility(UtilityFunction::Corr));
247 self.register_builtin(BuiltinFunction::Utility(UtilityFunction::CovarPop));
248 self.register_builtin(BuiltinFunction::Utility(UtilityFunction::CovarSamp));
249
250 self.register_builtin(BuiltinFunction::Utility(UtilityFunction::OctetLength));
251 self.register_builtin(BuiltinFunction::Utility(UtilityFunction::Encode));
252 self.register_builtin(BuiltinFunction::Utility(UtilityFunction::Decode));
253 self.register_builtin(BuiltinFunction::Utility(UtilityFunction::UnionValue));
254 self.register_builtin(BuiltinFunction::Utility(UtilityFunction::UnionTag));
255 self.register_builtin(BuiltinFunction::Utility(UtilityFunction::UnionExtract));
256
257 use linkrs_core::types::operators::AggregateFunction;
259 self.register_builtin(BuiltinFunction::Aggregate(AggregateFunction::Count));
260 self.register_builtin(BuiltinFunction::Aggregate(AggregateFunction::Sum));
261 self.register_builtin(BuiltinFunction::Aggregate(AggregateFunction::Avg));
262 self.register_builtin(BuiltinFunction::Aggregate(AggregateFunction::Min));
263 self.register_builtin(BuiltinFunction::Aggregate(AggregateFunction::Max));
264 self.register_builtin(BuiltinFunction::Aggregate(AggregateFunction::Collect));
265 self.register_builtin(BuiltinFunction::Aggregate(AggregateFunction::CollectSet));
266 self.register_builtin(BuiltinFunction::Aggregate(AggregateFunction::Variance));
267 self.register_builtin(BuiltinFunction::Aggregate(AggregateFunction::Median));
268 self.register_builtin(BuiltinFunction::Aggregate(AggregateFunction::Mode));
269 self.register_builtin(BuiltinFunction::Aggregate(AggregateFunction::BoolAnd));
270 self.register_builtin(BuiltinFunction::Aggregate(AggregateFunction::BoolOr));
271 self.register_builtin(BuiltinFunction::Aggregate(AggregateFunction::StddevPop));
272 self.register_builtin(BuiltinFunction::Aggregate(AggregateFunction::StddevSamp));
273 self.register_builtin(BuiltinFunction::Aggregate(AggregateFunction::Product));
274 self.register_builtin(BuiltinFunction::Aggregate(
275 AggregateFunction::PercentileCont,
276 ));
277 self.register_builtin(BuiltinFunction::Aggregate(
278 AggregateFunction::GroupConcatWithOrder,
279 ));
280
281 self.register_builtin(BuiltinFunction::Window(
286 super::super::builtin::window::WindowFunction::RowNumber,
287 ));
288 self.register_builtin(BuiltinFunction::Window(
289 super::super::builtin::window::WindowFunction::Rank,
290 ));
291 self.register_builtin(BuiltinFunction::Window(
292 super::super::builtin::window::WindowFunction::DenseRank,
293 ));
294 self.register_builtin(BuiltinFunction::Window(
295 super::super::builtin::window::WindowFunction::Lead,
296 ));
297 self.register_builtin(BuiltinFunction::Window(
298 super::super::builtin::window::WindowFunction::Lag,
299 ));
300 self.register_builtin(BuiltinFunction::Window(
301 super::super::builtin::window::WindowFunction::FirstValue,
302 ));
303 self.register_builtin(BuiltinFunction::Window(
304 super::super::builtin::window::WindowFunction::LastValue,
305 ));
306 self.register_builtin(BuiltinFunction::Window(
307 super::super::builtin::window::WindowFunction::NthValue,
308 ));
309 self.register_builtin(BuiltinFunction::Window(
310 super::super::builtin::window::WindowFunction::Ntile,
311 ));
312
313 super::super::fulltext::register_fulltext_functions(self);
318
319 use super::super::GraphFunction;
321 self.register_builtin(BuiltinFunction::Graph(GraphFunction::Id));
322 self.register_builtin(BuiltinFunction::Graph(GraphFunction::Tags));
323 self.register_builtin(BuiltinFunction::Graph(GraphFunction::Labels));
324 self.register_builtin(BuiltinFunction::Graph(GraphFunction::Properties));
325 self.register_builtin(BuiltinFunction::Graph(GraphFunction::EdgeType));
326 self.register_builtin(BuiltinFunction::Graph(GraphFunction::Src));
327 self.register_builtin(BuiltinFunction::Graph(GraphFunction::Dst));
328 self.register_builtin(BuiltinFunction::Graph(GraphFunction::Rank));
329 self.register_builtin(BuiltinFunction::Graph(GraphFunction::StartNode));
330 self.register_builtin(BuiltinFunction::Graph(GraphFunction::EndNode));
331 self.register_builtin(BuiltinFunction::Graph(GraphFunction::Neighbors));
332 self.register_builtin(BuiltinFunction::Graph(GraphFunction::Degree));
333 self.register_builtin(BuiltinFunction::Graph(GraphFunction::OutEdges));
334 self.register_builtin(BuiltinFunction::Graph(GraphFunction::InEdges));
335 self.register_builtin(BuiltinFunction::Graph(GraphFunction::ShortestPath));
336 self.register_builtin(BuiltinFunction::Graph(GraphFunction::Bfs));
337 self.register_builtin(BuiltinFunction::Graph(GraphFunction::ConnectedComponents));
338 self.register_builtin(BuiltinFunction::Graph(GraphFunction::VariableLengthPath));
339 self.register_builtin(BuiltinFunction::Graph(GraphFunction::PageRank));
340
341 use super::super::ContainerFunction;
343 self.register_builtin(BuiltinFunction::Container(ContainerFunction::Head));
344 self.register_builtin(BuiltinFunction::Container(ContainerFunction::Last));
345 self.register_builtin(BuiltinFunction::Container(ContainerFunction::Tail));
346 self.register_builtin(BuiltinFunction::Container(ContainerFunction::Size));
347 self.register_builtin(BuiltinFunction::Container(ContainerFunction::Range));
348 self.register_builtin(BuiltinFunction::Container(ContainerFunction::Keys));
349 self.register_builtin(BuiltinFunction::Container(ContainerFunction::ReverseList));
350 self.register_builtin(BuiltinFunction::Container(ContainerFunction::ToSet));
351 self.register_builtin(BuiltinFunction::Container(ContainerFunction::ListContains));
352 self.register_builtin(BuiltinFunction::Container(ContainerFunction::ListAppend));
353 self.register_builtin(BuiltinFunction::Container(ContainerFunction::ListPrepend));
354 self.register_builtin(BuiltinFunction::Container(ContainerFunction::ListFilter));
355 self.register_builtin(BuiltinFunction::Container(ContainerFunction::ListTransform));
356 self.register_builtin(BuiltinFunction::Container(ContainerFunction::ListConcat));
357 self.register_builtin(BuiltinFunction::Container(ContainerFunction::ListSort));
358 self.register_builtin(BuiltinFunction::Container(ContainerFunction::ListSlice));
359 self.register_builtin(BuiltinFunction::Container(ContainerFunction::ListToString));
360 self.register_builtin(BuiltinFunction::Container(ContainerFunction::ListDistinct));
361 self.register_builtin(BuiltinFunction::Container(ContainerFunction::ListUnique));
362 self.register_builtin(BuiltinFunction::Container(ContainerFunction::ListExtract));
363 self.register_builtin(BuiltinFunction::Container(ContainerFunction::ListAny));
364 self.register_builtin(BuiltinFunction::Container(ContainerFunction::ListAll));
365 self.register_builtin(BuiltinFunction::Container(ContainerFunction::ListSingle));
366 self.register_builtin(BuiltinFunction::Container(ContainerFunction::ListReduce));
367 self.register_builtin(BuiltinFunction::Container(ContainerFunction::StructPack));
368 self.register_builtin(BuiltinFunction::Container(ContainerFunction::StructExtract));
369 self.register_builtin(BuiltinFunction::Container(ContainerFunction::MapCreation));
370 self.register_builtin(BuiltinFunction::Container(ContainerFunction::MapExtract));
371 self.register_builtin(BuiltinFunction::Container(ContainerFunction::ElementAt));
372 self.register_builtin(BuiltinFunction::Container(ContainerFunction::Cardinality));
373 self.register_builtin(BuiltinFunction::Container(ContainerFunction::MapKeys));
374 self.register_builtin(BuiltinFunction::Container(ContainerFunction::MapValues));
375
376 use super::super::PathFunction;
378 self.register_builtin(BuiltinFunction::Path(PathFunction::Nodes));
379 self.register_builtin(BuiltinFunction::Path(PathFunction::Relationships));
380 self.register_builtin(BuiltinFunction::Path(PathFunction::Properties));
381 self.register_builtin(BuiltinFunction::Path(PathFunction::IsTrail));
382 self.register_builtin(BuiltinFunction::Path(PathFunction::IsAcyclic));
383 self.register_builtin(BuiltinFunction::Path(PathFunction::PathLength));
386
387 super::super::builtin::vector::register_vector_functions(self);
389
390 use super::super::SequenceFunction;
392 self.register_builtin(BuiltinFunction::Sequence(SequenceFunction::CurrVal));
393 self.register_builtin(BuiltinFunction::Sequence(SequenceFunction::NextVal));
394 self.register_alias(
397 "NEXTVAL",
398 BuiltinFunction::Sequence(SequenceFunction::NextVal),
399 );
400 self.register_alias(
401 "CURRVAL",
402 BuiltinFunction::Sequence(SequenceFunction::CurrVal),
403 );
404 }
405}
406
407fn builtin_return_type(func: &BuiltinFunction) -> DataType {
408 use super::super::ContainerFunction;
409 use super::super::ConversionFunction;
410 use super::super::DateTimeFunction;
411 use super::super::GeographyFunction;
412 use super::super::GraphFunction;
413 use super::super::MathFunction;
414 use super::super::PathFunction;
415 use super::super::RegexFunction;
416 use super::super::SequenceFunction;
417 use super::super::StringFunction;
418 use super::super::UtilityFunction;
419 use super::super::VectorFunction;
420 use crate::executor::expression::functions::builtin::window::WindowFunction;
421 use crate::executor::expression::functions::FulltextFunction;
422 use linkrs_core::types::operators::AggregateFunction;
423 match func {
424 BuiltinFunction::Math(m) => match m {
425 MathFunction::Abs => DataType::Int,
426 MathFunction::Sqrt => DataType::Float,
427 MathFunction::Pow => DataType::Float,
428 MathFunction::Log => DataType::Float,
429 MathFunction::Log10 => DataType::Float,
430 MathFunction::Sin => DataType::Float,
431 MathFunction::Cos => DataType::Float,
432 MathFunction::Tan => DataType::Float,
433 MathFunction::Round => DataType::Float,
434 MathFunction::Ceil => DataType::Float,
435 MathFunction::Floor => DataType::Float,
436 MathFunction::Asin => DataType::Float,
437 MathFunction::Acos => DataType::Float,
438 MathFunction::Atan => DataType::Float,
439 MathFunction::Cbrt => DataType::Float,
440 MathFunction::Hypot => DataType::Float,
441 MathFunction::Sign => DataType::Int,
442 MathFunction::Rand => DataType::Float,
443 MathFunction::Rand32 => DataType::Int,
444 MathFunction::Rand64 => DataType::BigInt,
445 MathFunction::E => DataType::Float,
446 MathFunction::Pi => DataType::Float,
447 MathFunction::Exp2 => DataType::Float,
448 MathFunction::Log2 => DataType::Float,
449 MathFunction::Radians => DataType::Float,
450 MathFunction::BitAnd => DataType::Int,
451 MathFunction::BitOr => DataType::Int,
452 MathFunction::BitXor => DataType::Int,
453 MathFunction::Atan2 => DataType::Float,
454 MathFunction::Sinh => DataType::Float,
455 MathFunction::Cosh => DataType::Float,
456 MathFunction::Tanh => DataType::Float,
457 MathFunction::Degrees => DataType::Float,
458 MathFunction::Gcd => DataType::Int,
459 MathFunction::Lcm => DataType::Int,
460 MathFunction::Factorial => DataType::BigInt,
461 MathFunction::Gamma => DataType::Float,
462 MathFunction::Lgamma => DataType::Float,
463 MathFunction::Negate => DataType::Int,
464 MathFunction::Even => DataType::Int,
465 MathFunction::SetSeed => DataType::Null,
466 MathFunction::BitShiftLeft => DataType::Int,
467 MathFunction::BitShiftRight => DataType::Int,
468 },
469 BuiltinFunction::String(s) => match s {
470 StringFunction::Upper => DataType::String,
471 StringFunction::Lower => DataType::String,
472 StringFunction::Trim => DataType::String,
473 StringFunction::Substring => DataType::String,
474 StringFunction::Concat => DataType::String,
475 StringFunction::Replace => DataType::String,
476 StringFunction::Contains => DataType::Bool,
477 StringFunction::StartsWith => DataType::Bool,
478 StringFunction::EndsWith => DataType::Bool,
479 StringFunction::Split => DataType::List(Box::new(DataType::String)),
480 StringFunction::Lpad => DataType::String,
481 StringFunction::Rpad => DataType::String,
482 StringFunction::ConcatWs => DataType::String,
483 StringFunction::Strcasecmp => DataType::Int,
484 StringFunction::Levenshtein => DataType::Int,
485 StringFunction::SplitPart => DataType::String,
486 StringFunction::Initcap => DataType::String,
487 StringFunction::Repeat => DataType::String,
488 StringFunction::Position => DataType::Int,
489 StringFunction::Left => DataType::String,
490 StringFunction::Right => DataType::String,
491 StringFunction::StringInsert => DataType::String,
492 StringFunction::Translate => DataType::String,
493 StringFunction::Format => DataType::String,
494 StringFunction::StringSplit => DataType::List(Box::new(DataType::String)),
495 StringFunction::Reverse => DataType::String,
496 },
497 BuiltinFunction::Regex(r) => match r {
498 RegexFunction::RegexMatch => DataType::Bool,
499 RegexFunction::RegexReplace => DataType::String,
500 RegexFunction::RegexFind => DataType::String,
501 RegexFunction::RegexpFullMatch => DataType::Bool,
502 RegexFunction::RegexpExtract => DataType::String,
503 RegexFunction::RegexpExtractAll => DataType::List(Box::new(DataType::String)),
504 RegexFunction::RegexpSplitToArray => DataType::List(Box::new(DataType::String)),
505 },
506 BuiltinFunction::Conversion(c) => match c {
507 ConversionFunction::ToString => DataType::String,
508 ConversionFunction::ToInt => DataType::Int,
509 ConversionFunction::ToFloat => DataType::Float,
510 ConversionFunction::ToBool => DataType::Bool,
511 },
512 BuiltinFunction::DateTime(d) => match d {
513 DateTimeFunction::Now => DataType::DateTime,
514 DateTimeFunction::Date => DataType::Date,
515 DateTimeFunction::Time => DataType::Time,
516 DateTimeFunction::DateTime => DataType::DateTime,
517 DateTimeFunction::Year => DataType::Int,
518 DateTimeFunction::Month => DataType::Int,
519 DateTimeFunction::Day => DataType::Int,
520 DateTimeFunction::Hour => DataType::Int,
521 DateTimeFunction::Minute => DataType::Int,
522 DateTimeFunction::Second => DataType::Int,
523 DateTimeFunction::TimeStamp => DataType::BigInt,
524 DateTimeFunction::DateAdd => DataType::Unknown,
525 DateTimeFunction::DateSub => DataType::Unknown,
526 DateTimeFunction::DateDiff => DataType::BigInt,
527 DateTimeFunction::DateTrunc => DataType::Unknown,
528 DateTimeFunction::CurrentDate => DataType::Date,
529 DateTimeFunction::CurrentTimestamp => DataType::BigInt,
530 DateTimeFunction::ToChar => DataType::String,
531 DateTimeFunction::ToDate => DataType::Date,
532 DateTimeFunction::Age => DataType::BigInt,
533 DateTimeFunction::LastDay => DataType::Unknown,
534 DateTimeFunction::GenerateSeries => DataType::List(Box::new(DataType::BigInt)),
535 DateTimeFunction::ToYears => DataType::BigInt,
536 DateTimeFunction::ToMonths => DataType::BigInt,
537 DateTimeFunction::ToDays => DataType::BigInt,
538 DateTimeFunction::ToHours => DataType::BigInt,
539 DateTimeFunction::ToMinutes => DataType::BigInt,
540 DateTimeFunction::ToSeconds => DataType::BigInt,
541 DateTimeFunction::ToMilliseconds => DataType::BigInt,
542 DateTimeFunction::ToMicroseconds => DataType::BigInt,
543 DateTimeFunction::Century => DataType::Int,
544 DateTimeFunction::EpochMs => DataType::BigInt,
545 DateTimeFunction::ToTimestamp => DataType::DateTime,
546 DateTimeFunction::ToEpochMs => DataType::BigInt,
547 DateTimeFunction::DatePart => DataType::Int,
548 DateTimeFunction::DayName => DataType::String,
549 DateTimeFunction::MonthName => DataType::String,
550 },
551 BuiltinFunction::Geography(g) => match g {
552 GeographyFunction::StPoint => DataType::Geography,
553 GeographyFunction::StGeogFromText => DataType::Geography,
554 GeographyFunction::StAsText => DataType::String,
555 GeographyFunction::StCentroid => DataType::Geography,
556 GeographyFunction::StIsValid => DataType::Bool,
557 GeographyFunction::StIntersects => DataType::Bool,
558 GeographyFunction::StCovers => DataType::Bool,
559 GeographyFunction::StCoveredBy => DataType::Bool,
560 GeographyFunction::StDWithin => DataType::Bool,
561 GeographyFunction::StDistance => DataType::Double,
562 GeographyFunction::StArea => DataType::Double,
563 GeographyFunction::StLength => DataType::Double,
564 GeographyFunction::StPerimeter => DataType::Double,
565 GeographyFunction::StNPoints => DataType::Int,
566 GeographyFunction::StStartPoint => DataType::Geography,
567 GeographyFunction::StEndPoint => DataType::Geography,
568 GeographyFunction::StIsRing => DataType::Bool,
569 GeographyFunction::StIsClosed => DataType::Bool,
570 GeographyFunction::StGeometryType => DataType::String,
571 GeographyFunction::StContains => DataType::Bool,
572 GeographyFunction::StWithin => DataType::Bool,
573 GeographyFunction::StEnvelope => DataType::Geography,
574 GeographyFunction::StBuffer => DataType::Geography,
575 GeographyFunction::StBoundary => DataType::Geography,
576 GeographyFunction::StCrosses => DataType::Bool,
577 GeographyFunction::StTouches => DataType::Bool,
578 GeographyFunction::StOverlaps => DataType::Bool,
579 GeographyFunction::StEquals => DataType::Bool,
580 GeographyFunction::StAsGeoJson => DataType::String,
581 GeographyFunction::StGeomFromGeoJson => DataType::Geography,
582 },
583 BuiltinFunction::Utility(u) => match u {
584 UtilityFunction::Coalesce => DataType::Unknown,
585 UtilityFunction::Hash => DataType::BigInt,
586 UtilityFunction::JsonExtract => DataType::String,
587 UtilityFunction::JsonBuildObject => DataType::String,
588 UtilityFunction::JsonBuildArray => DataType::String,
589 UtilityFunction::JsonObjectKeys => DataType::List(Box::new(DataType::String)),
590 UtilityFunction::NullIf => DataType::Unknown,
591 UtilityFunction::Greatest => DataType::Unknown,
592 UtilityFunction::Least => DataType::Unknown,
593 UtilityFunction::GenRandomUuid => DataType::Uuid,
594 UtilityFunction::JsonEach => DataType::List(Box::new(DataType::Empty)),
595 UtilityFunction::JsonTypeOf => DataType::String,
596 UtilityFunction::JsonStripNulls => DataType::String,
597 UtilityFunction::IfNull => DataType::Unknown,
598 UtilityFunction::TypeOf => DataType::String,
599 UtilityFunction::Version => DataType::String,
600 UtilityFunction::CurrentUser => DataType::String,
601 UtilityFunction::CurrentDatabase => DataType::String,
602 UtilityFunction::Corr => DataType::Double,
603 UtilityFunction::CovarPop => DataType::Double,
604 UtilityFunction::CovarSamp => DataType::Double,
605 UtilityFunction::OctetLength => DataType::BigInt,
606 UtilityFunction::Encode => DataType::Blob,
607 UtilityFunction::Decode => DataType::String,
608 UtilityFunction::UnionValue => DataType::Map(Box::new(DataType::Empty)),
609 UtilityFunction::UnionTag => DataType::Int,
610 UtilityFunction::UnionExtract => DataType::Unknown,
611 },
612 BuiltinFunction::Graph(g) => match g {
613 GraphFunction::Id => DataType::BigInt,
614 GraphFunction::Tags => DataType::List(Box::new(DataType::String)),
615 GraphFunction::Labels => DataType::List(Box::new(DataType::String)),
616 GraphFunction::Properties => DataType::Map(Box::new(DataType::Empty)),
617 GraphFunction::EdgeType => DataType::String,
618 GraphFunction::Src => DataType::BigInt,
619 GraphFunction::Dst => DataType::BigInt,
620 GraphFunction::Rank => DataType::BigInt,
621 GraphFunction::StartNode => DataType::Vertex,
622 GraphFunction::EndNode => DataType::Vertex,
623 GraphFunction::Neighbors => DataType::List(Box::new(DataType::BigInt)),
624 GraphFunction::Degree => DataType::BigInt,
625 GraphFunction::OutEdges => DataType::List(Box::new(DataType::Edge)),
626 GraphFunction::InEdges => DataType::List(Box::new(DataType::Edge)),
627 GraphFunction::ShortestPath => DataType::BigInt,
628 GraphFunction::Bfs => DataType::List(Box::new(DataType::BigInt)),
629 GraphFunction::ConnectedComponents => {
630 DataType::List(Box::new(DataType::List(Box::new(DataType::BigInt))))
631 }
632 GraphFunction::VariableLengthPath => {
633 DataType::List(Box::new(DataType::List(Box::new(DataType::BigInt))))
634 }
635 GraphFunction::PageRank => DataType::Map(Box::new(DataType::Double)),
636 },
637 BuiltinFunction::Container(c) => match c {
638 ContainerFunction::Head => DataType::Unknown,
639 ContainerFunction::Last => DataType::Unknown,
640 ContainerFunction::Tail => DataType::List(Box::new(DataType::Empty)),
641 ContainerFunction::Size => DataType::BigInt,
642 ContainerFunction::Range => DataType::List(Box::new(DataType::BigInt)),
643 ContainerFunction::Keys => DataType::List(Box::new(DataType::String)),
644 ContainerFunction::ReverseList => DataType::List(Box::new(DataType::Empty)),
645 ContainerFunction::ToSet => DataType::Set(Box::new(DataType::Empty)),
646 ContainerFunction::ListContains => DataType::Bool,
647 ContainerFunction::ListAppend => DataType::List(Box::new(DataType::Empty)),
648 ContainerFunction::ListPrepend => DataType::List(Box::new(DataType::Empty)),
649 ContainerFunction::ListFilter => DataType::List(Box::new(DataType::Empty)),
650 ContainerFunction::ListTransform => DataType::List(Box::new(DataType::Empty)),
651 ContainerFunction::ListConcat => DataType::List(Box::new(DataType::Empty)),
652 ContainerFunction::ListSort => DataType::List(Box::new(DataType::Empty)),
653 ContainerFunction::ListSlice => DataType::List(Box::new(DataType::Empty)),
654 ContainerFunction::ListToString => DataType::String,
655 ContainerFunction::ListDistinct => DataType::List(Box::new(DataType::Empty)),
656 ContainerFunction::ListUnique => DataType::List(Box::new(DataType::Empty)),
657 ContainerFunction::ListExtract => DataType::Unknown,
658 ContainerFunction::ListAny => DataType::Bool,
659 ContainerFunction::ListAll => DataType::Bool,
660 ContainerFunction::ListSingle => DataType::Bool,
661 ContainerFunction::ListReduce => DataType::Unknown,
662 ContainerFunction::StructPack => DataType::Map(Box::new(DataType::Empty)),
663 ContainerFunction::StructExtract => DataType::Unknown,
664 ContainerFunction::MapCreation => DataType::Map(Box::new(DataType::Empty)),
665 ContainerFunction::MapExtract => DataType::Unknown,
666 ContainerFunction::ElementAt => DataType::Unknown,
667 ContainerFunction::Cardinality => DataType::BigInt,
668 ContainerFunction::MapKeys => DataType::List(Box::new(DataType::String)),
669 ContainerFunction::MapValues => DataType::List(Box::new(DataType::Empty)),
670 },
671 BuiltinFunction::Path(p) => match p {
672 PathFunction::Nodes => DataType::List(Box::new(DataType::Vertex)),
673 PathFunction::Relationships => DataType::List(Box::new(DataType::Edge)),
674 PathFunction::Properties => DataType::List(Box::new(DataType::Empty)),
675 PathFunction::IsTrail => DataType::Bool,
676 PathFunction::IsAcyclic => DataType::Bool,
677 PathFunction::PathLength => DataType::BigInt,
678 },
679 BuiltinFunction::Vector(v) => match v {
680 VectorFunction::CosineSimilarity => DataType::Double,
681 VectorFunction::DotProduct => DataType::Double,
682 VectorFunction::EuclideanDistance => DataType::Double,
683 VectorFunction::ManhattanDistance => DataType::Double,
684 VectorFunction::Dimension => DataType::BigInt,
685 VectorFunction::L2Norm => DataType::Double,
686 VectorFunction::Nnz => DataType::BigInt,
687 VectorFunction::Normalize => DataType::Vector,
688 VectorFunction::ArrayValue => DataType::List(Box::new(DataType::Empty)),
689 VectorFunction::ArrayCosineSimilarity => DataType::Double,
690 VectorFunction::ArrayDistance => DataType::Double,
691 VectorFunction::ArraySquaredDistance => DataType::Double,
692 VectorFunction::ArrayInnerProduct => DataType::Double,
693 VectorFunction::ArrayDotProduct => DataType::Double,
694 },
695 BuiltinFunction::Sequence(s) => match s {
696 SequenceFunction::CurrVal => DataType::BigInt,
697 SequenceFunction::NextVal => DataType::BigInt,
698 },
699 BuiltinFunction::Fulltext(f) => match f {
700 FulltextFunction::Score => DataType::Double,
701 FulltextFunction::Highlight => DataType::String,
702 FulltextFunction::MatchedFields => DataType::List(Box::new(DataType::String)),
703 FulltextFunction::Snippet => DataType::String,
704 FulltextFunction::Rank => DataType::BigInt,
705 FulltextFunction::SearchMatch => DataType::Bool,
706 FulltextFunction::FieldScore => DataType::Double,
707 },
708 BuiltinFunction::Window(w) => match w {
709 WindowFunction::RowNumber => DataType::BigInt,
710 WindowFunction::Rank => DataType::BigInt,
711 WindowFunction::DenseRank => DataType::BigInt,
712 WindowFunction::Lead => DataType::Unknown,
713 WindowFunction::Lag => DataType::Unknown,
714 WindowFunction::FirstValue => DataType::Unknown,
715 WindowFunction::LastValue => DataType::Unknown,
716 WindowFunction::NthValue => DataType::Unknown,
717 WindowFunction::Ntile => DataType::BigInt,
718 },
719 BuiltinFunction::Aggregate(a) => match a {
720 AggregateFunction::Count => DataType::BigInt,
721 AggregateFunction::Sum => DataType::Double,
722 AggregateFunction::Avg => DataType::Double,
723 AggregateFunction::Min => DataType::Unknown,
724 AggregateFunction::Max => DataType::Unknown,
725 AggregateFunction::Collect => DataType::List(Box::new(DataType::Unknown)),
726 AggregateFunction::CollectSet => DataType::Set(Box::new(DataType::Unknown)),
727 AggregateFunction::Variance => DataType::Double,
728 AggregateFunction::Median => DataType::Double,
729 AggregateFunction::Mode => DataType::Unknown,
730 AggregateFunction::BoolAnd => DataType::Bool,
731 AggregateFunction::BoolOr => DataType::Bool,
732 AggregateFunction::StddevPop => DataType::Double,
733 AggregateFunction::StddevSamp => DataType::Double,
734 AggregateFunction::Product => DataType::Double,
735 AggregateFunction::PercentileCont => DataType::Double,
736 AggregateFunction::GroupConcatWithOrder => DataType::String,
737 _ => DataType::Unknown,
739 },
740 }
741}