query

package
v0.34.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 23, 2021 License: Apache-2.0 Imports: 12 Imported by: 12

Documentation

Overview

Package query provides a parser for a custom query format:

abci.invoice.number=22 AND abci.invoice.owner=Ivan

See query.peg for the grammar, which is a https://en.wikipedia.org/wiki/Parsing_expression_grammar. More: https://github.com/PhilippeSigaud/Pegged/wiki/PEG-Basics

It has a support for numbers (integer and floating point), dates and times.

Index

Constants

View Source
const (
	// DateLayout defines a layout for all dates (`DATE date`)
	DateLayout = "2006-01-02"
	// TimeLayout defines a layout for all times (`TIME time`)
	TimeLayout = time.RFC3339
)
View Source
const (
	MultipleValueTagSeparator = ";"
)

Variables

This section is empty.

Functions

func AsQueryable added in v0.20.0

func AsQueryable(query Query) parsedQuery

func GetReflect added in v0.28.0

func GetReflect(rv reflect.Value, key string) (interface{}, bool)

func GetReflectDepth added in v0.28.0

func GetReflectDepth(rv reflect.Value, key string, maxDepth int) (interface{}, bool)

Pull out values in a nested struct by following path

func IsEmpty added in v0.31.0

func IsEmpty(query Query) bool

func StringFromValue

func StringFromValue(value interface{}) string

func TaggedPrefix added in v0.28.0

func TaggedPrefix(prefix string, tagged Tagged) *taggedPrefix

Types

type Builder

type Builder struct {

	// reusable buffer for building queryString
	bytes.Buffer
	// contains filtered or unexported fields
}

A fluent query builder

func NewBuilder

func NewBuilder(queries ...string) *Builder

Creates a new query builder with a base query that is the conjunction of all queries passed

func (*Builder) And

func (qb *Builder) And(queryBuilders ...*Builder) *Builder

Creates the conjunction of Builder and rightQuery

func (*Builder) AndContains

func (qb *Builder) AndContains(tag string, operand interface{}) *Builder

func (*Builder) AndEquals

func (qb *Builder) AndEquals(tag string, operand interface{}) *Builder

Creates the conjunction of Builder and tag = operand

func (*Builder) AndGreaterThanOrEqual

func (qb *Builder) AndGreaterThanOrEqual(tag string, operand interface{}) *Builder

func (*Builder) AndLessThanOrEqual

func (qb *Builder) AndLessThanOrEqual(tag string, operand interface{}) *Builder

func (*Builder) AndNotEquals added in v0.31.0

func (qb *Builder) AndNotEquals(tag string, operand interface{}) *Builder

func (*Builder) AndStrictlyGreaterThan

func (qb *Builder) AndStrictlyGreaterThan(tag string, operand interface{}) *Builder

func (*Builder) AndStrictlyLessThan

func (qb *Builder) AndStrictlyLessThan(tag string, operand interface{}) *Builder

func (*Builder) Not added in v0.31.0

func (qb *Builder) Not() *Builder

func (*Builder) Or added in v0.31.0

func (qb *Builder) Or(queryBuilders ...*Builder) *Builder

func (*Builder) Query

func (qb *Builder) Query() (Query, error)

func (*Builder) String

func (qb *Builder) String() string

type CombinedTags added in v0.20.0

type CombinedTags []interface{}

func TagsFor added in v0.28.0

func TagsFor(vs ...interface{}) CombinedTags

func (CombinedTags) Get added in v0.20.0

func (ct CombinedTags) Get(key string) (interface{}, bool)

type Condition added in v0.20.0

type Condition struct {
	Tag     string
	Op      Operator
	Operand interface{}
}

Condition represents a single condition within a query and consists of tag (e.g. "tx.gas"), operator (e.g. "=") and operand (e.g. "7").

type Empty

type Empty struct {
}

Empty query matches any set of tags.

func (Empty) MatchError added in v0.28.0

func (empty Empty) MatchError() error

func (Empty) Matches added in v0.20.0

func (Empty) Matches(tags Tagged) bool

Matches always returns true.

func (Empty) Query

func (Empty) Query() (Query, error)

func (Empty) String added in v0.20.0

func (Empty) String() string

type Expression added in v0.28.0

type Expression struct {
	// contains filtered or unexported fields
}

A Boolean expression for the query grammar

func (*Expression) Date added in v0.28.0

func (e *Expression) Date(value string)

func (*Expression) Evaluate added in v0.28.0

func (e *Expression) Evaluate(getTagValue func(tag string) (interface{}, bool)) (bool, error)

Evaluate expects an Execute() to have filled the code of the Expression so it can be run in the little stack machine below

func (*Expression) Number added in v0.28.0

func (e *Expression) Number(value string)

func (*Expression) Operator added in v0.28.0

func (e *Expression) Operator(operator Operator)

func (*Expression) String added in v0.28.0

func (e *Expression) String() string

func (*Expression) Tag added in v0.28.0

func (e *Expression) Tag(value string)

func (*Expression) Time added in v0.28.0

func (e *Expression) Time(value string)

func (*Expression) Value added in v0.28.0

func (e *Expression) Value(value string)

type MatchError added in v0.28.0

type MatchError struct {
	Tagged Tagged
	Cause  error
}

func (*MatchError) Error added in v0.28.0

func (m *MatchError) Error() string

type Operator added in v0.20.0

type Operator uint8

Operator is an operator that defines some kind of relation between tag and operand (equality, etc.).

const (
	OpTerminal Operator = iota
	OpAnd
	OpOr
	OpLessEqual
	OpGreaterEqual
	OpLess
	OpGreater
	OpEqual
	OpContains
	OpNotEqual
	OpNot
)

func (Operator) Arity added in v0.31.0

func (op Operator) Arity() int

func (Operator) String added in v0.28.0

func (op Operator) String() string

type PegQuery added in v0.28.0

type PegQuery struct {
	// contains filtered or unexported fields
}

Query holds the query string and the query parser.

func MustParse added in v0.20.0

func MustParse(s string) *PegQuery

MustParse turns the given string into a query or panics; for tests or others cases where you know the string is valid.

func New added in v0.20.0

func New(s string) (*PegQuery, error)

New parses the given string and returns a query or error if the string is invalid.

func (*PegQuery) ExplainTo added in v0.28.0

func (q *PegQuery) ExplainTo(explainer func(fmt string, args ...interface{}))

func (*PegQuery) MatchError added in v0.28.0

func (q *PegQuery) MatchError() error

Returns whether a matching error occurred (which would result in a false from Matches)

func (*PegQuery) Matches added in v0.28.0

func (q *PegQuery) Matches(tags Tagged) bool

Matches returns true if the query matches the given set of tags, false otherwise.

For example, query "name=John" matches tags = {"name": "John"}. More examples could be found in parser_test.go and query_test.go.

func (*PegQuery) Query added in v0.28.0

func (q *PegQuery) Query() (Query, error)

func (*PegQuery) String added in v0.28.0

func (q *PegQuery) String() string

String returns the original string.

type Query

type Query interface {
	Matches(tags Tagged) bool
	String() string
	MatchError() error
}

func Must

func Must(qry Query, err error) Query

func NewOrEmpty added in v0.24.0

func NewOrEmpty(queryString string) (Query, error)

type QueryParser added in v0.20.0

type QueryParser struct {
	Expression

	Buffer string

	Parse  func(rule ...int) error
	Reset  func()
	Pretty bool
	// contains filtered or unexported fields
}

func (*QueryParser) AST added in v0.20.0

func (t *QueryParser) AST() *node32

func (*QueryParser) Add added in v0.20.0

func (t *QueryParser) Add(rule pegRule, begin, end, depth uint32, index int)

func (*QueryParser) Error added in v0.31.0

func (t *QueryParser) Error() []token32

func (*QueryParser) Execute added in v0.28.0

func (p *QueryParser) Execute()

func (*QueryParser) Expand added in v0.31.0

func (t *QueryParser) Expand(index int)

func (*QueryParser) Highlighter added in v0.31.0

func (p *QueryParser) Highlighter()

func (*QueryParser) Init added in v0.20.0

func (p *QueryParser) Init()

func (*QueryParser) Order added in v0.31.0

func (t *QueryParser) Order() [][]token32

func (*QueryParser) PreOrder added in v0.31.0

func (t *QueryParser) PreOrder() (<-chan state32, [][]token32)

func (*QueryParser) Print added in v0.20.0

func (t *QueryParser) Print()

func (*QueryParser) PrintSyntax added in v0.31.0

func (t *QueryParser) PrintSyntax()

func (*QueryParser) PrintSyntaxTree added in v0.20.0

func (p *QueryParser) PrintSyntaxTree()

func (*QueryParser) Tokens added in v0.20.0

func (t *QueryParser) Tokens() <-chan token32

type Queryable

type Queryable interface {
	Query() (Query, error)
}

func MatchAllQueryable

func MatchAllQueryable() Queryable

type String

type String string

A yet-to-be-parsed query

func (String) Query

func (qs String) Query() (Query, error)

type TagMap added in v0.20.0

type TagMap map[string]interface{}

func (TagMap) Get added in v0.20.0

func (ts TagMap) Get(key string) (value interface{}, ok bool)

type Tagged added in v0.20.0

type Tagged interface {
	Get(key string) (value interface{}, ok bool)
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL