This commit is contained in:
Alexey Milovidov 2015-12-16 05:32:49 +03:00
parent 9d16702f84
commit 0939b5e881

View File

@ -43,10 +43,8 @@ public:
std::shared_ptr<const IndexForNativeFormat> & index_, std::shared_ptr<const IndexForNativeFormat> & index_,
IndexForNativeFormat::Blocks::const_iterator index_begin_, IndexForNativeFormat::Blocks::const_iterator index_begin_,
IndexForNativeFormat::Blocks::const_iterator index_end_) IndexForNativeFormat::Blocks::const_iterator index_end_)
: column_names(column_names_.begin(), column_names_.end()), storage(storage_), : storage(storage_), max_read_buffer_size(max_read_buffer_size_),
index(index_), index_begin(index_begin_), index_end(index_end_), index(index_), index_begin(index_begin_), index_end(index_end_)
data_in(std::make_unique<CompressedReadBufferFromFile>(storage.full_path() + "data.bin", 0, 0, max_read_buffer_size_)),
block_in(std::make_unique<NativeBlockInputStream>(*data_in, 0, true, index_begin, index_end))
{ {
} }
@ -55,9 +53,7 @@ public:
String getID() const override String getID() const override
{ {
std::stringstream s; std::stringstream s;
s << "StripeLog"; s << this;
for (const auto & name : column_names)
s << ", " << name; /// NOTE Отсутствует эскейпинг.
return s.str(); return s.str();
} }
@ -66,6 +62,17 @@ protected:
{ {
Block res; Block res;
if (!started)
{
started = true;
data_in = std::make_unique<CompressedReadBufferFromFile>(
storage.full_path() + "data.bin", 0, 0,
std::min(max_read_buffer_size, Poco::File(storage.full_path() + "data.bin").getSize()));
block_in = std::make_unique<NativeBlockInputStream>(*data_in, 0, true, index_begin, index_end);
}
if (block_in) if (block_in)
{ {
res = block_in->read(); res = block_in->read();
@ -83,16 +90,18 @@ protected:
} }
private: private:
NameSet column_names;
StorageStripeLog & storage; StorageStripeLog & storage;
size_t max_read_buffer_size;
std::shared_ptr<const IndexForNativeFormat> index; std::shared_ptr<const IndexForNativeFormat> index;
IndexForNativeFormat::Blocks::const_iterator index_begin; IndexForNativeFormat::Blocks::const_iterator index_begin;
IndexForNativeFormat::Blocks::const_iterator index_end; IndexForNativeFormat::Blocks::const_iterator index_end;
/** unique_ptr - чтобы удалять объекты (освобождать буферы) после исчерпания источника /** unique_ptr - чтобы создавать объекты только при первом чтении
* и удалять объекты (освобождать буферы) после исчерпания источника
* - для экономии оперативки при использовании большого количества источников. * - для экономии оперативки при использовании большого количества источников.
*/ */
bool started = false;
std::unique_ptr<CompressedReadBufferFromFile> data_in; std::unique_ptr<CompressedReadBufferFromFile> data_in;
std::unique_ptr<NativeBlockInputStream> block_in; std::unique_ptr<NativeBlockInputStream> block_in;
}; };