|
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