oak_sql/parser/
element_type.rs1use oak_core::{ElementType, UniversalElementRole};
2#[cfg(feature = "serde")]
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
6#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
7pub enum SqlElementType {
8 Root,
9 Identifier,
10 Expression,
11 ErrorNode,
12 SelectStatement,
13 InsertStatement,
14 UpdateStatement,
15 DeleteStatement,
16 CreateStatement,
17 DropStatement,
18 AlterStatement,
19 JoinClause,
20 GroupByClause,
21 HavingClause,
22 OrderByClause,
23 LimitClause,
24}
25
26impl ElementType for SqlElementType {
27 type Role = UniversalElementRole;
28
29 fn role(&self) -> UniversalElementRole {
30 use UniversalElementRole::*;
31 match self {
32 Self::Root => Root,
33 Self::Identifier => Name,
34 Self::Expression => Expression,
35 Self::ErrorNode => Error,
36 Self::SelectStatement | Self::InsertStatement | Self::UpdateStatement | Self::DeleteStatement | Self::CreateStatement | Self::DropStatement | Self::AlterStatement => Statement,
37 Self::JoinClause | Self::GroupByClause | Self::HavingClause | Self::OrderByClause | Self::LimitClause => Statement,
38 }
39 }
40}
41
42impl From<crate::lexer::token_type::SqlTokenType> for SqlElementType {
43 fn from(token: crate::lexer::token_type::SqlTokenType) -> Self {
44 unsafe { std::mem::transmute(token) }
45 }
46}