Module sql

Source
Expand description

The SpacetimeDB SQL grammar

statement
    = select
    | insert
    | delete
    | update
    | set
    | show
    ;

insert
    = INSERT INTO table [ '(' column { ',' column } ')' ] VALUES '(' literal { ',' literal } ')'
    ;

delete
    = DELETE FROM table [ WHERE predicate ]
    ;

update
    = UPDATE table SET [ '(' assignment { ',' assignment } ')' ] [ WHERE predicate ]
    ;

assignment
    = column '=' expr
    ;

set
    = SET var ( TO | '=' ) literal
    ;

show
    = SHOW var
    ;

var
    = ident
    ;

select
    = SELECT [ DISTINCT ] projection FROM relation [ [ WHERE predicate ] [ ORDER BY order ] [ LIMIT limit ] ]
    ;

projection
    = listExpr
    | projExpr { ',' projExpr }
    | aggrExpr { ',' aggrExpr }
    ;

listExpr
    = STAR
    | ident '.' STAR
    ;

projExpr
    = columnExpr [ [ AS ] ident ]
    ;

columnExpr
    = column
    | field
    ;

aggrExpr
    = COUNT '(' STAR ')' AS ident
    | COUNT '(' DISTINCT columnExpr ')' AS ident
    | SUM   '(' columnExpr ')' AS ident
    ;

relation
    = table
    | '(' query ')'
    | relation [ [AS] ident ] { [INNER] JOIN relation [ [AS] ident ] ON predicate }
    ;

predicate
    = expr
    | predicate AND predicate
    | predicate OR  predicate
    ;

expr
    = literal
    | ident
    | field
    | expr op expr
    ;

field
    = ident '.' ident
    ;

op
    = '='
    | '<'
    | '>'
    | '<' '='
    | '>' '='
    | '!' '='
    | '<' '>'
    ;

order
    = columnExpr [ ASC | DESC ] { ',' columnExpr [ ASC | DESC ] }
    ;

limit
    = INTEGER
    ;

table
    = ident
    ;

column
    = ident
    ;

literal
    = INTEGER
    | FLOAT
    | STRING
    | HEX
    | TRUE
    | FALSE
    ;

Functionsยง

parse_sql
Parse a SQL string