mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-25 00:52:02 +00:00
Merge pull request #11324 from ClickHouse/improve-performance-of-client-interactive-mode
Add setting "output_format_pretty_max_value_width".
This commit is contained in:
commit
6864016e22
@ -89,7 +89,18 @@ static int wcwidth(wchar_t wc)
|
||||
}
|
||||
}
|
||||
|
||||
size_t computeWidth(const UInt8 * data, size_t size, size_t prefix) noexcept
|
||||
|
||||
namespace
|
||||
{
|
||||
|
||||
enum ComputeWidthMode
|
||||
{
|
||||
Width, /// Calcualte and return visible width
|
||||
BytesBeforLimit /// Calculate and return the maximum number of bytes when substring fits in visible width.
|
||||
};
|
||||
|
||||
template <ComputeWidthMode mode>
|
||||
static size_t computeWidthImpl(const UInt8 * data, size_t size, size_t prefix, size_t limit) noexcept
|
||||
{
|
||||
UTF8Decoder decoder;
|
||||
size_t width = 0;
|
||||
@ -132,16 +143,24 @@ size_t computeWidth(const UInt8 * data, size_t size, size_t prefix) noexcept
|
||||
++i;
|
||||
}
|
||||
|
||||
/// Now i points to position in bytes after regular ASCII sequence
|
||||
/// and if width > limit, then (width - limit) is the number of extra ASCII characters after width limit.
|
||||
if (mode == BytesBeforLimit && width > limit)
|
||||
return i - (width - limit);
|
||||
|
||||
switch (decoder.decode(data[i]))
|
||||
{
|
||||
case UTF8Decoder::REJECT:
|
||||
{
|
||||
decoder.reset();
|
||||
// invalid sequences seem to have zero width in modern terminals
|
||||
// tested in libvte-based, alacritty, urxvt and xterm
|
||||
i -= rollback;
|
||||
rollback = 0;
|
||||
break;
|
||||
}
|
||||
case UTF8Decoder::ACCEPT:
|
||||
{
|
||||
// there are special control characters that manipulate the terminal output.
|
||||
// (`0x08`, `0x09`, `0x0a`, `0x0b`, `0x0c`, `0x0d`, `0x1b`)
|
||||
// Since we don't touch the original column data, there is no easy way to escape them.
|
||||
@ -149,12 +168,19 @@ size_t computeWidth(const UInt8 * data, size_t size, size_t prefix) noexcept
|
||||
// TODO: multiline support for '\n'
|
||||
|
||||
// special treatment for '\t'
|
||||
size_t next_width = width;
|
||||
if (decoder.codepoint == '\t')
|
||||
width += 8 - (prefix + width) % 8;
|
||||
next_width += 8 - (prefix + width) % 8;
|
||||
else
|
||||
width += wcwidth(decoder.codepoint);
|
||||
next_width += wcwidth(decoder.codepoint);
|
||||
|
||||
if (mode == BytesBeforLimit && next_width > limit)
|
||||
return i - rollback;
|
||||
width = next_width;
|
||||
|
||||
rollback = 0;
|
||||
break;
|
||||
}
|
||||
// continue if we meet other values here
|
||||
default:
|
||||
++rollback;
|
||||
@ -162,7 +188,21 @@ size_t computeWidth(const UInt8 * data, size_t size, size_t prefix) noexcept
|
||||
}
|
||||
|
||||
// no need to handle trailing sequence as they have zero width
|
||||
return width;
|
||||
}
|
||||
return (mode == BytesBeforLimit) ? size : width;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
size_t computeWidth(const UInt8 * data, size_t size, size_t prefix) noexcept
|
||||
{
|
||||
return computeWidthImpl<Width>(data, size, prefix, 0);
|
||||
}
|
||||
|
||||
size_t computeBytesBeforeWidth(const UInt8 * data, size_t size, size_t prefix, size_t limit) noexcept
|
||||
{
|
||||
return computeWidthImpl<BytesBeforLimit>(data, size, prefix, limit);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -99,6 +99,19 @@ int queryConvert(const CharT * bytes, int length)
|
||||
/// and include `\t` to the nearest longer length with multiple of eight.
|
||||
size_t computeWidth(const UInt8 * data, size_t size, size_t prefix = 0) noexcept;
|
||||
|
||||
|
||||
/** Calculate the maximum number of bytes, so that substring of this size fits in 'limit' width.
|
||||
*
|
||||
* For example, we have string "x你好", it has 3 code points and visible width of 5 and byte size of 7.
|
||||
|
||||
* Suppose we have limit = 3.
|
||||
* Then we have to return 4 as maximum number of bytes
|
||||
* and the truncated string will be "x你": two code points, visible width 3, byte size 4.
|
||||
*
|
||||
* The same result will be for limit 4, because the last character would not fit.
|
||||
*/
|
||||
size_t computeBytesBeforeWidth(const UInt8 * data, size_t size, size_t prefix, size_t limit) noexcept;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -211,6 +211,7 @@ struct Settings : public SettingsCollection<Settings>
|
||||
\
|
||||
M(SettingUInt64, output_format_pretty_max_rows, 10000, "Rows limit for Pretty formats.", 0) \
|
||||
M(SettingUInt64, output_format_pretty_max_column_pad_width, 250, "Maximum width to pad all values in a column in Pretty formats.", 0) \
|
||||
M(SettingUInt64, output_format_pretty_max_value_width, 10000, "Maximum width of value to display in Pretty formats. If greater - it will be cut.", 0) \
|
||||
M(SettingBool, output_format_pretty_color, true, "Use ANSI escape sequences to paint colors in Pretty formats", 0) \
|
||||
M(SettingUInt64, output_format_parquet_row_group_size, 1000000, "Row group size in rows.", 0) \
|
||||
M(SettingString, output_format_avro_codec, "", "Compression codec used for output. Possible values: 'null', 'deflate', 'snappy'.", 0) \
|
||||
|
@ -101,6 +101,7 @@ static FormatSettings getOutputFormatSetting(const Settings & settings, const Co
|
||||
format_settings.csv.crlf_end_of_line = settings.output_format_csv_crlf_end_of_line;
|
||||
format_settings.pretty.max_rows = settings.output_format_pretty_max_rows;
|
||||
format_settings.pretty.max_column_pad_width = settings.output_format_pretty_max_column_pad_width;
|
||||
format_settings.pretty.max_value_width = settings.output_format_pretty_max_value_width;
|
||||
format_settings.pretty.color = settings.output_format_pretty_color;
|
||||
format_settings.template_settings.resultset_format = settings.format_template_resultset;
|
||||
format_settings.template_settings.row_format = settings.format_template_row;
|
||||
|
@ -42,6 +42,7 @@ struct FormatSettings
|
||||
{
|
||||
UInt64 max_rows = 10000;
|
||||
UInt64 max_column_pad_width = 250;
|
||||
UInt64 max_value_width = 10000;
|
||||
bool color = true;
|
||||
};
|
||||
|
||||
|
@ -30,14 +30,14 @@ PrettyBlockOutputFormat::PrettyBlockOutputFormat(
|
||||
/// Note that number of code points is just a rough approximation of visible string width.
|
||||
void PrettyBlockOutputFormat::calculateWidths(
|
||||
const Block & header, const Chunk & chunk,
|
||||
WidthsPerColumn & widths, Widths & max_widths, Widths & name_widths)
|
||||
WidthsPerColumn & widths, Widths & max_padded_widths, Widths & name_widths)
|
||||
{
|
||||
size_t num_rows = chunk.getNumRows();
|
||||
size_t num_rows = std::min(chunk.getNumRows(), format_settings.pretty.max_rows);
|
||||
size_t num_columns = chunk.getNumColumns();
|
||||
const auto & columns = chunk.getColumns();
|
||||
|
||||
widths.resize(num_columns);
|
||||
max_widths.resize_fill(num_columns);
|
||||
max_padded_widths.resize_fill(num_columns);
|
||||
name_widths.resize(num_columns);
|
||||
|
||||
/// Calculate widths of all values.
|
||||
@ -57,9 +57,21 @@ void PrettyBlockOutputFormat::calculateWidths(
|
||||
elem.type->serializeAsText(*column, j, out_serialize, format_settings);
|
||||
}
|
||||
|
||||
widths[i][j] = std::min<UInt64>(format_settings.pretty.max_column_pad_width,
|
||||
UTF8::computeWidth(reinterpret_cast<const UInt8 *>(serialized_value.data()), serialized_value.size(), prefix));
|
||||
max_widths[i] = std::max(max_widths[i], widths[i][j]);
|
||||
/// Avoid calculating width of too long strings by limiting the size in bytes.
|
||||
/// Note that it is just an estimation. 4 is the maximum size of Unicode code point in bytes in UTF-8.
|
||||
/// But it's possible that the string is long in bytes but very short in visible size.
|
||||
/// (e.g. non-printable characters, diacritics, combining characters)
|
||||
if (format_settings.pretty.max_value_width)
|
||||
{
|
||||
size_t max_byte_size = format_settings.pretty.max_value_width * 4;
|
||||
if (serialized_value.size() > max_byte_size)
|
||||
serialized_value.resize(max_byte_size);
|
||||
}
|
||||
|
||||
widths[i][j] = UTF8::computeWidth(reinterpret_cast<const UInt8 *>(serialized_value.data()), serialized_value.size(), prefix);
|
||||
max_padded_widths[i] = std::max<UInt64>(max_padded_widths[i],
|
||||
std::min<UInt64>(format_settings.pretty.max_column_pad_width,
|
||||
std::min<UInt64>(format_settings.pretty.max_value_width, widths[i][j])));
|
||||
}
|
||||
|
||||
/// And also calculate widths for names of columns.
|
||||
@ -67,9 +79,9 @@ void PrettyBlockOutputFormat::calculateWidths(
|
||||
// name string doesn't contain Tab, no need to pass `prefix`
|
||||
name_widths[i] = std::min<UInt64>(format_settings.pretty.max_column_pad_width,
|
||||
UTF8::computeWidth(reinterpret_cast<const UInt8 *>(elem.name.data()), elem.name.size()));
|
||||
max_widths[i] = std::max(max_widths[i], name_widths[i]);
|
||||
max_padded_widths[i] = std::max<UInt64>(max_padded_widths[i], name_widths[i]);
|
||||
}
|
||||
prefix += max_widths[i] + 3;
|
||||
prefix += max_padded_widths[i] + 3;
|
||||
}
|
||||
}
|
||||
|
||||
@ -174,18 +186,20 @@ void PrettyBlockOutputFormat::write(const Chunk & chunk, PortKind port_kind)
|
||||
if (i != 0)
|
||||
writeString(middle_values_separator_s, out);
|
||||
|
||||
writeCString("│ ", out);
|
||||
writeCString("│", out);
|
||||
|
||||
for (size_t j = 0; j < num_columns; ++j)
|
||||
{
|
||||
if (j != 0)
|
||||
writeCString(" │ ", out);
|
||||
writeCString("│", out);
|
||||
|
||||
const auto & type = *header.getByPosition(j).type;
|
||||
writeValueWithPadding(*columns[j], type, i, widths[j].empty() ? max_widths[j] : widths[j][i], max_widths[j]);
|
||||
writeValueWithPadding(*columns[j], type, i,
|
||||
widths[j].empty() ? max_widths[j] : widths[j][i],
|
||||
max_widths[j]);
|
||||
}
|
||||
|
||||
writeCString(" │\n", out);
|
||||
writeCString("│\n", out);
|
||||
}
|
||||
|
||||
writeString(bottom_separator_s, out);
|
||||
@ -197,20 +211,42 @@ void PrettyBlockOutputFormat::write(const Chunk & chunk, PortKind port_kind)
|
||||
void PrettyBlockOutputFormat::writeValueWithPadding(
|
||||
const IColumn & column, const IDataType & type, size_t row_num, size_t value_width, size_t pad_to_width)
|
||||
{
|
||||
String serialized_value = " ";
|
||||
{
|
||||
WriteBufferFromString out_serialize(serialized_value, WriteBufferFromString::AppendModeTag());
|
||||
type.serializeAsText(column, row_num, out_serialize, format_settings);
|
||||
}
|
||||
|
||||
if (value_width > format_settings.pretty.max_value_width)
|
||||
{
|
||||
serialized_value.resize(UTF8::computeBytesBeforeWidth(
|
||||
reinterpret_cast<const UInt8 *>(serialized_value.data()), serialized_value.size(), 0, 1 + format_settings.pretty.max_value_width));
|
||||
|
||||
if (format_settings.pretty.color)
|
||||
serialized_value += "\033[31;1m⋯\033[0m";
|
||||
else
|
||||
serialized_value += "⋯";
|
||||
|
||||
value_width = format_settings.pretty.max_value_width;
|
||||
}
|
||||
else
|
||||
serialized_value += ' ';
|
||||
|
||||
auto write_padding = [&]()
|
||||
{
|
||||
for (size_t k = 0; k < pad_to_width - value_width; ++k)
|
||||
writeChar(' ', out);
|
||||
if (pad_to_width > value_width)
|
||||
for (size_t k = 0; k < pad_to_width - value_width; ++k)
|
||||
writeChar(' ', out);
|
||||
};
|
||||
|
||||
if (type.shouldAlignRightInPrettyFormats())
|
||||
{
|
||||
write_padding();
|
||||
type.serializeAsText(column, row_num, out, format_settings);
|
||||
out.write(serialized_value.data(), serialized_value.size());
|
||||
}
|
||||
else
|
||||
{
|
||||
type.serializeAsText(column, row_num, out, format_settings);
|
||||
out.write(serialized_value.data(), serialized_value.size());
|
||||
write_padding();
|
||||
}
|
||||
}
|
||||
|
@ -52,7 +52,7 @@ protected:
|
||||
|
||||
void calculateWidths(
|
||||
const Block & header, const Chunk & chunk,
|
||||
WidthsPerColumn & widths, Widths & max_widths, Widths & name_widths);
|
||||
WidthsPerColumn & widths, Widths & max_padded_widths, Widths & name_widths);
|
||||
|
||||
void writeValueWithPadding(
|
||||
const IColumn & column, const IDataType & type, size_t row_num, size_t value_width, size_t pad_to_width);
|
||||
|
@ -83,19 +83,19 @@ void PrettyCompactBlockOutputFormat::writeRow(
|
||||
{
|
||||
size_t num_columns = max_widths.size();
|
||||
|
||||
writeCString("│ ", out);
|
||||
writeCString("│", out);
|
||||
|
||||
for (size_t j = 0; j < num_columns; ++j)
|
||||
{
|
||||
if (j != 0)
|
||||
writeCString(" │ ", out);
|
||||
writeCString("│", out);
|
||||
|
||||
const auto & type = *header.getByPosition(j).type;
|
||||
const auto & cur_widths = widths[j].empty() ? max_widths[j] : widths[j][row_num];
|
||||
writeValueWithPadding(*columns[j], type, row_num, cur_widths, max_widths[j]);
|
||||
}
|
||||
|
||||
writeCString(" │\n", out);
|
||||
writeCString("│\n", out);
|
||||
}
|
||||
|
||||
void PrettyCompactBlockOutputFormat::write(const Chunk & chunk, PortKind port_kind)
|
||||
|
@ -34,6 +34,8 @@ void PrettySpaceBlockOutputFormat::write(const Chunk & chunk, PortKind port_kind
|
||||
{
|
||||
if (i != 0)
|
||||
writeCString(" ", out);
|
||||
else
|
||||
writeChar(' ', out);
|
||||
|
||||
const ColumnWithTypeAndName & col = header.getByPosition(i);
|
||||
|
||||
@ -67,7 +69,7 @@ void PrettySpaceBlockOutputFormat::write(const Chunk & chunk, PortKind port_kind
|
||||
for (size_t column = 0; column < num_columns; ++column)
|
||||
{
|
||||
if (column != 0)
|
||||
writeCString(" ", out);
|
||||
writeCString(" ", out);
|
||||
|
||||
const auto & type = *header.getByPosition(column).type;
|
||||
auto & cur_width = widths[column].empty() ? max_widths[column] : widths[column][row];
|
||||
|
@ -1,18 +1,18 @@
|
||||
[1m1[0m
|
||||
[1m1[0m
|
||||
|
||||
1
|
||||
[1m1[0m
|
||||
1
|
||||
[1m1[0m
|
||||
|
||||
1
|
||||
[1m1[0m
|
||||
1
|
||||
[1m1[0m
|
||||
|
||||
1
|
||||
[1m1[0m
|
||||
1
|
||||
[1m1[0m
|
||||
|
||||
1
|
||||
[1m1[0m
|
||||
1
|
||||
[1m1[0m
|
||||
|
||||
1
|
||||
[1m1[0m
|
||||
1
|
||||
[1m1[0m
|
||||
|
||||
1
|
||||
1
|
||||
|
@ -1,19 +1,19 @@
|
||||
name value changed
|
||||
name value changed
|
||||
|
||||
max_rows_to_read 10000 1
|
||||
readonly 0 0
|
||||
name value changed
|
||||
max_rows_to_read 10000 1
|
||||
readonly 0 0
|
||||
name value changed
|
||||
|
||||
max_rows_to_read 10000 1
|
||||
readonly 2 1
|
||||
name value changed
|
||||
max_rows_to_read 10000 1
|
||||
readonly 2 1
|
||||
name value changed
|
||||
|
||||
max_rows_to_read 10000 1
|
||||
readonly 1 1
|
||||
name value changed
|
||||
max_rows_to_read 10000 1
|
||||
readonly 1 1
|
||||
name value changed
|
||||
|
||||
max_rows_to_read 10000 1
|
||||
readonly 2 1
|
||||
max_rows_to_read 10000 1
|
||||
readonly 2 1
|
||||
Ok
|
||||
Ok
|
||||
0
|
||||
|
@ -38,20 +38,20 @@
|
||||
│ 8 │ 8 │ (8,'8') │ 2 │
|
||||
│ 9 │ 9 │ (9,'9') │ ᴺᵁᴸᴸ │
|
||||
└───────┴───────┴─────────┴─────────────────┘
|
||||
[1mhello[0m [1mworld[0m [1mtuple[0m [1msometimes_nulls[0m
|
||||
[1mhello[0m [1mworld[0m [1mtuple[0m [1msometimes_nulls[0m
|
||||
|
||||
0 0 (0,'0') ᴺᵁᴸᴸ
|
||||
1 1 (1,'1') 1
|
||||
2 2 (2,'2') 2
|
||||
3 3 (3,'3') ᴺᵁᴸᴸ
|
||||
4 4 (4,'4') 1
|
||||
[1mhello[0m [1mworld[0m [1mtuple[0m [1msometimes_nulls[0m
|
||||
0 0 (0,'0') ᴺᵁᴸᴸ
|
||||
1 1 (1,'1') 1
|
||||
2 2 (2,'2') 2
|
||||
3 3 (3,'3') ᴺᵁᴸᴸ
|
||||
4 4 (4,'4') 1
|
||||
[1mhello[0m [1mworld[0m [1mtuple[0m [1msometimes_nulls[0m
|
||||
|
||||
5 5 (5,'5') 2
|
||||
6 6 (6,'6') ᴺᵁᴸᴸ
|
||||
7 7 (7,'7') 1
|
||||
8 8 (8,'8') 2
|
||||
9 9 (9,'9') ᴺᵁᴸᴸ
|
||||
5 5 (5,'5') 2
|
||||
6 6 (6,'6') ᴺᵁᴸᴸ
|
||||
7 7 (7,'7') 1
|
||||
8 8 (8,'8') 2
|
||||
9 9 (9,'9') ᴺᵁᴸᴸ
|
||||
┌─[1mhello[0m─┬─[1mworld[0m─┬─[1mtuple[0m───┬─[1msometimes_nulls[0m─┐
|
||||
│ 0 │ 0 │ (0,'0') │ ᴺᵁᴸᴸ │
|
||||
│ 1 │ 1 │ (1,'1') │ 1 │
|
||||
@ -104,20 +104,20 @@
|
||||
│ 8 │ 8 │ (8,'8') │ 2 │
|
||||
│ 9 │ 9 │ (9,'9') │ ᴺᵁᴸᴸ │
|
||||
└───────┴───────┴─────────┴─────────────────┘
|
||||
hello world tuple sometimes_nulls
|
||||
hello world tuple sometimes_nulls
|
||||
|
||||
0 0 (0,'0') ᴺᵁᴸᴸ
|
||||
1 1 (1,'1') 1
|
||||
2 2 (2,'2') 2
|
||||
3 3 (3,'3') ᴺᵁᴸᴸ
|
||||
4 4 (4,'4') 1
|
||||
hello world tuple sometimes_nulls
|
||||
0 0 (0,'0') ᴺᵁᴸᴸ
|
||||
1 1 (1,'1') 1
|
||||
2 2 (2,'2') 2
|
||||
3 3 (3,'3') ᴺᵁᴸᴸ
|
||||
4 4 (4,'4') 1
|
||||
hello world tuple sometimes_nulls
|
||||
|
||||
5 5 (5,'5') 2
|
||||
6 6 (6,'6') ᴺᵁᴸᴸ
|
||||
7 7 (7,'7') 1
|
||||
8 8 (8,'8') 2
|
||||
9 9 (9,'9') ᴺᵁᴸᴸ
|
||||
5 5 (5,'5') 2
|
||||
6 6 (6,'6') ᴺᵁᴸᴸ
|
||||
7 7 (7,'7') 1
|
||||
8 8 (8,'8') 2
|
||||
9 9 (9,'9') ᴺᵁᴸᴸ
|
||||
┏━━━━━━━┳━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━━━━┓
|
||||
┃ [1mhello[0m ┃ [1mworld[0m ┃ [1mtuple [0m ┃ [1msometimes_nulls[0m ┃
|
||||
┡━━━━━━━╇━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━━━━┩
|
||||
@ -148,16 +148,16 @@ hello world tuple sometimes_nulls
|
||||
│ 5 │ 5 │ (5,'5') │ 2 │
|
||||
└───────┴───────┴─────────┴─────────────────┘
|
||||
Showed first 6.
|
||||
[1mhello[0m [1mworld[0m [1mtuple[0m [1msometimes_nulls[0m
|
||||
[1mhello[0m [1mworld[0m [1mtuple[0m [1msometimes_nulls[0m
|
||||
|
||||
0 0 (0,'0') ᴺᵁᴸᴸ
|
||||
1 1 (1,'1') 1
|
||||
2 2 (2,'2') 2
|
||||
3 3 (3,'3') ᴺᵁᴸᴸ
|
||||
4 4 (4,'4') 1
|
||||
[1mhello[0m [1mworld[0m [1mtuple[0m [1msometimes_nulls[0m
|
||||
0 0 (0,'0') ᴺᵁᴸᴸ
|
||||
1 1 (1,'1') 1
|
||||
2 2 (2,'2') 2
|
||||
3 3 (3,'3') ᴺᵁᴸᴸ
|
||||
4 4 (4,'4') 1
|
||||
[1mhello[0m [1mworld[0m [1mtuple[0m [1msometimes_nulls[0m
|
||||
|
||||
5 5 (5,'5') 2
|
||||
5 5 (5,'5') 2
|
||||
|
||||
Showed first 6.
|
||||
┌─[1mhello[0m─┬─[1mworld[0m─┬─[1mtuple[0m───┬─[1msometimes_nulls[0m─┐
|
||||
@ -199,15 +199,15 @@ Showed first 6.
|
||||
│ 5 │ 5 │ (5,'5') │ 2 │
|
||||
└───────┴───────┴─────────┴─────────────────┘
|
||||
Showed first 6.
|
||||
hello world tuple sometimes_nulls
|
||||
hello world tuple sometimes_nulls
|
||||
|
||||
0 0 (0,'0') ᴺᵁᴸᴸ
|
||||
1 1 (1,'1') 1
|
||||
2 2 (2,'2') 2
|
||||
3 3 (3,'3') ᴺᵁᴸᴸ
|
||||
4 4 (4,'4') 1
|
||||
hello world tuple sometimes_nulls
|
||||
0 0 (0,'0') ᴺᵁᴸᴸ
|
||||
1 1 (1,'1') 1
|
||||
2 2 (2,'2') 2
|
||||
3 3 (3,'3') ᴺᵁᴸᴸ
|
||||
4 4 (4,'4') 1
|
||||
hello world tuple sometimes_nulls
|
||||
|
||||
5 5 (5,'5') 2
|
||||
5 5 (5,'5') 2
|
||||
|
||||
Showed first 6.
|
||||
|
@ -33,18 +33,18 @@
|
||||
│ 100000000 │ 100000000 │
|
||||
│ 1000000000 │ 1000000000 │
|
||||
└────────────┴────────────┘
|
||||
[1mx[0m [1ms[0m
|
||||
[1mx[0m [1ms[0m
|
||||
|
||||
1 1
|
||||
10 10
|
||||
100 100
|
||||
1000 1000
|
||||
10000 10000
|
||||
100000 100000
|
||||
1000000 1000000
|
||||
10000000 10000000
|
||||
100000000 100000000
|
||||
1000000000 1000000000
|
||||
1 1
|
||||
10 10
|
||||
100 100
|
||||
1000 1000
|
||||
10000 10000
|
||||
100000 100000
|
||||
1000000 1000000
|
||||
10000000 10000000
|
||||
100000000 100000000
|
||||
1000000000 1000000000
|
||||
┌──────────[1mx[0m─┬─[1ms[0m──────────┐
|
||||
│ 1 │ 1 │
|
||||
│ 10 │ 10 │
|
||||
|
@ -1,106 +1,106 @@
|
||||
s a b
|
||||
s a b
|
||||
|
||||
0 2000-01-01 00:00:00 2000-01-01 00:00:00
|
||||
0000 2000-01-01 00:00:00 2000-01-01 00:00:00
|
||||
00:00:00 2000-01-01 00:00:00 2000-01-01 00:00:00
|
||||
01:00:00 2000-01-01 01:00:00 2000-01-01 01:00:00
|
||||
02/01/17 010203 MSK 2017-01-01 22:02:03 2017-01-01 22:02:03
|
||||
02/01/17 010203 MSK+0100 2017-01-01 21:02:03 2017-01-01 21:02:03
|
||||
02/01/17 010203 UTC+0300 2017-01-01 22:02:03 2017-01-01 22:02:03
|
||||
02/01/17 010203Z 2017-01-02 01:02:03 2017-01-02 01:02:03
|
||||
02/01/1970 010203Z 1970-01-02 01:02:03 1970-01-02 01:02:03
|
||||
02/01/70 010203Z 1970-01-02 01:02:03 1970-01-02 01:02:03
|
||||
11 Feb 2018 06:40:50 +0300 2018-02-11 03:40:50 2018-02-11 03:40:50
|
||||
17 Apr 2 1:2:3 2000-04-17 01:02:03 2000-04-17 01:02:03
|
||||
19700102 01:00:00 1970-01-02 01:00:00 1970-01-02 01:00:00
|
||||
1970010201:00:00 2032-06-06 02:03:21 2032-06-06 02:03:21
|
||||
19700102010203 1970-01-02 01:02:03 1970-01-02 01:02:03
|
||||
19700102010203Z 1970-01-02 01:02:03 1970-01-02 01:02:03
|
||||
1970/01/02 010203Z 1970-01-02 01:02:03 1970-01-02 01:02:03
|
||||
20 2000-01-20 00:00:00 2000-01-20 00:00:00
|
||||
201 ᴺᵁᴸᴸ 0000-00-00 00:00:00
|
||||
20160101 2016-01-01 00:00:00 2016-01-01 00:00:00
|
||||
2016-01-01 2016-01-01 00:00:00 2016-01-01 00:00:00
|
||||
201601-01 2016-01-01 01:00:00 2016-01-01 01:00:00
|
||||
2016-01-01MSD 2015-12-31 20:00:00 2015-12-31 20:00:00
|
||||
2016-01-01 MSD 2015-12-31 20:00:00 2015-12-31 20:00:00
|
||||
201601-01 MSD 2016-01-01 04:00:00 2016-01-01 04:00:00
|
||||
2016-01-01UTC 2016-01-01 00:00:00 2016-01-01 00:00:00
|
||||
2016-01-01Z 2016-01-01 00:00:00 2016-01-01 00:00:00
|
||||
2017 2017-01-01 00:00:00 2017-01-01 00:00:00
|
||||
2017/01/00 2017-01-01 00:00:00 2017-01-01 00:00:00
|
||||
2017/01/00 MSD 2016-12-31 20:00:00 2016-12-31 20:00:00
|
||||
2017/01/00 MSD Jun 2017-05-31 20:00:00 2017-05-31 20:00:00
|
||||
2017/01/01 2017-01-01 00:00:00 2017-01-01 00:00:00
|
||||
201701 02 010203 UTC+0300 2017-01-01 22:02:03 2017-01-01 22:02:03
|
||||
2017-01-02 03:04:05 2017-01-02 03:04:05 2017-01-02 03:04:05
|
||||
2017-01-0203:04:05 ᴺᵁᴸᴸ 0000-00-00 00:00:00
|
||||
2017-01-02 03:04:05+0 2017-01-02 03:04:05 2017-01-02 03:04:05
|
||||
2017-01-02 03:04:05+00 2017-01-02 03:04:05 2017-01-02 03:04:05
|
||||
2017-01-02 03:04:05+0000 2017-01-02 03:04:05 2017-01-02 03:04:05
|
||||
2017-01-02 03:04:05 -0100 2017-01-02 04:04:05 2017-01-02 04:04:05
|
||||
2017-01-02 03:04:05+030 2017-01-02 02:34:05 2017-01-02 02:34:05
|
||||
2017-01-02 03:04:05+0300 2017-01-02 00:04:05 2017-01-02 00:04:05
|
||||
2017-01-02 03:04:05+1 2017-01-02 02:04:05 2017-01-02 02:04:05
|
||||
2017-01-02 03:04:05+300 2017-01-02 00:04:05 2017-01-02 00:04:05
|
||||
2017-01-02 03:04:05+900 2017-01-01 18:04:05 2017-01-01 18:04:05
|
||||
2017-01-02 03:04:05GMT 2017-01-02 03:04:05 2017-01-02 03:04:05
|
||||
2017-01-02 03:04:05 MSD 2017-01-01 23:04:05 2017-01-01 23:04:05
|
||||
2017-01-02 03:04:05 MSD Feb 2017-02-01 23:04:05 2017-02-01 23:04:05
|
||||
2017-01-02 03:04:05 MSD Jun 2017-06-01 23:04:05 2017-06-01 23:04:05
|
||||
2017-01-02 03:04:05 MSK 2017-01-02 00:04:05 2017-01-02 00:04:05
|
||||
2017-01-02T03:04:05 2017-01-02 03:04:05 2017-01-02 03:04:05
|
||||
2017-01-02T03:04:05+00 2017-01-02 03:04:05 2017-01-02 03:04:05
|
||||
2017-01-02T03:04:05 -0100 2017-01-02 04:04:05 2017-01-02 04:04:05
|
||||
2017-01-02T03:04:05-0100 2017-01-02 04:04:05 2017-01-02 04:04:05
|
||||
2017-01-02T03:04:05+0100 2017-01-02 02:04:05 2017-01-02 02:04:05
|
||||
2017-01-02T03:04:05Z 2017-01-02 03:04:05 2017-01-02 03:04:05
|
||||
2017-01 03:04:05 MSD Jun 2017-05-31 23:04:05 2017-05-31 23:04:05
|
||||
2017-01 03:04 MSD Jun 2017-05-31 23:04:00 2017-05-31 23:04:00
|
||||
2017/01/31 2017-01-31 00:00:00 2017-01-31 00:00:00
|
||||
2017/01/32 0000-00-00 00:00:00 0000-00-00 00:00:00
|
||||
2017-01 MSD Jun 2017-05-31 20:00:00 2017-05-31 20:00:00
|
||||
201701 MSD Jun 2017-05-31 20:00:00 2017-05-31 20:00:00
|
||||
2017 25 1:2:3 0000-00-00 00:00:00 0000-00-00 00:00:00
|
||||
2017 25 Apr 1:2:3 2017-04-01 01:02:03 2017-04-01 01:02:03
|
||||
2017 Apr 01 11:22:33 2017-04-01 11:22:33 2017-04-01 11:22:33
|
||||
2017 Apr 02 01/02/03 UTC+0300 ᴺᵁᴸᴸ 0000-00-00 00:00:00
|
||||
2017 Apr 02 010203 UTC+0300 2017-04-01 22:02:03 2017-04-01 22:02:03
|
||||
2017 Apr 02 01:2:3 UTC+0300 2017-04-01 22:02:03 2017-04-01 22:02:03
|
||||
2017 Apr 02 1:02:3 2017-04-02 01:02:03 2017-04-02 01:02:03
|
||||
2017 Apr 02 11:22:33 2017-04-02 11:22:33 2017-04-02 11:22:33
|
||||
2017 Apr 02 1:2:03 2017-04-02 01:02:03 2017-04-02 01:02:03
|
||||
2017 Apr 02 1:22:33 2017-04-02 01:22:33 2017-04-02 01:22:33
|
||||
2017 Apr 02 1:2:3 2017-04-02 01:02:03 2017-04-02 01:02:03
|
||||
2017 Apr 02 1:2:33 2017-04-02 01:02:33 2017-04-02 01:02:33
|
||||
2017 Apr 02 1:2:3 MSK 2017-04-01 22:02:03 2017-04-01 22:02:03
|
||||
2017 Apr 02 1:2:3 MSK 2017 2017-04-01 22:02:03 2017-04-01 22:02:03
|
||||
2017 Apr 02 1:2:3 MSK 2018 2017-04-01 22:02:03 2017-04-01 22:02:03
|
||||
2017 Apr 02 1:2:3 UTC+0000 2017-04-02 01:02:03 2017-04-02 01:02:03
|
||||
2017 Apr 02 1:2:3 UTC+0300 2017-04-01 22:02:03 2017-04-01 22:02:03
|
||||
2017 Apr 02 1:2:3 UTC+0400 2017-04-01 21:02:03 2017-04-01 21:02:03
|
||||
2017 Apr 2 1:2:3 2017-04-02 01:02:03 2017-04-02 01:02:03
|
||||
2017 Jan 02 010203 UTC+0300 2017-01-01 22:02:03 2017-01-01 22:02:03
|
||||
25 Apr 2017 01:02:03 2017-04-25 01:02:03 2017-04-25 01:02:03
|
||||
25 Apr 2017 1:2:3 2017-04-25 01:02:03 2017-04-25 01:02:03
|
||||
25 Jan 2017 1:2:3 2017-01-25 01:02:03 2017-01-25 01:02:03
|
||||
25 Jan 2017 1:2:3 MSK 2017-01-24 22:02:03 2017-01-24 22:02:03
|
||||
25 Jan 2017 1:2:3 PM 2017-01-25 13:02:03 2017-01-25 13:02:03
|
||||
25 Jan 2017 1:2:3Z 2017-01-25 01:02:03 2017-01-25 01:02:03
|
||||
25 Jan 2017 1:2:3 Z 2017-01-25 01:02:03 2017-01-25 01:02:03
|
||||
25 Jan 2017 1:2:3 Z +0300 2017-01-24 22:02:03 2017-01-24 22:02:03
|
||||
25 Jan 2017 1:2:3 Z+03:00 2017-01-24 22:02:03 2017-01-24 22:02:03
|
||||
25 Jan 2017 1:2:3 Z +0300 OM ᴺᵁᴸᴸ 0000-00-00 00:00:00
|
||||
25 Jan 2017 1:2:3 Z +03:00 PM 2017-01-25 10:02:03 2017-01-25 10:02:03
|
||||
25 Jan 2017 1:2:3 Z +0300 PM 2017-01-25 10:02:03 2017-01-25 10:02:03
|
||||
25 Jan 2017 1:2:3 Z+03:00 PM 2017-01-25 10:02:03 2017-01-25 10:02:03
|
||||
25 Jan 2017 1:2:3 Z +03:30 PM 2017-01-25 09:32:03 2017-01-25 09:32:03
|
||||
25 Jan 2017 1:2:3Z Mo ᴺᵁᴸᴸ 0000-00-00 00:00:00
|
||||
25 Jan 2017 1:2:3Z Mon 2017-01-25 01:02:03 2017-01-25 01:02:03
|
||||
25 Jan 2017 1:2:3Z Moo ᴺᵁᴸᴸ 0000-00-00 00:00:00
|
||||
25 Jan 2017 1:2:3 Z PM 2017-01-25 13:02:03 2017-01-25 13:02:03
|
||||
25 Jan 2017 1:2:3Z PM 2017-01-25 13:02:03 2017-01-25 13:02:03
|
||||
25 Jan 2017 1:2:3 Z PM +03:00 2017-01-25 10:02:03 2017-01-25 10:02:03
|
||||
Jun, 11 Feb 2018 06:40:50 +0300 2000-06-01 00:00:00 2000-06-01 00:00:00
|
||||
Sun 11 Feb 2018 06:40:50 +0300 2018-02-11 03:40:50 2018-02-11 03:40:50
|
||||
Sun, 11 Feb 2018 06:40:50 +0300 2018-02-11 03:40:50 2018-02-11 03:40:50
|
||||
0 2000-01-01 00:00:00 2000-01-01 00:00:00
|
||||
0000 2000-01-01 00:00:00 2000-01-01 00:00:00
|
||||
00:00:00 2000-01-01 00:00:00 2000-01-01 00:00:00
|
||||
01:00:00 2000-01-01 01:00:00 2000-01-01 01:00:00
|
||||
02/01/17 010203 MSK 2017-01-01 22:02:03 2017-01-01 22:02:03
|
||||
02/01/17 010203 MSK+0100 2017-01-01 21:02:03 2017-01-01 21:02:03
|
||||
02/01/17 010203 UTC+0300 2017-01-01 22:02:03 2017-01-01 22:02:03
|
||||
02/01/17 010203Z 2017-01-02 01:02:03 2017-01-02 01:02:03
|
||||
02/01/1970 010203Z 1970-01-02 01:02:03 1970-01-02 01:02:03
|
||||
02/01/70 010203Z 1970-01-02 01:02:03 1970-01-02 01:02:03
|
||||
11 Feb 2018 06:40:50 +0300 2018-02-11 03:40:50 2018-02-11 03:40:50
|
||||
17 Apr 2 1:2:3 2000-04-17 01:02:03 2000-04-17 01:02:03
|
||||
19700102 01:00:00 1970-01-02 01:00:00 1970-01-02 01:00:00
|
||||
1970010201:00:00 2032-06-06 02:03:21 2032-06-06 02:03:21
|
||||
19700102010203 1970-01-02 01:02:03 1970-01-02 01:02:03
|
||||
19700102010203Z 1970-01-02 01:02:03 1970-01-02 01:02:03
|
||||
1970/01/02 010203Z 1970-01-02 01:02:03 1970-01-02 01:02:03
|
||||
20 2000-01-20 00:00:00 2000-01-20 00:00:00
|
||||
201 ᴺᵁᴸᴸ 0000-00-00 00:00:00
|
||||
20160101 2016-01-01 00:00:00 2016-01-01 00:00:00
|
||||
2016-01-01 2016-01-01 00:00:00 2016-01-01 00:00:00
|
||||
201601-01 2016-01-01 01:00:00 2016-01-01 01:00:00
|
||||
2016-01-01MSD 2015-12-31 20:00:00 2015-12-31 20:00:00
|
||||
2016-01-01 MSD 2015-12-31 20:00:00 2015-12-31 20:00:00
|
||||
201601-01 MSD 2016-01-01 04:00:00 2016-01-01 04:00:00
|
||||
2016-01-01UTC 2016-01-01 00:00:00 2016-01-01 00:00:00
|
||||
2016-01-01Z 2016-01-01 00:00:00 2016-01-01 00:00:00
|
||||
2017 2017-01-01 00:00:00 2017-01-01 00:00:00
|
||||
2017/01/00 2017-01-01 00:00:00 2017-01-01 00:00:00
|
||||
2017/01/00 MSD 2016-12-31 20:00:00 2016-12-31 20:00:00
|
||||
2017/01/00 MSD Jun 2017-05-31 20:00:00 2017-05-31 20:00:00
|
||||
2017/01/01 2017-01-01 00:00:00 2017-01-01 00:00:00
|
||||
201701 02 010203 UTC+0300 2017-01-01 22:02:03 2017-01-01 22:02:03
|
||||
2017-01-02 03:04:05 2017-01-02 03:04:05 2017-01-02 03:04:05
|
||||
2017-01-0203:04:05 ᴺᵁᴸᴸ 0000-00-00 00:00:00
|
||||
2017-01-02 03:04:05+0 2017-01-02 03:04:05 2017-01-02 03:04:05
|
||||
2017-01-02 03:04:05+00 2017-01-02 03:04:05 2017-01-02 03:04:05
|
||||
2017-01-02 03:04:05+0000 2017-01-02 03:04:05 2017-01-02 03:04:05
|
||||
2017-01-02 03:04:05 -0100 2017-01-02 04:04:05 2017-01-02 04:04:05
|
||||
2017-01-02 03:04:05+030 2017-01-02 02:34:05 2017-01-02 02:34:05
|
||||
2017-01-02 03:04:05+0300 2017-01-02 00:04:05 2017-01-02 00:04:05
|
||||
2017-01-02 03:04:05+1 2017-01-02 02:04:05 2017-01-02 02:04:05
|
||||
2017-01-02 03:04:05+300 2017-01-02 00:04:05 2017-01-02 00:04:05
|
||||
2017-01-02 03:04:05+900 2017-01-01 18:04:05 2017-01-01 18:04:05
|
||||
2017-01-02 03:04:05GMT 2017-01-02 03:04:05 2017-01-02 03:04:05
|
||||
2017-01-02 03:04:05 MSD 2017-01-01 23:04:05 2017-01-01 23:04:05
|
||||
2017-01-02 03:04:05 MSD Feb 2017-02-01 23:04:05 2017-02-01 23:04:05
|
||||
2017-01-02 03:04:05 MSD Jun 2017-06-01 23:04:05 2017-06-01 23:04:05
|
||||
2017-01-02 03:04:05 MSK 2017-01-02 00:04:05 2017-01-02 00:04:05
|
||||
2017-01-02T03:04:05 2017-01-02 03:04:05 2017-01-02 03:04:05
|
||||
2017-01-02T03:04:05+00 2017-01-02 03:04:05 2017-01-02 03:04:05
|
||||
2017-01-02T03:04:05 -0100 2017-01-02 04:04:05 2017-01-02 04:04:05
|
||||
2017-01-02T03:04:05-0100 2017-01-02 04:04:05 2017-01-02 04:04:05
|
||||
2017-01-02T03:04:05+0100 2017-01-02 02:04:05 2017-01-02 02:04:05
|
||||
2017-01-02T03:04:05Z 2017-01-02 03:04:05 2017-01-02 03:04:05
|
||||
2017-01 03:04:05 MSD Jun 2017-05-31 23:04:05 2017-05-31 23:04:05
|
||||
2017-01 03:04 MSD Jun 2017-05-31 23:04:00 2017-05-31 23:04:00
|
||||
2017/01/31 2017-01-31 00:00:00 2017-01-31 00:00:00
|
||||
2017/01/32 0000-00-00 00:00:00 0000-00-00 00:00:00
|
||||
2017-01 MSD Jun 2017-05-31 20:00:00 2017-05-31 20:00:00
|
||||
201701 MSD Jun 2017-05-31 20:00:00 2017-05-31 20:00:00
|
||||
2017 25 1:2:3 0000-00-00 00:00:00 0000-00-00 00:00:00
|
||||
2017 25 Apr 1:2:3 2017-04-01 01:02:03 2017-04-01 01:02:03
|
||||
2017 Apr 01 11:22:33 2017-04-01 11:22:33 2017-04-01 11:22:33
|
||||
2017 Apr 02 01/02/03 UTC+0300 ᴺᵁᴸᴸ 0000-00-00 00:00:00
|
||||
2017 Apr 02 010203 UTC+0300 2017-04-01 22:02:03 2017-04-01 22:02:03
|
||||
2017 Apr 02 01:2:3 UTC+0300 2017-04-01 22:02:03 2017-04-01 22:02:03
|
||||
2017 Apr 02 1:02:3 2017-04-02 01:02:03 2017-04-02 01:02:03
|
||||
2017 Apr 02 11:22:33 2017-04-02 11:22:33 2017-04-02 11:22:33
|
||||
2017 Apr 02 1:2:03 2017-04-02 01:02:03 2017-04-02 01:02:03
|
||||
2017 Apr 02 1:22:33 2017-04-02 01:22:33 2017-04-02 01:22:33
|
||||
2017 Apr 02 1:2:3 2017-04-02 01:02:03 2017-04-02 01:02:03
|
||||
2017 Apr 02 1:2:33 2017-04-02 01:02:33 2017-04-02 01:02:33
|
||||
2017 Apr 02 1:2:3 MSK 2017-04-01 22:02:03 2017-04-01 22:02:03
|
||||
2017 Apr 02 1:2:3 MSK 2017 2017-04-01 22:02:03 2017-04-01 22:02:03
|
||||
2017 Apr 02 1:2:3 MSK 2018 2017-04-01 22:02:03 2017-04-01 22:02:03
|
||||
2017 Apr 02 1:2:3 UTC+0000 2017-04-02 01:02:03 2017-04-02 01:02:03
|
||||
2017 Apr 02 1:2:3 UTC+0300 2017-04-01 22:02:03 2017-04-01 22:02:03
|
||||
2017 Apr 02 1:2:3 UTC+0400 2017-04-01 21:02:03 2017-04-01 21:02:03
|
||||
2017 Apr 2 1:2:3 2017-04-02 01:02:03 2017-04-02 01:02:03
|
||||
2017 Jan 02 010203 UTC+0300 2017-01-01 22:02:03 2017-01-01 22:02:03
|
||||
25 Apr 2017 01:02:03 2017-04-25 01:02:03 2017-04-25 01:02:03
|
||||
25 Apr 2017 1:2:3 2017-04-25 01:02:03 2017-04-25 01:02:03
|
||||
25 Jan 2017 1:2:3 2017-01-25 01:02:03 2017-01-25 01:02:03
|
||||
25 Jan 2017 1:2:3 MSK 2017-01-24 22:02:03 2017-01-24 22:02:03
|
||||
25 Jan 2017 1:2:3 PM 2017-01-25 13:02:03 2017-01-25 13:02:03
|
||||
25 Jan 2017 1:2:3Z 2017-01-25 01:02:03 2017-01-25 01:02:03
|
||||
25 Jan 2017 1:2:3 Z 2017-01-25 01:02:03 2017-01-25 01:02:03
|
||||
25 Jan 2017 1:2:3 Z +0300 2017-01-24 22:02:03 2017-01-24 22:02:03
|
||||
25 Jan 2017 1:2:3 Z+03:00 2017-01-24 22:02:03 2017-01-24 22:02:03
|
||||
25 Jan 2017 1:2:3 Z +0300 OM ᴺᵁᴸᴸ 0000-00-00 00:00:00
|
||||
25 Jan 2017 1:2:3 Z +03:00 PM 2017-01-25 10:02:03 2017-01-25 10:02:03
|
||||
25 Jan 2017 1:2:3 Z +0300 PM 2017-01-25 10:02:03 2017-01-25 10:02:03
|
||||
25 Jan 2017 1:2:3 Z+03:00 PM 2017-01-25 10:02:03 2017-01-25 10:02:03
|
||||
25 Jan 2017 1:2:3 Z +03:30 PM 2017-01-25 09:32:03 2017-01-25 09:32:03
|
||||
25 Jan 2017 1:2:3Z Mo ᴺᵁᴸᴸ 0000-00-00 00:00:00
|
||||
25 Jan 2017 1:2:3Z Mon 2017-01-25 01:02:03 2017-01-25 01:02:03
|
||||
25 Jan 2017 1:2:3Z Moo ᴺᵁᴸᴸ 0000-00-00 00:00:00
|
||||
25 Jan 2017 1:2:3 Z PM 2017-01-25 13:02:03 2017-01-25 13:02:03
|
||||
25 Jan 2017 1:2:3Z PM 2017-01-25 13:02:03 2017-01-25 13:02:03
|
||||
25 Jan 2017 1:2:3 Z PM +03:00 2017-01-25 10:02:03 2017-01-25 10:02:03
|
||||
Jun, 11 Feb 2018 06:40:50 +0300 2000-06-01 00:00:00 2000-06-01 00:00:00
|
||||
Sun 11 Feb 2018 06:40:50 +0300 2018-02-11 03:40:50 2018-02-11 03:40:50
|
||||
Sun, 11 Feb 2018 06:40:50 +0300 2018-02-11 03:40:50 2018-02-11 03:40:50
|
||||
|
@ -1,22 +1,22 @@
|
||||
s a b
|
||||
s a b
|
||||
|
||||
24.12.2018 2018-12-24 00:00:00 2018-12-24 00:00:00
|
||||
24-12-2018 2018-12-24 00:00:00 2018-12-24 00:00:00
|
||||
24.12.18 2018-12-24 00:00:00 2018-12-24 00:00:00
|
||||
24-12-18 2018-12-24 00:00:00 2018-12-24 00:00:00
|
||||
24-Dec-18 2018-12-24 00:00:00 2018-12-24 00:00:00
|
||||
24/DEC/18 2018-12-24 00:00:00 2018-12-24 00:00:00
|
||||
24/DEC/2018 2018-12-24 00:00:00 2018-12-24 00:00:00
|
||||
01-OCT-2015 2015-10-01 00:00:00 2015-10-01 00:00:00
|
||||
24.12.2018 2018-12-24 00:00:00 2018-12-24 00:00:00
|
||||
24-12-2018 2018-12-24 00:00:00 2018-12-24 00:00:00
|
||||
24.12.18 2018-12-24 00:00:00 2018-12-24 00:00:00
|
||||
24-12-18 2018-12-24 00:00:00 2018-12-24 00:00:00
|
||||
24-Dec-18 2018-12-24 00:00:00 2018-12-24 00:00:00
|
||||
24/DEC/18 2018-12-24 00:00:00 2018-12-24 00:00:00
|
||||
24/DEC/2018 2018-12-24 00:00:00 2018-12-24 00:00:00
|
||||
01-OCT-2015 2015-10-01 00:00:00 2015-10-01 00:00:00
|
||||
24.12.18 010203 2018-12-24 01:02:03 2018-12-24 01:02:03
|
||||
24.12.18 01:02:03 2018-12-24 01:02:03 2018-12-24 01:02:03
|
||||
24.DEC.18T01:02:03.000+0300 2018-12-23 22:02:03 2018-12-23 22:02:03
|
||||
01-September-2018 11:22 2018-09-01 11:22:00 2018-09-01 11:22:00
|
||||
24.12.2018 2018-12-24 00:00:00 2018-12-24 00:00:00
|
||||
24-12-2018 2018-12-24 00:00:00 2018-12-24 00:00:00
|
||||
24.12.18 2018-12-24 00:00:00 2018-12-24 00:00:00
|
||||
24-12-18 2018-12-24 00:00:00 2018-12-24 00:00:00
|
||||
24-Dec-18 2018-12-24 00:00:00 2018-12-24 00:00:00
|
||||
24/DEC/18 2018-12-24 00:00:00 2018-12-24 00:00:00
|
||||
24/DEC/2018 2018-12-24 00:00:00 2018-12-24 00:00:00
|
||||
01-OCT-2015 2015-10-01 00:00:00 2015-10-01 00:00:00
|
||||
24.12.2018 2018-12-24 00:00:00 2018-12-24 00:00:00
|
||||
24-12-2018 2018-12-24 00:00:00 2018-12-24 00:00:00
|
||||
24.12.18 2018-12-24 00:00:00 2018-12-24 00:00:00
|
||||
24-12-18 2018-12-24 00:00:00 2018-12-24 00:00:00
|
||||
24-Dec-18 2018-12-24 00:00:00 2018-12-24 00:00:00
|
||||
24/DEC/18 2018-12-24 00:00:00 2018-12-24 00:00:00
|
||||
24/DEC/2018 2018-12-24 00:00:00 2018-12-24 00:00:00
|
||||
01-OCT-2015 2015-10-01 00:00:00 2015-10-01 00:00:00
|
||||
24.12.18 010203 2018-12-24 01:02:03 2018-12-24 01:02:03
|
||||
24.12.18 01:02:03 2018-12-24 01:02:03 2018-12-24 01:02:03
|
||||
24.DEC.18T01:02:03.000+0300 2018-12-23 22:02:03 2018-12-23 22:02:03
|
||||
01-September-2018 11:22 2018-09-01 11:22:00 2018-09-01 11:22:00
|
||||
|
114
tests/queries/0_stateless/01293_pretty_max_value_width.reference
Normal file
114
tests/queries/0_stateless/01293_pretty_max_value_width.reference
Normal file
@ -0,0 +1,114 @@
|
||||
┏━━━━━━━━┳━━━━━┓
|
||||
┃ [1mx [0m ┃ [1my [0m ┃
|
||||
┡━━━━━━━━╇━━━━━┩
|
||||
│ привет │ мир │
|
||||
└────────┴─────┘
|
||||
┏━━━━━━━┳━━━━━┓
|
||||
┃ [1mx [0m ┃ [1my [0m ┃
|
||||
┡━━━━━━━╇━━━━━┩
|
||||
│ приве[31;1m⋯[0m│ мир │
|
||||
└───────┴─────┘
|
||||
┌─[1mx[0m─────┬─[1my[0m───┐
|
||||
│ приве[31;1m⋯[0m│ мир │
|
||||
└───────┴─────┘
|
||||
[1mx[0m [1my[0m
|
||||
|
||||
приве[31;1m⋯[0m мир
|
||||
┏━━━━━━━┳━━━━━━━┓
|
||||
┃ [1mx [0m ┃ [1my [0m ┃
|
||||
┡━━━━━━━╇━━━━━━━┩
|
||||
│ приве[31;1m⋯[0m│ мир │
|
||||
├───────┼───────┤
|
||||
│ мир │ приве[31;1m⋯[0m│
|
||||
└───────┴───────┘
|
||||
┌─[1mx[0m─────┬─[1my[0m─────┐
|
||||
│ приве[31;1m⋯[0m│ мир │
|
||||
│ мир │ приве[31;1m⋯[0m│
|
||||
└───────┴───────┘
|
||||
[1mx[0m [1my[0m
|
||||
|
||||
приве[31;1m⋯[0m мир
|
||||
мир приве[31;1m⋯[0m
|
||||
┏━━━━━━━━┳━━━━━┓
|
||||
┃ [1mx [0m ┃ [1my [0m ┃
|
||||
┡━━━━━━━━╇━━━━━┩
|
||||
│ привет │ мир │
|
||||
└────────┴─────┘
|
||||
┌─[1mx[0m──────┬─[1my[0m───┐
|
||||
│ привет │ мир │
|
||||
└────────┴─────┘
|
||||
[1mx[0m [1my[0m
|
||||
|
||||
привет мир
|
||||
┏━━━━━━━━┳━━━━━━━━┓
|
||||
┃ [1mx [0m ┃ [1my [0m ┃
|
||||
┡━━━━━━━━╇━━━━━━━━┩
|
||||
│ привет │ мир │
|
||||
├────────┼────────┤
|
||||
│ мир │ привет │
|
||||
└────────┴────────┘
|
||||
┌─[1mx[0m──────┬─[1my[0m──────┐
|
||||
│ привет │ мир │
|
||||
│ мир │ привет │
|
||||
└────────┴────────┘
|
||||
[1mx[0m [1my[0m
|
||||
|
||||
привет мир
|
||||
мир привет
|
||||
┏━━━┳━━━┓
|
||||
┃ [1mx[0m ┃ [1my[0m ┃
|
||||
┡━━━╇━━━┩
|
||||
│ п[31;1m⋯[0m│ м[31;1m⋯[0m│
|
||||
└───┴───┘
|
||||
┌─[1mx[0m─┬─[1my[0m─┐
|
||||
│ п[31;1m⋯[0m│ м[31;1m⋯[0m│
|
||||
└───┴───┘
|
||||
[1mx[0m [1my[0m
|
||||
|
||||
п[31;1m⋯[0m м[31;1m⋯[0m
|
||||
┏━━━┳━━━┓
|
||||
┃ [1mx[0m ┃ [1my[0m ┃
|
||||
┡━━━╇━━━┩
|
||||
│ п[31;1m⋯[0m│ м[31;1m⋯[0m│
|
||||
├───┼───┤
|
||||
│ м[31;1m⋯[0m│ п[31;1m⋯[0m│
|
||||
└───┴───┘
|
||||
┌─[1mx[0m─┬─[1my[0m─┐
|
||||
│ п[31;1m⋯[0m│ м[31;1m⋯[0m│
|
||||
│ м[31;1m⋯[0m│ п[31;1m⋯[0m│
|
||||
└───┴───┘
|
||||
[1mx[0m [1my[0m
|
||||
|
||||
п[31;1m⋯[0m м[31;1m⋯[0m
|
||||
м[31;1m⋯[0m п[31;1m⋯[0m
|
||||
┏━━━┳━━━┓
|
||||
┃ [1mx[0m ┃ [1my[0m ┃
|
||||
┡━━━╇━━━┩
|
||||
│ [31;1m⋯[0m │ [31;1m⋯[0m │
|
||||
└───┴───┘
|
||||
┌─[1mx[0m─┬─[1my[0m─┐
|
||||
│ [31;1m⋯[0m │ [31;1m⋯[0m │
|
||||
└───┴───┘
|
||||
[1mx[0m [1my[0m
|
||||
|
||||
[31;1m⋯[0m [31;1m⋯[0m
|
||||
┏━━━┳━━━┓
|
||||
┃ [1mx[0m ┃ [1my[0m ┃
|
||||
┡━━━╇━━━┩
|
||||
│ [31;1m⋯[0m │ [31;1m⋯[0m │
|
||||
├───┼───┤
|
||||
│ [31;1m⋯[0m │ [31;1m⋯[0m │
|
||||
└───┴───┘
|
||||
┌─[1mx[0m─┬─[1my[0m─┐
|
||||
│ [31;1m⋯[0m │ [31;1m⋯[0m │
|
||||
│ [31;1m⋯[0m │ [31;1m⋯[0m │
|
||||
└───┴───┘
|
||||
[1mx[0m [1my[0m
|
||||
|
||||
[31;1m⋯[0m [31;1m⋯[0m
|
||||
[31;1m⋯[0m [31;1m⋯[0m
|
||||
┏━━━┳━━━┓
|
||||
┃ x ┃ y ┃
|
||||
┡━━━╇━━━┩
|
||||
│ ⋯ │ ⋯ │
|
||||
└───┴───┘
|
43
tests/queries/0_stateless/01293_pretty_max_value_width.sql
Normal file
43
tests/queries/0_stateless/01293_pretty_max_value_width.sql
Normal file
@ -0,0 +1,43 @@
|
||||
SELECT 'привет' AS x, 'мир' AS y FORMAT Pretty;
|
||||
|
||||
SET output_format_pretty_max_value_width = 5;
|
||||
SELECT 'привет' AS x, 'мир' AS y FORMAT Pretty;
|
||||
SELECT 'привет' AS x, 'мир' AS y FORMAT PrettyCompact;
|
||||
SELECT 'привет' AS x, 'мир' AS y FORMAT PrettySpace;
|
||||
|
||||
SELECT * FROM VALUES('x String, y String', ('привет', 'мир'), ('мир', 'привет')) FORMAT Pretty;
|
||||
SELECT * FROM VALUES('x String, y String', ('привет', 'мир'), ('мир', 'привет')) FORMAT PrettyCompact;
|
||||
SELECT * FROM VALUES('x String, y String', ('привет', 'мир'), ('мир', 'привет')) FORMAT PrettySpace;
|
||||
|
||||
SET output_format_pretty_max_value_width = 6;
|
||||
|
||||
SELECT 'привет' AS x, 'мир' AS y FORMAT Pretty;
|
||||
SELECT 'привет' AS x, 'мир' AS y FORMAT PrettyCompact;
|
||||
SELECT 'привет' AS x, 'мир' AS y FORMAT PrettySpace;
|
||||
|
||||
SELECT * FROM VALUES('x String, y String', ('привет', 'мир'), ('мир', 'привет')) FORMAT Pretty;
|
||||
SELECT * FROM VALUES('x String, y String', ('привет', 'мир'), ('мир', 'привет')) FORMAT PrettyCompact;
|
||||
SELECT * FROM VALUES('x String, y String', ('привет', 'мир'), ('мир', 'привет')) FORMAT PrettySpace;
|
||||
|
||||
SET output_format_pretty_max_value_width = 1;
|
||||
|
||||
SELECT 'привет' AS x, 'мир' AS y FORMAT Pretty;
|
||||
SELECT 'привет' AS x, 'мир' AS y FORMAT PrettyCompact;
|
||||
SELECT 'привет' AS x, 'мир' AS y FORMAT PrettySpace;
|
||||
|
||||
SELECT * FROM VALUES('x String, y String', ('привет', 'мир'), ('мир', 'привет')) FORMAT Pretty;
|
||||
SELECT * FROM VALUES('x String, y String', ('привет', 'мир'), ('мир', 'привет')) FORMAT PrettyCompact;
|
||||
SELECT * FROM VALUES('x String, y String', ('привет', 'мир'), ('мир', 'привет')) FORMAT PrettySpace;
|
||||
|
||||
SET output_format_pretty_max_value_width = 0;
|
||||
|
||||
SELECT 'привет' AS x, 'мир' AS y FORMAT Pretty;
|
||||
SELECT 'привет' AS x, 'мир' AS y FORMAT PrettyCompact;
|
||||
SELECT 'привет' AS x, 'мир' AS y FORMAT PrettySpace;
|
||||
|
||||
SELECT * FROM VALUES('x String, y String', ('привет', 'мир'), ('мир', 'привет')) FORMAT Pretty;
|
||||
SELECT * FROM VALUES('x String, y String', ('привет', 'мир'), ('мир', 'привет')) FORMAT PrettyCompact;
|
||||
SELECT * FROM VALUES('x String, y String', ('привет', 'мир'), ('мир', 'привет')) FORMAT PrettySpace;
|
||||
|
||||
SET output_format_pretty_color = 0;
|
||||
SELECT 'привет' AS x, 'мир' AS y FORMAT Pretty;
|
Loading…
Reference in New Issue
Block a user