Like Prometheus, but for logs.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
loki/pkg/expr/expr.go

67 lines
2.0 KiB

// Package expr provides utilities for evaluating expressions against a
// [columnar.RecordBatch].
//
// Package expr is EXPERIMENTAL and currently only intended to be used by
// [github.com/grafana/loki/v3/pkg/dataobj].
package expr
import (
"github.com/grafana/regexp"
"github.com/grafana/loki/v3/pkg/columnar"
)
// Expression represents an operation that can be evaluated to produce a result.
type Expression interface{ isExpr() }
// Types implementing [Expression].
type (
// Constant is an [Expression] that produces a single scalar value when
// evaluated.
Constant struct{ Value columnar.Scalar }
// Column is an [Expression] that looks up the column by name in the record
// batch supplied to [Evaluate].
//
// If the column doesn't exist, a Null column is produced.
Column struct{ Name string }
// Unary is an [Expression] that performs a unary operation against a single
// argument.
//
// The result of the expression depends on value of [UnaryOp]. The documentation
// of [UnaryOp] will describe the behavior of the expression.
Unary struct {
Op UnaryOp
Value Expression
}
// Binary is an [Expression] that performs a binary operation against a left and
// a right expression.
//
// The result of the expression depends on value of [BinaryOp]. The documentation
// of [BinaryOp] will describe the behavior of the expression.
Binary struct {
Left Expression
Op BinaryOp
Right Expression
}
// Regexp is an [Expression] used as the right-hand side of a
// [BinaryOpMatchRegex].
//
// Regexp cannot be evaluated directly into a datum.
Regexp struct{ Expression *regexp.Regexp }
// ValueSet is an [Expression] used as the right-hand side of a [BinaryOpIn].
//
// ValueSet cannot be evaluated directly into a datum.
ValueSet struct{ Values *columnar.Set }
)
func (*Constant) isExpr() {}
func (*Column) isExpr() {}
func (*Unary) isExpr() {}
func (*Binary) isExpr() {}
func (*Regexp) isExpr() {}
func (*ValueSet) isExpr() {}