The JEQL Language Specification

Expressions

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 }

Expressions allow new values to be computed by combining existing values. The type of the value of an expression may be any of the datatypes which are supported in JEQL (including tables). Expressions are evaluated using the operator semantics, ordering and predecedence rules as defined in Java.

To Do:

- 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