1use oak_core::{Token, UniversalTokenRole};
2#[cfg(feature = "serde")]
3use serde::{Deserialize, Serialize};
4
5pub type SqlToken = Token<SqlTokenType>;
6
7impl oak_core::TokenType for SqlTokenType {
8 type Role = UniversalTokenRole;
9 const END_OF_STREAM: Self = Self::Eof;
10
11 fn is_ignored(&self) -> bool {
12 matches!(self, SqlTokenType::Whitespace | SqlTokenType::Newline | SqlTokenType::Comment | SqlTokenType::LineComment | SqlTokenType::BlockComment)
13 }
14
15 fn is_comment(&self) -> bool {
16 matches!(self, SqlTokenType::Comment | SqlTokenType::LineComment | SqlTokenType::BlockComment)
17 }
18
19 fn is_whitespace(&self) -> bool {
20 matches!(self, SqlTokenType::Whitespace | SqlTokenType::Newline)
21 }
22
23 fn role(&self) -> Self::Role {
24 use UniversalTokenRole::*;
25 match self {
26 Self::Whitespace | Self::Newline => Whitespace,
27 Self::Comment | Self::LineComment | Self::BlockComment => Comment,
28 Self::NumberLiteral | Self::FloatLiteral | Self::StringLiteral | Self::BooleanLiteral | Self::NullLiteral => Literal,
29 Self::Identifier_ => Name,
30 Self::Select
31 | Self::From
32 | Self::Where
33 | Self::Insert
34 | Self::Into
35 | Self::Values
36 | Self::Update
37 | Self::Set
38 | Self::Delete
39 | Self::Create
40 | Self::Table
41 | Self::Drop
42 | Self::Alter
43 | Self::Add
44 | Self::Column
45 | Self::Primary
46 | Self::Key
47 | Self::Foreign
48 | Self::References
49 | Self::Index
50 | Self::Unique
51 | Self::Not
52 | Self::Null
53 | Self::Default
54 | Self::AutoIncrement
55 | Self::And
56 | Self::Or
57 | Self::In
58 | Self::Like
59 | Self::Between
60 | Self::Is
61 | Self::As
62 | Self::Join
63 | Self::Inner
64 | Self::Left
65 | Self::Right
66 | Self::Full
67 | Self::Outer
68 | Self::On
69 | Self::Group
70 | Self::By
71 | Self::Having
72 | Self::Order
73 | Self::Asc
74 | Self::Desc
75 | Self::Limit
76 | Self::Offset
77 | Self::Union
78 | Self::All
79 | Self::Distinct
80 | Self::Count
81 | Self::Sum
82 | Self::Avg
83 | Self::Min
84 | Self::Max
85 | Self::View
86 | Self::Database
87 | Self::Schema
88 | Self::True
89 | Self::False
90 | Self::Exists
91 | Self::Case
92 | Self::When
93 | Self::Then
94 | Self::Else
95 | Self::End
96 | Self::If
97 | Self::Begin
98 | Self::Commit
99 | Self::Rollback
100 | Self::Transaction => Keyword,
101 Self::Int | Self::Integer | Self::Varchar | Self::Char | Self::Text | Self::Date | Self::Time | Self::Timestamp | Self::Decimal | Self::Float | Self::Double | Self::Boolean => Keyword, Self::Plus
103 | Self::Minus
104 | Self::Star
105 | Self::Slash
106 | Self::Percent
107 | Self::Equal
108 | Self::NotEqual
109 | Self::Less
110 | Self::Greater
111 | Self::LessEqual
112 | Self::GreaterEqual
113 | Self::Assign
114 | Self::Eq
115 | Self::Ne
116 | Self::Lt
117 | Self::Le
118 | Self::Gt
119 | Self::Ge
120 | Self::Concat => Operator,
121 Self::LeftParen | Self::RightParen | Self::LeftBracket | Self::RightBracket | Self::LeftBrace | Self::RightBrace | Self::Comma | Self::Semicolon | Self::Dot | Self::Colon | Self::Question => Punctuation,
122 Self::Error => Error,
123 _ => UniversalTokenRole::None,
124 }
125 }
126}
127
128#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
129#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
130pub enum SqlTokenType {
131 Root,
133 Statement,
134 SelectStatement,
135 InsertStatement,
136 UpdateStatement,
137 DeleteStatement,
138 CreateStatement,
139 DropStatement,
140 AlterStatement,
141 Expression,
142 Identifier,
143 TableName,
144 ColumnName,
145 JoinClause,
146 GroupByClause,
147 HavingClause,
148 OrderByClause,
149 LimitClause,
150 ErrorNode,
151
152 Whitespace,
154 Newline,
155
156 Comment,
158 LineComment,
159 BlockComment,
160
161 NumberLiteral,
163 FloatLiteral,
164 StringLiteral,
165 BooleanLiteral,
166 NullLiteral,
167
168 Identifier_,
170
171 Select,
173 From,
174 Where,
175 Insert,
176 Into,
177 Values,
178 Update,
179 Set,
180 Delete,
181 Create,
182 Table,
183 Drop,
184 Alter,
185 Add,
186 Column,
187 Primary,
188 Key,
189 Foreign,
190 References,
191 Index,
192 Unique,
193 Not,
194 Null,
195 Default,
196 AutoIncrement,
197 And,
198 Or,
199 In,
200 Like,
201 Between,
202 Is,
203 As,
204 Join,
205 Inner,
206 Left,
207 Right,
208 Full,
209 Outer,
210 On,
211 Group,
212 By,
213 Having,
214 Order,
215 Asc,
216 Desc,
217 Limit,
218 Offset,
219 Union,
220 All,
221 Distinct,
222 Count,
223 Sum,
224 Avg,
225 Min,
226 Max,
227 View,
228 Database,
229 Schema,
230 True,
231 False,
232 Exists,
233 Case,
234 When,
235 Then,
236 Else,
237 End,
238 If,
239 Begin,
240 Commit,
241 Rollback,
242 Transaction,
243
244 Int,
246 Integer,
247 Varchar,
248 Char,
249 Text,
250 Date,
251 Time,
252 Timestamp,
253 Decimal,
254 Float,
255 Double,
256 Boolean,
257
258 Plus,
260 Minus,
261 Star,
262 Slash,
263 Percent,
264 Equal,
265 NotEqual,
266 Less,
267 Greater,
268 LessEqual,
269 GreaterEqual,
270 Assign,
271 Eq,
272 Ne,
273 Lt,
274 Le,
275 Gt,
276 Ge,
277 Concat,
278
279 LeftParen,
281 RightParen,
282 LeftBracket,
283 RightBracket,
284 LeftBrace,
285 RightBrace,
286 Comma,
287 Semicolon,
288 Dot,
289 Colon,
290 Question,
291
292 Error,
294 Eof,
295}