forked from araddon/qlbridge
/
scanner_csv.go
37 lines (31 loc) · 986 Bytes
/
scanner_csv.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package files
import (
u "github.com/araddon/gou"
"github.com/lytics/cloudstorage"
"github.com/araddon/qlbridge/datasource"
"github.com/araddon/qlbridge/schema"
)
var (
// ensuure our csv handler implements FileHandler interface
_ FileHandler = (*csvFiles)(nil)
)
func init() {
RegisterFileHandler("csv", &csvFiles{})
}
// the built in csv filehandler
type csvFiles struct {
appendcols []string
}
func (m *csvFiles) Init(store FileStore, ss *schema.Schema) error { return nil }
func (m *csvFiles) FileAppendColumns() []string { return m.appendcols }
func (m *csvFiles) File(path string, obj cloudstorage.Object) *FileInfo {
return FileInfoFromCloudObject(path, obj)
}
func (m *csvFiles) Scanner(store cloudstorage.StoreReader, fr *FileReader) (schema.ConnScanner, error) {
csv, err := datasource.NewCsvSource(fr.Table, 0, fr.F, fr.Exit)
if err != nil {
u.Errorf("Could not open file for csv reading %v", err)
return nil, err
}
return csv, nil
}