Skip to main content

oak_sql/lexer/
token_type.rs

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, // Types are often keywords
102            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    // 节点种类
132    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    // 空白字符和换
153    Whitespace,
154    Newline,
155
156    // 注释
157    Comment,
158    LineComment,
159    BlockComment,
160
161    // 字面
162    NumberLiteral,
163    FloatLiteral,
164    StringLiteral,
165    BooleanLiteral,
166    NullLiteral,
167
168    // 标识
169    Identifier_,
170
171    // SQL 关键
172    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    // 数据类型
245    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    // 操作符
259    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    // 分隔符
280    LeftParen,
281    RightParen,
282    LeftBracket,
283    RightBracket,
284    LeftBrace,
285    RightBrace,
286    Comma,
287    Semicolon,
288    Dot,
289    Colon,
290    Question,
291
292    // 错误和结
293    Error,
294    Eof,
295}