Extensible SQL Lexer and Parser in MoonBit
pub trait Dialect {
supports_string_literal_backslash_escape(Self) -> Bool
supports_boolean_literals(Self) -> Bool
supports_filter_during_aggregation(Self) -> Bool
supports_within_after_array_aggregation(Self) -> Bool
requires_column_types_in_create_table(Self) -> Bool
supports_if_not_exists(Self) -> Bool
supports_double_quoted_identifiers(Self) -> Bool
parse_expr(Self, tokens : ArrayView[Token]) -> (Expr, ArrayView[Token])? raise ParserError
parse_statement(Self, parser : Parser, tokens : ArrayView[Token]) -> (Statement, ArrayView[Token])? raise ParserError
}pub(all) struct ANSI {
}pub enum AlterTableOperation {
DropColumn(String, Bool)
}impl Pretty for AlterTableOperationimpl Eq for AlterTableOperationimpl Show for AlterTableOperationpub struct AlterTableStmt {
table_name : ObjectName
if_exists : Bool
operation : AlterTableOperation
}impl Pretty for AlterTableStmtimpl Eq for AlterTableStmtimpl Show for AlterTableStmtimpl Pretty for Assignmentimpl Eq for Assignmentimpl Show for Assignmentpub(all) struct BigQuery {
}pub enum BinaryOperator {
Eq
Neq
Lt
Gt
LtEq
GtEq
Spaceship
Plus
Minus
Mul
Div
IntegerDiv
Mod
And
Or
}impl Pretty for BinaryOperatorimpl Eq for BinaryOperatorimpl Show for BinaryOperatorpub(all) struct ClickHouse {
}impl Dialect for ClickHousefn parse_expr(_self : ClickHouse, _tokens : ArrayView[Token]) -> (Expr, ArrayView[Token])? raise ParserErrorfn parse_statement(_self : ClickHouse, _parser : Parser, _tokens : ArrayView[Token]) -> (Statement, ArrayView[Token])? raise ParserErrorimpl Pretty for ColumnDefOptionimpl Eq for ColumnDefOptionimpl Show for ColumnDefOptionpub enum CreateTableDefinition {
Columns(Array[ColumnDef], Array[TableConstraint])
AsQuery(QueryStmt)
}impl Pretty for CreateTableDefinitionimpl Eq for CreateTableDefinitionimpl Show for CreateTableDefinitionimpl Pretty for CreateTableStmtimpl Eq for CreateTableStmtimpl Show for CreateTableStmttype CreateViewStmtimpl Pretty for CreateViewStmtimpl Eq for CreateViewStmtimpl Show for CreateViewStmtpub enum DataType {
Integer
Smallint
Bigint
Float(Int?)
Real
Double
Char(Int)
Varchar(Int)
Text
Boolean
Timestamp
Blob
}pub enum DatetimeUnit {
Year
Month
Day
Hour
Minute
Second
}impl Pretty for DatetimeUnitimpl Eq for DatetimeUnitimpl Show for DatetimeUnitimpl Pretty for DeleteStmtimpl Eq for DeleteStmtimpl Show for DeleteStmtimpl Pretty for DropTableStmtimpl Eq for DropTableStmtimpl Show for DropTableStmtpub struct DropViewStmt {
name : String
}impl Pretty for DropViewStmtimpl Eq for DropViewStmtimpl Show for DropViewStmtpub(all) struct DuckDB {
}pub enum DuplicateTreatment {
Distinct
All
}impl Pretty for DuplicateTreatmentimpl Eq for DuplicateTreatmentimpl Show 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(QueryStmt)
Exists(Bool, QueryStmt)
Between(Bool, Expr, Expr, Expr)
Extract(PrimaryDatetimeField, Expr)
Case(CaseExpr)
InList(Bool, Expr, Array[Expr])
InSubQuery(Bool, Expr, QueryStmt)
Substring(Expr, Expr?, Expr?)
PlaceHolder
}pub(all) struct Generic {
}impl Pretty for InsertSourceimpl Eq for InsertSourceimpl Show for InsertSourceimpl Pretty for InsertStmtimpl Eq for InsertStmtimpl Show for InsertStmtpub enum IntervalQualifier {
Single(PrimaryDatetimeField)
Range(PrimaryDatetimeField, PrimaryDatetimeField)
}impl Pretty for IntervalQualifierimpl Eq for IntervalQualifierimpl Show for IntervalQualifierimpl Pretty for JoinConstraintimpl Eq for JoinConstraintimpl Show for JoinConstraintpub enum JoinOperator {
Join(JoinConstraint)
Left(JoinConstraint)
LeftOuter(JoinConstraint)
Right(JoinConstraint)
RightOuter(JoinConstraint)
Full(JoinConstraint)
FullOuter(JoinConstraint)
Inner(JoinConstraint)
Cross
}impl Pretty for JoinOperatorimpl Eq for JoinOperatorimpl Show for JoinOperatorpub(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
Primary
Key
Foreign
References
Check
Union
Intersect
Except
Top
Insert
Into
Values
If
Delete
Update
Set
Truncate
Alter
Column
Show
Tables
Columns
Status
Databases
Div
Lock
Unlock
Listen
Notify
}pub enum Literal {
Integer(Int)
Double(Double)
String(String)
Boolean(Bool)
Null
}pub(all) struct MySQL {
}impl Pretty for ObjectNameimpl Eq for ObjectNameimpl Show for ObjectNameimpl Pretty for OrderByExprimpl Eq for OrderByExprimpl Show for OrderByExprpub(all) struct Postgres {
}pub(all) enum Precedence {
PlusMinus
MulDivMod
Eq
Like
And
Or
Between
UnaryNot
}type PrimaryDatetimeFieldimpl Pretty for PrimaryDatetimeFieldimpl Eq for PrimaryDatetimeFieldimpl Show for PrimaryDatetimeFieldimpl Pretty for Projectionimpl Eq for Projectionimpl Show for Projectionpub(all) struct Redshift {
}pub(all) struct SQLite {
}type SelectStmtimpl Pretty for SelectStmtimpl Eq for SelectStmtimpl Show for SelectStmttype SetExprtype SetOperatorimpl Pretty for SetOperatorimpl Eq for SetOperatorimpl Show for SetOperatorimpl Pretty for ShowFilterimpl Eq for ShowFilterimpl Show for ShowFilterpub enum ShowType {
Tables
Columns
Status
Databases
}pub(all) struct Snowflake {
}pub enum Statement {
Query(QueryStmt)
CreateTable(CreateTableStmt)
CreateView(CreateViewStmt)
DropView(DropViewStmt)
DropTable(DropTableStmt)
Insert(InsertStmt)
Delete(DeleteStmt)
Update(UpdateStmt)
Truncate(TruncateStmt)
AlterTable(AlterTableStmt)
Show(ShowStmt)
LockTables(Array[ObjectName])
UnlockTables
Listen(String)
Notify(String, String?)
}impl Pretty for Statementsimpl Eq for Statementsimpl Show for Statementsimpl Pretty for TableAliasimpl Eq for TableAliasimpl Show for TableAliaspub enum TableConstraint {
Unique(Array[OrderByExpr])
PrimaryKey(Array[OrderByExpr])
ForeignKey(Array[OrderByExpr], ObjectName, Array[String])
Check(Expr)
}impl Pretty for TableConstraintimpl Eq for TableConstraintimpl Show for TableConstraintimpl Pretty for TableFactorimpl Eq for TableFactorimpl Show for TableFactorpub(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
PlaceHolder
Unknown(Char)
Eof
}impl Pretty for TruncateStmtimpl Eq for TruncateStmtimpl Show for TruncateStmtpub enum UnaryOperator {
Plus
Minus
Not
}impl Pretty for UnaryOperatorimpl Eq for UnaryOperatorimpl Show for UnaryOperatorpub struct UpdateStmt {
table_name : ObjectName
assignments : Array[Assignment]
where_clause : Expr?
}impl Pretty for UpdateStmtimpl Eq for UpdateStmtimpl Show for UpdateStmtpub struct ViewColumnDef {
name : String
}impl Pretty for ViewColumnDefimpl Eq for ViewColumnDefimpl Show for ViewColumnDef