Skip to main content

drizzle_core/sql/
tokens.rs

1#[derive(Debug, Clone, Copy)]
2pub enum Token {
3    ABORT,
4    ACTION,
5    ADD,
6    AFTER,
7    ALL,
8    ALTER,
9    ALWAYS,
10    ANALYZE,
11    AND,
12    ANY,
13    AS,
14    ASC,
15    ATTACH,
16    AUTOINCR,
17    BEFORE,
18    BEGIN,
19    BETWEEN,
20    BITAND,
21    BITNOT,
22    BITOR,
23    BLOB,
24    BY,
25    CASCADE,
26    CASE,
27    CAST,
28    CHECK,
29    COLLATE,
30    COLUMN,
31    COMMA,
32    COMMIT,
33    CONCAT,
34    CONCURRENTLY,
35    CONFLICT,
36    CONSTRAINT,
37    CREATE,
38    CTIME,
39    CURRENT,
40    DATA,
41    DATABASE,
42    DEFAULT,
43    DEFERRABLE,
44    DEFERRED,
45    DELETE,
46    DESC,
47    DETACH,
48    DISTINCT,
49    DO,
50    DOT,
51    DROP,
52    EACH,
53    ELSE,
54    END,
55    EOF,
56    EQ,
57    ESCAPE,
58    EXCEPT,
59    EXCLUDE,
60    EXCLUSIVE,
61    EXISTS,
62    EXPLAIN,
63    FAIL,
64    FILTER,
65    FIRST,
66    FLOAT,
67    FOLLOWING,
68    FOR,
69    FOREIGN,
70    FROM,
71    GE,
72    GENERATED,
73    GROUP,
74    GROUPS,
75    GT,
76    HAVING,
77    ID,
78    IF,
79    IGNORE,
80    ILLEGAL,
81    IMMEDIATE,
82    IN,
83    INDEX,
84    INDEXED,
85    INITIALLY,
86    INSERT,
87    INSTEAD,
88    INTEGER,
89    INTERSECT,
90    INTO,
91    IS,
92    ISNOT,
93    ISNULL,
94    JOIN,
95    KEY,
96    LAST,
97    LE,
98    LIKE,
99    LIMIT,
100    LOCKED,
101    LPAREN,
102    LSHIFT,
103    LT,
104    MATCH,
105    MATERIALIZED,
106    MINUS,
107    NE,
108    NO,
109    NOT,
110    NOTHING,
111    NOTNULL,
112    NOWAIT,
113    NULL,
114    NULLS,
115    OF,
116    OFFSET,
117    ON,
118    OR,
119    ORDER,
120    OTHERS,
121    OVER,
122    PARTITION,
123    PLAN,
124    PLUS,
125    PRAGMA,
126    PRECEDING,
127    PRIMARY,
128    PTR,
129    QUERY,
130    RAISE,
131    RANGE,
132    RECURSIVE,
133    REFRESH,
134    REFERENCES,
135    REINDEX,
136    RELEASE,
137    REM,
138    RENAME,
139    REPLACE,
140    RESTRICT,
141    RETURNING,
142    ROLLBACK,
143    ROW,
144    ROWS,
145    RPAREN,
146    RSHIFT,
147    SAVEPOINT,
148    SELECT,
149    SEMI,
150    SET,
151    SHARE,
152    SKIP,
153    SLASH,
154    STAR,
155    STRING,
156    TABLE,
157    TEMP,
158    THEN,
159    TIES,
160    TO,
161    TRANSACTION,
162    TRIGGER,
163    UNBOUNDED,
164    UNION,
165    UNIQUE,
166    UPDATE,
167    USING,
168    VACUUM,
169    VALUES,
170    VARIABLE,
171    VIEW,
172    VIRTUAL,
173    WHEN,
174    WHERE,
175    WINDOW,
176    WITH,
177    WITHOUT,
178}
179
180impl Token {
181    /// Returns true if this token is an operator that needs spaces around it
182    #[inline]
183    pub const fn is_operator(&self) -> bool {
184        matches!(
185            self,
186            Token::EQ
187                | Token::NE
188                | Token::LT
189                | Token::GT
190                | Token::LE
191                | Token::GE
192                | Token::PLUS
193                | Token::MINUS
194                | Token::STAR
195                | Token::SLASH
196                | Token::REM
197                | Token::CONCAT
198                | Token::BITAND
199                | Token::BITOR
200                | Token::LSHIFT
201                | Token::RSHIFT
202        )
203    }
204
205    /// Returns true if this token is punctuation (no word-like spacing).
206    #[inline]
207    pub const fn is_punctuation(&self) -> bool {
208        matches!(
209            self,
210            Token::LPAREN | Token::RPAREN | Token::COMMA | Token::SEMI | Token::DOT
211        )
212    }
213
214    pub const fn as_str(&self) -> &'static str {
215        match self {
216            Token::ABORT => "ABORT",
217            Token::ACTION => "ACTION",
218            Token::ADD => "ADD",
219            Token::AFTER => "AFTER",
220            Token::ALL => "ALL",
221            Token::ALTER => "ALTER",
222            Token::ALWAYS => "ALWAYS",
223            Token::ANALYZE => "ANALYZE",
224            Token::AND => "AND",
225            Token::ANY => "ANY",
226            Token::AS => "AS",
227            Token::ASC => "ASC",
228            Token::ATTACH => "ATTACH",
229            Token::AUTOINCR => "AUTOINCREMENT",
230            Token::BEFORE => "BEFORE",
231            Token::BEGIN => "BEGIN",
232            Token::BETWEEN => "BETWEEN",
233            Token::BITAND => "&",
234            Token::BITNOT => "~",
235            Token::BITOR => "|",
236            Token::BLOB => "BLOB",
237            Token::BY => "BY",
238            Token::CASCADE => "CASCADE",
239            Token::CASE => "CASE",
240            Token::CAST => "CAST",
241            Token::CHECK => "CHECK",
242            Token::COLLATE => "COLLATE",
243            Token::COLUMN => "COLUMN",
244            Token::COMMA => ",",
245            Token::COMMIT => "COMMIT",
246            Token::CONCAT => "||",
247            Token::CONCURRENTLY => "CONCURRENTLY",
248            Token::CONFLICT => "CONFLICT",
249            Token::CONSTRAINT => "CONSTRAINT",
250            Token::CREATE => "CREATE",
251            Token::CTIME => "CTIME",
252            Token::CURRENT => "CURRENT",
253            Token::DATA => "DATA",
254            Token::DATABASE => "DATABASE",
255            Token::DEFAULT => "DEFAULT",
256            Token::DEFERRABLE => "DEFERRABLE",
257            Token::DEFERRED => "DEFERRED",
258            Token::DELETE => "DELETE",
259            Token::DESC => "DESC",
260            Token::DETACH => "DETACH",
261            Token::DISTINCT => "DISTINCT",
262            Token::DO => "DO",
263            Token::DOT => ".",
264            Token::DROP => "DROP",
265            Token::EACH => "EACH",
266            Token::ELSE => "ELSE",
267            Token::END => "END",
268            Token::EOF => "EOF",
269            Token::EQ => "=",
270            Token::ESCAPE => "ESCAPE",
271            Token::EXCEPT => "EXCEPT",
272            Token::EXCLUDE => "EXCLUDE",
273            Token::EXCLUSIVE => "EXCLUSIVE",
274            Token::EXISTS => "EXISTS",
275            Token::EXPLAIN => "EXPLAIN",
276            Token::FAIL => "FAIL",
277            Token::FILTER => "FILTER",
278            Token::FIRST => "FIRST",
279            Token::FLOAT => "FLOAT",
280            Token::FOLLOWING => "FOLLOWING",
281            Token::FOR => "FOR",
282            Token::FOREIGN => "FOREIGN",
283            Token::FROM => "FROM",
284            Token::GE => ">=",
285            Token::GENERATED => "GENERATED",
286            Token::GROUP => "GROUP",
287            Token::GROUPS => "GROUPS",
288            Token::GT => ">",
289            Token::HAVING => "HAVING",
290            Token::ID => "ID",
291            Token::IF => "IF",
292            Token::IGNORE => "IGNORE",
293            Token::ILLEGAL => "ILLEGAL",
294            Token::IMMEDIATE => "IMMEDIATE",
295            Token::IN => "IN",
296            Token::INDEX => "INDEX",
297            Token::INDEXED => "INDEXED",
298            Token::INITIALLY => "INITIALLY",
299            Token::INSERT => "INSERT",
300            Token::INSTEAD => "INSTEAD",
301            Token::INTEGER => "INTEGER",
302            Token::INTERSECT => "INTERSECT",
303            Token::INTO => "INTO",
304            Token::IS => "IS",
305            Token::ISNOT => "IS NOT",
306            Token::ISNULL => "ISNULL",
307            Token::JOIN => "JOIN",
308            Token::KEY => "KEY",
309            Token::LAST => "LAST",
310            Token::LE => "<=",
311            Token::LIKE => "LIKE",
312            Token::LIMIT => "LIMIT",
313            Token::LOCKED => "LOCKED",
314            Token::LPAREN => "(",
315            Token::LSHIFT => "<<",
316            Token::LT => "<",
317            Token::MATCH => "MATCH",
318            Token::MATERIALIZED => "MATERIALIZED",
319            Token::MINUS => "-",
320            Token::NE => "<>",
321            Token::NO => "NO",
322            Token::NOT => "NOT",
323            Token::NOTHING => "NOTHING",
324            Token::NOTNULL => "NOTNULL",
325            Token::NOWAIT => "NOWAIT",
326            Token::NULL => "NULL",
327            Token::NULLS => "NULLS",
328            Token::OF => "OF",
329            Token::OFFSET => "OFFSET",
330            Token::ON => "ON",
331            Token::OR => "OR",
332            Token::ORDER => "ORDER",
333            Token::OTHERS => "OTHERS",
334            Token::OVER => "OVER",
335            Token::PARTITION => "PARTITION",
336            Token::PLAN => "PLAN",
337            Token::PLUS => "+",
338            Token::PRAGMA => "PRAGMA",
339            Token::PRECEDING => "PRECEDING",
340            Token::PRIMARY => "PRIMARY",
341            Token::PTR => "PTR",
342            Token::QUERY => "QUERY",
343            Token::RAISE => "RAISE",
344            Token::RANGE => "RANGE",
345            Token::RECURSIVE => "RECURSIVE",
346            Token::REFRESH => "REFRESH",
347            Token::REFERENCES => "REFERENCES",
348            Token::REINDEX => "REINDEX",
349            Token::RELEASE => "RELEASE",
350            Token::REM => "%",
351            Token::RENAME => "RENAME",
352            Token::REPLACE => "REPLACE",
353            Token::RESTRICT => "RESTRICT",
354            Token::RETURNING => "RETURNING",
355            Token::ROLLBACK => "ROLLBACK",
356            Token::ROW => "ROW",
357            Token::ROWS => "ROWS",
358            Token::RPAREN => ")",
359            Token::RSHIFT => ">>",
360            Token::SAVEPOINT => "SAVEPOINT",
361            Token::SELECT => "SELECT",
362            Token::SEMI => ";",
363            Token::SET => "SET",
364            Token::SHARE => "SHARE",
365            Token::SKIP => "SKIP",
366            Token::SLASH => "/",
367            Token::STAR => "*",
368            Token::STRING => "STRING",
369            Token::TABLE => "TABLE",
370            Token::TEMP => "TEMP",
371            Token::THEN => "THEN",
372            Token::TIES => "TIES",
373            Token::TO => "TO",
374            Token::TRANSACTION => "TRANSACTION",
375            Token::TRIGGER => "TRIGGER",
376            Token::UNBOUNDED => "UNBOUNDED",
377            Token::UNION => "UNION",
378            Token::UNIQUE => "UNIQUE",
379            Token::UPDATE => "UPDATE",
380            Token::USING => "USING",
381            Token::VACUUM => "VACUUM",
382            Token::VALUES => "VALUES",
383            Token::VARIABLE => "VARIABLE",
384            Token::VIEW => "VIEW",
385            Token::VIRTUAL => "VIRTUAL",
386            Token::WHEN => "WHEN",
387            Token::WHERE => "WHERE",
388            Token::WINDOW => "WINDOW",
389            Token::WITH => "WITH",
390            Token::WITHOUT => "WITHOUT",
391        }
392    }
393}
394
395impl core::fmt::Display for Token {
396    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
397        write!(f, "{}", self.as_str())
398    }
399}