Sign in

    sqlparser

    Extensible SQL Lexer and Parser in MoonBit

    sql
    parser
    lexer
    Download zip
    Author
    Version
    0.1.18
    License
    Apache-2.0
    Last updated
    last year
    Downloads
    78

    #Extensible SQL Lexer and Parser for MoonBit

    #Todo

    BinaryOperator

    pub enum BinaryOperator {
    Eq
    Neq
    Lt
    Gt
    LtEq
    GtEq
    Spaceship
    Plus
    Minus
    Mul
    Div
    Mod
    And
    Or
    }

    BinaryOperator::get_precedence

    fn BinaryOperator::get_precedence(self : BinaryOperator) -> Precedence

    CaseExpr

    pub struct CaseExpr {
    operand : Expr?
    when_then_clauses : Array[(Expr, Expr)]
    else_expr : Expr?
    }
    CASE [operand] WHEN THEN [...] [ELSE ] END
    impl Eq for CaseExpr
    impl Show for CaseExpr

    ColumnDef

    pub struct ColumnDef {
    name : String
    data_type : DataType
    options : Array[ColumnDefOption]
    }

    impl Eq for ColumnDef

    ColumnDefOption

    pub enum ColumnDefOption {
    NotNull
    Unique
    Default(Expr)
    }

    CreateTableStmt

    pub struct CreateTableStmt {
    name : String
    columns : Array[ColumnDef]
    primary_key : String?
    }

    CreateViewStmt

    type CreateViewStmt

    DataType

    pub enum DataType {
    Integer
    Float(Int?)
    Real
    Double
    Char(Int)
    Varchar(Int)
    Text
    Boolean
    Timestamp
    Blob
    }

    impl Eq for DataType

    DatetimeUnit

    pub enum DatetimeUnit {
    Year
    Month
    Day
    Hour
    Minute
    Second
    }

    impl Eq for DatetimeUnit

    DropViewStmt

    pub struct DropViewStmt {
    name : String
    }

    impl Eq for DropViewStmt

    DuplicateTreatment

    pub enum DuplicateTreatment {
    Distinct
    All
    }

    Expr

    pub 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?)
    }

    impl Eq for Expr
    impl Show for Expr

    IntervalQualifier

    pub enum IntervalQualifier {
    Single(PrimaryDatetimeField)
    Range(PrimaryDatetimeField, PrimaryDatetimeField)
    }

    Join

    pub struct Join {
    table_ref : TableRef
    join_operator : JoinOperator
    }

    impl Eq for Join
    impl Show for Join

    JoinConstraint

    pub enum JoinConstraint {
    On(Expr)
    Using(Array[String])
    None
    }

    JoinOperator

    pub enum JoinOperator {
    Join(JoinConstraint)
    Left(JoinConstraint)
    LeftOuter(JoinConstraint)
    Right(JoinConstraint)
    RightOuter(JoinConstraint)
    Full(JoinConstraint)
    FullOuter(JoinConstraint)
    Inner(JoinConstraint)
    Cross
    }

    impl Eq for JoinOperator

    Keyword

    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
    }

    impl Eq for Keyword
    impl Show for Keyword

    LexerError

    type LexerError

    impl Show for LexerError

    Literal

    pub enum Literal {
    Integer(Int)
    Double(Double)
    String(String)
    Boolean(Bool)
    Null
    }

    impl Eq for Literal
    impl Show for Literal

    OrderByExpr

    pub struct OrderByExpr {
    expr : Expr
    asc : Bool?
    nulls_first : Bool?
    }

    impl Eq for OrderByExpr
    impl Show for OrderByExpr

    ParserError

    type ParserError

    impl Show for ParserError

    Precedence

    pub(all) enum Precedence {
    PlusMinus
    MulDivMod
    Eq
    Like
    And
    Or
    Between
    UnaryNot
    }

    Precedence::value

    fn Precedence::value(self : Precedence) -> Int

    PrimaryDatetimeField

    type PrimaryDatetimeField

    Projection

    pub enum Projection {
    Wildcard
    UnamedExpr(Expr)
    AliasedExpr(Expr, String)
    }

    impl Eq for Projection
    impl Show for Projection

    SelectStmt

    pub struct SelectStmt {
    projections : Array[Projection]
    from : Array[TableRef]
    where_clause : Expr?
    group_by : Array[Expr]
    having : Expr?
    order_by : Array[OrderByExpr]
    limit : Expr?
    offset : Expr?
    }

    impl Eq for SelectStmt
    impl Show for SelectStmt

    SqlParserError

    pub suberror SqlParserError {
    LexerError(LexerError)
    ParserError(ParserError)
    }

    Statement

    pub enum Statement {
    Select(SelectStmt)
    CreateTable(CreateTableStmt)
    CreateView(CreateViewStmt)
    DropView(DropViewStmt)
    }

    impl Eq for Statement
    impl Show for Statement

    Statements

    pub struct Statements {
    stmts : Array[Statement]
    }

    impl Show for Statements

    Statements::op_get

    fn Statements::op_get(self : Statements, index : Int) -> Statement

    TableAlias

    pub struct TableAlias {
    name : String
    columns : Array[String]
    }

    impl Eq for TableAlias
    impl Show for TableAlias

    TableFactor

    pub enum TableFactor {
    Column(String, TableAlias?)
    SubQuery(SelectStmt, TableAlias?)
    }

    impl Eq for TableFactor
    impl Show for TableFactor

    TableRef

    pub struct TableRef {
    factor : TableFactor
    joins : Array[Join]
    }

    impl Eq for TableRef
    impl Show for TableRef

    Token

    pub(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
    }

    impl Eq for Token
    impl Show for Token

    UnaryOperator

    pub enum UnaryOperator {
    Plus
    Minus
    Not
    }

    impl Eq for UnaryOperator

    ViewColumnDef

    pub struct ViewColumnDef {
    name : String
    }

    impl Eq for ViewColumnDef

    lex

    fn lex(input : String) -> Array[Token] raise LexerError

    parse

    fn parse(tokens : ArrayView[Token]) -> Array[Statement] raise ParserError

    parse_sql

    fn parse_sql(input : String) -> Statements raise SqlParserError

    Powered by MoonBit

    Site sourceReport issuePackagesBuild queueSkillsStatistics

    © 2026 mooncakes.io