6.4.2. Server-side selector syntax
Following is the informal syntax for server-side selectors:
SelectExpression ::= OrExpression? // Note 0 // Lexical Elements Alpha ::= [a-zA-Z] Digit ::= [0-9] IdentifierInitial ::= Alpha | "_" | "$" IdentifierPart ::= IdentifierInitial | Digit | "." Identifier ::= IdentifierInitial IdentifierPart* Constraint : Identifier NOT IN ("NULL", "TRUE", "FALSE", "NOT", "AND", "OR", "BETWEEN", "LIKE", "IN", "IS", "ESCAPE") // Note 1 LiteralString ::= ("'" [^']* "'")+ // Note 2 LiteralExactNumeric ::= Digit+ Exponent ::= ("+"|"-")? LiteralExactNumeric LiteralApproxNumeric ::= Digit "." Digit* ( "E" Exponent )? | "." Digit+ ( "E" Exponent )? | Digit+ "E" Exponent // Note 1 LiteralBool ::= "TRUE" | "FALSE" // Note 1 Literal ::= LiteralBool | LiteralString | LiteralApproxNumeric | LiteralExactNumeric EqOps ::= "=" | "<>" ComparisonOps ::= EqOps | ">" | ">=" | "<" | "<=" AddOps ::= "+" | "-" MultiplyOps ::= "*" | "/" // Expression syntax OrExpression ::= AndExpression ( "OR" AndExpression )* AndExpression ::= ComparisonExpression ( "AND" ComparisonExpression )* ComparisonExpression ::= AddExpression "IS" "NOT"? "NULL" | AddExpression "NOT"? "LIKE" LiteralString ( "ESCAPE" LiteralString )? | AddExpression "NOT"? "BETWEEN" AddExpression "AND" AddExpression | AddExpression "NOT"? "IN" "(" PrimaryExpression ("," PrimaryExpression)* ")" | AddExpression ComparisonOps AddExpression | "NOT" ComparisonExpression | AddExpression // Note 3 AddExpression ::= MultiplyExpression ( AddOps MultiplyExpression )* MultiplyExpression ::= UnaryArithExpression ( MultiplyOps UnaryArithExpression )* UnaryArithExpression ::= AddOps AddExpression | "(" OrExpression ")" | PrimaryExpression PrimaryExpression ::= Identifier | Literal
Note 0: If the overall expression is empty it evaluates to true; whitespace is ignored; and an empty selector will be interpreted as always true.
Note 1: All reserved words, including the "
E
" for exponent and the boolean values true
and false
, are case-insensitive.
Note 2: The continuation of this pattern enables embedded single quotes. Single quotes can be embedded so:
''
becomes '
.
Note 3: In the
( "ESCAPE" LiteralString )
clause, LiteralString
is limited to a one character string. The characters %
and _
are not allowed.