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