| 26 | } |
| 27 | |
| 28 | func Optimize(ctx context.Context, main *dag.Main, env *exec.Environment, parallel int) error { |
| 29 | // Call optimize to possible push down a filter predicate into the |
| 30 | // rungen.Reader so that the BSUP scanner can do Boyer-Moore. |
| 31 | o := optimizer.New(ctx, env) |
| 32 | if err := o.Optimize(main); err != nil { |
| 33 | return err |
| 34 | } |
| 35 | if parallel > 1 { |
| 36 | // For an internal reader (like a shaper on intake), we don't do |
| 37 | // any parallelization right now though this could be potentially |
| 38 | // beneficial depending on where the bottleneck is for a given shaper. |
| 39 | // See issue #2641. |
| 40 | if err := o.Parallelize(main, parallel); err != nil { |
| 41 | return err |
| 42 | } |
| 43 | } |
| 44 | return nil |
| 45 | } |
| 46 | |
| 47 | func Build(rctx *runtime.Context, main *dag.Main, env *exec.Environment, readers []sio.Reader) (map[string]vio.Puller, *op.DebugChans, vio.Meter, error) { |
| 48 | b := rungen.NewBuilder(rctx, env) |