Skip to content

Grammar Reference

Expression ::= SelectExpr | InsertExpr | UpdateExpr | DeleteExpr
SelectExpr ::= "select" "*" "from" Ident FilterOrWhere? OrderBy? Limit?
| "select" Ident "{" ShapeFields "}" FilterOrWhere? OrderBy? Limit?
| "select" Ident FilterOrWhere? OrderBy? Limit?
InsertExpr ::= "insert" Ident "{" Assignments "}"
UpdateExpr ::= "update" Ident FilterClause? "set" "{" Assignments "}"
DeleteExpr ::= "delete" Ident FilterClause?
FilterOrWhere ::= "filter" Condition
| "where" Condition
OrderBy ::= "order" "by" Ident ("asc" | "desc")?
Limit ::= "limit" Number
ShapeFields ::= ShapeField ("," ShapeField)*
ShapeField ::= Ident
| Ident ":" "{" ShapeFields "}"
Assignments ::= Assignment ("," Assignment)*
Assignment ::= Ident ":=" Literal
Condition ::= TermCondition (BinaryOp TermCondition)*
TermCondition ::= Literal
| Ident
| "(" Condition ")"
BinaryOp ::= "=" | "!=" | ">" | ">=" | "<" | "<="
Literal ::= Number | "true" | "false" | String
Number ::= [0-9]+
Ident ::= [a-zA-Z_][a-zA-Z0-9_]*
String ::= '"' [^"]* '"'

The following are reserved keywords in BQL:

KeywordUsage
selectQuery data
insertAdd new records
updateModify existing records
deleteRemove records
filterAdd conditions (BQL style)
whereAdd conditions (SQL style)
setSpecify update values
orderSort results
byUsed with order
ascAscending order
descDescending order
limitLimit result count
fromSpecify table (with *)
trueBoolean literal
falseBoolean literal

Used to specify which fields to select or what values to set:

-- SELECT: fields to return
select User { id, name, email }
-- INSERT: field assignments
insert User { name := "Alice", email := "a@b.com" }
-- UPDATE: fields to modify
update User filter id = 1 set { name := "Bob" }

Used in INSERT and UPDATE to assign values:

name := "Alice"
count := 42
active := true

Both work identically - filter is BQL style, where is SQL style:

-- These are equivalent
select User { name } filter id = 1
select User { name } where id = 1