PrettyBlockOutputStream.h 1.3 KB
Newer Older
A
Alexey Milovidov 已提交
1 2 3 4
#pragma once

#include <DB/DataStreams/IBlockOutputStream.h>

5
#define PRETTY_FORMAT_DEFAULT_MAX_ROWS 10000
A
Alexey Milovidov 已提交
6

A
Alexey Milovidov 已提交
7 8 9 10

namespace DB
{

A
Alexey Milovidov 已提交
11 12 13
class WriteBuffer;


A
Alexey Milovidov 已提交
14 15 16 17 18
/** Выводит результат в виде красивых таблиц.
  */
class PrettyBlockOutputStream : public IBlockOutputStream
{
public:
19 20
	/// no_escapes - не использовать ANSI escape sequences - для отображения в браузере, а не в консоли.
	PrettyBlockOutputStream(WriteBuffer & ostr_, bool no_escapes_ = false, size_t max_rows_ = PRETTY_FORMAT_DEFAULT_MAX_ROWS);
A
Alexey Milovidov 已提交
21

22 23
	void write(const Block & block) override;
	void writeSuffix() override;
24

A
Alexey Milovidov 已提交
25
	void flush() override;
26 27 28

	void setTotals(const Block & totals_) override { totals = totals_; }
	void setExtremes(const Block & extremes_) override { extremes = extremes_; }
29

A
Alexey Milovidov 已提交
30
protected:
31 32 33
	void writeTotals();
	void writeExtremes();

34
	using Widths_t = std::vector<size_t>;
A
Alexey Milovidov 已提交
35 36 37

	/// Вычислить видимую (при выводе на консоль с кодировкой UTF-8) ширину значений и имён столбцов.
	void calculateWidths(Block & block, Widths_t & max_widths, Widths_t & name_widths);
38

A
Alexey Milovidov 已提交
39
	WriteBuffer & ostr;
A
Alexey Milovidov 已提交
40
	size_t max_rows;
A
Alexey Milovidov 已提交
41
	size_t total_rows;
A
Alexey Milovidov 已提交
42
	size_t terminal_width;
43 44

	bool no_escapes;
45 46 47

	Block totals;
	Block extremes;
A
Alexey Milovidov 已提交
48 49 50
};

}