#include #include #include #include #include #include #include #include #include namespace DB { /// Class for reading a single column (or index). class MergeTreeReaderStream { public: enum class ReadingMode { COLUMN, INDEX, }; MergeTreeReaderStream( const String & path_prefix_, const String & data_file_extension_, size_t marks_count_, const MarkRanges & all_mark_ranges, const MergeTreeReaderSettings & settings_, MarkCache * mark_cache, UncompressedCache * uncompressed_cache, size_t file_size, const MergeTreeIndexGranularityInfo * index_granularity_info_, ReadingMode mode_, const ReadBufferFromFileBase::ProfileCallback & profile_callback, clockid_t clock_type); void seekToMark(size_t index); void seekToStart(); ReadBuffer * data_buffer; private: void initMarksLoader(); std::string path_prefix; std::string data_file_extension; size_t marks_count; MarkCache * mark_cache; bool save_marks_in_cache; const MergeTreeIndexGranularityInfo * index_granularity_info; ReadingMode mode; std::unique_ptr cached_buffer; std::unique_ptr non_cached_buffer; MergeTreeMarksLoader marks_loader; }; }