mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-09-13 06:09:21 -04:00
both engines now agree on names, titles, tags, paths, types, sizes, dates, hidden flags, facet values and wildcards. quotes only delimit phrases and the equals operator matches the whole field value, following the kql spec. the index name carries a generation so a changed mapping starts on a fresh index, MIGRATION.md says how to fill it.
56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
// Package kql provides the ability to work with kql queries.
|
|
package kql
|
|
|
|
import (
|
|
"errors"
|
|
"time"
|
|
|
|
"github.com/opencloud-eu/opencloud/pkg/ast"
|
|
)
|
|
|
|
// The operator node value definition
|
|
const (
|
|
// BoolAND connect two nodes with "AND"
|
|
BoolAND = "AND"
|
|
// BoolOR connect two nodes with "OR"
|
|
BoolOR = "OR"
|
|
// BoolNOT connect two nodes with "NOT"
|
|
BoolNOT = "NOT"
|
|
)
|
|
|
|
// Builder implements kql Builder interface
|
|
type Builder struct{}
|
|
|
|
// Build creates an ast.Ast based on a kql query
|
|
func (b Builder) Build(q string) (*ast.Ast, error) {
|
|
f, err := Parse("", []byte(q))
|
|
if err != nil {
|
|
var list errList
|
|
errors.As(err, &list)
|
|
|
|
for _, listError := range list {
|
|
var parserError *parserError
|
|
switch {
|
|
case errors.As(listError, &parserError):
|
|
if parserError.Inner != nil {
|
|
return nil, parserError.Inner
|
|
}
|
|
|
|
return nil, listError
|
|
}
|
|
}
|
|
}
|
|
|
|
return f.(*ast.Ast), nil
|
|
}
|
|
|
|
// timeNow mirrors time.Now by default, the only reason why this exists
|
|
// is to monkey patch it from the tests. See PatchTimeNow
|
|
var timeNow = time.Now
|
|
|
|
// PatchTimeNow pins the clock the natural language dates resolve against,
|
|
// so a test can hold "today" still while it runs
|
|
func PatchTimeNow(t func() time.Time) {
|
|
timeNow = t
|
|
}
|