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

Function NewReader

sio/anyio/reader.go:33–145  ·  view source on GitHub ↗
(sctx *super.Context, r io.Reader, opts ReaderOpts)

Source from the content-addressed store, hash-verified

31}
32
33func NewReader(sctx *super.Context, r io.Reader, opts ReaderOpts) (sio.ReadCloser, error) {
34 if opts.Format != "" && opts.Format != "auto" {
35 return lookupReader(sctx, r, opts)
36 }
37
38 var parquetErr, csupErr error
39 if rs, ok := r.(io.ReadSeeker); ok {
40 if n, err := rs.Seek(0, io.SeekCurrent); err == nil {
41 var rc sio.ReadCloser
42 rc, parquetErr = parquetio.NewReader(sctx, rs, opts.Fields)
43 if parquetErr == nil {
44 return rc, nil
45 }
46 if _, err := rs.Seek(n, io.SeekStart); err != nil {
47 return nil, err
48 }
49 var zr sio.Reader
50 zr, csupErr = csupio.NewReader(sctx, rs, opts.Fields)
51 if csupErr == nil {
52 return sio.NopReadCloser(zr), nil
53 }
54 if _, err := rs.Seek(n, io.SeekStart); err != nil {
55 return nil, err
56 }
57 } else {
58 parquetErr = err
59 csupErr = err
60 }
61 parquetErr = fmt.Errorf("parquet: %w", parquetErr)
62 csupErr = fmt.Errorf("csup: %w", csupErr)
63 } else {
64 parquetErr = errors.New("parquet: auto-detection requires seekable input")
65 csupErr = errors.New("csup: auto-detection requires seekable input")
66 }
67
68 track := NewTrack(r)
69
70 arrowsErr := isArrowStream(track)
71 if arrowsErr == nil {
72 return arrowio.NewReader(sctx, track.Reader())
73 }
74 arrowsErr = fmt.Errorf("arrows: %w", arrowsErr)
75 track.Reset()
76
77 zeekErr := match(zeekio.NewReader(super.NewContext(), track), "zeek", 1)
78 if zeekErr == nil {
79 return sio.NopReadCloser(zeekio.NewReader(sctx, track.Reader())), nil
80 }
81 track.Reset()
82
83 // JSUP must come before JSON and SUP since it is a subset of both.
84 jsupErr := match(jsupio.NewReader(super.NewContext(), track), "jsup", 1)
85 if jsupErr == nil {
86 return sio.NopReadCloser(jsupio.NewReader(sctx, track.Reader())), nil
87 }
88 track.Reset()
89
90 // JSON comes before SUP because the JSON reader is faster than the

Callers 7

isValidFunction · 0.92
runOneBoomerangFunction · 0.92
runFunction · 0.92
handleBranchLoadFunction · 0.92
UnmarshalMethod · 0.92
newInputReaderFunction · 0.92
NewFileFunction · 0.70

Calls 15

ReaderMethod · 0.95
ResetMethod · 0.95
NewReaderFunction · 0.92
NewReaderFunction · 0.92
NopReadCloserFunction · 0.92
NewReaderFunction · 0.92
NewReaderFunction · 0.92
NewContextFunction · 0.92
NewReaderFunction · 0.92
NewReaderFunction · 0.92
NewReaderFunction · 0.92
NewReaderWithOptsFunction · 0.92

Tested by 2

isValidFunction · 0.74
runOneBoomerangFunction · 0.74