| expr ::= |
binary-expr
| unary-expr | term | conditional-expr | case { when expr Condition then expr } else expr end | case expr { when expr then expr } else expr end | expr [ not ] in ( expression-list ) | expr [ not ] in ( query-expr ) | [ not ] exists ( query-expr ) |
| conditional-expr ::= | expr ? expr : expr |
| binary-expr ::= | expr binary-op expr |
| unary-expr ::= | unary-op expr |
| binary-op ::= |
+
| -
| *
| /
| %
| > | >= | < | <= | == | != | <> | ~ | ~= | and | or | xor |
| unary-op ::= | not | + | - |
| term ::= |
variable
| value-literal | table-value-expr | function-call |
| variable ::= |
Identifier
| Identifier . Identifier |
| value-literal ::= | String | Number | Boolean |
| table-value-expr ::= | table ( row-value-expr { row-value-expr } ) |
| row-value-expr ::= | ( expression-list ) |
| expression-list ::= | expression { , expression } |
- precedence rules
- + for string concat
- relational ops
- boolean ops
- arithmetic ops
- short-circuit eval
case semantics
select expression semantics
table.col only allowed in a select scope