(ctx context.Context, r sio.Reader, filterExpr Pushdown)
| 48 | } |
| 49 | |
| 50 | func newScanner(ctx context.Context, r sio.Reader, filterExpr Pushdown) (Scanner, error) { |
| 51 | var sa ScannerAble |
| 52 | if zf, ok := r.(*File); ok { |
| 53 | sa, _ = zf.Reader.(ScannerAble) |
| 54 | } else { |
| 55 | sa, _ = r.(ScannerAble) |
| 56 | } |
| 57 | if sa != nil { |
| 58 | return sa.NewScanner(ctx, filterExpr) |
| 59 | } |
| 60 | var f expr.Evaluator |
| 61 | if filterExpr != nil { |
| 62 | var err error |
| 63 | if f, err = filterExpr.DataFilter(); err != nil { |
| 64 | return nil, err |
| 65 | } |
| 66 | } |
| 67 | sc := &scanner{reader: r, filter: f, ctx: ctx} |
| 68 | sc.Puller = NewPuller(sc) |
| 69 | return sc, nil |
| 70 | } |
| 71 | |
| 72 | type scanner struct { |
| 73 | Puller |
no test coverage detected