Source File
nil_chunk.go
Belonging Package
github.com/polarsignals/frostdb/dynparquet
package dynparquetimport ()// NilColumnChunk is a column chunk that contains a single page with all null// values of the given type, given length and column index of the parent// schema. It implements the parquet.ColumnChunk interface.type NilColumnChunk struct {typ parquet.TypecolumnIndex intnumValues int}// NewNilColumnChunk creates a new column chunk configured with the given type,// column index and number of values in the page.func ( parquet.Type, , int) *NilColumnChunk {return &NilColumnChunk{typ: ,columnIndex: ,numValues: ,}}// NumValues returns the number of values in the column chunk. Implements the// parquet.ColumnChunk interface.func ( *NilColumnChunk) () int64 {return int64(.numValues)}// Type returns the type of the column chunk. Implements the// parquet.ColumnChunk interface.func ( *NilColumnChunk) () parquet.Type {return .typ}// Type returns the index of the column chunk within the parent schema.// Implements the parquet.ColumnChunk interface.func ( *NilColumnChunk) () int {return .columnIndex}// Pages returns an iterator for all pages within the column chunk. This// iterator will only ever return a single page filled with all null values of// the configured amount. Implements the parquet.ColumnChunk interface.func ( *NilColumnChunk) () parquet.Pages {return &nilPages{numValues: .numValues,columnIndex: .columnIndex,typ: .typ,}}// nilPages is an iterator that will only ever return a single page filled with// all null values of the configured amount. It knows the column index of the// schema it belongs to. It implements the parquet.Pages interface.type nilPages struct {numValues intcolumnIndex intread boolseek inttyp parquet.Type}// ReadPage returns the next page in the column chunk. It will only ever return// a single page which returns all null values of the configured amount.// Implements the parquet.Pages interface.func ( *nilPages) () (parquet.Page, error) {if .read {return nil, io.EOF}.read = truereturn &nilPage{numValues: .numValues,columnIndex: .columnIndex,seek: .seek,typ: .typ,}, nil}// Close implements the parquet.Pages interface. Since this is a synthetic// page, it's a no-op.func ( *nilPages) () error {return nil}// nilPage is a page that contains all null values of the configured amount. It// is aware of the column index of the parent schema it belongs to. It// implements the parquet.Page interface.type nilPage struct {numValues intcolumnIndex intseek inttyp parquet.Type}// Column returns the column index of the column in the schema the column// chunk's page belongs to.func ( *nilPage) () int {return .columnIndex}// Type returns the type of the column chunk. Implements the// parquet.ColumnChunk interface.func ( *nilPage) () parquet.Type {return .typ}// Dictionary returns the dictionary page for the column chunk. Since the page// only contains null values, the dictionary is always nil.func ( *nilPage) () parquet.Dictionary {// TODO: Validate that this doesn't require to an empty dictionary of the// correct type.return nil}// NumRows returns the number of rows the page contains.func ( *nilPage) () int64 {return int64(.numValues)}// NumValues returns the number of values the page contains.func ( *nilPage) () int64 {return int64(.numValues)}// NumNulls returns the number of nulls the page contains.func ( *nilPage) () int64 {return int64(.numValues)}// Bounds returns the minimum and maximum values of the page, since all values// in the page are null, both the minimum and maximum values are null.func ( *nilPage) () (, parquet.Value, bool) {return parquet.ValueOf(nil).Level(0, 0, .columnIndex), parquet.ValueOf(nil).Level(0, 0, .columnIndex), true}// Size returns the physical size of the page. Since this page is virtual,// in-memory and has no real size it returns 0.func ( *nilPage) () int64 {// TODO: Return the static size of the struct and its fields instead of 0.// While not strictly necessary, it will make the cumulative size of all// pages more accurate.return 0}// Values returns an iterator for all values in the page. All reads will return// null values with the repetition level and definition level set to 0, and the// appropriate column index configured.func ( *nilPage) () parquet.ValueReader {return &nilValueReader{numValues: .numValues,idx: .columnIndex,read: .seek,}}// nilValueReader s an iterator for all values in the page. All reads will// return null values with the repetition level and definition level set to 0,// and the appropriate column index configured.type nilValueReader struct {numValues intidx intread int}// ReadValues reads the next n values from the page and returns the amount of// values read. It attempts to write the number of values that the `values`// parameter can hold. If less values are left to be read than there is space// for in the `values` parameter, it will return the number of values read and// an `io.EOF` error. Implements the parquet.ValueReader interface.func ( *nilValueReader) ( []parquet.Value) (int, error) {:= 0:= min(len(), .numValues-.read)for ; < ; ++ {[] = parquet.ValueOf(nil).Level(0, 0, .idx)}.read +=if .read >= .numValues {return , io.EOF}return , nil}// DefinitionLevels returns the definition levels of the page. Since the page// contains only null values, all of them are 0. Implements the// parquet.Page interface.func ( *nilPage) () []byte {return nil}// RepetitionLevels returns the definition levels of the page. Since the page// contains only null values, all of them are 0. Implements the// parquet.Page interface.func ( *nilPage) () []byte {return nil}// Data is unimplemented, since the page is virtual and does not need to be// written in its current usage in this package. If that changes this method// needs to be implemented. Implements the parquet.Page interface.func ( *nilPage) () encoding.Values {panic("not implemented")}func ( *nilPage) (, int64) parquet.Page {return &nilPage{numValues: .numValues,columnIndex: .columnIndex,}}// Clone creates a copy of the nilPage. Implements the parquet.Page// interface.func ( *nilPage) () parquet.Page {return &nilPage{numValues: .numValues,columnIndex: .columnIndex,}}// SeekToRow ensures that any page read is positioned at the given row.// Implements the parquet.Pages interface.func ( *nilPages) ( int64) error {.seek = int()return nil}// ColumnIndex returns the column index of the column chunk. Since the// NilColumnChunk is a virtual column chunk only for in-memory purposes, it// returns nil. Implements the parquet.ColumnChunk interface.func ( *NilColumnChunk) () (parquet.ColumnIndex, error) {return nil, nil}// OffsetIndex returns the offset index of the column chunk. Since the// NilColumnChunk is a virtual column chunk only for in-memory purposes, it// returns nil. Implements the parquet.ColumnChunk interface.func ( *NilColumnChunk) () (parquet.OffsetIndex, error) {return nil, nil}// BloomFilter returns the bloomfilter of the column chunk. Since the// NilColumnChunk is a virtual column chunk only for in-memory purposes, it// returns nil. Implements the parquet.ColumnChunk interface.func ( *NilColumnChunk) () parquet.BloomFilter {return nil}
![]() |
The pages are generated with Golds v0.8.2. (GOOS=linux GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds. |