2021-05-21 15:12:32 +00:00
|
|
|
parser grammar Query;
|
|
|
|
|
|
|
|
options {
|
|
|
|
tokenVocab = QueryLexer;
|
|
|
|
}
|
|
|
|
|
|
|
|
policy: repStmt+ cbfStmt? selectStmt* filterStmt*;
|
|
|
|
|
|
|
|
repStmt:
|
|
|
|
REP Count = NUMBER1 // number of object replicas
|
|
|
|
(IN Selector = ident)?; // optional selector name
|
|
|
|
|
|
|
|
cbfStmt: CBF BackupFactor = NUMBER1; // container backup factor
|
|
|
|
|
|
|
|
selectStmt:
|
|
|
|
SELECT Count = NUMBER1 // number of nodes to select without container backup factor *)
|
|
|
|
(IN clause? Bucket = ident)? // bucket name
|
|
|
|
FROM Filter = identWC // filter reference or whole netmap
|
|
|
|
(AS Name = ident)? // optional selector name
|
|
|
|
;
|
|
|
|
|
|
|
|
clause: CLAUSE_SAME | CLAUSE_DISTINCT; // nodes from distinct buckets
|
|
|
|
|
|
|
|
filterExpr:
|
|
|
|
F1 = filterExpr Op = AND_OP F2 = filterExpr
|
|
|
|
| F1 = filterExpr Op = OR_OP F2 = filterExpr
|
2021-05-21 15:12:27 +00:00
|
|
|
| '(' Inner = filterExpr ')'
|
2021-05-21 15:12:32 +00:00
|
|
|
| expr
|
|
|
|
;
|
|
|
|
|
|
|
|
filterStmt:
|
|
|
|
FILTER Expr = filterExpr
|
|
|
|
AS Name = ident // obligatory filter name
|
|
|
|
;
|
|
|
|
|
|
|
|
expr:
|
|
|
|
AT Filter = ident // reference to named filter
|
|
|
|
| Key = filterKey SIMPLE_OP Value = filterValue // attribute comparison
|
|
|
|
;
|
|
|
|
|
|
|
|
filterKey : ident | STRING;
|
|
|
|
filterValue : ident | number | STRING;
|
|
|
|
number : ZERO | NUMBER1;
|
|
|
|
keyword : REP | IN | AS | SELECT | FROM | FILTER;
|
|
|
|
ident : keyword | IDENT;
|
|
|
|
identWC : ident | WILDCARD;
|