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