|
12 | 12 | /// 3) a `RESERVED_FOR_TABLE_ALIAS` array with keywords reserved in a
|
13 | 13 | /// "table alias" context.
|
14 | 14 |
|
15 |
| -macro_rules! keyword { |
16 |
| - ($($ident:ident),*) => { |
17 |
| - $(pub const $ident: &'static str = stringify!($ident);)* |
18 |
| - } |
| 15 | +/// Defines a string constant for a single keyword: `kw_def!(SELECT);` |
| 16 | +/// expands to `pub const SELECT = "SELECT";` |
| 17 | +macro_rules! kw_def { |
| 18 | + ($ident:ident = $string_keyword:expr) => { |
| 19 | + pub const $ident: &'static str = $string_keyword; |
| 20 | + }; |
| 21 | + ($ident:ident) => { |
| 22 | + kw_def!($ident = stringify!($ident)); |
| 23 | + }; |
19 | 24 | }
|
20 | 25 |
|
21 |
| -keyword!( |
22 |
| - ABS, |
23 |
| - ADD, |
24 |
| - ASC, |
25 |
| - ALL, |
26 |
| - ALLOCATE, |
27 |
| - ALTER, |
28 |
| - AND, |
29 |
| - ANY, |
30 |
| - ARE, |
31 |
| - ARRAY, |
32 |
| - ARRAY_AGG, |
33 |
| - ARRAY_MAX_CARDINALITY, |
34 |
| - AS, |
35 |
| - ASENSITIVE, |
36 |
| - ASYMMETRIC, |
37 |
| - AT, |
38 |
| - ATOMIC, |
39 |
| - AUTHORIZATION, |
40 |
| - AVG, |
41 |
| - BEGIN, |
42 |
| - BEGIN_FRAME, |
43 |
| - BEGIN_PARTITION, |
44 |
| - BETWEEN, |
45 |
| - BIGINT, |
46 |
| - BINARY, |
47 |
| - BLOB, |
48 |
| - BOOLEAN, |
49 |
| - BOTH, |
50 |
| - BY, |
51 |
| - BYTEA, |
52 |
| - CALL, |
53 |
| - CALLED, |
54 |
| - CARDINALITY, |
55 |
| - CASCADED, |
56 |
| - CASE, |
57 |
| - CAST, |
58 |
| - CEIL, |
59 |
| - CEILING, |
60 |
| - CHAR, |
61 |
| - CHAR_LENGTH, |
62 |
| - CHARACTER, |
63 |
| - CHARACTER_LENGTH, |
64 |
| - CHECK, |
65 |
| - CLOB, |
66 |
| - CLOSE, |
67 |
| - COALESCE, |
68 |
| - COLLATE, |
69 |
| - COLLECT, |
70 |
| - COLUMN, |
71 |
| - COMMIT, |
72 |
| - CONDITION, |
73 |
| - CONNECT, |
74 |
| - CONSTRAINT, |
75 |
| - CONTAINS, |
76 |
| - CONVERT, |
77 |
| - COPY, |
78 |
| - CORR, |
79 |
| - CORRESPONDING, |
80 |
| - COUNT, |
81 |
| - COVAR_POP, |
82 |
| - COVAR_SAMP, |
83 |
| - CREATE, |
84 |
| - CROSS, |
85 |
| - CSV, |
86 |
| - CUBE, |
87 |
| - CUME_DIST, |
88 |
| - CURRENT, |
89 |
| - CURRENT_CATALOG, |
90 |
| - CURRENT_DATE, |
91 |
| - CURRENT_DEFAULT_TRANSFORM_GROUP, |
92 |
| - CURRENT_PATH, |
93 |
| - CURRENT_ROLE, |
94 |
| - CURRENT_ROW, |
95 |
| - CURRENT_SCHEMA, |
96 |
| - CURRENT_TIME, |
97 |
| - CURRENT_TIMESTAMP, |
98 |
| - CURRENT_TRANSFORM_GROUP_FOR_TYPE, |
99 |
| - CURRENT_USER, |
100 |
| - CURSOR, |
101 |
| - CYCLE, |
102 |
| - DATE, |
103 |
| - DAY, |
104 |
| - DEALLOCATE, |
105 |
| - DEC, |
106 |
| - DECIMAL, |
107 |
| - DECLARE, |
108 |
| - DEFAULT, |
109 |
| - DELETE, |
110 |
| - DENSE_RANK, |
111 |
| - DEREF, |
112 |
| - DESC, |
113 |
| - DESCRIBE, |
114 |
| - DETERMINISTIC, |
115 |
| - DISCONNECT, |
116 |
| - DISTINCT, |
117 |
| - DOUBLE, |
118 |
| - DROP, |
119 |
| - DYNAMIC, |
120 |
| - EACH, |
121 |
| - ELEMENT, |
122 |
| - ELSE, |
123 |
| - END, |
124 |
| - END_FRAME, |
125 |
| - END_PARTITION, |
126 |
| - EQUALS, |
127 |
| - ESCAPE, |
128 |
| - EVERY, |
129 |
| - EXCEPT, |
130 |
| - EXEC, |
131 |
| - EXECUTE, |
132 |
| - EXISTS, |
133 |
| - EXP, |
134 |
| - EXTERNAL, |
135 |
| - EXTRACT, |
136 |
| - FALSE, |
137 |
| - FETCH, |
138 |
| - FILTER, |
139 |
| - FIRST_VALUE, |
140 |
| - FLOAT, |
141 |
| - FLOOR, |
142 |
| - FOLLOWING, |
143 |
| - FOR, |
144 |
| - FOREIGN, |
145 |
| - FRAME_ROW, |
146 |
| - FREE, |
147 |
| - FROM, |
148 |
| - FULL, |
149 |
| - FUNCTION, |
150 |
| - FUSION, |
151 |
| - GET, |
152 |
| - GLOBAL, |
153 |
| - GRANT, |
154 |
| - GROUP, |
155 |
| - GROUPING, |
156 |
| - GROUPS, |
157 |
| - HAVING, |
158 |
| - HEADER, |
159 |
| - HOLD, |
160 |
| - HOUR, |
161 |
| - IDENTITY, |
162 |
| - IN, |
163 |
| - INDICATOR, |
164 |
| - INNER, |
165 |
| - INOUT, |
166 |
| - INSENSITIVE, |
167 |
| - INSERT, |
168 |
| - INT, |
169 |
| - INTEGER, |
170 |
| - INTERSECT, |
171 |
| - INTERSECTION, |
172 |
| - INTERVAL, |
173 |
| - INTO, |
174 |
| - IS, |
175 |
| - JOIN, |
176 |
| - KEY, |
177 |
| - LAG, |
178 |
| - LANGUAGE, |
179 |
| - LARGE, |
180 |
| - LAST_VALUE, |
181 |
| - LATERAL, |
182 |
| - LEAD, |
183 |
| - LEADING, |
184 |
| - LEFT, |
185 |
| - LIKE, |
186 |
| - LIKE_REGEX, |
187 |
| - LIMIT, |
188 |
| - LN, |
189 |
| - LOCAL, |
190 |
| - LOCALTIME, |
191 |
| - LOCALTIMESTAMP, |
192 |
| - LOCATION, |
193 |
| - LOWER, |
194 |
| - MATCH, |
195 |
| - MATERIALIZED, |
196 |
| - MAX, |
197 |
| - MEMBER, |
198 |
| - MERGE, |
199 |
| - METHOD, |
200 |
| - MIN, |
201 |
| - MINUTE, |
202 |
| - MOD, |
203 |
| - MODIFIES, |
204 |
| - MODULE, |
205 |
| - MONTH, |
206 |
| - MULTISET, |
207 |
| - NATIONAL, |
208 |
| - NATURAL, |
209 |
| - NCHAR, |
210 |
| - NCLOB, |
211 |
| - NEW, |
212 |
| - NO, |
213 |
| - NONE, |
214 |
| - NORMALIZE, |
215 |
| - NOT, |
216 |
| - NTH_VALUE, |
217 |
| - NTILE, |
218 |
| - NULL, |
219 |
| - NULLIF, |
220 |
| - NUMERIC, |
221 |
| - OBJECT, |
222 |
| - OCTET_LENGTH, |
223 |
| - OCCURRENCES_REGEX, |
224 |
| - OF, |
225 |
| - OFFSET, |
226 |
| - OLD, |
227 |
| - ON, |
228 |
| - ONLY, |
229 |
| - OPEN, |
230 |
| - OR, |
231 |
| - ORDER, |
232 |
| - OUT, |
233 |
| - OUTER, |
234 |
| - OVER, |
235 |
| - OVERLAPS, |
236 |
| - OVERLAY, |
237 |
| - PARAMETER, |
238 |
| - PARTITION, |
239 |
| - PARQUET, |
240 |
| - PERCENT, |
241 |
| - PERCENT_RANK, |
242 |
| - PERCENTILE_CONT, |
243 |
| - PERCENTILE_DISC, |
244 |
| - PERIOD, |
245 |
| - PORTION, |
246 |
| - POSITION, |
247 |
| - POSITION_REGEX, |
248 |
| - POWER, |
249 |
| - PRECEDES, |
250 |
| - PRECEDING, |
251 |
| - PRECISION, |
252 |
| - PREPARE, |
253 |
| - PRIMARY, |
254 |
| - PROCEDURE, |
255 |
| - RANGE, |
256 |
| - RANK, |
257 |
| - READS, |
258 |
| - REAL, |
259 |
| - RECURSIVE, |
260 |
| - REF, |
261 |
| - REFERENCES, |
262 |
| - REFERENCING, |
263 |
| - REGCLASS, |
264 |
| - REGR_AVGX, |
265 |
| - REGR_AVGY, |
266 |
| - REGR_COUNT, |
267 |
| - REGR_INTERCEPT, |
268 |
| - REGR_R2, |
269 |
| - REGR_SLOPE, |
270 |
| - REGR_SXX, |
271 |
| - REGR_SXY, |
272 |
| - REGR_SYY, |
273 |
| - RELEASE, |
274 |
| - RESULT, |
275 |
| - RETURN, |
276 |
| - RETURNS, |
277 |
| - REVOKE, |
278 |
| - RIGHT, |
279 |
| - ROLLBACK, |
280 |
| - ROLLUP, |
281 |
| - ROW, |
282 |
| - ROW_NUMBER, |
283 |
| - ROWS, |
284 |
| - SAVEPOINT, |
285 |
| - SCOPE, |
286 |
| - SCROLL, |
287 |
| - SEARCH, |
288 |
| - SECOND, |
289 |
| - SELECT, |
290 |
| - SENSITIVE, |
291 |
| - SESSION_USER, |
292 |
| - SET, |
293 |
| - SIMILAR, |
294 |
| - SMALLINT, |
295 |
| - SOME, |
296 |
| - SPECIFIC, |
297 |
| - SPECIFICTYPE, |
298 |
| - SQL, |
299 |
| - SQLEXCEPTION, |
300 |
| - SQLSTATE, |
301 |
| - SQLWARNING, |
302 |
| - SQRT, |
303 |
| - START, |
304 |
| - STATIC, |
305 |
| - STDDEV_POP, |
306 |
| - STDDEV_SAMP, |
307 |
| - STDIN, |
308 |
| - STORED, |
309 |
| - SUBMULTISET, |
310 |
| - SUBSTRING, |
311 |
| - SUBSTRING_REGEX, |
312 |
| - SUCCEEDS, |
313 |
| - SUM, |
314 |
| - SYMMETRIC, |
315 |
| - SYSTEM, |
316 |
| - SYSTEM_TIME, |
317 |
| - SYSTEM_USER, |
318 |
| - TABLE, |
319 |
| - TABLESAMPLE, |
320 |
| - TEXT, |
321 |
| - THEN, |
322 |
| - TIME, |
323 |
| - TIMESTAMP, |
324 |
| - TIMEZONE_HOUR, |
325 |
| - TIMEZONE_MINUTE, |
326 |
| - TO, |
327 |
| - TRAILING, |
328 |
| - TRANSLATE, |
329 |
| - TRANSLATE_REGEX, |
330 |
| - TRANSLATION, |
331 |
| - TREAT, |
332 |
| - TRIGGER, |
333 |
| - TRUNCATE, |
334 |
| - TRIM, |
335 |
| - TRIM_ARRAY, |
336 |
| - TRUE, |
337 |
| - UESCAPE, |
338 |
| - UNBOUNDED, |
339 |
| - UNION, |
340 |
| - UNIQUE, |
341 |
| - UNKNOWN, |
342 |
| - UNNEST, |
343 |
| - UPDATE, |
344 |
| - UPPER, |
345 |
| - USER, |
346 |
| - USING, |
347 |
| - UUID, |
348 |
| - VALUE, |
349 |
| - VALUES, |
350 |
| - VALUE_OF, |
351 |
| - VAR_POP, |
352 |
| - VAR_SAMP, |
353 |
| - VARBINARY, |
354 |
| - VARCHAR, |
355 |
| - VARYING, |
356 |
| - VERSIONING, |
357 |
| - VIEW, |
358 |
| - WHEN, |
359 |
| - WHENEVER, |
360 |
| - WHERE, |
361 |
| - WIDTH_BUCKET, |
362 |
| - WINDOW, |
363 |
| - WITH, |
364 |
| - WITHIN, |
365 |
| - WITHOUT, |
366 |
| - YEAR, |
367 |
| - ZONE |
368 |
| -); |
| 26 | +/// Expands to a list of `kw_def!()` invocations for each keyword |
| 27 | +/// and defines an ALL_KEYWORDS array of the defined constants. |
| 28 | +macro_rules! define_keywords { |
| 29 | + ($( |
| 30 | + $ident:ident $(= $string_keyword:expr)? |
| 31 | + ),*) => { |
| 32 | + $(kw_def!($ident $(= $string_keyword)?);)* |
369 | 33 |
|
370 |
| -/// special case of keyword where the it is an invalid identifier |
371 |
| -pub const END_EXEC: &str = "END-EXEC"; |
| 34 | + pub const ALL_KEYWORDS: &[&str] = &[ |
| 35 | + $($ident),* |
| 36 | + ]; |
| 37 | + } |
| 38 | +} |
372 | 39 |
|
373 |
| -pub const ALL_KEYWORDS: &[&str] = &[ |
| 40 | +define_keywords!( |
374 | 41 | ABS,
|
375 | 42 | ADD,
|
376 | 43 | ASC,
|
@@ -717,8 +384,8 @@ pub const ALL_KEYWORDS: &[&str] = &[
|
717 | 384 | WITHOUT,
|
718 | 385 | YEAR,
|
719 | 386 | ZONE,
|
720 |
| - END_EXEC, |
721 |
| -]; |
| 387 | + END_EXEC = "END-EXEC" |
| 388 | +); |
722 | 389 |
|
723 | 390 | /// These keywords can't be used as a table alias, so that `FROM table_name alias`
|
724 | 391 | /// can be parsed unambiguously without looking ahead.
|
|
0 commit comments