Skip to content

Commit 75e2c0a

Browse files
authored
Merge pull request #37 from nickolay/keywords
Rework keyword/identifier parsing
2 parents 8c1d6a6 + 7c9f629 commit 75e2c0a

File tree

11 files changed

+787
-691
lines changed

11 files changed

+787
-691
lines changed

src/dialect/ansi_sql.rs

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

3-
use dialect::keywords::*;
4-
53
pub struct AnsiSqlDialect {}
64

75
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-
3376
fn is_identifier_start(&self, ch: char) -> bool {
3387
(ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')
3398
}

src/dialect/generic_sql.rs

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

64
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-
195
fn is_identifier_start(&self, ch: char) -> bool {
206
(ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || ch == '@'
217
}

0 commit comments

Comments
 (0)