Skip to main content

surrealdb_sql/
builtin_paths.rs

1//! The builtin path table: every `a::b::c` name the language recognises.
2//!
3//! Lives at the sql layer rather than in the parser because its values are
4//! sql vocabulary (`PathKind::Constant` carries a [`Constant`]), and because
5//! both the parser and the AST's fuzzing generator need it — the parser to
6//! resolve a path it has just lexed, the generator to emit names that resolve.
7
8use phf::phf_map;
9use unicase::UniCase;
10
11use crate::Constant;
12
13/// The kind of a parsed path.
14pub enum PathKind {
15	Constant(Constant),
16	Function,
17}
18
19/// A map of path strings for parsing paths.
20/// The final item in the map is Some when a path has been renamed to the path on the left.
21/// This is used to show users the exact new paths without needing string similarity to make an
22/// educated guess.
23pub static PATHS: phf::Map<UniCase<&'static str>, (PathKind, Option<UniCase<&'static str>>)> = phf_map! {
24		UniCase::ascii("api::invoke") => (PathKind::Function, None),
25		UniCase::ascii("api::timeout") => (PathKind::Function, None),
26		UniCase::ascii("api::req::body") => (PathKind::Function, None),
27		UniCase::ascii("api::req::max_body") => (PathKind::Function, None),
28		UniCase::ascii("api::res::body") => (PathKind::Function, None),
29		UniCase::ascii("api::res::status") => (PathKind::Function, None),
30		UniCase::ascii("api::res::header") => (PathKind::Function, None),
31		UniCase::ascii("api::res::headers") => (PathKind::Function, None),
32		//
33		UniCase::ascii("array::add") => (PathKind::Function, None),
34		UniCase::ascii("array::all") => (PathKind::Function, None),
35		UniCase::ascii("array::any") => (PathKind::Function, None),
36		UniCase::ascii("array::append") => (PathKind::Function, None),
37		UniCase::ascii("array::at") => (PathKind::Function, None),
38		UniCase::ascii("array::boolean_and") => (PathKind::Function, None),
39		UniCase::ascii("array::boolean_not") => (PathKind::Function, None),
40		UniCase::ascii("array::boolean_or") => (PathKind::Function, None),
41		UniCase::ascii("array::boolean_xor") => (PathKind::Function, None),
42		UniCase::ascii("array::clump") => (PathKind::Function, None),
43		UniCase::ascii("array::combine") => (PathKind::Function, None),
44		UniCase::ascii("array::complement") => (PathKind::Function, None),
45		UniCase::ascii("array::concat") => (PathKind::Function, None),
46		UniCase::ascii("array::difference") => (PathKind::Function, None),
47		UniCase::ascii("array::distinct") => (PathKind::Function, None),
48		UniCase::ascii("array::every") => (PathKind::Function, None),
49		UniCase::ascii("array::fill") => (PathKind::Function, None),
50		UniCase::ascii("array::filter") => (PathKind::Function, None),
51		UniCase::ascii("array::filter_index") => (PathKind::Function, None),
52		UniCase::ascii("array::find") => (PathKind::Function, None),
53		UniCase::ascii("array::find_index") => (PathKind::Function, None),
54		UniCase::ascii("array::first") => (PathKind::Function, None),
55		UniCase::ascii("array::fold") => (PathKind::Function, None),
56		UniCase::ascii("array::flatten") => (PathKind::Function, None),
57		UniCase::ascii("array::group") => (PathKind::Function, None),
58		UniCase::ascii("array::includes") => (PathKind::Function, None),
59		UniCase::ascii("array::index_of") => (PathKind::Function, None),
60		UniCase::ascii("array::insert") => (PathKind::Function, None),
61		UniCase::ascii("array::intersect") => (PathKind::Function, None),
62		UniCase::ascii("array::is_empty") => (PathKind::Function, None),
63		UniCase::ascii("array::join") => (PathKind::Function, None),
64		UniCase::ascii("array::last") => (PathKind::Function, None),
65		UniCase::ascii("array::len") => (PathKind::Function, None),
66		UniCase::ascii("array::logical_and") => (PathKind::Function, None),
67		UniCase::ascii("array::logical_or") => (PathKind::Function, None),
68		UniCase::ascii("array::logical_xor") => (PathKind::Function, None),
69		UniCase::ascii("array::map") => (PathKind::Function, None),
70		UniCase::ascii("array::matches") => (PathKind::Function, None),
71		UniCase::ascii("array::max") => (PathKind::Function, None),
72		UniCase::ascii("array::min") => (PathKind::Function, None),
73		UniCase::ascii("array::pop") => (PathKind::Function, None),
74		UniCase::ascii("array::prepend") => (PathKind::Function, None),
75		UniCase::ascii("array::push") => (PathKind::Function, None),
76		UniCase::ascii("array::range") => (PathKind::Function, None),
77		UniCase::ascii("array::reduce") => (PathKind::Function, None),
78		UniCase::ascii("array::remove") => (PathKind::Function, None),
79		UniCase::ascii("array::repeat") => (PathKind::Function, None),
80		UniCase::ascii("array::reverse") => (PathKind::Function, None),
81		UniCase::ascii("array::sequence") => (PathKind::Function, None),
82		UniCase::ascii("array::shuffle") => (PathKind::Function, None),
83		UniCase::ascii("array::slice") => (PathKind::Function, None),
84		UniCase::ascii("array::some") => (PathKind::Function, None),
85		UniCase::ascii("array::sort") => (PathKind::Function, None),
86		UniCase::ascii("array::sort_natural") => (PathKind::Function, None),
87		UniCase::ascii("array::sort_lexical") => (PathKind::Function, None),
88		UniCase::ascii("array::sort_natural_lexical") => (PathKind::Function, None),
89		UniCase::ascii("array::swap") => (PathKind::Function, None),
90		UniCase::ascii("array::transpose") => (PathKind::Function, None),
91		UniCase::ascii("array::union") => (PathKind::Function, None),
92		UniCase::ascii("array::windows") => (PathKind::Function, None),
93		UniCase::ascii("array::sort::asc") => (PathKind::Function, None),
94		UniCase::ascii("array::sort::desc") => (PathKind::Function, None),
95		//
96		UniCase::ascii("bytes::len") => (PathKind::Function, None),
97		//
98		UniCase::ascii("count") => (PathKind::Function, None),
99		//
100		UniCase::ascii("crypto::blake3") => (PathKind::Function, None),
101		UniCase::ascii("crypto::joaat") => (PathKind::Function, None),
102		UniCase::ascii("crypto::md5") => (PathKind::Function, None),
103		UniCase::ascii("crypto::sha1") => (PathKind::Function, None),
104		UniCase::ascii("crypto::sha256") => (PathKind::Function, None),
105		UniCase::ascii("crypto::sha512") => (PathKind::Function, None),
106		UniCase::ascii("crypto::argon2::compare") => (PathKind::Function, None),
107		UniCase::ascii("crypto::argon2::generate") => (PathKind::Function, None),
108		UniCase::ascii("crypto::bcrypt::compare") => (PathKind::Function, None),
109		UniCase::ascii("crypto::bcrypt::generate") => (PathKind::Function, None),
110		UniCase::ascii("crypto::pbkdf2::compare") => (PathKind::Function, None),
111		UniCase::ascii("crypto::pbkdf2::generate") => (PathKind::Function, None),
112		UniCase::ascii("crypto::scrypt::compare") => (PathKind::Function, None),
113		UniCase::ascii("crypto::scrypt::generate") => (PathKind::Function, None),
114		//
115		UniCase::ascii("duration::days") => (PathKind::Function, None),
116		UniCase::ascii("duration::hours") => (PathKind::Function, None),
117		UniCase::ascii("duration::micros") => (PathKind::Function, None),
118		UniCase::ascii("duration::millis") => (PathKind::Function, None),
119		UniCase::ascii("duration::mins") => (PathKind::Function, None),
120		UniCase::ascii("duration::nanos") => (PathKind::Function, None),
121		UniCase::ascii("duration::secs") => (PathKind::Function, None),
122		UniCase::ascii("duration::weeks") => (PathKind::Function, None),
123		UniCase::ascii("duration::years") => (PathKind::Function, None),
124		UniCase::ascii("duration::from_days") => (PathKind::Function, Some(UniCase::ascii("duration::from::days"))),
125		UniCase::ascii("duration::from_hours") => (PathKind::Function, Some(UniCase::ascii("duration::from::hours"))),
126		UniCase::ascii("duration::from_micros") => (PathKind::Function, Some(UniCase::ascii("duration::from::micros"))),
127		UniCase::ascii("duration::from_millis") => (PathKind::Function, Some(UniCase::ascii("duration::from::millis"))),
128		UniCase::ascii("duration::from_mins") => (PathKind::Function, Some(UniCase::ascii("duration::from::mins"))),
129		UniCase::ascii("duration::from_nanos") => (PathKind::Function, Some(UniCase::ascii("duration::from::nanos"))),
130		UniCase::ascii("duration::from_secs") => (PathKind::Function, Some(UniCase::ascii("duration::from::secs"))),
131		UniCase::ascii("duration::from_weeks") => (PathKind::Function, Some(UniCase::ascii("duration::from::weeks"))),
132		//
133		UniCase::ascii("encoding::base64::decode") => (PathKind::Function, None),
134		UniCase::ascii("encoding::base64::encode") => (PathKind::Function, None),
135		UniCase::ascii("encoding::cbor::decode") => (PathKind::Function, None),
136		UniCase::ascii("encoding::cbor::encode") => (PathKind::Function, None),
137		UniCase::ascii("encoding::json::decode") => (PathKind::Function, None),
138		UniCase::ascii("encoding::json::encode") => (PathKind::Function, None),
139		//
140		UniCase::ascii("eval::gql") => (PathKind::Function, None),
141		UniCase::ascii("eval::surql") => (PathKind::Function, None),
142		//
143		UniCase::ascii("file::bucket") => (PathKind::Function, None),
144		UniCase::ascii("file::key") => (PathKind::Function, None),
145		UniCase::ascii("file::put") => (PathKind::Function, None),
146		UniCase::ascii("file::put_if_not_exists") => (PathKind::Function, None),
147		UniCase::ascii("file::get") => (PathKind::Function, None),
148		UniCase::ascii("file::head") => (PathKind::Function, None),
149		UniCase::ascii("file::delete") => (PathKind::Function, None),
150		UniCase::ascii("file::copy") => (PathKind::Function, None),
151		UniCase::ascii("file::copy_if_not_exists") => (PathKind::Function, None),
152		UniCase::ascii("file::rename") => (PathKind::Function, None),
153		UniCase::ascii("file::rename_if_not_exists") => (PathKind::Function, None),
154		UniCase::ascii("file::exists") => (PathKind::Function, None),
155		UniCase::ascii("file::list") => (PathKind::Function, None),
156		//
157		UniCase::ascii("geo::area") => (PathKind::Function, None),
158		UniCase::ascii("geo::bearing") => (PathKind::Function, None),
159		UniCase::ascii("geo::centroid") => (PathKind::Function, None),
160		UniCase::ascii("geo::distance") => (PathKind::Function, None),
161		UniCase::ascii("geo::hash::decode") => (PathKind::Function, None),
162		UniCase::ascii("geo::hash::encode") => (PathKind::Function, None),
163		UniCase::ascii("geo::is_valid") => (PathKind::Function, None),
164		//
165		UniCase::ascii("http::head") => (PathKind::Function, None),
166		UniCase::ascii("http::get") => (PathKind::Function, None),
167		UniCase::ascii("http::put") => (PathKind::Function, None),
168		UniCase::ascii("http::post") => (PathKind::Function, None),
169		UniCase::ascii("http::patch") => (PathKind::Function, None),
170		UniCase::ascii("http::delete") => (PathKind::Function, None),
171		//
172		UniCase::ascii("math::abs") => (PathKind::Function, None),
173		UniCase::ascii("math::acos") => (PathKind::Function, None),
174		UniCase::ascii("math::acot") => (PathKind::Function, None),
175		UniCase::ascii("math::asin") => (PathKind::Function, None),
176		UniCase::ascii("math::atan") => (PathKind::Function, None),
177		UniCase::ascii("math::bottom") => (PathKind::Function, None),
178		UniCase::ascii("math::ceil") => (PathKind::Function, None),
179		UniCase::ascii("math::clamp") => (PathKind::Function, None),
180		UniCase::ascii("math::cos") => (PathKind::Function, None),
181		UniCase::ascii("math::cot") => (PathKind::Function, None),
182		UniCase::ascii("math::deg2rad") => (PathKind::Function, None),
183		UniCase::ascii("math::fixed") => (PathKind::Function, None),
184		UniCase::ascii("math::floor") => (PathKind::Function, None),
185		UniCase::ascii("math::interquartile") => (PathKind::Function, None),
186		UniCase::ascii("math::lerp") => (PathKind::Function, None),
187		UniCase::ascii("math::lerpangle") => (PathKind::Function, None),
188		UniCase::ascii("math::ln") => (PathKind::Function, None),
189		UniCase::ascii("math::log") => (PathKind::Function, None),
190		UniCase::ascii("math::log10") => (PathKind::Function, None),
191		UniCase::ascii("math::log2") => (PathKind::Function, None),
192		UniCase::ascii("math::max") => (PathKind::Function, None),
193		UniCase::ascii("math::mean") => (PathKind::Function, None),
194		UniCase::ascii("math::median") => (PathKind::Function, None),
195		UniCase::ascii("math::midhinge") => (PathKind::Function, None),
196		UniCase::ascii("math::min") => (PathKind::Function, None),
197		UniCase::ascii("math::mode") => (PathKind::Function, None),
198		UniCase::ascii("math::nearestrank") => (PathKind::Function, None),
199		UniCase::ascii("math::percentile") => (PathKind::Function, None),
200		UniCase::ascii("math::pow") => (PathKind::Function, None),
201		UniCase::ascii("math::product") => (PathKind::Function, None),
202		UniCase::ascii("math::rad2deg") => (PathKind::Function, None),
203		UniCase::ascii("math::round") => (PathKind::Function, None),
204		UniCase::ascii("math::sign") => (PathKind::Function, None),
205		UniCase::ascii("math::sin") => (PathKind::Function, None),
206		UniCase::ascii("math::spread") => (PathKind::Function, None),
207		UniCase::ascii("math::sqrt") => (PathKind::Function, None),
208		UniCase::ascii("math::stddev") => (PathKind::Function, None),
209		UniCase::ascii("math::sum") => (PathKind::Function, None),
210		UniCase::ascii("math::tan") => (PathKind::Function, None),
211		UniCase::ascii("math::top") => (PathKind::Function, None),
212		UniCase::ascii("math::trimean") => (PathKind::Function, None),
213		UniCase::ascii("math::variance") => (PathKind::Function, None),
214		//
215		UniCase::ascii("meta::id") => (PathKind::Function, None),
216		UniCase::ascii("meta::tb") => (PathKind::Function, None),
217		//
218		UniCase::ascii("not") => (PathKind::Function, None),
219		//
220		UniCase::ascii("object::entries") => (PathKind::Function, None),
221		UniCase::ascii("object::extend") => (PathKind::Function, None),
222		UniCase::ascii("object::from_entries") => (PathKind::Function, None),
223		UniCase::ascii("object::is_empty") => (PathKind::Function, None),
224		UniCase::ascii("object::keys") => (PathKind::Function, None),
225		UniCase::ascii("object::len") => (PathKind::Function, None),
226		UniCase::ascii("object::remove") => (PathKind::Function, None),
227		UniCase::ascii("object::values") => (PathKind::Function, None),
228		//
229		UniCase::ascii("parse::email::host") => (PathKind::Function, None),
230		UniCase::ascii("parse::email::user") => (PathKind::Function, None),
231		UniCase::ascii("parse::url::domain") => (PathKind::Function, None),
232		UniCase::ascii("parse::url::fragment") => (PathKind::Function, None),
233		UniCase::ascii("parse::url::host") => (PathKind::Function, None),
234		UniCase::ascii("parse::url::path") => (PathKind::Function, None),
235		UniCase::ascii("parse::url::port") => (PathKind::Function, None),
236		UniCase::ascii("parse::url::query") => (PathKind::Function, None),
237		UniCase::ascii("parse::url::scheme") => (PathKind::Function, None),
238		//
239		UniCase::ascii("rand") => (PathKind::Function, None),
240		UniCase::ascii("rand::bool") => (PathKind::Function, None),
241		UniCase::ascii("rand::duration") => (PathKind::Function, None),
242		UniCase::ascii("rand::enum") => (PathKind::Function, None),
243		UniCase::ascii("rand::float") => (PathKind::Function, None),
244		UniCase::ascii("rand::id") => (PathKind::Function, Some(UniCase::ascii("rand::guid"))),
245		UniCase::ascii("rand::int") => (PathKind::Function, None),
246		UniCase::ascii("rand::string") => (PathKind::Function, None),
247		UniCase::ascii("rand::time") => (PathKind::Function, None),
248		UniCase::ascii("rand::ulid") => (PathKind::Function, None),
249		UniCase::ascii("rand::uuid::v4") => (PathKind::Function, None),
250		UniCase::ascii("rand::uuid::v7") => (PathKind::Function, None),
251		UniCase::ascii("rand::uuid") => (PathKind::Function, None),
252		//
253		UniCase::ascii("record::exists") => (PathKind::Function, None),
254		UniCase::ascii("record::id") => (PathKind::Function, None),
255		UniCase::ascii("record::is_edge") => (PathKind::Function, None),
256		UniCase::ascii("record::table") => (PathKind::Function, None),
257		UniCase::ascii("record::tb") => (PathKind::Function, None),
258		//
259		UniCase::ascii("search::analyze") => (PathKind::Function, None),
260		UniCase::ascii("search::linear") => (PathKind::Function, None),
261		UniCase::ascii("search::rrf") => (PathKind::Function, None),
262		UniCase::ascii("search::score") => (PathKind::Function, None),
263		UniCase::ascii("search::highlight") => (PathKind::Function, None),
264		UniCase::ascii("search::offsets") => (PathKind::Function, None),
265		//
266		UniCase::ascii("set::add") => (PathKind::Function, None),
267		UniCase::ascii("set::all") => (PathKind::Function, None),
268		UniCase::ascii("set::any") => (PathKind::Function, None),
269		UniCase::ascii("set::at") => (PathKind::Function, None),
270		UniCase::ascii("set::complement") => (PathKind::Function, None),
271		UniCase::ascii("set::contains") => (PathKind::Function, None),
272		UniCase::ascii("set::difference") => (PathKind::Function, None),
273		UniCase::ascii("set::filter") => (PathKind::Function, None),
274		UniCase::ascii("set::find") => (PathKind::Function, None),
275		UniCase::ascii("set::first") => (PathKind::Function, None),
276		UniCase::ascii("set::flatten") => (PathKind::Function, None),
277		UniCase::ascii("set::fold") => (PathKind::Function, None),
278		UniCase::ascii("set::intersect") => (PathKind::Function, None),
279		UniCase::ascii("set::is_empty") => (PathKind::Function, None),
280		UniCase::ascii("set::join") => (PathKind::Function, None),
281		UniCase::ascii("set::last") => (PathKind::Function, None),
282		UniCase::ascii("set::len") => (PathKind::Function, None),
283		UniCase::ascii("set::map") => (PathKind::Function, None),
284		UniCase::ascii("set::max") => (PathKind::Function, None),
285		UniCase::ascii("set::min") => (PathKind::Function, None),
286		UniCase::ascii("set::reduce") => (PathKind::Function, None),
287		UniCase::ascii("set::remove") => (PathKind::Function, None),
288		UniCase::ascii("set::slice") => (PathKind::Function, None),
289		UniCase::ascii("set::union") => (PathKind::Function, None),
290		//
291		UniCase::ascii("sequence::nextval") => (PathKind::Function, None),
292		//
293		UniCase::ascii("session::ac") => (PathKind::Function, None),
294		UniCase::ascii("session::db") => (PathKind::Function, None),
295		UniCase::ascii("session::id") => (PathKind::Function, None),
296		UniCase::ascii("session::ip") => (PathKind::Function, None),
297		UniCase::ascii("session::ns") => (PathKind::Function, None),
298		UniCase::ascii("session::origin") => (PathKind::Function, None),
299		UniCase::ascii("session::rd") => (PathKind::Function, None),
300		UniCase::ascii("session::token") => (PathKind::Function, None),
301		//
302		UniCase::ascii("sleep") => (PathKind::Function, None),
303		//
304		UniCase::ascii("string::capitalize") => (PathKind::Function, None),
305		UniCase::ascii("string::concat") => (PathKind::Function, None),
306		UniCase::ascii("string::contains") => (PathKind::Function, None),
307		UniCase::ascii("string::ends_with") => (PathKind::Function, None),
308		UniCase::ascii("string::join") => (PathKind::Function, None),
309		UniCase::ascii("string::len") => (PathKind::Function, None),
310		UniCase::ascii("string::lowercase") => (PathKind::Function, None),
311		UniCase::ascii("string::repeat") => (PathKind::Function, None),
312		UniCase::ascii("string::replace") => (PathKind::Function, None),
313		UniCase::ascii("string::reverse") => (PathKind::Function, None),
314		UniCase::ascii("string::slice") => (PathKind::Function, None),
315		UniCase::ascii("string::slug") => (PathKind::Function, None),
316		UniCase::ascii("string::split") => (PathKind::Function, None),
317		UniCase::ascii("string::starts_with") => (PathKind::Function, Some(UniCase::ascii("string::startsWith"))),
318		UniCase::ascii("string::trim") => (PathKind::Function, None),
319		UniCase::ascii("string::uppercase") => (PathKind::Function, None),
320		UniCase::ascii("string::words") => (PathKind::Function, None),
321		//
322		UniCase::ascii("string::distance::damerau_levenshtein") => (PathKind::Function, None),
323		UniCase::ascii("string::distance::hamming") => (PathKind::Function, None),
324		UniCase::ascii("string::distance::levenshtein") => (PathKind::Function, None),
325		UniCase::ascii("string::distance::normalized_damerau_levenshtein") => (PathKind::Function, None),
326		UniCase::ascii("string::distance::normalized_levenshtein") => (PathKind::Function, None),
327		UniCase::ascii("string::distance::osa") => (PathKind::Function, Some(UniCase::ascii("string::distance::osa_distance"))),
328		//
329		UniCase::ascii("string::html::encode") => (PathKind::Function, None),
330		UniCase::ascii("string::html::sanitize") => (PathKind::Function, None),
331		UniCase::ascii("string::is_alphanum") => (PathKind::Function, Some(UniCase::ascii("string::is::alphanum"))),
332		UniCase::ascii("string::is_alpha") => (PathKind::Function, Some(UniCase::ascii("string::is::alpha"))),
333		UniCase::ascii("string::is_ascii") => (PathKind::Function, Some(UniCase::ascii("string::is::ascii"))),
334		UniCase::ascii("string::is_datetime") => (PathKind::Function, Some(UniCase::ascii("string::is::datetime"))),
335		UniCase::ascii("string::is_domain") => (PathKind::Function, Some(UniCase::ascii("string::is::domain"))),
336		UniCase::ascii("string::is_email") => (PathKind::Function, Some(UniCase::ascii("string::is::email"))),
337		UniCase::ascii("string::is_hexadecimal") => (PathKind::Function, Some(UniCase::ascii("string::is::hexadecimal"))),
338		UniCase::ascii("string::is_ip") => (PathKind::Function, Some(UniCase::ascii("string::is::ip"))),
339		UniCase::ascii("string::is_ipv4") => (PathKind::Function, Some(UniCase::ascii("string::is::ipv4"))),
340		UniCase::ascii("string::is_ipv6") => (PathKind::Function, Some(UniCase::ascii("string::is::ipv6"))),
341		UniCase::ascii("string::is_latitude") => (PathKind::Function, Some(UniCase::ascii("string::is::latitude"))),
342		UniCase::ascii("string::is_longitude") => (PathKind::Function, Some(UniCase::ascii("string::is::longitude"))),
343		UniCase::ascii("string::is_numeric") => (PathKind::Function, Some(UniCase::ascii("string::is::numeric"))),
344		UniCase::ascii("string::is_semver") => (PathKind::Function, Some(UniCase::ascii("string::is::semver"))),
345		UniCase::ascii("string::is_url") => (PathKind::Function, Some(UniCase::ascii("string::is::url"))),
346		UniCase::ascii("string::is_ulid") => (PathKind::Function, Some(UniCase::ascii("string::is::ulid"))),
347		UniCase::ascii("string::is_uuid") => (PathKind::Function, Some(UniCase::ascii("string::is::uuid"))),
348		UniCase::ascii("string::is_record") => (PathKind::Function, Some(UniCase::ascii("string::is::record"))),
349		UniCase::ascii("string::semver::compare") => (PathKind::Function, None),
350		UniCase::ascii("string::semver::major") => (PathKind::Function, None),
351		UniCase::ascii("string::semver::minor") => (PathKind::Function, None),
352		UniCase::ascii("string::semver::patch") => (PathKind::Function, None),
353		UniCase::ascii("string::semver::inc::major") => (PathKind::Function, None),
354		UniCase::ascii("string::semver::inc::minor") => (PathKind::Function, None),
355		UniCase::ascii("string::semver::inc::patch") => (PathKind::Function, None),
356		UniCase::ascii("string::semver::set::major") => (PathKind::Function, None),
357		UniCase::ascii("string::semver::set::minor") => (PathKind::Function, None),
358		UniCase::ascii("string::semver::set::patch") => (PathKind::Function, None),
359		//
360		UniCase::ascii("string::similarity::fuzzy") => (PathKind::Function, None),
361		UniCase::ascii("string::similarity::jaro") => (PathKind::Function, None),
362		UniCase::ascii("string::similarity::jaro_winkler") => (PathKind::Function, None),
363		UniCase::ascii("string::similarity::smithwaterman") => (PathKind::Function, None),
364		UniCase::ascii("string::similarity::sorensen_dice") => (PathKind::Function, None),
365		UniCase::ascii("string::matches") => (PathKind::Function, None),
366		//
367		UniCase::ascii("time::ceil") => (PathKind::Function, None),
368		UniCase::ascii("time::day") => (PathKind::Function, None),
369		UniCase::ascii("time::floor") => (PathKind::Function, None),
370		UniCase::ascii("time::format") => (PathKind::Function, None),
371		UniCase::ascii("time::group") => (PathKind::Function, None),
372		UniCase::ascii("time::hour") => (PathKind::Function, None),
373		UniCase::ascii("time::max") => (PathKind::Function, None),
374		UniCase::ascii("time::micros") => (PathKind::Function, None),
375		UniCase::ascii("time::millis") => (PathKind::Function, None),
376		UniCase::ascii("time::min") => (PathKind::Function, None),
377		UniCase::ascii("time::minute") => (PathKind::Function, None),
378		UniCase::ascii("time::month") => (PathKind::Function, None),
379		UniCase::ascii("time::nano") => (PathKind::Function, None),
380		UniCase::ascii("time::now") => (PathKind::Function, None),
381		UniCase::ascii("time::round") => (PathKind::Function, None),
382		UniCase::ascii("time::second") => (PathKind::Function, None),
383		UniCase::ascii("time::timezone") => (PathKind::Function, None),
384		UniCase::ascii("time::unix") => (PathKind::Function, None),
385		UniCase::ascii("time::wday") => (PathKind::Function, None),
386		UniCase::ascii("time::week") => (PathKind::Function, None),
387		UniCase::ascii("time::yday") => (PathKind::Function, None),
388		UniCase::ascii("time::year") => (PathKind::Function, None),
389		UniCase::ascii("time::from_micros") => (PathKind::Function, Some(UniCase::ascii("time::from::micros"))),
390		UniCase::ascii("time::from_millis") => (PathKind::Function, Some(UniCase::ascii("time::from::millis"))),
391		UniCase::ascii("time::from_nanos") => (PathKind::Function, Some(UniCase::ascii("time::from::nanos"))),
392		UniCase::ascii("time::from_secs") => (PathKind::Function, Some(UniCase::ascii("time::from::secs"))),
393		UniCase::ascii("time::from_ulid") => (PathKind::Function, Some(UniCase::ascii("time::from::ulid"))),
394		UniCase::ascii("time::from_unix") => (PathKind::Function, Some(UniCase::ascii("time::from::unix"))),
395		UniCase::ascii("time::from_uuid") => (PathKind::Function, Some(UniCase::ascii("time::from::uuid"))),
396		UniCase::ascii("time::is_leap_year") => (PathKind::Function, Some(UniCase::ascii("time::is::leap_year"))),
397		UniCase::ascii("time::set_year") => (PathKind::Function, None),
398		UniCase::ascii("time::set_month") => (PathKind::Function, None),
399		UniCase::ascii("time::set_day") => (PathKind::Function, None),
400		UniCase::ascii("time::set_hour") => (PathKind::Function, None),
401		UniCase::ascii("time::set_minute") => (PathKind::Function, None),
402		UniCase::ascii("time::set_second") => (PathKind::Function, None),
403		UniCase::ascii("time::set_nanosecond") => (PathKind::Function, None),
404		//
405		UniCase::ascii("type::array") => (PathKind::Function, None),
406		UniCase::ascii("type::bool") => (PathKind::Function, None),
407		UniCase::ascii("type::bytes") => (PathKind::Function, None),
408		UniCase::ascii("type::datetime") => (PathKind::Function, None),
409		UniCase::ascii("type::decimal") => (PathKind::Function, None),
410		UniCase::ascii("type::duration") => (PathKind::Function, None),
411		UniCase::ascii("type::field") => (PathKind::Function, None),
412		UniCase::ascii("type::fields") => (PathKind::Function, None),
413		UniCase::ascii("type::file") => (PathKind::Function, None),
414		UniCase::ascii("type::float") => (PathKind::Function, None),
415		UniCase::ascii("type::geometry") => (PathKind::Function, None),
416		UniCase::ascii("type::int") => (PathKind::Function, None),
417		UniCase::ascii("type::number") => (PathKind::Function, None),
418		UniCase::ascii("type::of") => (PathKind::Function, None),
419		UniCase::ascii("type::point") => (PathKind::Function, None),
420		UniCase::ascii("type::range") => (PathKind::Function, None),
421		UniCase::ascii("type::record") => (PathKind::Function, Some(UniCase::ascii("type::thing"))),
422		UniCase::ascii("type::set") => (PathKind::Function, None),
423		UniCase::ascii("type::string") => (PathKind::Function, None),
424		UniCase::ascii("type::string_lossy") => (PathKind::Function, None),
425		UniCase::ascii("type::table") => (PathKind::Function, None),
426		UniCase::ascii("type::uuid") => (PathKind::Function, None),
427		UniCase::ascii("type::is_array") => (PathKind::Function, Some(UniCase::ascii("type::is::array"))),
428		UniCase::ascii("type::is_bool") => (PathKind::Function, Some(UniCase::ascii("type::is::bool"))),
429		UniCase::ascii("type::is_bytes") => (PathKind::Function, Some(UniCase::ascii("type::is::bytes"))),
430		UniCase::ascii("type::is_collection") => (PathKind::Function, Some(UniCase::ascii("type::is::collection"))),
431		UniCase::ascii("type::is_datetime") => (PathKind::Function, Some(UniCase::ascii("type::is::datetime"))),
432		UniCase::ascii("type::is_decimal") => (PathKind::Function, Some(UniCase::ascii("type::is::decimal"))),
433		UniCase::ascii("type::is_duration") => (PathKind::Function, Some(UniCase::ascii("type::is::duration"))),
434		UniCase::ascii("type::is_float") => (PathKind::Function, Some(UniCase::ascii("type::is::float"))),
435		UniCase::ascii("type::is_geometry") => (PathKind::Function, Some(UniCase::ascii("type::is::geometry"))),
436		UniCase::ascii("type::is_int") => (PathKind::Function, Some(UniCase::ascii("type::is::int"))),
437		UniCase::ascii("type::is_line") => (PathKind::Function, Some(UniCase::ascii("type::is::line"))),
438		UniCase::ascii("type::is_multiline") => (PathKind::Function, Some(UniCase::ascii("type::is::multiline"))),
439		UniCase::ascii("type::is_multipoint") => (PathKind::Function, Some(UniCase::ascii("type::is::multipoint"))),
440		UniCase::ascii("type::is_multipolygon") => (PathKind::Function, Some(UniCase::ascii("type::is::multipolygon"))),
441		UniCase::ascii("type::is_none") => (PathKind::Function, Some(UniCase::ascii("type::is::none"))),
442		UniCase::ascii("type::is_null") => (PathKind::Function, Some(UniCase::ascii("type::is::null"))),
443		UniCase::ascii("type::is_number") => (PathKind::Function, Some(UniCase::ascii("type::is::number"))),
444		UniCase::ascii("type::is_object") => (PathKind::Function, Some(UniCase::ascii("type::is::object"))),
445		UniCase::ascii("type::is_point") => (PathKind::Function, Some(UniCase::ascii("type::is::point"))),
446		UniCase::ascii("type::is_polygon") => (PathKind::Function, Some(UniCase::ascii("type::is::polygon"))),
447		UniCase::ascii("type::is_range") => (PathKind::Function, Some(UniCase::ascii("type::is::range"))),
448		UniCase::ascii("type::is_record") => (PathKind::Function, Some(UniCase::ascii("type::is::record"))),
449		UniCase::ascii("type::is_set") => (PathKind::Function, None),
450		UniCase::ascii("type::is_string") => (PathKind::Function, Some(UniCase::ascii("type::is::string"))),
451		UniCase::ascii("type::is_uuid") => (PathKind::Function, Some(UniCase::ascii("type::is::uuid"))),
452		//
453		UniCase::ascii("value::diff") => (PathKind::Function, None),
454		UniCase::ascii("value::patch") => (PathKind::Function, None),
455		UniCase::ascii("value::chain") => (PathKind::Function, None),
456		UniCase::ascii("value::expect") => (PathKind::Function, None),
457		//
458		UniCase::ascii("vector::add") => (PathKind::Function, None),
459		UniCase::ascii("vector::angle") => (PathKind::Function, None),
460		UniCase::ascii("vector::cross") => (PathKind::Function, None),
461		UniCase::ascii("vector::divide") => (PathKind::Function, None),
462		UniCase::ascii("vector::dot") => (PathKind::Function, None),
463		UniCase::ascii("vector::magnitude") => (PathKind::Function, None),
464		UniCase::ascii("vector::multiply") => (PathKind::Function, None),
465		UniCase::ascii("vector::normalize") => (PathKind::Function, None),
466		UniCase::ascii("vector::project") => (PathKind::Function, None),
467		UniCase::ascii("vector::scale") => (PathKind::Function, None),
468		UniCase::ascii("vector::subtract") => (PathKind::Function, None),
469		UniCase::ascii("vector::sum") => (PathKind::Function, None),
470		UniCase::ascii("vector::distance::chebyshev") => (PathKind::Function, None),
471		UniCase::ascii("vector::distance::euclidean") => (PathKind::Function, None),
472		UniCase::ascii("vector::distance::hamming") => (PathKind::Function, None),
473		UniCase::ascii("vector::distance::knn") => (PathKind::Function, None),
474		UniCase::ascii("vector::distance::mahalanobis") => (PathKind::Function, None),
475		UniCase::ascii("vector::distance::manhattan") => (PathKind::Function, None),
476		UniCase::ascii("vector::distance::minkowski") => (PathKind::Function, None),
477		UniCase::ascii("vector::similarity::cosine") => (PathKind::Function, None),
478		UniCase::ascii("vector::similarity::jaccard") => (PathKind::Function, None),
479		UniCase::ascii("vector::similarity::pearson") => (PathKind::Function, None),
480		UniCase::ascii("vector::similarity::spearman") => (PathKind::Function, None),
481		// constants
482		UniCase::ascii("math::E") => (PathKind::Constant(Constant::MathE), None),
483		UniCase::ascii("math::FRAC_1_PI") => (PathKind::Constant(Constant::MathFrac1Pi), None),
484		UniCase::ascii("math::FRAC_1_SQRT_2") => (PathKind::Constant(Constant::MathFrac1Sqrt2), None),
485		UniCase::ascii("math::FRAC_2_PI") => (PathKind::Constant(Constant::MathFrac2Pi), None),
486		UniCase::ascii("math::FRAC_2_SQRT_PI") => (PathKind::Constant(Constant::MathFrac2SqrtPi), None),
487		UniCase::ascii("math::FRAC_PI_2") => (PathKind::Constant(Constant::MathFracPi2), None),
488		UniCase::ascii("math::FRAC_PI_3") => (PathKind::Constant(Constant::MathFracPi3), None),
489		UniCase::ascii("math::FRAC_PI_4") => (PathKind::Constant(Constant::MathFracPi4), None),
490		UniCase::ascii("math::FRAC_PI_6") => (PathKind::Constant(Constant::MathFracPi6), None),
491		UniCase::ascii("math::FRAC_PI_8") => (PathKind::Constant(Constant::MathFracPi8), None),
492		// Previous path retained for backwards compatibility
493		UniCase::ascii("math::INF") => (PathKind::Constant(Constant::MathInfinity), None),
494		UniCase::ascii("math::INFINITY") => (PathKind::Constant(Constant::MathInfinity), None),
495		UniCase::ascii("math::LN_10") => (PathKind::Constant(Constant::MathLn10), None),
496		UniCase::ascii("math::LN_2") => (PathKind::Constant(Constant::MathLn2), None),
497		UniCase::ascii("math::LOG10_2") => (PathKind::Constant(Constant::MathLog102), None),
498		UniCase::ascii("math::LOG10_E") => (PathKind::Constant(Constant::MathLog10E), None),
499		UniCase::ascii("math::LOG2_10") => (PathKind::Constant(Constant::MathLog210), None),
500		UniCase::ascii("math::LOG2_E") => (PathKind::Constant(Constant::MathLog2E), None),
501		// Previous path retained for backwards compatibility
502		UniCase::ascii("math::NEG_INF") => (PathKind::Constant(Constant::MathNegInfinity), None),
503		UniCase::ascii("math::NEG_INFINITY") => (PathKind::Constant(Constant::MathNegInfinity), None),
504		UniCase::ascii("math::PI") => (PathKind::Constant(Constant::MathPi), None),
505		UniCase::ascii("math::SQRT_2") => (PathKind::Constant(Constant::MathSqrt2), None),
506		UniCase::ascii("math::TAU") => (PathKind::Constant(Constant::MathTau), None),
507		UniCase::ascii("time::EPOCH") => (PathKind::Constant(Constant::TimeEpoch), None),
508		UniCase::ascii("time::MINIMUM") => (PathKind::Constant(Constant::TimeMin), None),
509		UniCase::ascii("time::MAXIMUM") => (PathKind::Constant(Constant::TimeMax), None),
510		UniCase::ascii("duration::MAX") => (PathKind::Constant(Constant::DurationMax), None),
511		//
512		UniCase::ascii("schema::table::exists") => (PathKind::Function, None),
513};