MCPcopy Create free account
hub / github.com/brimdata/super / OptimizeDeleter

Method OptimizeDeleter

compiler/optimizer/optimizer.go:146–199  ·  view source on GitHub ↗
(main *dag.Main, replicas int)

Source from the content-addressed store, hash-verified

144}
145
146func (o *Optimizer) OptimizeDeleter(main *dag.Main, replicas int) error {
147 seq := main.Body
148 if len(seq) != 3 {
149 return errors.New("internal error: bad deleter structure")
150 }
151 scan, ok := seq[0].(*dag.DeleteScan)
152 if !ok {
153 return errors.New("internal error: bad deleter structure")
154 }
155 filter, ok := seq[1].(*dag.FilterOp)
156 if !ok {
157 return errors.New("internal error: bad deleter structure")
158 }
159 output, ok := seq[2].(*dag.OutputOp)
160 if !ok {
161 return errors.New("internal error: bad deleter structure")
162 }
163 lister := &dag.ListerScan{
164 Kind: "ListerScan",
165 Pool: scan.ID,
166 Commit: scan.Commit,
167 }
168 sortKeys, err := o.sortKeysOfSource(lister)
169 if err != nil {
170 return err
171 }
172 deleter := &dag.DeleterScan{
173 Kind: "DeleterScan",
174 Pool: scan.ID,
175 Where: filter.Expr,
176 //XXX KeyPruner?
177 }
178 lister.KeyPruner = maybeNewRangePruner(filter.Expr, sortKeys)
179 scatter := &dag.ScatterOp{Kind: "ScatterOp"}
180 for range replicas {
181 scatter.Paths = append(scatter.Paths, dag.CopySeq(dag.Seq{deleter}))
182 }
183 var merge dag.Op
184 if sortKeys.IsNil() {
185 merge = &dag.CombineOp{Kind: "CombineOp"}
186 } else {
187 sortKey := sortKeys.Primary()
188 merge = &dag.MergeOp{
189 Kind: "MergeOp",
190 Exprs: []dag.SortExpr{{
191 Key: dag.NewThis(sortKey.Key),
192 Order: sortKey.Order,
193 Nulls: sortKey.Order.NullsMax(true),
194 }},
195 }
196 }
197 main.Body = dag.Seq{lister, scatter, merge, output}
198 return nil
199}
200
201func (o *Optimizer) optimizeSourcePaths(seq dag.Seq) (dag.Seq, error) {
202 return walkEntries(seq, func(seq dag.Seq) (dag.Seq, error) {

Callers 1

NewDeleteQueryMethod · 0.80

Calls 8

sortKeysOfSourceMethod · 0.95
CopySeqFunction · 0.92
NewThisFunction · 0.92
maybeNewRangePrunerFunction · 0.85
NewMethod · 0.80
IsNilMethod · 0.80
PrimaryMethod · 0.80
NullsMaxMethod · 0.80

Tested by

no test coverage detected