Extensible SQL Lexer and Parser in MoonBit
pub enum BinaryOperator {
Eq
Neq
Lt
Gt
LtEq
GtEq
Spaceship
Plus
Minus
Mul
Div
Mod
And
Or
}impl Eq for BinaryOperatorimpl Show for BinaryOperatorimpl Eq for CreateTableStmtpub enum DataType {
Integer
Float(Int?)
Real
Double
Char(Int)
Varchar(Int)
Text
Boolean
Timestamp
Blob
}pub enum DatetimeUnit {
Year
Month
Day
Hour
Minute
Second
}pub enum DuplicateTreatment {
Distinct
All
}impl Eq for DuplicateTreatmentpub enum Expr {
Identifier(String)
CompoundIdentifier(Array[String])
Literal(Literal)
BinaryOperation(Expr, BinaryOperator, Expr)
UnaryOperation(UnaryOperator, Expr)
FunctionCall(String, DuplicateTreatment?, Array[Expr])
Wildcard
Datetime(String)
Interval(String, IntervalQualifier)
Like(Bool, Expr, Expr)
ILike(Bool, Expr, Expr)
SubQuery(SelectStmt)
Exists(Bool, SelectStmt)
Between(Bool, Expr, Expr, Expr)
Extract(PrimaryDatetimeField, Expr)
Case(CaseExpr)
InList(Bool, Expr, Array[Expr])
InSubQuery(Bool, Expr, SelectStmt)
Substring(Expr, Expr?, Expr?)
}pub enum IntervalQualifier {
Single(PrimaryDatetimeField)
Range(PrimaryDatetimeField, PrimaryDatetimeField)
}pub enum JoinOperator {
Join(JoinConstraint)
Left(JoinConstraint)
LeftOuter(JoinConstraint)
Right(JoinConstraint)
RightOuter(JoinConstraint)
Full(JoinConstraint)
FullOuter(JoinConstraint)
Inner(JoinConstraint)
Cross
}pub(all) enum Keyword {
Select
From
Where
As
Group
Order
By
Asc
Desc
Nulls
First
Last
Year
Month
Day
Hour
Minute
Second
Date
Interval
To
Like
Not
ILike
Exists
Between
And
Or
Extract
Case
When
Then
Else
Having
End
In
Join
Left
Right
Full
Outer
Inner
Cross
On
Using
Limit
Offset
Create
Table
Integer
Int
Smallint
Bigint
Real
Double
Precision
Char
Character
Varchar
Varing
Text
Time
Boolean
Float
Timestamp
Blob
Null
Default
Unique
View
Drop
Distinct
All
Substring
For
}pub enum Literal {
Integer(Int)
Double(Double)
String(String)
Boolean(Bool)
Null
}pub(all) enum Precedence {
PlusMinus
MulDivMod
Eq
Like
And
Or
Between
UnaryNot
}type PrimaryDatetimeFieldpub enum Statement {
Select(SelectStmt)
CreateTable(CreateTableStmt)
CreateView(CreateViewStmt)
DropView(DropViewStmt)
}impl Show for Statementspub(all) enum Token {
Keyword(Keyword)
Identifier(String)
Number(String)
StringLiteral(String)
Boolean(Bool)
Comma
Semicolon
Eq
DoubleEq
Neq
Lt
Gt
LtEq
GtEq
Spaceship
Plus
Minus
Mul
Div
Mod
LBracket
RBracket
LBrace
RBrace
LParen
RParen
Period
Unknown(Char)
Eof
}pub enum UnaryOperator {
Plus
Minus
Not
}pub struct ViewColumnDef {
name : String
}impl Eq for ViewColumnDef