Skip to content

Commit 43f4c68

Browse files
authored
Revert "Rework keyword/identifier parsing"
1 parent 391c53d commit 43f4c68

File tree

11 files changed

+691
-787
lines changed

11 files changed

+691
-787
lines changed

src/dialect/ansi_sql.rs

Lines changed: 331 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,339 @@
11
use dialect::Dialect;
22

3+
use dialect::keywords::*;
4+
35
pub struct AnsiSqlDialect {}
46

57
impl Dialect for AnsiSqlDialect {
8+
fn keywords(&self) -> Vec<&'static str> {
9+
return vec![
10+
ABS,
11+
ALL,
12+
ALLOCATE,
13+
ALTER,
14+
AND,
15+
ANY,
16+
ARE,
17+
ARRAY,
18+
ARRAY_AGG,
19+
ARRAY_MAX_CARDINALITY,
20+
AS,
21+
ASENSITIVE,
22+
ASYMMETRIC,
23+
AT,
24+
ATOMIC,
25+
AUTHORIZATION,
26+
AVG,
27+
BEGIN,
28+
BEGIN_FRAME,
29+
BEGIN_PARTITION,
30+
BETWEEN,
31+
BIGINT,
32+
BINARY,
33+
BLOB,
34+
BOOLEAN,
35+
BOTH,
36+
BY,
37+
CALL,
38+
CALLED,
39+
CARDINALITY,
40+
CASCADED,
41+
CASE,
42+
CAST,
43+
CEIL,
44+
CEILING,
45+
CHAR,
46+
CHAR_LENGTH,
47+
CHARACTER,
48+
CHARACTER_LENGTH,
49+
CHECK,
50+
CLOB,
51+
CLOSE,
52+
COALESCE,
53+
COLLATE,
54+
COLLECT,
55+
COLUMN,
56+
COMMIT,
57+
CONDITION,
58+
CONNECT,
59+
CONSTRAINT,
60+
CONTAINS,
61+
CONVERT,
62+
CORR,
63+
CORRESPONDING,
64+
COUNT,
65+
COVAR_POP,
66+
COVAR_SAMP,
67+
CREATE,
68+
CROSS,
69+
CUBE,
70+
CUME_DIST,
71+
CURRENT,
72+
CURRENT_CATALOG,
73+
CURRENT_DATE,
74+
CURRENT_DEFAULT_TRANSFORM_GROUP,
75+
CURRENT_PATH,
76+
CURRENT_ROLE,
77+
CURRENT_ROW,
78+
CURRENT_SCHEMA,
79+
CURRENT_TIME,
80+
CURRENT_TIMESTAMP,
81+
CURRENT_TRANSFORM_GROUP_FOR_TYPE,
82+
CURRENT_USER,
83+
CURSOR,
84+
CYCLE,
85+
DATE,
86+
DAY,
87+
DEALLOCATE,
88+
DEC,
89+
DECIMAL,
90+
DECLARE,
91+
DEFAULT,
92+
DELETE,
93+
DENSE_RANK,
94+
DEREF,
95+
DESCRIBE,
96+
DETERMINISTIC,
97+
DISCONNECT,
98+
DISTINCT,
99+
DOUBLE,
100+
DROP,
101+
DYNAMIC,
102+
EACH,
103+
ELEMENT,
104+
ELSE,
105+
END,
106+
END_FRAME,
107+
END_PARTITION,
108+
END_EXEC,
109+
EQUALS,
110+
ESCAPE,
111+
EVERY,
112+
EXCEPT,
113+
EXEC,
114+
EXECUTE,
115+
EXISTS,
116+
EXP,
117+
EXTERNAL,
118+
EXTRACT,
119+
FALSE,
120+
FETCH,
121+
FILTER,
122+
FIRST_VALUE,
123+
FLOAT,
124+
FLOOR,
125+
FOR,
126+
FOREIGN,
127+
FRAME_ROW,
128+
FREE,
129+
FROM,
130+
FULL,
131+
FUNCTION,
132+
FUSION,
133+
GET,
134+
GLOBAL,
135+
GRANT,
136+
GROUP,
137+
GROUPING,
138+
GROUPS,
139+
HAVING,
140+
HOLD,
141+
HOUR,
142+
IDENTITY,
143+
IN,
144+
INDICATOR,
145+
INNER,
146+
INOUT,
147+
INSENSITIVE,
148+
INSERT,
149+
INT,
150+
INTEGER,
151+
INTERSECT,
152+
INTERSECTION,
153+
INTERVAL,
154+
INTO,
155+
IS,
156+
JOIN,
157+
LAG,
158+
LANGUAGE,
159+
LARGE,
160+
LAST_VALUE,
161+
LATERAL,
162+
LEAD,
163+
LEADING,
164+
LEFT,
165+
LIKE,
166+
LIKE_REGEX,
167+
LN,
168+
LOCAL,
169+
LOCALTIME,
170+
LOCALTIMESTAMP,
171+
LOWER,
172+
MATCH,
173+
MAX,
174+
MEMBER,
175+
MERGE,
176+
METHOD,
177+
MIN,
178+
MINUTE,
179+
MOD,
180+
MODIFIES,
181+
MODULE,
182+
MONTH,
183+
MULTISET,
184+
NATIONAL,
185+
NATURAL,
186+
NCHAR,
187+
NCLOB,
188+
NEW,
189+
NO,
190+
NONE,
191+
NORMALIZE,
192+
NOT,
193+
NTH_VALUE,
194+
NTILE,
195+
NULL,
196+
NULLIF,
197+
NUMERIC,
198+
OCTET_LENGTH,
199+
OCCURRENCES_REGEX,
200+
OF,
201+
OFFSET,
202+
OLD,
203+
ON,
204+
ONLY,
205+
OPEN,
206+
OR,
207+
ORDER,
208+
OUT,
209+
OUTER,
210+
OVER,
211+
OVERLAPS,
212+
OVERLAY,
213+
PARAMETER,
214+
PARTITION,
215+
PERCENT,
216+
PERCENT_RANK,
217+
PERCENTILE_CONT,
218+
PERCENTILE_DISC,
219+
PERIOD,
220+
PORTION,
221+
POSITION,
222+
POSITION_REGEX,
223+
POWER,
224+
PRECEDES,
225+
PRECISION,
226+
PREPARE,
227+
PRIMARY,
228+
PROCEDURE,
229+
RANGE,
230+
RANK,
231+
READS,
232+
REAL,
233+
RECURSIVE,
234+
REF,
235+
REFERENCES,
236+
REFERENCING,
237+
REGR_AVGX,
238+
REGR_AVGY,
239+
REGR_COUNT,
240+
REGR_INTERCEPT,
241+
REGR_R2,
242+
REGR_SLOPE,
243+
REGR_SXX,
244+
REGR_SXY,
245+
REGR_SYY,
246+
RELEASE,
247+
RESULT,
248+
RETURN,
249+
RETURNS,
250+
REVOKE,
251+
RIGHT,
252+
ROLLBACK,
253+
ROLLUP,
254+
ROW,
255+
ROW_NUMBER,
256+
ROWS,
257+
SAVEPOINT,
258+
SCOPE,
259+
SCROLL,
260+
SEARCH,
261+
SECOND,
262+
SELECT,
263+
SENSITIVE,
264+
SESSION_USER,
265+
SET,
266+
SIMILAR,
267+
SMALLINT,
268+
SOME,
269+
SPECIFIC,
270+
SPECIFICTYPE,
271+
SQL,
272+
SQLEXCEPTION,
273+
SQLSTATE,
274+
SQLWARNING,
275+
SQRT,
276+
START,
277+
STATIC,
278+
STDDEV_POP,
279+
STDDEV_SAMP,
280+
SUBMULTISET,
281+
SUBSTRING,
282+
SUBSTRING_REGEX,
283+
SUCCEEDS,
284+
SUM,
285+
SYMMETRIC,
286+
SYSTEM,
287+
SYSTEM_TIME,
288+
SYSTEM_USER,
289+
TABLE,
290+
TABLESAMPLE,
291+
THEN,
292+
TIME,
293+
TIMESTAMP,
294+
TIMEZONE_HOUR,
295+
TIMEZONE_MINUTE,
296+
TO,
297+
TRAILING,
298+
TRANSLATE,
299+
TRANSLATE_REGEX,
300+
TRANSLATION,
301+
TREAT,
302+
TRIGGER,
303+
TRUNCATE,
304+
TRIM,
305+
TRIM_ARRAY,
306+
TRUE,
307+
UESCAPE,
308+
UNION,
309+
UNIQUE,
310+
UNKNOWN,
311+
UNNEST,
312+
UPDATE,
313+
UPPER,
314+
USER,
315+
USING,
316+
VALUE,
317+
VALUES,
318+
VALUE_OF,
319+
VAR_POP,
320+
VAR_SAMP,
321+
VARBINARY,
322+
VARCHAR,
323+
VARYING,
324+
VERSIONING,
325+
WHEN,
326+
WHENEVER,
327+
WHERE,
328+
WIDTH_BUCKET,
329+
WINDOW,
330+
WITH,
331+
WITHIN,
332+
WITHOUT,
333+
YEAR,
334+
];
335+
}
336+
6337
fn is_identifier_start(&self, ch: char) -> bool {
7338
(ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')
8339
}

src/dialect/generic_sql.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,21 @@
11
use dialect::Dialect;
2+
3+
use dialect::keywords::*;
24
pub struct GenericSqlDialect {}
35

46
impl Dialect for GenericSqlDialect {
7+
fn keywords(&self) -> Vec<&'static str> {
8+
return vec![
9+
SELECT, FROM, WHERE, LIMIT, ORDER, GROUP, BY, HAVING, UNION, ALL, INSERT, INTO, UPDATE,
10+
DELETE, IN, IS, NULL, SET, CREATE, EXTERNAL, TABLE, ASC, DESC, AND, OR, NOT, AS,
11+
STORED, CSV, PARQUET, LOCATION, WITH, WITHOUT, HEADER, ROW, // SQL types
12+
CHAR, CHARACTER, VARYING, LARGE, OBJECT, VARCHAR, CLOB, BINARY, VARBINARY, BLOB, FLOAT,
13+
REAL, DOUBLE, PRECISION, INT, INTEGER, SMALLINT, BIGINT, NUMERIC, DECIMAL, DEC,
14+
BOOLEAN, DATE, TIME, TIMESTAMP, CASE, WHEN, THEN, ELSE, END, JOIN, LEFT, RIGHT, FULL,
15+
CROSS, OUTER, INNER, NATURAL, ON, USING, LIKE,
16+
];
17+
}
18+
519
fn is_identifier_start(&self, ch: char) -> bool {
620
(ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || ch == '@'
721
}

0 commit comments

Comments
 (0)