This repository is currently being migrated. It's locked while the migration is in progress.
forked from parsyl/parquet
/
template_bool.go
74 lines (60 loc) · 1.84 KB
/
template_bool.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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package gen
var boolTpl = `{{define "boolField"}}type BoolField struct {
{{parquetType .}}
vals []bool
read func(r {{.StructType}}) {{.TypeName}}
write func(r *{{.StructType}}, vals []{{removeStar .TypeName}})
stats *boolStats
}
func NewBoolField(read func(r {{.StructType}}) {{.TypeName}}, write func(r *{{.StructType}}, vals []{{removeStar .TypeName}}), path []string, opts ...func(*{{parquetType .}})) *BoolField {
return &BoolField{
read: read,
write: write,
RequiredField: parquet.NewRequiredField(path, opts...),
}
}
func (f *BoolField) Schema() parquet.Field {
return parquet.Field{Name: f.Name(), Path: f.Path(), Type: BoolType, RepetitionType: parquet.RepetitionRequired, Types: []int{0}}
}
func (f *BoolField) Write(w io.Writer, meta *parquet.Metadata) error {
ln := len(f.vals)
n := (ln + 7) / 8
rawBuf := make([]byte, n)
for i := 0; i < ln; i++ {
if f.vals[i] {
rawBuf[i/8] = rawBuf[i/8] | (1 << uint32(i%8))
}
}
return f.DoWrite(w, meta, rawBuf, len(f.vals), newBoolStats())
}
func (f *BoolField) Read(r io.ReadSeeker, pg parquet.Page) error {
rr, sizes, err := f.DoRead(r, pg)
if err != nil {
return err
}
f.vals, err = parquet.GetBools(rr, int(pg.N), sizes)
return err
}
func (f *BoolField) Scan(r *{{.StructType}}) {
if len(f.vals) == 0 {
return
}
f.write(r, f.vals)
f.vals = f.vals[1:]
}
func (f *BoolField) Add(r {{.StructType}}) {
v := f.read(r)
f.vals = append(f.vals, v)
}
func (f *BoolField) Levels() ([]uint8, []uint8) {
return nil, nil
}
{{end}}`
var boolStatsTpl = `{{define "boolStats"}}
type boolStats struct {}
func newBoolStats() *boolStats {return &boolStats{}}
func (b *boolStats) NullCount() *int64 {return nil}
func (b *boolStats) DistinctCount() *int64 {return nil}
func (b *boolStats) Min() []byte {return nil}
func (b *boolStats) Max() []byte {return nil}
{{end}}`