IBlockOutputStream.h 1.6 KB
Newer Older
1 2
#pragma once

3 4
#include <boost/noncopyable.hpp>

A
Alexey Milovidov 已提交
5
#include <DB/Core/Block.h>
6
#include <DB/Core/Row.h>
7
#include <DB/Storages/IStorage.h>
A
Alexey Milovidov 已提交
8 9 10 11 12


namespace DB
{

13

A
Alexey Milovidov 已提交
14 15
/** Интерфейс потока для записи данных в БД или в сеть, или в консоль и т. п.
  */
16
class IBlockOutputStream : private boost::noncopyable
A
Alexey Milovidov 已提交
17 18
{
public:
19
	IBlockOutputStream() {}
A
Alexey Milovidov 已提交
20 21 22 23 24

	/** Записать блок.
	  */
	virtual void write(const Block & block) = 0;

A
Alexey Milovidov 已提交
25 26 27 28
	/** Записать что-нибудь перед началом всех данных или после конца всех данных.
	  */
	virtual void writePrefix() {}
	virtual void writeSuffix() {}
29 30 31 32

	/** Сбросить имеющиеся буферы для записи.
	  */
	virtual void flush() {}
33

34 35
	/** Методы для установки дополнительной информации для вывода в поддерживающих её форматах.
	  */
36
	virtual void setRowsBeforeLimit(size_t rows_before_limit) {}
37
	virtual void setTotals(const Block & totals) {}
38
	virtual void setExtremes(const Block & extremes) {}
A
Alexey Milovidov 已提交
39

40 41 42 43
	/** Выставлять такой Content-Type при отдаче по HTTP.
	  */
	virtual String getContentType() const { return "text/plain; charset=UTF-8"; }

A
Alexey Milovidov 已提交
44
	virtual ~IBlockOutputStream() {}
45 46 47 48

	/** Не давать изменить таблицу, пока жив поток блоков.
	  */
	void addTableLock(const IStorage::TableStructureReadLockPtr & lock) { table_locks.push_back(lock); }
49

50
protected:
51
	IStorage::TableStructureReadLocks table_locks;
A
Alexey Milovidov 已提交
52 53
};

54 55
using BlockOutputStreamPtr = std::shared_ptr<IBlockOutputStream>;

56
}