surrealdb_core/syn/lexer/
keywords.rs

1use crate::{
2	sql::{language::Language, Algorithm},
3	syn::token::{DistanceKind, Keyword, TokenKind, VectorTypeKind},
4};
5use phf::{phf_map, phf_set};
6use unicase::UniCase;
7
8/// A set of keywords which might in some contexts are dissallowed as an identifier.
9pub static RESERVED_KEYWORD: phf::Set<UniCase<&'static str>> = phf_set! {
10	UniCase::ascii("ALTER"),
11	UniCase::ascii("ANALYZE"),
12	UniCase::ascii("BEGIN"),
13	UniCase::ascii("BREAK"),
14	UniCase::ascii("CANCEL"),
15	UniCase::ascii("COMMIT"),
16	UniCase::ascii("CONTINUE"),
17	UniCase::ascii("CREATE"),
18	UniCase::ascii("DEFINE"),
19	UniCase::ascii("FOR"),
20	UniCase::ascii("IF"),
21	UniCase::ascii("INFO"),
22	UniCase::ascii("INSERT"),
23	UniCase::ascii("KILL"),
24	UniCase::ascii("LIVE"),
25	UniCase::ascii("OPTION"),
26	UniCase::ascii("REBUILD"),
27	UniCase::ascii("RETURN"),
28	UniCase::ascii("RELATE"),
29	UniCase::ascii("REMOVE"),
30	UniCase::ascii("SELECT"),
31	UniCase::ascii("LET"),
32	UniCase::ascii("SHOW"),
33	UniCase::ascii("SLEEP"),
34	UniCase::ascii("THROW"),
35	UniCase::ascii("UPDATE"),
36	UniCase::ascii("UPSERT"),
37	UniCase::ascii("USE"),
38	UniCase::ascii("DIFF"),
39	UniCase::ascii("RAND"),
40	UniCase::ascii("NONE"),
41	UniCase::ascii("NULL"),
42	UniCase::ascii("AFTER"),
43	UniCase::ascii("BEFORE"),
44	UniCase::ascii("VALUE"),
45	UniCase::ascii("BY"),
46	UniCase::ascii("ALL"),
47	UniCase::ascii("TRUE"),
48	UniCase::ascii("FALSE"),
49	UniCase::ascii("WHERE"),
50	UniCase::ascii("TABLE"),
51};
52
53pub fn could_be_reserved(s: &str) -> bool {
54	RESERVED_KEYWORD.contains(&UniCase::ascii(s))
55}
56
57/// A map for mapping keyword strings to a tokenkind,
58pub(crate) static KEYWORDS: phf::Map<UniCase<&'static str>, TokenKind> = phf_map! {
59	// Keywords
60	UniCase::ascii("ACCESS") => TokenKind::Keyword(Keyword::Access),
61	UniCase::ascii("AFTER") => TokenKind::Keyword(Keyword::After),
62	UniCase::ascii("ALGORITHM") => TokenKind::Keyword(Keyword::Algorithm),
63	UniCase::ascii("ALL") => TokenKind::Keyword(Keyword::All),
64	UniCase::ascii("Alter") => TokenKind::Keyword(Keyword::Alter),
65	UniCase::ascii("ALWAYS") => TokenKind::Keyword(Keyword::Always),
66	UniCase::ascii("ANALYZE") => TokenKind::Keyword(Keyword::Analyze),
67	UniCase::ascii("ANALYZER") => TokenKind::Keyword(Keyword::Analyzer),
68	UniCase::ascii("API") => TokenKind::Keyword(Keyword::Api),
69	UniCase::ascii("AS") => TokenKind::Keyword(Keyword::As),
70	UniCase::ascii("ASCENDING") => TokenKind::Keyword(Keyword::Ascending),
71	UniCase::ascii("ASC") => TokenKind::Keyword(Keyword::Ascending),
72	UniCase::ascii("ASCII") => TokenKind::Keyword(Keyword::Ascii),
73	UniCase::ascii("ASSERT") => TokenKind::Keyword(Keyword::Assert),
74	UniCase::ascii("AT") => TokenKind::Keyword(Keyword::At),
75	UniCase::ascii("AUTHENTICATE") => TokenKind::Keyword(Keyword::Authenticate),
76	UniCase::ascii("AUTO") => TokenKind::Keyword(Keyword::Auto),
77	UniCase::ascii("BEARER") => TokenKind::Keyword(Keyword::Bearer),
78	UniCase::ascii("BEFORE") => TokenKind::Keyword(Keyword::Before),
79	UniCase::ascii("BEGIN") => TokenKind::Keyword(Keyword::Begin),
80	UniCase::ascii("BLANK") => TokenKind::Keyword(Keyword::Blank),
81	UniCase::ascii("BM25") => TokenKind::Keyword(Keyword::Bm25),
82	UniCase::ascii("BREAK") => TokenKind::Keyword(Keyword::Break),
83	UniCase::ascii("BY") => TokenKind::Keyword(Keyword::By),
84	UniCase::ascii("CAMEL") => TokenKind::Keyword(Keyword::Camel),
85	UniCase::ascii("CANCEL") => TokenKind::Keyword(Keyword::Cancel),
86	UniCase::ascii("CASCADE") => TokenKind::Keyword(Keyword::Cascade),
87	UniCase::ascii("CHANGEFEED") => TokenKind::Keyword(Keyword::ChangeFeed),
88	UniCase::ascii("CHANGES") => TokenKind::Keyword(Keyword::Changes),
89	UniCase::ascii("CAPACITY") => TokenKind::Keyword(Keyword::Capacity),
90	UniCase::ascii("CLASS") => TokenKind::Keyword(Keyword::Class),
91	UniCase::ascii("COMMENT") => TokenKind::Keyword(Keyword::Comment),
92	UniCase::ascii("COMMIT") => TokenKind::Keyword(Keyword::Commit),
93	UniCase::ascii("CONCURRENTLY") => TokenKind::Keyword(Keyword::Concurrently),
94	UniCase::ascii("CONFIG") => TokenKind::Keyword(Keyword::Config),
95	UniCase::ascii("CONTENT") => TokenKind::Keyword(Keyword::Content),
96	UniCase::ascii("CONTINUE") => TokenKind::Keyword(Keyword::Continue),
97	UniCase::ascii("CREATE") => TokenKind::Keyword(Keyword::Create),
98	UniCase::ascii("DATABASE") => TokenKind::Keyword(Keyword::Database),
99	UniCase::ascii("DB") => TokenKind::Keyword(Keyword::Database),
100	UniCase::ascii("DEFAULT") => TokenKind::Keyword(Keyword::Default),
101	UniCase::ascii("DEFINE") => TokenKind::Keyword(Keyword::Define),
102	UniCase::ascii("DELETE") => TokenKind::Keyword(Keyword::Delete),
103	UniCase::ascii("DESCENDING") => TokenKind::Keyword(Keyword::Descending),
104	UniCase::ascii("DESC") => TokenKind::Keyword(Keyword::Descending),
105	UniCase::ascii("DIFF") => TokenKind::Keyword(Keyword::Diff),
106	UniCase::ascii("DIMENSION") => TokenKind::Keyword(Keyword::Dimension),
107	UniCase::ascii("DISTANCE") => TokenKind::Keyword(Keyword::Distance),
108	UniCase::ascii("DIST") => TokenKind::Keyword(Keyword::Distance),
109	UniCase::ascii("DOC_IDS_CACHE") => TokenKind::Keyword(Keyword::DocIdsCache),
110	UniCase::ascii("DOC_IDS_ORDER") => TokenKind::Keyword(Keyword::DocIdsOrder),
111	UniCase::ascii("DOC_LENGTHS_CACHE") => TokenKind::Keyword(Keyword::DocLengthsCache),
112	UniCase::ascii("DOC_LENGTHS_ORDER") => TokenKind::Keyword(Keyword::DocLengthsOrder),
113	UniCase::ascii("DROP") => TokenKind::Keyword(Keyword::Drop),
114	UniCase::ascii("DUPLICATE") => TokenKind::Keyword(Keyword::Duplicate),
115	UniCase::ascii("EDGENGRAM") => TokenKind::Keyword(Keyword::Edgengram),
116	UniCase::ascii("EFC") => TokenKind::Keyword(Keyword::Efc),
117	UniCase::ascii("EVENT") => TokenKind::Keyword(Keyword::Event),
118	UniCase::ascii("ELSE") => TokenKind::Keyword(Keyword::Else),
119	UniCase::ascii("END") => TokenKind::Keyword(Keyword::End),
120	UniCase::ascii("ENFORCED") => TokenKind::Keyword(Keyword::Enforced),
121	UniCase::ascii("EXCLUDE") => TokenKind::Keyword(Keyword::Exclude),
122	UniCase::ascii("EXISTS") => TokenKind::Keyword(Keyword::Exists),
123	UniCase::ascii("EXPIRED") => TokenKind::Keyword(Keyword::Expired),
124	UniCase::ascii("EXPLAIN") => TokenKind::Keyword(Keyword::Explain),
125	UniCase::ascii("EXPUNGE") => TokenKind::Keyword(Keyword::Expunge),
126	UniCase::ascii("EXTEND_CANDIDATES") => TokenKind::Keyword(Keyword::ExtendCandidates),
127	UniCase::ascii("false") => TokenKind::Keyword(Keyword::False),
128	UniCase::ascii("FETCH") => TokenKind::Keyword(Keyword::Fetch),
129	UniCase::ascii("FIELD") => TokenKind::Keyword(Keyword::Field),
130	UniCase::ascii("FIELDS") => TokenKind::Keyword(Keyword::Fields),
131	UniCase::ascii("COLUMNS") => TokenKind::Keyword(Keyword::Fields),
132	UniCase::ascii("FILTERS") => TokenKind::Keyword(Keyword::Filters),
133	UniCase::ascii("FLEXIBLE") => TokenKind::Keyword(Keyword::Flexible),
134	UniCase::ascii("FLEXI") => TokenKind::Keyword(Keyword::Flexible),
135	UniCase::ascii("FLEX") => TokenKind::Keyword(Keyword::Flexible),
136	UniCase::ascii("FOR") => TokenKind::Keyword(Keyword::For),
137	UniCase::ascii("FROM") => TokenKind::Keyword(Keyword::From),
138	UniCase::ascii("FULL") => TokenKind::Keyword(Keyword::Full),
139	UniCase::ascii("FUNCTION") => TokenKind::Keyword(Keyword::Function),
140	UniCase::ascii("FUNCTIONS") => TokenKind::Keyword(Keyword::Functions),
141	UniCase::ascii("GRANT") => TokenKind::Keyword(Keyword::Grant),
142	UniCase::ascii("GRAPHQL") => TokenKind::Keyword(Keyword::Graphql),
143	UniCase::ascii("GROUP") => TokenKind::Keyword(Keyword::Group),
144	UniCase::ascii("HEADERS") => TokenKind::Keyword(Keyword::Headers),
145	UniCase::ascii("HIGHLIGHTS") => TokenKind::Keyword(Keyword::Highlights),
146	UniCase::ascii("HNSW") => TokenKind::Keyword(Keyword::Hnsw),
147	UniCase::ascii("IGNORE") => TokenKind::Keyword(Keyword::Ignore),
148	UniCase::ascii("INCLUDE") => TokenKind::Keyword(Keyword::Include),
149	UniCase::ascii("INDEX") => TokenKind::Keyword(Keyword::Index),
150	UniCase::ascii("INFO") => TokenKind::Keyword(Keyword::Info),
151	UniCase::ascii("INSERT") => TokenKind::Keyword(Keyword::Insert),
152	UniCase::ascii("INTO") => TokenKind::Keyword(Keyword::Into),
153	UniCase::ascii("IF") => TokenKind::Keyword(Keyword::If),
154	UniCase::ascii("IS") => TokenKind::Keyword(Keyword::Is),
155	UniCase::ascii("ISSUER") => TokenKind::Keyword(Keyword::Issuer),
156	UniCase::ascii("JWT") => TokenKind::Keyword(Keyword::Jwt),
157	UniCase::ascii("JWKS") => TokenKind::Keyword(Keyword::Jwks),
158	UniCase::ascii("KEY") => TokenKind::Keyword(Keyword::Key),
159	UniCase::ascii("KEEP_PRUNED_CONNECTIONS") => TokenKind::Keyword(Keyword::KeepPrunedConnections),
160	UniCase::ascii("KILL") => TokenKind::Keyword(Keyword::Kill),
161	UniCase::ascii("LET") => TokenKind::Keyword(Keyword::Let),
162	UniCase::ascii("LIMIT") => TokenKind::Keyword(Keyword::Limit),
163	UniCase::ascii("LIVE") => TokenKind::Keyword(Keyword::Live),
164	UniCase::ascii("LOWERCASE") => TokenKind::Keyword(Keyword::Lowercase),
165	UniCase::ascii("LM") => TokenKind::Keyword(Keyword::Lm),
166	UniCase::ascii("M") => TokenKind::Keyword(Keyword::M),
167	UniCase::ascii("M0") => TokenKind::Keyword(Keyword::M0),
168	UniCase::ascii("MAPPER") => TokenKind::Keyword(Keyword::Mapper),
169	UniCase::ascii("MIDDLEWARE") => TokenKind::Keyword(Keyword::Middleware),
170	UniCase::ascii("ML") => TokenKind::Keyword(Keyword::ML),
171	UniCase::ascii("MERGE") => TokenKind::Keyword(Keyword::Merge),
172	UniCase::ascii("MODEL") => TokenKind::Keyword(Keyword::Model),
173	UniCase::ascii("MTREE") => TokenKind::Keyword(Keyword::MTree),
174	UniCase::ascii("MTREE_CACHE") => TokenKind::Keyword(Keyword::MTreeCache),
175	UniCase::ascii("NAMESPACE") => TokenKind::Keyword(Keyword::Namespace),
176	UniCase::ascii("NS") => TokenKind::Keyword(Keyword::Namespace),
177	UniCase::ascii("NGRAM") => TokenKind::Keyword(Keyword::Ngram),
178	UniCase::ascii("NO") => TokenKind::Keyword(Keyword::No),
179	UniCase::ascii("NOINDEX") => TokenKind::Keyword(Keyword::NoIndex),
180	UniCase::ascii("NONE") => TokenKind::Keyword(Keyword::None),
181	UniCase::ascii("NULL") => TokenKind::Keyword(Keyword::Null),
182	UniCase::ascii("NUMERIC") => TokenKind::Keyword(Keyword::Numeric),
183	UniCase::ascii("OMIT") => TokenKind::Keyword(Keyword::Omit),
184	UniCase::ascii("ON") => TokenKind::Keyword(Keyword::On),
185	UniCase::ascii("ONLY") => TokenKind::Keyword(Keyword::Only),
186	UniCase::ascii("OPTION") => TokenKind::Keyword(Keyword::Option),
187	UniCase::ascii("ORDER") => TokenKind::Keyword(Keyword::Order),
188	UniCase::ascii("ORIGINAL") => TokenKind::Keyword(Keyword::Original),
189	UniCase::ascii("OVERWRITE") => TokenKind::Keyword(Keyword::Overwrite),
190	UniCase::ascii("PARALLEL") => TokenKind::Keyword(Keyword::Parallel),
191	UniCase::ascii("PARAM") => TokenKind::Keyword(Keyword::Param),
192	UniCase::ascii("PASSHASH") => TokenKind::Keyword(Keyword::Passhash),
193	UniCase::ascii("PASSWORD") => TokenKind::Keyword(Keyword::Password),
194	UniCase::ascii("PATCH") => TokenKind::Keyword(Keyword::Patch),
195	UniCase::ascii("PERMISSIONS") => TokenKind::Keyword(Keyword::Permissions),
196	UniCase::ascii("POSTINGS_CACHE") => TokenKind::Keyword(Keyword::PostingsCache),
197	UniCase::ascii("POSTINGS_ORDER") => TokenKind::Keyword(Keyword::PostingsOrder),
198	UniCase::ascii("PUNCT") => TokenKind::Keyword(Keyword::Punct),
199	UniCase::ascii("PURGE") => TokenKind::Keyword(Keyword::Purge),
200	UniCase::ascii("RANGE") => TokenKind::Keyword(Keyword::Range),
201	UniCase::ascii("READONLY") => TokenKind::Keyword(Keyword::Readonly),
202	UniCase::ascii("REJECT") => TokenKind::Keyword(Keyword::Reject),
203	UniCase::ascii("RELATE") => TokenKind::Keyword(Keyword::Relate),
204	UniCase::ascii("RELATION") => TokenKind::Keyword(Keyword::Relation),
205	UniCase::ascii("REBUILD") => TokenKind::Keyword(Keyword::Rebuild),
206	UniCase::ascii("REFERENCE") => TokenKind::Keyword(Keyword::Reference),
207	UniCase::ascii("REFRESH") => TokenKind::Keyword(Keyword::Refresh),
208	UniCase::ascii("REMOVE") => TokenKind::Keyword(Keyword::Remove),
209	UniCase::ascii("REPLACE") => TokenKind::Keyword(Keyword::Replace),
210	UniCase::ascii("RETURN") => TokenKind::Keyword(Keyword::Return),
211	UniCase::ascii("REVOKE") => TokenKind::Keyword(Keyword::Revoke),
212	UniCase::ascii("REVOKED") => TokenKind::Keyword(Keyword::Revoked),
213	UniCase::ascii("ROLES") => TokenKind::Keyword(Keyword::Roles),
214	UniCase::ascii("ROOT") => TokenKind::Keyword(Keyword::Root),
215	UniCase::ascii("KV") => TokenKind::Keyword(Keyword::Root),
216	UniCase::ascii("SCHEMAFULL") => TokenKind::Keyword(Keyword::Schemafull),
217	UniCase::ascii("SCHEMAFUL") => TokenKind::Keyword(Keyword::Schemafull),
218	UniCase::ascii("SCHEMALESS") => TokenKind::Keyword(Keyword::Schemaless),
219	UniCase::ascii("SCOPE") => TokenKind::Keyword(Keyword::Scope),
220	UniCase::ascii("SC") => TokenKind::Keyword(Keyword::Scope),
221	UniCase::ascii("SEARCH") => TokenKind::Keyword(Keyword::Search),
222	UniCase::ascii("SELECT") => TokenKind::Keyword(Keyword::Select),
223	UniCase::ascii("SESSION") => TokenKind::Keyword(Keyword::Session),
224	UniCase::ascii("SET") => TokenKind::Keyword(Keyword::Set),
225	UniCase::ascii("SHOW") => TokenKind::Keyword(Keyword::Show),
226	UniCase::ascii("SIGNIN") => TokenKind::Keyword(Keyword::Signin),
227	UniCase::ascii("SIGNUP") => TokenKind::Keyword(Keyword::Signup),
228	UniCase::ascii("SINCE") => TokenKind::Keyword(Keyword::Since),
229	UniCase::ascii("SLEEP") => TokenKind::Keyword(Keyword::Sleep),
230	UniCase::ascii("SNOWBALL") => TokenKind::Keyword(Keyword::Snowball),
231	UniCase::ascii("SPLIT") => TokenKind::Keyword(Keyword::Split),
232	UniCase::ascii("START") => TokenKind::Keyword(Keyword::Start),
233	UniCase::ascii("STRUCTURE") => TokenKind::Keyword(Keyword::Structure),
234	UniCase::ascii("TABLE") => TokenKind::Keyword(Keyword::Table),
235	UniCase::ascii("TABLES") => TokenKind::Keyword(Keyword::Tables),
236	UniCase::ascii("TB") => TokenKind::Keyword(Keyword::Table),
237	UniCase::ascii("TEMPFILES") => TokenKind::Keyword(Keyword::TempFiles),
238	UniCase::ascii("TERMS_CACHE") => TokenKind::Keyword(Keyword::TermsCache),
239	UniCase::ascii("TERMS_ORDER") => TokenKind::Keyword(Keyword::TermsOrder),
240	UniCase::ascii("THEN") => TokenKind::Keyword(Keyword::Then),
241	UniCase::ascii("THROW") => TokenKind::Keyword(Keyword::Throw),
242	UniCase::ascii("TIMEOUT") => TokenKind::Keyword(Keyword::Timeout),
243	UniCase::ascii("TO") => TokenKind::Keyword(Keyword::To),
244	UniCase::ascii("TOKENIZERS") => TokenKind::Keyword(Keyword::Tokenizers),
245	UniCase::ascii("TOKEN") => TokenKind::Keyword(Keyword::Token),
246	UniCase::ascii("TRANSACTION") => TokenKind::Keyword(Keyword::Transaction),
247	UniCase::ascii("true") => TokenKind::Keyword(Keyword::True),
248	UniCase::ascii("TYPE") => TokenKind::Keyword(Keyword::Type),
249	UniCase::ascii("UNIQUE") => TokenKind::Keyword(Keyword::Unique),
250	UniCase::ascii("UNSET") => TokenKind::Keyword(Keyword::Unset),
251	UniCase::ascii("UPDATE") => TokenKind::Keyword(Keyword::Update),
252	UniCase::ascii("UPSERT") => TokenKind::Keyword(Keyword::Upsert),
253	UniCase::ascii("UPPERCASE") => TokenKind::Keyword(Keyword::Uppercase),
254	UniCase::ascii("URL") => TokenKind::Keyword(Keyword::Url),
255	UniCase::ascii("USE") => TokenKind::Keyword(Keyword::Use),
256	UniCase::ascii("USER") => TokenKind::Keyword(Keyword::User),
257	UniCase::ascii("VALUE") => TokenKind::Keyword(Keyword::Value),
258	UniCase::ascii("VALUES") => TokenKind::Keyword(Keyword::Values),
259	UniCase::ascii("VERSION") => TokenKind::Keyword(Keyword::Version),
260	UniCase::ascii("VS") => TokenKind::Keyword(Keyword::Vs),
261	UniCase::ascii("WHEN") => TokenKind::Keyword(Keyword::When),
262	UniCase::ascii("WHERE") => TokenKind::Keyword(Keyword::Where),
263	UniCase::ascii("WITH") => TokenKind::Keyword(Keyword::With),
264	UniCase::ascii("ALLINSIDE") => TokenKind::Keyword(Keyword::AllInside),
265	UniCase::ascii("ANDKW") => TokenKind::Keyword(Keyword::AndKw),
266	UniCase::ascii("ANYINSIDE") => TokenKind::Keyword(Keyword::AnyInside),
267	UniCase::ascii("INSIDE") => TokenKind::Keyword(Keyword::Inside),
268	UniCase::ascii("INTERSECTS") => TokenKind::Keyword(Keyword::Intersects),
269	UniCase::ascii("NONEINSIDE") => TokenKind::Keyword(Keyword::NoneInside),
270	UniCase::ascii("NOTINSIDE") => TokenKind::Keyword(Keyword::NotInside),
271	UniCase::ascii("OR") => TokenKind::Keyword(Keyword::OrKw),
272	UniCase::ascii("OUTSIDE") => TokenKind::Keyword(Keyword::Outside),
273	UniCase::ascii("NOT") => TokenKind::Keyword(Keyword::Not),
274	UniCase::ascii("AND") => TokenKind::Keyword(Keyword::And),
275	UniCase::ascii("COLLATE") => TokenKind::Keyword(Keyword::Collate),
276	UniCase::ascii("CONTAINSALL") => TokenKind::Keyword(Keyword::ContainsAll),
277	UniCase::ascii("CONTAINSANY") => TokenKind::Keyword(Keyword::ContainsAny),
278	UniCase::ascii("CONTAINSNONE") => TokenKind::Keyword(Keyword::ContainsNone),
279	UniCase::ascii("CONTAINSNOT") => TokenKind::Keyword(Keyword::ContainsNot),
280	UniCase::ascii("CONTAINS") => TokenKind::Keyword(Keyword::Contains),
281	UniCase::ascii("IN") => TokenKind::Keyword(Keyword::In),
282	UniCase::ascii("OUT") => TokenKind::Keyword(Keyword::Out),
283	UniCase::ascii("NORMAL") => TokenKind::Keyword(Keyword::Normal),
284
285	// Types
286	UniCase::ascii("ANY") => TokenKind::Keyword(Keyword::Any),
287	UniCase::ascii("ARRAY") => TokenKind::Keyword(Keyword::Array),
288	UniCase::ascii("GEOMETRY") => TokenKind::Keyword(Keyword::Geometry),
289	UniCase::ascii("RECORD") => TokenKind::Keyword(Keyword::Record),
290	UniCase::ascii("FUTURE") => TokenKind::Keyword(Keyword::Future),
291	UniCase::ascii("BOOL") => TokenKind::Keyword(Keyword::Bool),
292	UniCase::ascii("BYTES") => TokenKind::Keyword(Keyword::Bytes),
293	UniCase::ascii("DATETIME") => TokenKind::Keyword(Keyword::Datetime),
294	UniCase::ascii("DECIMAL") => TokenKind::Keyword(Keyword::Decimal),
295	UniCase::ascii("DURATION") => TokenKind::Keyword(Keyword::Duration),
296	UniCase::ascii("FLOAT") => TokenKind::Keyword(Keyword::Float),
297	UniCase::ascii("fn") => TokenKind::Keyword(Keyword::Fn),
298	UniCase::ascii("INT") => TokenKind::Keyword(Keyword::Int),
299	UniCase::ascii("NUMBER") => TokenKind::Keyword(Keyword::Number),
300	UniCase::ascii("OBJECT") => TokenKind::Keyword(Keyword::Object),
301	UniCase::ascii("STRING") => TokenKind::Keyword(Keyword::String),
302	UniCase::ascii("UUID") => TokenKind::Keyword(Keyword::Uuid),
303	UniCase::ascii("ULID") => TokenKind::Keyword(Keyword::Ulid),
304	UniCase::ascii("RAND") => TokenKind::Keyword(Keyword::Rand),
305	UniCase::ascii("REFERENCES") => TokenKind::Keyword(Keyword::References),
306	UniCase::ascii("FEATURE") => TokenKind::Keyword(Keyword::Feature),
307	UniCase::ascii("LINE") => TokenKind::Keyword(Keyword::Line),
308	UniCase::ascii("POINT") => TokenKind::Keyword(Keyword::Point),
309	UniCase::ascii("POLYGON") => TokenKind::Keyword(Keyword::Polygon),
310	UniCase::ascii("MULTIPOINT") => TokenKind::Keyword(Keyword::MultiPoint),
311	UniCase::ascii("MULTILINE") => TokenKind::Keyword(Keyword::MultiLine),
312	UniCase::ascii("MULTIPOLYGON") => TokenKind::Keyword(Keyword::MultiPolygon),
313	UniCase::ascii("COLLECTION") => TokenKind::Keyword(Keyword::Collection),
314
315	// Languages
316	UniCase::ascii("ARABIC") => TokenKind::Language(Language::Arabic),
317	UniCase::ascii("ARA") => TokenKind::Language(Language::Arabic),
318	UniCase::ascii("AR") => TokenKind::Language(Language::Arabic),
319	UniCase::ascii("DANISH") => TokenKind::Language(Language::Danish),
320	UniCase::ascii("DAN") => TokenKind::Language(Language::Danish),
321	UniCase::ascii("DA") => TokenKind::Language(Language::Danish),
322	UniCase::ascii("DUTCH") => TokenKind::Language(Language::Dutch),
323	UniCase::ascii("NLD") => TokenKind::Language(Language::Dutch),
324	UniCase::ascii("NL") => TokenKind::Language(Language::Dutch),
325	UniCase::ascii("ENGLISH") => TokenKind::Language(Language::English),
326	UniCase::ascii("ENG") => TokenKind::Language(Language::English),
327	UniCase::ascii("EN") => TokenKind::Language(Language::English),
328	UniCase::ascii("FRENCH") => TokenKind::Language(Language::French),
329	UniCase::ascii("FRA") => TokenKind::Language(Language::French),
330	UniCase::ascii("FR") => TokenKind::Language(Language::French),
331	UniCase::ascii("GERMAN") => TokenKind::Language(Language::German),
332	UniCase::ascii("DEU") => TokenKind::Language(Language::German),
333	UniCase::ascii("DE") => TokenKind::Language(Language::German),
334	UniCase::ascii("GREEK") => TokenKind::Language(Language::Greek),
335	UniCase::ascii("ELL") => TokenKind::Language(Language::Greek),
336	UniCase::ascii("EL") => TokenKind::Language(Language::Greek),
337	UniCase::ascii("HUNGARIAN") => TokenKind::Language(Language::Hungarian),
338	UniCase::ascii("HUN") => TokenKind::Language(Language::Hungarian),
339	UniCase::ascii("HU") => TokenKind::Language(Language::Hungarian),
340	UniCase::ascii("ITALIAN") => TokenKind::Language(Language::Italian),
341	UniCase::ascii("ITA") => TokenKind::Language(Language::Italian),
342	UniCase::ascii("IT") => TokenKind::Language(Language::Italian),
343	UniCase::ascii("NORWEGIAN") => TokenKind::Language(Language::Norwegian),
344	UniCase::ascii("NOR") => TokenKind::Language(Language::Norwegian),
345	UniCase::ascii("PORTUGUESE") => TokenKind::Language(Language::Portuguese),
346	UniCase::ascii("POR") => TokenKind::Language(Language::Portuguese),
347	UniCase::ascii("PT") => TokenKind::Language(Language::Portuguese),
348	UniCase::ascii("ROMANIAN") => TokenKind::Language(Language::Romanian),
349	UniCase::ascii("RON") => TokenKind::Language(Language::Romanian),
350	UniCase::ascii("RO") => TokenKind::Language(Language::Romanian),
351	UniCase::ascii("RUSSIAN") => TokenKind::Language(Language::Russian),
352	UniCase::ascii("RUS") => TokenKind::Language(Language::Russian),
353	UniCase::ascii("RU") => TokenKind::Language(Language::Russian),
354	UniCase::ascii("SPANISH") => TokenKind::Language(Language::Spanish),
355	UniCase::ascii("SPA") => TokenKind::Language(Language::Spanish),
356	UniCase::ascii("ES") => TokenKind::Language(Language::Spanish),
357	UniCase::ascii("SWEDISH") => TokenKind::Language(Language::Swedish),
358	UniCase::ascii("SWE") => TokenKind::Language(Language::Swedish),
359	UniCase::ascii("SV") => TokenKind::Language(Language::Swedish),
360	UniCase::ascii("TAMIL") => TokenKind::Language(Language::Tamil),
361	UniCase::ascii("TAM") => TokenKind::Language(Language::Tamil),
362	UniCase::ascii("TA") => TokenKind::Language(Language::Tamil),
363	UniCase::ascii("TURKISH") => TokenKind::Language(Language::Turkish),
364	UniCase::ascii("TUR") => TokenKind::Language(Language::Turkish),
365	UniCase::ascii("TR") => TokenKind::Language(Language::Turkish),
366
367	// Algorithms
368	UniCase::ascii("EDDSA") => TokenKind::Algorithm(Algorithm::EdDSA),
369	UniCase::ascii("ES256") => TokenKind::Algorithm(Algorithm::Es256),
370	UniCase::ascii("ES384") => TokenKind::Algorithm(Algorithm::Es384),
371	UniCase::ascii("ES512") => TokenKind::Algorithm(Algorithm::Es512),
372	UniCase::ascii("HS256") => TokenKind::Algorithm(Algorithm::Hs256),
373	UniCase::ascii("HS384") => TokenKind::Algorithm(Algorithm::Hs384),
374	UniCase::ascii("HS512") => TokenKind::Algorithm(Algorithm::Hs512),
375	UniCase::ascii("PS256") => TokenKind::Algorithm(Algorithm::Ps256),
376	UniCase::ascii("PS384") => TokenKind::Algorithm(Algorithm::Ps384),
377	UniCase::ascii("PS512") => TokenKind::Algorithm(Algorithm::Ps512),
378	UniCase::ascii("RS256") => TokenKind::Algorithm(Algorithm::Rs256),
379	UniCase::ascii("RS384") => TokenKind::Algorithm(Algorithm::Rs384),
380	UniCase::ascii("RS512") => TokenKind::Algorithm(Algorithm::Rs512),
381
382	// Distance
383	UniCase::ascii("CHEBYSHEV") => TokenKind::Distance(DistanceKind::Chebyshev),
384	UniCase::ascii("COSINE") => TokenKind::Distance(DistanceKind::Cosine),
385	UniCase::ascii("EUCLIDEAN") => TokenKind::Distance(DistanceKind::Euclidean),
386	UniCase::ascii("JACCARD") => TokenKind::Distance(DistanceKind::Jaccard),
387	UniCase::ascii("HAMMING") => TokenKind::Distance(DistanceKind::Hamming),
388	UniCase::ascii("MANHATTAN") => TokenKind::Distance(DistanceKind::Manhattan),
389	UniCase::ascii("MINKOWSKI") => TokenKind::Distance(DistanceKind::Minkowski),
390	UniCase::ascii("PEARSON") => TokenKind::Distance(DistanceKind::Pearson),
391
392	// VectorTypes
393	UniCase::ascii("F64") => TokenKind::VectorType(VectorTypeKind::F64),
394	UniCase::ascii("F32") => TokenKind::VectorType(VectorTypeKind::F32),
395	UniCase::ascii("I64") => TokenKind::VectorType(VectorTypeKind::I64),
396	UniCase::ascii("I32") => TokenKind::VectorType(VectorTypeKind::I32),
397	UniCase::ascii("I16") => TokenKind::VectorType(VectorTypeKind::I16),
398
399	// HTTP methods
400	UniCase::ascii("GET") => TokenKind::Keyword(Keyword::Get),
401	UniCase::ascii("POST") => TokenKind::Keyword(Keyword::Post),
402	UniCase::ascii("PUT") => TokenKind::Keyword(Keyword::Put),
403	UniCase::ascii("TRACE") => TokenKind::Keyword(Keyword::Trace)
404};