func (s *scanner) readPage(r io.Reader, header *thrift.PageHeader) error { switch header.GetType() { case thrift.PageType_INDEX_PAGE: if !header.IsSetIndexPageHeader() { return nil } s.indexPage = NewIndexPage(header.GetIndexPageHeader()) // TODO read indexPage return nil case thrift.PageType_DICTIONARY_PAGE: if !header.IsSetDictionaryPageHeader() { return fmt.Errorf("bad file format:DictionaryPageHeader flag was not set") } dictHeader := header.GetDictionaryPageHeader() s.dictionary = NewDictionaryPage(s.schema, dictHeader) return s.dictionary.Decode(r) case thrift.PageType_DATA_PAGE_V2: panic("nyi") case thrift.PageType_DATA_PAGE: s.totalRead += int(header.GetDataPageHeader().GetNumValues()) if !header.IsSetDataPageHeader() { return fmt.Errorf("bad file format: DataPageHeader flag was not set") } s.dataPage = NewDataPage(s.schema, header.GetDataPageHeader()) return s.dataPage.ReadAll(r) default: return fmt.Errorf("unknown PageHeader.PageType: %s", header.GetType()) } }