opa: github.com/open-policy-agent/opa/topdown/copypropagation Index | Files

package copypropagation

import "github.com/open-policy-agent/opa/topdown/copypropagation"

Index

Package Files

copypropagation.go

type CopyPropagator Uses

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 Uses

func New(livevars ast.VarSet) *CopyPropagator

New returns a new CopyPropagator that optimizes queries while preserving vars in the livevars set.

func (*CopyPropagator) Apply Uses

func (p *CopyPropagator) Apply(query ast.Body) (result ast.Body)

Apply executes the copy propagation optimization and returns a new query.

func (*CopyPropagator) WithEnsureNonEmptyBody Uses

func (p *CopyPropagator) WithEnsureNonEmptyBody(yes bool) *CopyPropagator

WithEnsureNonEmptyBody configures p to ensure that results are always non-empty.

Package copypropagation imports 2 packages (graph) and is imported by 3 packages. Updated 2019-06-27. Refresh now. Tools for package owners.