Documentation ¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type CopyPropagator ¶
type CopyPropagator struct {
// contains filtered or unexported fields
}
CopyPropagator implements a simple copy propagation optimization to remove intermediate variables in partial evaluation results.
For example, given the query: input.x > 1 where 'input' is unknown, the compiled query would become input.x = a; a > 1 which would remain in the partial evaluation result. The CopyPropagator will remove the variable assignment so that partial evaluation simply outputs input.x > 1.
In many cases, copy propagation can remove all variables from the result of partial evaluation which simplifies evaluation for non-OPA consumers.
In some cases, copy propagation cannot remove all variables. If the output of a built-in call is subsequently used as a ref head, the output variable must be kept. For example. sort(input, x); x[0] == 1. In this case, copy propagation cannot replace x[0] == 1 with sort(input, x)[0] == 1 as this is not legal.
func New ¶
func New(livevars ast.VarSet) *CopyPropagator
New returns a new CopyPropagator that optimizes queries while preserving vars in the livevars set.
func (*CopyPropagator) Apply ¶
func (p *CopyPropagator) Apply(query ast.Body) (result ast.Body)
Apply executes the copy propagation optimization and returns a new query.
func (*CopyPropagator) WithEnsureNonEmptyBody ¶ added in v0.9.2
func (p *CopyPropagator) WithEnsureNonEmptyBody(yes bool) *CopyPropagator
WithEnsureNonEmptyBody configures p to ensure that results are always non-empty.