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

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

上级 713d0c46
...@@ -18,7 +18,13 @@ public: ...@@ -18,7 +18,13 @@ public:
void write(const Block & block); void write(const Block & block);
void writeSuffix(); void writeSuffix();
void setTotals(const Block & totals_) { totals = totals_; }
void setExtremes(const Block & extremes_) { extremes = extremes_; }
protected: protected:
void writeTotals();
void writeExtremes();
typedef std::vector<size_t> Widths_t; typedef std::vector<size_t> Widths_t;
/// Вычислить видимую (при выводе на консоль с кодировкой UTF-8) ширину значений и имён столбцов. /// Вычислить видимую (при выводе на консоль с кодировкой UTF-8) ширину значений и имён столбцов.
...@@ -30,6 +36,9 @@ protected: ...@@ -30,6 +36,9 @@ protected:
size_t terminal_width; size_t terminal_width;
bool no_escapes; bool no_escapes;
Block totals;
Block extremes;
}; };
} }
...@@ -24,14 +24,23 @@ public: ...@@ -24,14 +24,23 @@ public:
void writeFieldDelimiter(); void writeFieldDelimiter();
void writeRowEndDelimiter(); void writeRowEndDelimiter();
void writePrefix(); void writePrefix();
void writeSuffix();
void setTotals(const Block & totals_) { totals = totals_; }
void setExtremes(const Block & extremes_) { extremes = extremes_; }
protected: protected:
void writeTotals();
void writeExtremes();
WriteBuffer & ostr; WriteBuffer & ostr;
const Block sample; const Block sample;
bool with_names; bool with_names;
bool with_types; bool with_types;
DataTypes data_types; DataTypes data_types;
size_t field_number; size_t field_number;
Block totals;
Block extremes;
}; };
} }
......
...@@ -213,6 +213,30 @@ void PrettyBlockOutputStream::writeSuffix() ...@@ -213,6 +213,30 @@ void PrettyBlockOutputStream::writeSuffix()
writeIntText(max_rows, ostr); writeIntText(max_rows, ostr);
writeCString(".\n", 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() ...@@ -45,8 +45,27 @@ void PrettyCompactMonoBlockOutputStream::writeSuffix()
} }
writeBottom(max_widths); 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() ...@@ -109,6 +109,10 @@ void PrettySpaceBlockOutputStream::writeSuffix()
writeIntText(max_rows, ostr); writeIntText(max_rows, ostr);
writeCString(".", ostr); writeCString(".", ostr);
} }
total_rows = 0;
writeTotals();
writeExtremes();
} }
} }
...@@ -62,4 +62,62 @@ void TabSeparatedRowOutputStream::writeRowEndDelimiter() ...@@ -62,4 +62,62 @@ void TabSeparatedRowOutputStream::writeRowEndDelimiter()
field_number = 0; 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.
先完成此消息的编辑!
想要评论请 注册