1use oak_core::{Token, UniversalTokenRole};
2
3pub type SqlToken = Token<SqlTokenType>;
5
6impl oak_core::TokenType for SqlTokenType {
7 type Role = UniversalTokenRole;
8 const END_OF_STREAM: Self = Self::Eof;
9
10 fn is_ignored(&self) -> bool {
11 matches!(self, SqlTokenType::Whitespace | SqlTokenType::Newline | SqlTokenType::Comment | SqlTokenType::LineComment | SqlTokenType::BlockComment)
12 }
13
14 fn is_comment(&self) -> bool {
15 matches!(self, SqlTokenType::Comment | SqlTokenType::LineComment | SqlTokenType::BlockComment)
16 }
17
18 fn is_whitespace(&self) -> bool {
19 matches!(self, SqlTokenType::Whitespace | SqlTokenType::Newline)
20 }
21
22 fn role(&self) -> Self::Role {
23 use UniversalTokenRole::*;
24 match self {
25 Self::Whitespace | Self::Newline => Whitespace,
26 Self::Comment | Self::LineComment | Self::BlockComment => Comment,
27 Self::NumberLiteral | Self::FloatLiteral | Self::StringLiteral | Self::BooleanLiteral | Self::NullLiteral => Literal,
28 Self::Identifier_ => Name,
29 Self::Select
30 | Self::From
31 | Self::Where
32 | Self::Insert
33 | Self::Into
34 | Self::Values
35 | Self::Update
36 | Self::Set
37 | Self::Delete
38 | Self::Create
39 | Self::Table
40 | Self::Drop
41 | Self::Alter
42 | Self::Add
43 | Self::Column
44 | Self::Primary
45 | Self::Key
46 | Self::Foreign
47 | Self::References
48 | Self::Index
49 | Self::Unique
50 | Self::Not
51 | Self::Null
52 | Self::Default
53 | Self::AutoIncrement
54 | Self::And
55 | Self::Or
56 | Self::In
57 | Self::Like
58 | Self::Between
59 | Self::Is
60 | Self::As
61 | Self::Join
62 | Self::Inner
63 | Self::Left
64 | Self::Right
65 | Self::Full
66 | Self::Outer
67 | Self::On
68 | Self::Group
69 | Self::By
70 | Self::Having
71 | Self::Order
72 | Self::Asc
73 | Self::Desc
74 | Self::Limit
75 | Self::Offset
76 | Self::Union
77 | Self::All
78 | Self::Distinct
79 | Self::Count
80 | Self::Sum
81 | Self::Avg
82 | Self::Min
83 | Self::Max
84 | Self::Explain
85 | Self::Vector
86 | Self::View
87 | Self::Database
88 | Self::Schema
89 | Self::True
90 | Self::False
91 | Self::Exists
92 | Self::Trigger
93 | Self::After
94 | Self::Delimiter
95 | Self::For
96 | Self::Each
97 | Self::Row
98 | Self::Check
99 | Self::Rename
100 | Self::To
101 | Self::Case
102 | Self::When
103 | Self::Then
104 | Self::Else
105 | Self::End
106 | Self::If
107 | Self::Begin
108 | Self::Commit
109 | Self::Rollback
110 | Self::Transaction
111 | Self::Conflict
112 | Self::Do
113 | Self::Nothing
114 | Self::Returning
115 | Self::Ilike
116 | Self::Strict
117 | Self::Without
118 | Self::Rowid => Keyword,
119 Self::Int | Self::Integer | Self::Varchar | Self::Char | Self::Text | Self::Date | Self::Time | Self::Timestamp | Self::Decimal | Self::Float | Self::Double | Self::Boolean | Self::Serial | Self::BigSerial => Keyword, Self::Plus | Self::Minus | Self::Star | Self::Slash | Self::Percent | Self::Equal | Self::NotEqual | Self::Less | Self::Greater | Self::LessEqual | Self::GreaterEqual | 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)]
130#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
131pub enum SqlTokenType {
132 Root,
134 ExplainStatement,
136 TransactionStatement,
138 PragmaStatement,
140 ShowStatement,
142 SelectStatement,
144 InsertStatement,
146 UpdateStatement,
148 DeleteStatement,
150 CreateStatement,
152 DropStatement,
154 AlterStatement,
156 Expression,
158 Identifier,
160 TableName,
162 ColumnName,
164 JoinClause,
166 GroupByClause,
168 HavingClause,
170 OrderByClause,
172 LimitClause,
174 SelectItem,
176 Alias,
178 ColumnDefinition,
180 ValueList,
182 Assignment,
184 AlterAction,
186 ErrorNode,
188
189 Whitespace,
191 Newline,
193
194 Comment,
196 LineComment,
198 BlockComment,
200
201 NumberLiteral,
203 FloatLiteral,
205 StringLiteral,
207 BooleanLiteral,
209 NullLiteral,
211
212 Identifier_,
214
215 Select,
217 From,
219 Where,
221 Insert,
223 Into,
225 Values,
227 Update,
229 Set,
231 Delete,
233 Create,
235 Table,
237 Drop,
239 Alter,
241 Add,
243 Column,
245 Primary,
247 Key,
249 Foreign,
251 References,
253 Index,
255 Unique,
257 Not,
259 Null,
261 Default,
263 AutoIncrement,
265 And,
267 Or,
269 In,
271 Like,
273 Between,
275 Is,
277 As,
279 Join,
281 Inner,
283 Left,
285 Right,
287 Full,
289 Outer,
291 On,
293 Group,
295 By,
297 Having,
299 Order,
301 Asc,
303 Desc,
305 Limit,
307 Offset,
309 Union,
311 All,
313 Distinct,
315 Count,
317 Sum,
319 Avg,
321 Min,
323 Max,
325 Explain,
327 Pragma,
329 Show,
331 View,
333 Database,
335 Schema,
337 True,
339 False,
341 Exists,
343 Trigger,
345 After,
347 Delimiter,
349 For,
351 Each,
353 Row,
355 Check,
357 Rename,
359 To,
361 Case,
363 When,
365 Then,
367 Else,
369 End,
371 If,
373 Begin,
375 Commit,
377 Rollback,
379 Transaction,
381 Conflict,
383 Do,
385 Nothing,
387 Returning,
389 Vector,
391 Ilike,
393 Strict,
395 Without,
397 Rowid,
399
400 Int,
402 Integer,
404 Varchar,
406 Char,
408 Text,
410 Date,
412 Time,
414 Timestamp,
416 Decimal,
418 Float,
420 Double,
422 Boolean,
424 Serial,
426 BigSerial,
428
429 Plus,
431 Minus,
433 Star,
435 Slash,
437 Percent,
439 Equal,
441 NotEqual,
443 Less,
445 Greater,
447 LessEqual,
449 GreaterEqual,
451 Concat,
453 DoubleColon,
455 LeftParen,
457 RightParen,
459 LeftBracket,
461 RightBracket,
463 LeftBrace,
465 RightBrace,
467 Comma,
469 Semicolon,
471 Dot,
473 Colon,
475 Question,
477
478 Error,
480 Eof,
482}
483
484impl From<crate::parser::element_type::SqlElementType> for SqlTokenType {
485 fn from(element: crate::parser::element_type::SqlElementType) -> Self {
486 use crate::parser::element_type::SqlElementType;
487 match element {
488 SqlElementType::Root => Self::Root,
489 SqlElementType::ExplainStatement => Self::ExplainStatement,
490 SqlElementType::Identifier => Self::Identifier,
491 SqlElementType::Expression => Self::Expression,
492 SqlElementType::ErrorNode => Self::ErrorNode,
493 SqlElementType::SelectStatement => Self::SelectStatement,
494 SqlElementType::VectorSearch => Self::Vector, SqlElementType::InsertStatement => Self::InsertStatement,
496 SqlElementType::UpdateStatement => Self::UpdateStatement,
497 SqlElementType::DeleteStatement => Self::DeleteStatement,
498 SqlElementType::CreateStatement => Self::CreateStatement,
499 SqlElementType::DropStatement => Self::DropStatement,
500 SqlElementType::AlterStatement => Self::AlterStatement,
501 SqlElementType::JoinClause => Self::JoinClause,
502 SqlElementType::GroupByClause => Self::GroupByClause,
503 SqlElementType::HavingClause => Self::HavingClause,
504 SqlElementType::OrderByClause => Self::OrderByClause,
505 SqlElementType::LimitClause => Self::LimitClause,
506 SqlElementType::TableName => Self::TableName,
507 SqlElementType::ColumnName => Self::ColumnName,
508 SqlElementType::SelectItem => Self::SelectItem,
509 SqlElementType::Alias => Self::Alias,
510 SqlElementType::ColumnDefinition => Self::ColumnDefinition,
511 SqlElementType::ValueList => Self::ValueList,
512 SqlElementType::Assignment => Self::Assignment,
513 SqlElementType::AlterAction => Self::AlterAction,
514 _ => Self::ErrorNode,
515 }
516 }
517}