(done bool)
| 119 | } |
| 120 | |
| 121 | func (s *SearchScanner) Pull(done bool) (sbuf.Batch, error) { |
| 122 | if done { |
| 123 | var err error |
| 124 | if s.scanner != nil { |
| 125 | _, err = s.scanner.Pull(true) |
| 126 | s.scanner = nil |
| 127 | } |
| 128 | return nil, err |
| 129 | } |
| 130 | for { |
| 131 | if s.scanner == nil { |
| 132 | o, b, err := s.parent.Pull(done) |
| 133 | if b == nil || err != nil { |
| 134 | return nil, err |
| 135 | } |
| 136 | ranges, err := data.RangeFromBitVector(s.rctx.Context, s.pool.Storage(), s.pool.DataPath, o, b) |
| 137 | if err != nil { |
| 138 | return nil, err |
| 139 | } |
| 140 | if len(ranges) == 0 { |
| 141 | continue |
| 142 | } |
| 143 | s.scanner, err = newObjectScanner(s.rctx.Context, s.rctx.Sctx, s.pool, o, ranges, s.pushdown, s.progress) |
| 144 | if err != nil { |
| 145 | return nil, err |
| 146 | } |
| 147 | } |
| 148 | batch, err := s.scanner.Pull(false) |
| 149 | if err != nil { |
| 150 | return nil, err |
| 151 | } |
| 152 | if batch != nil { |
| 153 | return batch, nil |
| 154 | } |
| 155 | s.scanner = nil |
| 156 | } |
| 157 | } |
| 158 | |
| 159 | func newScanner(ctx context.Context, sctx *super.Context, pool *db.Pool, u *sup.UnmarshalBSUPContext, pruner expr.Evaluator, pushdown sbuf.Pushdown, progress *vio.Progress, val super.Value) (sbuf.Puller, *data.Object, error) { |
| 160 | named, ok := val.Type().(*super.TypeNamed) |
nothing calls this directly
no test coverage detected