mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-05-08 04:20:59 -05:00
844783b6f9
* enhancement: use kql as default search query language * enhancement: add support for unicode search queries * fix: escape bleve field query whitespace * fix: search related acceptance tests * enhancement: remove legacy search query language * enhancement: add support for kql dateTime restriction node types * chore: bump web to v8.0.0-alpha.2 * fix: failing search api test * enhancement: search bleve query compiler use DateRangeQuery as DateTimeNode counterpart * enhancement: support for colon operators in dateTime kql queries
184 lines
3.8 KiB
Plaintext
184 lines
3.8 KiB
Plaintext
{
|
|
package kql
|
|
}
|
|
|
|
////////////////////////////////////////////////////////
|
|
// ast
|
|
////////////////////////////////////////////////////////
|
|
|
|
AST <-
|
|
_ nodes:Nodes _ {
|
|
return buildAST(nodes, c.text, c.pos)
|
|
}
|
|
|
|
Nodes <-
|
|
n:(
|
|
_
|
|
(
|
|
GroupNode /
|
|
PropertyRestrictionNodes /
|
|
OperatorBooleanNode /
|
|
FreeTextKeywordNodes
|
|
)
|
|
_
|
|
)+ {
|
|
return buildNodes(n)
|
|
}
|
|
|
|
////////////////////////////////////////////////////////
|
|
// nesting
|
|
////////////////////////////////////////////////////////
|
|
|
|
GroupNode <-
|
|
k:(Char+)? (OperatorColonNode / OperatorEqualNode)? "(" v:Nodes ")" {
|
|
return buildGroupNode(k, v, c.text, c.pos)
|
|
}
|
|
|
|
////////////////////////////////////////////////////////
|
|
// property restrictions
|
|
////////////////////////////////////////////////////////
|
|
|
|
PropertyRestrictionNodes <-
|
|
YesNoPropertyRestrictionNode /
|
|
DateTimeRestrictionNode /
|
|
TextPropertyRestrictionNode
|
|
|
|
YesNoPropertyRestrictionNode <-
|
|
k:Char+ (OperatorColonNode / OperatorEqualNode) v:("true" / "false"){
|
|
return buildBooleanNode(k, v, c.text, c.pos)
|
|
}
|
|
|
|
DateTimeRestrictionNode <-
|
|
k:Char+ o:(OperatorGreaterOrEqualNode / OperatorLessOrEqualNode / OperatorGreaterNode / OperatorLessNode / OperatorEqualNode / OperatorColonNode) '"'? v:(FullDate "T" FullTime) '"'? {
|
|
return buildDateTimeNode(k, o, v, c.text, c.pos)
|
|
}
|
|
|
|
TextPropertyRestrictionNode <-
|
|
k:Char+ (OperatorColonNode / OperatorEqualNode) v:(String / [^ ()]+){
|
|
return buildStringNode(k, v, c.text, c.pos)
|
|
}
|
|
|
|
////////////////////////////////////////////////////////
|
|
// free text-keywords
|
|
////////////////////////////////////////////////////////
|
|
|
|
FreeTextKeywordNodes <-
|
|
PhraseNode /
|
|
WordNode
|
|
|
|
PhraseNode <-
|
|
OperatorColonNode? _ v:String _ OperatorColonNode? {
|
|
return buildStringNode("", v, c.text, c.pos)
|
|
}
|
|
|
|
WordNode <-
|
|
OperatorColonNode? _ v:[^ :()]+ _ OperatorColonNode? {
|
|
return buildStringNode("", v, c.text, c.pos)
|
|
}
|
|
|
|
////////////////////////////////////////////////////////
|
|
// operators
|
|
////////////////////////////////////////////////////////
|
|
|
|
OperatorBooleanNode <-
|
|
("AND" / "OR" / "NOT") {
|
|
return buildOperatorNode(c.text, c.pos)
|
|
}
|
|
|
|
OperatorColonNode <-
|
|
":" {
|
|
return buildOperatorNode(c.text, c.pos)
|
|
}
|
|
|
|
OperatorEqualNode <-
|
|
"=" {
|
|
return buildOperatorNode(c.text, c.pos)
|
|
}
|
|
|
|
OperatorLessNode <-
|
|
"<" {
|
|
return buildOperatorNode(c.text, c.pos)
|
|
}
|
|
|
|
OperatorLessOrEqualNode <-
|
|
"<=" {
|
|
return buildOperatorNode(c.text, c.pos)
|
|
}
|
|
|
|
OperatorGreaterNode <-
|
|
">" {
|
|
return buildOperatorNode(c.text, c.pos)
|
|
}
|
|
|
|
OperatorGreaterOrEqualNode <-
|
|
">=" {
|
|
return buildOperatorNode(c.text, c.pos)
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////////////
|
|
// time
|
|
////////////////////////////////////////////////////////
|
|
|
|
TimeYear <-
|
|
Digit Digit Digit Digit {
|
|
return c.text, nil
|
|
}
|
|
|
|
TimeMonth <-
|
|
Digit Digit {
|
|
return c.text, nil
|
|
}
|
|
|
|
TimeDay <-
|
|
Digit Digit {
|
|
return c.text, nil
|
|
}
|
|
|
|
TimeHour <-
|
|
Digit Digit {
|
|
return c.text, nil
|
|
}
|
|
|
|
TimeMinute <-
|
|
Digit Digit {
|
|
return c.text, nil
|
|
}
|
|
|
|
TimeSecond <-
|
|
Digit Digit {
|
|
return c.text, nil
|
|
}
|
|
|
|
FullDate <-
|
|
TimeYear "-" TimeMonth "-" TimeDay {
|
|
return c.text, nil
|
|
}
|
|
|
|
FullTime <-
|
|
TimeHour ":" TimeMinute ":" TimeSecond ("." Digit+)? ("Z" / ("+" / "-") TimeHour ":" TimeMinute) {
|
|
return c.text, nil
|
|
}
|
|
|
|
////////////////////////////////////////////////////////
|
|
// misc
|
|
////////////////////////////////////////////////////////
|
|
|
|
Char <-
|
|
[A-Za-z] {
|
|
return c.text, nil
|
|
}
|
|
|
|
String <-
|
|
'"' v:[^"]* '"' {
|
|
return v, nil
|
|
}
|
|
|
|
Digit <-
|
|
[0-9] {
|
|
return c.text, nil
|
|
}
|
|
|
|
_ <-
|
|
[ \t]*
|