alopex_sql/tokenizer/
keyword.rs

1/// Supported SQL keywords for the Alopex dialect.
2#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
3pub enum Keyword {
4    // DML
5    SELECT,
6    FROM,
7    WHERE,
8    DISTINCT,
9    AS,
10    INSERT,
11    INTO,
12    VALUES,
13    UPDATE,
14    SET,
15    DELETE,
16
17    // DDL
18    CREATE,
19    DROP,
20    TABLE,
21    INDEX,
22    IF,
23    NOT,
24    EXISTS,
25    USING,
26    WITH,
27    CONSTRAINT,
28    ON,
29    PRIMARY,
30    KEY,
31    DEFAULT,
32    UNIQUE,
33
34    // Clauses
35    ORDER,
36    BY,
37    ASC,
38    DESC,
39    NULLS,
40    FIRST,
41    LAST,
42    LIMIT,
43    OFFSET,
44    ESCAPE,
45
46    // Expressions / operators
47    TRUE,
48    FALSE,
49    NULL,
50    AND,
51    OR,
52    LIKE,
53    BETWEEN,
54    IN,
55    IS,
56
57    // Types / extensions
58    INTEGER,
59    INT,
60    BIGINT,
61    FLOAT,
62    DOUBLE,
63    TEXT,
64    BLOB,
65    BOOLEAN,
66    BOOL,
67    TIMESTAMP,
68    VECTOR,
69    COSINE,
70    L2,
71    INNER,
72    BTREE,
73    HNSW,
74
75    // Reserved / functions
76    CAST,
77    CASE,
78    WHEN,
79    THEN,
80    ELSE,
81    END,
82    NOW,
83
84    /// Not a recognized keyword.
85    NoKeyword,
86}
87
88impl Keyword {
89    /// Case-insensitive lookup.
90    #[allow(clippy::should_implement_trait)]
91    pub fn from_str(input: &str) -> Self {
92        match input.to_ascii_uppercase().as_str() {
93            "SELECT" => Self::SELECT,
94            "FROM" => Self::FROM,
95            "WHERE" => Self::WHERE,
96            "DISTINCT" => Self::DISTINCT,
97            "AS" => Self::AS,
98            "INSERT" => Self::INSERT,
99            "INTO" => Self::INTO,
100            "VALUES" => Self::VALUES,
101            "UPDATE" => Self::UPDATE,
102            "SET" => Self::SET,
103            "DELETE" => Self::DELETE,
104
105            "CREATE" => Self::CREATE,
106            "DROP" => Self::DROP,
107            "TABLE" => Self::TABLE,
108            "INDEX" => Self::INDEX,
109            "IF" => Self::IF,
110            "NOT" => Self::NOT,
111            "EXISTS" => Self::EXISTS,
112            "USING" => Self::USING,
113            "WITH" => Self::WITH,
114            "CONSTRAINT" => Self::CONSTRAINT,
115            "ON" => Self::ON,
116            "PRIMARY" => Self::PRIMARY,
117            "KEY" => Self::KEY,
118            "DEFAULT" => Self::DEFAULT,
119            "UNIQUE" => Self::UNIQUE,
120
121            "ORDER" => Self::ORDER,
122            "BY" => Self::BY,
123            "ASC" => Self::ASC,
124            "DESC" => Self::DESC,
125            "NULLS" => Self::NULLS,
126            "FIRST" => Self::FIRST,
127            "LAST" => Self::LAST,
128            "LIMIT" => Self::LIMIT,
129            "OFFSET" => Self::OFFSET,
130            "ESCAPE" => Self::ESCAPE,
131
132            "TRUE" => Self::TRUE,
133            "FALSE" => Self::FALSE,
134            "NULL" => Self::NULL,
135            "AND" => Self::AND,
136            "OR" => Self::OR,
137            "LIKE" => Self::LIKE,
138            "BETWEEN" => Self::BETWEEN,
139            "IN" => Self::IN,
140            "IS" => Self::IS,
141
142            "INTEGER" => Self::INTEGER,
143            "INT" => Self::INT,
144            "BIGINT" => Self::BIGINT,
145            "FLOAT" => Self::FLOAT,
146            "DOUBLE" => Self::DOUBLE,
147            "TEXT" => Self::TEXT,
148            "BLOB" => Self::BLOB,
149            "BOOLEAN" => Self::BOOLEAN,
150            "BOOL" => Self::BOOL,
151            "TIMESTAMP" => Self::TIMESTAMP,
152            "VECTOR" => Self::VECTOR,
153            "COSINE" => Self::COSINE,
154            "L2" => Self::L2,
155            "INNER" => Self::INNER,
156            "BTREE" => Self::BTREE,
157            "HNSW" => Self::HNSW,
158
159            "CAST" => Self::CAST,
160            "CASE" => Self::CASE,
161            "WHEN" => Self::WHEN,
162            "THEN" => Self::THEN,
163            "ELSE" => Self::ELSE,
164            "END" => Self::END,
165            "NOW" => Self::NOW,
166            _ => Self::NoKeyword,
167        }
168    }
169}