filter

package
v0.0.0-...-6b7ec55 Latest Latest
Warning

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

Go to latest
Published: Nov 1, 2024 License: MIT Imports: 6 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Build

func Build[T any](feb FilterExpresssionBuilder[T], fe *FilterExpression) (t T, err error)

func NewParser

func NewParser() *participle.Parser[FilterExpression]

Types

type BsonBuilder

type BsonBuilder struct{}

func (*BsonBuilder) ComparisonOperator

func (*BsonBuilder) ComparisonOperator(op ComparisonOperator) (func(string, *Value) bson.M, error)

func (*BsonBuilder) LogicalOperator

func (*BsonBuilder) LogicalOperator(op LogicalOperator) (func(...bson.M) bson.M, error)

type ComparisonOperator

type ComparisonOperator string
const (
	ComparisonOperatorEqual          ComparisonOperator = `=`
	ComparisonOperatorGreater        ComparisonOperator = `>`
	ComparisonOperatorGreaterOrEqual ComparisonOperator = `>=`
	ComparisonOperatorLess           ComparisonOperator = `<`
	ComparisonOperatorLessOrEqual    ComparisonOperator = `<=`
	ComparisonOperatorLike           ComparisonOperator = "~"
)

type ComparisonOperatorMapper

type ComparisonOperatorMapper[T any] interface {
	ComparisonOperator(ComparisonOperator) (func(string, *Value) T, error)
}

type Filter

type Filter struct {
	Value      *Value             `parser:"@@"`
	Identifier string             `parser:"@Ident"`
	Operator   ComparisonOperator `parser:"@( '=' | '>''=' | '<''=' | '>' | '<' | '~' )"`
}

type FilterExpression

type FilterExpression struct {
	Logic   LogicalOperator             `parser:"@( 'and' | 'or' | 'not' )"`
	Filters []*FilterOrFilterExpression `parser:"'(' @@ (',' @@ )* ')'"`
}

func AndR

func AndR(filters ...*FilterOrFilterExpression) *FilterExpression

AndR returns a FilterExpression which can be the root of a filter expression with and logic

func NotR

NotR returns a FilterExpression which can be the root of a filter expression with not logic

func OrR

OrR returns a FilterExpression which can be the root of a filter expression with or logic

func (*FilterExpression) ToBson

func (fe *FilterExpression) ToBson() (bson.M, error)

func (*FilterExpression) ToGorm

func (fe *FilterExpression) ToGorm() (clause.Expression, error)

type FilterExpresssionBuilder

type FilterExpresssionBuilder[T any] interface {
	LogicalOperatorMapper[T]
	ComparisonOperatorMapper[T]
}

type FilterOrFilterExpression

type FilterOrFilterExpression struct {
	Filter           *Filter           `parser:"  @@"`
	FilterExpression *FilterExpression `parser:"| @@"`
}

func AndI

AndI returns a FilterOrFilterExpression which is an intermediate part of a filter expression with and logic

func NewFilter

NewFilter is a shorthand for Filter initialization

func NewFilterExpression

func NewFilterExpression(logic LogicalOperator, filters ...*FilterOrFilterExpression) *FilterOrFilterExpression

NewFilter is a shorthand for FilterExpression initialization

func NotI

NotI returns a FilterOrFilterExpression which is an intermediate part of a filter expression with not logic

func OrI

OrI returns a FilterOrFilterExpression which is an intermediate part of a filter expression with or logic

type GormBuilder

type GormBuilder struct{}

func (*GormBuilder) ComparisonOperator

func (*GormBuilder) ComparisonOperator(op ComparisonOperator) (func(string, *Value) clause.Expression, error)

func (*GormBuilder) LogicalOperator

func (*GormBuilder) LogicalOperator(op LogicalOperator) (func(...clause.Expression) clause.Expression, error)

type LogicalOperator

type LogicalOperator string
const (
	LogicalOperatorAnd LogicalOperator = `and`
	LogicalOperatorOr  LogicalOperator = `or`
	LogicalOperatorNot LogicalOperator = `not`
)

type LogicalOperatorMapper

type LogicalOperatorMapper[T any] interface {
	LogicalOperator(LogicalOperator) (func(...T) T, error)
}

type Value

type Value struct {
	String  *string  `parser:"  @String"`
	Int     *int64   `parser:"| @Int"`
	Float   *float64 `parser:"| @Float"`
	Boolean *boolean `parser:"| @( 'true' | 'false' )"`
	Null    *null    `parser:"| @( 'null' )"`
}

func Boolean

func Boolean(b bool) *Value

Boolean creates a bool value

func Float

func Float(f float64) *Value

Float creates a float64 value

func Int

func Int(i int64) *Value

Int creates an int64 value

func Null

func Null() *Value

Null creates a nil value

func String

func String(s string) *Value

String creates a string value

func (*Value) Primitive

func (v *Value) Primitive() any

Primitive returns the value in primitive Go types

Jump to

Keyboard shortcuts

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