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