6.4.2. サーバー側のセレクター構文
以下は、サーバー側のセレクターの非公式構文です。
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
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
注記 0: 全体の式が空であれば true に評価され、空白は無視されます。空のセレクターは always true と解釈されます。
注記 1: 指数およびブール値の「
E」など、予約されて falseいるすべての単語は大文字 true と小文字を区別しません。
注記 2: このパターンの継続により、一重引用符が埋め込まれます。単一引用符は、: become のように埋め込むこと
'' ができます '。
注記 3:
( "ESCAPE" LiteralString ) 節で LiteralString は、1 つの文字列に限定されます。文字 % および _ は使用できません。