use oak_core::{Token, UniversalTokenRole};
pub type SqlToken = Token<SqlTokenType>;
impl oak_core::TokenType for SqlTokenType {
type Role = UniversalTokenRole;
const END_OF_STREAM: Self = Self::Eof;
fn is_ignored(&self) -> bool {
matches!(self, SqlTokenType::Whitespace | SqlTokenType::Newline | SqlTokenType::Comment | SqlTokenType::LineComment | SqlTokenType::BlockComment)
}
fn is_comment(&self) -> bool {
matches!(self, SqlTokenType::Comment | SqlTokenType::LineComment | SqlTokenType::BlockComment)
}
fn is_whitespace(&self) -> bool {
matches!(self, SqlTokenType::Whitespace | SqlTokenType::Newline)
}
fn role(&self) -> Self::Role {
use UniversalTokenRole::*;
match self {
Self::Whitespace | Self::Newline => Whitespace,
Self::Comment | Self::LineComment | Self::BlockComment => Comment,
Self::NumberLiteral | Self::FloatLiteral | Self::StringLiteral | Self::BooleanLiteral | Self::NullLiteral => Literal,
Self::Identifier_ => Name,
Self::Select
| Self::From
| Self::Where
| Self::Insert
| Self::Into
| Self::Values
| Self::Update
| Self::Set
| Self::Delete
| Self::Create
| Self::Table
| Self::Drop
| Self::Alter
| Self::Add
| Self::Column
| Self::Primary
| Self::Key
| Self::Foreign
| Self::References
| Self::Index
| Self::Unique
| Self::Not
| Self::Null
| Self::Default
| Self::AutoIncrement
| Self::And
| Self::Or
| Self::In
| Self::Like
| Self::Between
| Self::Is
| Self::As
| Self::Join
| Self::Inner
| Self::Left
| Self::Right
| Self::Full
| Self::Outer
| Self::On
| Self::Group
| Self::By
| Self::Having
| Self::Order
| Self::Asc
| Self::Desc
| Self::Limit
| Self::Offset
| Self::Union
| Self::All
| Self::Distinct
| Self::Count
| Self::Sum
| Self::Avg
| Self::Min
| Self::Max
| Self::Explain
| Self::Vector
| Self::View
| Self::Database
| Self::Schema
| Self::True
| Self::False
| Self::Exists
| Self::Trigger
| Self::After
| Self::Delimiter
| Self::For
| Self::Each
| Self::Row
| Self::Check
| Self::Rename
| Self::To
| Self::Case
| Self::When
| Self::Then
| Self::Else
| Self::End
| Self::If
| Self::Begin
| Self::Commit
| Self::Rollback
| Self::Transaction
| Self::Conflict
| Self::Do
| Self::Nothing
| Self::Returning
| Self::Ilike
| Self::Strict
| Self::Without
| Self::Rowid => Keyword,
Self::Int | Self::Integer | Self::Varchar | Self::Char | Self::Text | Self::Date | Self::Time | Self::Timestamp | Self::Decimal | Self::Float | Self::Double | Self::Boolean | Self::Serial | Self::BigSerial => Keyword,
Self::Plus | Self::Minus | Self::Star | Self::Slash | Self::Percent | Self::Equal | Self::NotEqual | Self::Less | Self::Greater | Self::LessEqual | Self::GreaterEqual | Self::Concat => Operator,
Self::LeftParen | Self::RightParen | Self::LeftBracket | Self::RightBracket | Self::LeftBrace | Self::RightBrace | Self::Comma | Self::Semicolon | Self::Dot | Self::Colon | Self::Question => Punctuation,
Self::Error => Error,
_ => UniversalTokenRole::None,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum SqlTokenType {
Root,
ExplainStatement,
TransactionStatement,
PragmaStatement,
ShowStatement,
SelectStatement,
InsertStatement,
UpdateStatement,
DeleteStatement,
CreateStatement,
DropStatement,
AlterStatement,
Expression,
Identifier,
TableName,
ColumnName,
JoinClause,
GroupByClause,
HavingClause,
OrderByClause,
LimitClause,
SelectItem,
Alias,
ColumnDefinition,
ValueList,
Assignment,
AlterAction,
ErrorNode,
Whitespace,
Newline,
Comment,
LineComment,
BlockComment,
NumberLiteral,
FloatLiteral,
StringLiteral,
BooleanLiteral,
NullLiteral,
Identifier_,
Select,
From,
Where,
Insert,
Into,
Values,
Update,
Set,
Delete,
Create,
Table,
Drop,
Alter,
Add,
Column,
Primary,
Key,
Foreign,
References,
Index,
Unique,
Not,
Null,
Default,
AutoIncrement,
And,
Or,
In,
Like,
Between,
Is,
As,
Join,
Inner,
Left,
Right,
Full,
Outer,
On,
Group,
By,
Having,
Order,
Asc,
Desc,
Limit,
Offset,
Union,
All,
Distinct,
Count,
Sum,
Avg,
Min,
Max,
Explain,
Pragma,
Show,
View,
Database,
Schema,
True,
False,
Exists,
Trigger,
After,
Delimiter,
For,
Each,
Row,
Check,
Rename,
To,
Case,
When,
Then,
Else,
End,
If,
Begin,
Commit,
Rollback,
Transaction,
Conflict,
Do,
Nothing,
Returning,
Vector,
Ilike,
Strict,
Without,
Rowid,
Int,
Integer,
Varchar,
Char,
Text,
Date,
Time,
Timestamp,
Decimal,
Float,
Double,
Boolean,
Serial,
BigSerial,
Plus,
Minus,
Star,
Slash,
Percent,
Equal,
NotEqual,
Less,
Greater,
LessEqual,
GreaterEqual,
Concat,
DoubleColon,
LeftParen,
RightParen,
LeftBracket,
RightBracket,
LeftBrace,
RightBrace,
Comma,
Semicolon,
Dot,
Colon,
Question,
Error,
Eof,
}
impl From<crate::parser::element_type::SqlElementType> for SqlTokenType {
fn from(element: crate::parser::element_type::SqlElementType) -> Self {
use crate::parser::element_type::SqlElementType;
match element {
SqlElementType::Root => Self::Root,
SqlElementType::ExplainStatement => Self::ExplainStatement,
SqlElementType::Identifier => Self::Identifier,
SqlElementType::Expression => Self::Expression,
SqlElementType::ErrorNode => Self::ErrorNode,
SqlElementType::SelectStatement => Self::SelectStatement,
SqlElementType::VectorSearch => Self::Vector, SqlElementType::InsertStatement => Self::InsertStatement,
SqlElementType::UpdateStatement => Self::UpdateStatement,
SqlElementType::DeleteStatement => Self::DeleteStatement,
SqlElementType::CreateStatement => Self::CreateStatement,
SqlElementType::DropStatement => Self::DropStatement,
SqlElementType::AlterStatement => Self::AlterStatement,
SqlElementType::JoinClause => Self::JoinClause,
SqlElementType::GroupByClause => Self::GroupByClause,
SqlElementType::HavingClause => Self::HavingClause,
SqlElementType::OrderByClause => Self::OrderByClause,
SqlElementType::LimitClause => Self::LimitClause,
SqlElementType::TableName => Self::TableName,
SqlElementType::ColumnName => Self::ColumnName,
SqlElementType::SelectItem => Self::SelectItem,
SqlElementType::Alias => Self::Alias,
SqlElementType::ColumnDefinition => Self::ColumnDefinition,
SqlElementType::ValueList => Self::ValueList,
SqlElementType::Assignment => Self::Assignment,
SqlElementType::AlterAction => Self::AlterAction,
_ => Self::ErrorNode,
}
}
}