dbms: fixed counting in ReadBuffer [#CONV-2944].

This commit is contained in:
Alexey Milovidov 2012-02-09 23:49:04 +00:00
parent 55f686b861
commit 8997be7209
4 changed files with 7 additions and 6 deletions

View File

@ -25,17 +25,17 @@ namespace DB
class ReadBuffer : public BufferBase
{
public:
/** Создаёт буфер и устанавливает курсор на его конец,
/** Создаёт буфер и устанавливает кусок доступных данных для чтения нулевого размера,
* чтобы при первой попытке чтения вызвалась функция next() для загрузки в буфер новой порции данных.
*/
ReadBuffer(Position ptr, size_t size) : BufferBase(ptr, size, size) {}
ReadBuffer(Position ptr, size_t size) : BufferBase(ptr, size, 0) { working_buffer.resize(0); }
/** Используется, если буфер уже заполнен данными, которые можно читать.
* (в этом случае, передайте 0 в качестве offset)
*/
ReadBuffer(Position ptr, size_t size, size_t offset) : BufferBase(ptr, size, offset) {}
void set(Position ptr, size_t size) { BufferBase::set(ptr, size, size); }
void set(Position ptr, size_t size) { BufferBase::set(ptr, size, 0); working_buffer.resize(0); }
/** прочитать следующие данные и заполнить ими буфер; переместить позицию в начало;
* вернуть false в случае конца, true иначе; кинуть исключение, если что-то не так

View File

@ -19,7 +19,7 @@ private:
bool nextImpl()
{
istr.read(working_buffer.begin(), working_buffer.size());
istr.read(internal_buffer.begin(), internal_buffer.size());
size_t gcount = istr.gcount();
if (!gcount)

View File

@ -26,8 +26,8 @@ int main(int argc, char ** argv)
Poco::Stopwatch stopwatch;
{
DB::WriteBufferFromFile buf("test1");
DB::CompressedWriteBuffer compressed_buf(buf, DB::CompressionMethod::LZ4);
DB::WriteBufferFromFile buf("test1", DBMS_DEFAULT_BUFFER_SIZE, O_WRONLY | O_CREAT | O_TRUNC);
DB::CompressedWriteBuffer compressed_buf(buf);
stopwatch.restart();
for (size_t i = 0; i < n; ++i)

View File

@ -32,6 +32,7 @@ int main(int argc, char ** argv)
DB::readQuotedString(d, in);
std::cout << a << ' ' << b << ' ' << c << '\t' << '\'' << d << '\'' << std::endl;
std::cout << in.count() << std::endl;
}
catch (const DB::Exception & e)
{