提交 d1aeaedf 编写于 作者: A Alexey Milovidov

dbms: added totals and extremes to Pretty* and TabSeparated* formats [#METR-9365].

上级 713d0c46
......@@ -18,7 +18,13 @@ public:
void write(const Block & block);
void writeSuffix();
void setTotals(const Block & totals_) { totals = totals_; }
void setExtremes(const Block & extremes_) { extremes = extremes_; }
protected:
void writeTotals();
void writeExtremes();
typedef std::vector<size_t> Widths_t;
/// Вычислить видимую (при выводе на консоль с кодировкой UTF-8) ширину значений и имён столбцов.
......@@ -30,6 +36,9 @@ protected:
size_t terminal_width;
bool no_escapes;
Block totals;
Block extremes;
};
}
......@@ -24,14 +24,23 @@ public:
void writeFieldDelimiter();
void writeRowEndDelimiter();
void writePrefix();
void writeSuffix();
void setTotals(const Block & totals_) { totals = totals_; }
void setExtremes(const Block & extremes_) { extremes = extremes_; }
protected:
void writeTotals();
void writeExtremes();
WriteBuffer & ostr;
const Block sample;
bool with_names;
bool with_types;
DataTypes data_types;
size_t field_number;
Block totals;
Block extremes;
};
}
......
......@@ -213,6 +213,30 @@ void PrettyBlockOutputStream::writeSuffix()
writeIntText(max_rows, ostr);
writeCString(".\n", ostr);
}
total_rows = 0;
writeTotals();
writeExtremes();
}
void PrettyBlockOutputStream::writeTotals()
{
if (totals)
{
writeCString("\nTotals:\n", ostr);
write(totals);
}
}
void PrettyBlockOutputStream::writeExtremes()
{
if (extremes)
{
writeCString("\nExtremes:\n", ostr);
write(extremes);
}
}
......
......@@ -45,8 +45,27 @@ void PrettyCompactMonoBlockOutputStream::writeSuffix()
}
writeBottom(max_widths);
PrettyBlockOutputStream::writeSuffix();
if (total_rows >= max_rows)
{
writeCString(" Showed first ", ostr);
writeIntText(max_rows, ostr);
writeCString(".\n", ostr);
}
total_rows = 0;
if (totals)
{
writeCString("\nTotals:\n", ostr);
PrettyCompactBlockOutputStream::write(totals);
}
if (extremes)
{
writeCString("\nExtremes:\n", ostr);
PrettyCompactBlockOutputStream::write(extremes);
}
}
}
......@@ -109,6 +109,10 @@ void PrettySpaceBlockOutputStream::writeSuffix()
writeIntText(max_rows, ostr);
writeCString(".", ostr);
}
total_rows = 0;
writeTotals();
writeExtremes();
}
}
......@@ -62,4 +62,62 @@ void TabSeparatedRowOutputStream::writeRowEndDelimiter()
field_number = 0;
}
void TabSeparatedRowOutputStream::writeSuffix()
{
writeTotals();
writeExtremes();
}
void TabSeparatedRowOutputStream::writeTotals()
{
if (totals)
{
size_t columns = totals.columns();
writeChar('\n', ostr);
writeRowStartDelimiter();
for (size_t j = 0; j < columns; ++j)
{
if (j != 0)
writeFieldDelimiter();
writeField((*totals.getByPosition(j).column)[0]);
}
writeRowEndDelimiter();
}
}
void TabSeparatedRowOutputStream::writeExtremes()
{
if (extremes)
{
size_t rows = extremes.rows();
size_t columns = extremes.columns();
writeChar('\n', ostr);
for (size_t i = 0; i < rows; ++i)
{
if (i != 0)
writeRowBetweenDelimiter();
writeRowStartDelimiter();
for (size_t j = 0; j < columns; ++j)
{
if (j != 0)
writeFieldDelimiter();
writeField((*extremes.getByPosition(j).column)[i]);
}
writeRowEndDelimiter();
}
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册