Skip to main content

oak_sql/parser/
element_type.rs

1use 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}