Merge branch 'master' into get-client-http-header

This commit is contained in:
Alexey Milovidov 2024-03-24 00:54:25 +01:00
commit 08b7dd9591
53 changed files with 407 additions and 74 deletions

View File

@ -405,7 +405,7 @@ Returns the name of the current user. In case of a distributed query, the name o
SELECT currentUser(); SELECT currentUser();
``` ```
Alias: `user()`, `USER()`. Aliases: `user()`, `USER()`, `current_user()`. Aliases are case insensitive.
**Returned values** **Returned values**

View File

@ -1140,6 +1140,7 @@ class IColumn;
M(Bool, output_format_enable_streaming, false, "Enable streaming in output formats that support it.", 0) \ M(Bool, output_format_enable_streaming, false, "Enable streaming in output formats that support it.", 0) \
M(Bool, output_format_write_statistics, true, "Write statistics about read rows, bytes, time elapsed in suitable output formats.", 0) \ M(Bool, output_format_write_statistics, true, "Write statistics about read rows, bytes, time elapsed in suitable output formats.", 0) \
M(Bool, output_format_pretty_row_numbers, false, "Add row numbers before each row for pretty output format", 0) \ M(Bool, output_format_pretty_row_numbers, false, "Add row numbers before each row for pretty output format", 0) \
M(Bool, output_format_pretty_highlight_digit_groups, true, "If enabled and if output is a terminal, highlight every digit corresponding to the number of thousands, millions, etc. with underline.", 0) \
M(UInt64, output_format_pretty_single_large_number_tip_threshold, 1'000'000, "Print a readable number tip on the right side of the table if the block consists of a single number which exceeds this value (except 0)", 0) \ M(UInt64, output_format_pretty_single_large_number_tip_threshold, 1'000'000, "Print a readable number tip on the right side of the table if the block consists of a single number which exceeds this value (except 0)", 0) \
M(Bool, insert_distributed_one_random_shard, false, "If setting is enabled, inserting into distributed table will choose a random shard to write when there is no sharding key", 0) \ M(Bool, insert_distributed_one_random_shard, false, "If setting is enabled, inserting into distributed table will choose a random shard to write when there is no sharding key", 0) \
\ \

View File

@ -106,6 +106,7 @@ static std::map<ClickHouseVersion, SettingsChangesHistory::SettingsChanges> sett
{"s3queue_allow_experimental_sharded_mode", false, false, "Enable experimental sharded mode of S3Queue table engine. It is experimental because it will be rewritten"}, {"s3queue_allow_experimental_sharded_mode", false, false, "Enable experimental sharded mode of S3Queue table engine. It is experimental because it will be rewritten"},
{"merge_tree_read_split_ranges_into_intersecting_and_non_intersecting_injection_probability", 0.0, 0.0, "For testing of `PartsSplitter` - split read ranges into intersecting and non intersecting every time you read from MergeTree with the specified probability."}, {"merge_tree_read_split_ranges_into_intersecting_and_non_intersecting_injection_probability", 0.0, 0.0, "For testing of `PartsSplitter` - split read ranges into intersecting and non intersecting every time you read from MergeTree with the specified probability."},
{"allow_get_client_http_header", false, false, "Introduced a new function."}, {"allow_get_client_http_header", false, false, "Introduced a new function."},
{"output_format_pretty_highlight_digit_groups", false, true, "If enabled and if output is a terminal, highlight every digit corresponding to the number of thousands, millions, etc. with underline."},
}}, }},
{"24.2", {{"allow_suspicious_variant_types", true, false, "Don't allow creating Variant type with suspicious variants by default"}, {"24.2", {{"allow_suspicious_variant_types", true, false, "Don't allow creating Variant type with suspicious variants by default"},
{"validate_experimental_and_suspicious_types_inside_nested_types", false, true, "Validate usage of experimental and suspicious types inside nested types"}, {"validate_experimental_and_suspicious_types_inside_nested_types", false, true, "Validate usage of experimental and suspicious types inside nested types"},

View File

@ -167,6 +167,7 @@ FormatSettings getFormatSettings(const ContextPtr & context, const Settings & se
format_settings.pretty.max_column_pad_width = settings.output_format_pretty_max_column_pad_width; format_settings.pretty.max_column_pad_width = settings.output_format_pretty_max_column_pad_width;
format_settings.pretty.max_rows = settings.output_format_pretty_max_rows; format_settings.pretty.max_rows = settings.output_format_pretty_max_rows;
format_settings.pretty.max_value_width = settings.output_format_pretty_max_value_width; format_settings.pretty.max_value_width = settings.output_format_pretty_max_value_width;
format_settings.pretty.highlight_digit_groups = settings.output_format_pretty_highlight_digit_groups;
format_settings.pretty.output_format_pretty_row_numbers = settings.output_format_pretty_row_numbers; format_settings.pretty.output_format_pretty_row_numbers = settings.output_format_pretty_row_numbers;
format_settings.pretty.output_format_pretty_single_large_number_tip_threshold = settings.output_format_pretty_single_large_number_tip_threshold; format_settings.pretty.output_format_pretty_single_large_number_tip_threshold = settings.output_format_pretty_single_large_number_tip_threshold;
format_settings.protobuf.input_flatten_google_wrappers = settings.input_format_protobuf_flatten_google_wrappers; format_settings.protobuf.input_flatten_google_wrappers = settings.input_format_protobuf_flatten_google_wrappers;

View File

@ -275,6 +275,7 @@ struct FormatSettings
UInt64 max_rows = 10000; UInt64 max_rows = 10000;
UInt64 max_column_pad_width = 250; UInt64 max_column_pad_width = 250;
UInt64 max_value_width = 10000; UInt64 max_value_width = 10000;
bool highlight_digit_groups = true;
SettingFieldUInt64Auto color{"auto"}; SettingFieldUInt64Auto color{"auto"};
bool output_format_pretty_row_numbers = false; bool output_format_pretty_row_numbers = false;

View File

@ -55,6 +55,7 @@ REGISTER_FUNCTION(CurrentUser)
{ {
factory.registerFunction<FunctionCurrentUser>(); factory.registerFunction<FunctionCurrentUser>();
factory.registerAlias("user", FunctionCurrentUser::name, FunctionFactory::CaseInsensitive); factory.registerAlias("user", FunctionCurrentUser::name, FunctionFactory::CaseInsensitive);
factory.registerAlias("current_user", FunctionCurrentUser::name, FunctionFactory::CaseInsensitive);
} }
} }

View File

@ -303,7 +303,7 @@ void PrettyBlockOutputFormat::writeChunk(const Chunk & chunk, PortKind port_kind
const auto & type = *header.getByPosition(j).type; const auto & type = *header.getByPosition(j).type;
writeValueWithPadding(*columns[j], *serializations[j], i, writeValueWithPadding(*columns[j], *serializations[j], i,
widths[j].empty() ? max_widths[j] : widths[j][i], widths[j].empty() ? max_widths[j] : widths[j][i],
max_widths[j], type.shouldAlignRightInPrettyFormats()); max_widths[j], type.shouldAlignRightInPrettyFormats(), isNumber(type));
} }
writeCString(grid_symbols.bar, out); writeCString(grid_symbols.bar, out);
@ -322,9 +322,75 @@ void PrettyBlockOutputFormat::writeChunk(const Chunk & chunk, PortKind port_kind
} }
static String highlightDigitGroups(String source)
{
if (source.size() <= 4)
return source;
bool is_regular_number = true;
size_t num_digits_before_decimal = 0;
for (auto c : source)
{
if (c == '-' || c == ' ')
continue;
if (c == '.')
break;
if (c >= '0' && c <= '9')
{
++num_digits_before_decimal;
}
else
{
is_regular_number = false;
break;
}
}
if (!is_regular_number || num_digits_before_decimal <= 4)
return source;
String result;
size_t size = source.size();
result.reserve(2 * size);
bool before_decimal = true;
size_t digit_num = 0;
for (size_t i = 0; i < size; ++i)
{
auto c = source[i];
if (before_decimal && c >= '0' && c <= '9')
{
++digit_num;
size_t offset = num_digits_before_decimal - digit_num;
if (offset && offset % 3 == 0)
{
result += "\033[4m";
result += c;
result += "\033[0m";
}
else
{
result += c;
}
}
else if (c == '.')
{
before_decimal = false;
result += c;
}
else
{
result += c;
}
}
return result;
}
void PrettyBlockOutputFormat::writeValueWithPadding( void PrettyBlockOutputFormat::writeValueWithPadding(
const IColumn & column, const ISerialization & serialization, size_t row_num, const IColumn & column, const ISerialization & serialization, size_t row_num,
size_t value_width, size_t pad_to_width, bool align_right) size_t value_width, size_t pad_to_width, bool align_right, bool is_number)
{ {
String serialized_value = " "; String serialized_value = " ";
{ {
@ -359,6 +425,10 @@ void PrettyBlockOutputFormat::writeValueWithPadding(
writeChar(' ', out); writeChar(' ', out);
}; };
/// Highlight groups of thousands.
if (color && is_number && format_settings.pretty.highlight_digit_groups)
serialized_value = highlightDigitGroups(serialized_value);
if (align_right) if (align_right)
{ {
write_padding(); write_padding();

View File

@ -48,7 +48,7 @@ protected:
void writeValueWithPadding( void writeValueWithPadding(
const IColumn & column, const ISerialization & serialization, size_t row_num, const IColumn & column, const ISerialization & serialization, size_t row_num,
size_t value_width, size_t pad_to_width, bool align_right); size_t value_width, size_t pad_to_width, bool align_right, bool is_number);
void resetFormatterImpl() override void resetFormatterImpl() override
{ {

View File

@ -169,7 +169,7 @@ void PrettyCompactBlockOutputFormat::writeRow(
const auto & type = *header.getByPosition(j).type; const auto & type = *header.getByPosition(j).type;
const auto & cur_widths = widths[j].empty() ? max_widths[j] : widths[j][row_num]; const auto & cur_widths = widths[j].empty() ? max_widths[j] : widths[j][row_num];
writeValueWithPadding(*columns[j], *serializations[j], row_num, cur_widths, max_widths[j], type.shouldAlignRightInPrettyFormats()); writeValueWithPadding(*columns[j], *serializations[j], row_num, cur_widths, max_widths[j], type.shouldAlignRightInPrettyFormats(), isNumber(type));
} }
writeCString(grid_symbols.bar, out); writeCString(grid_symbols.bar, out);

View File

@ -84,7 +84,7 @@ void PrettySpaceBlockOutputFormat::writeChunk(const Chunk & chunk, PortKind port
const auto & type = *header.getByPosition(column).type; const auto & type = *header.getByPosition(column).type;
auto & cur_width = widths[column].empty() ? max_widths[column] : widths[column][row]; auto & cur_width = widths[column].empty() ? max_widths[column] : widths[column][row];
writeValueWithPadding( writeValueWithPadding(
*columns[column], *serializations[column], row, cur_width, max_widths[column], type.shouldAlignRightInPrettyFormats()); *columns[column], *serializations[column], row, cur_width, max_widths[column], type.shouldAlignRightInPrettyFormats(), isNumber(type));
} }
writeReadableNumberTip(chunk); writeReadableNumberTip(chunk);

View File

@ -216,11 +216,14 @@ def gen_tags(version: ClickHouseVersion, release_type: str) -> List[str]:
return tags return tags
def buildx_args(urls: Dict[str, str], arch: str, direct_urls: List[str]) -> List[str]: def buildx_args(
urls: Dict[str, str], arch: str, direct_urls: List[str], version: str
) -> List[str]:
args = [ args = [
f"--platform=linux/{arch}", f"--platform=linux/{arch}",
f"--label=build-url={GITHUB_RUN_URL}", f"--label=build-url={GITHUB_RUN_URL}",
f"--label=com.clickhouse.build.githash={git.sha}", f"--label=com.clickhouse.build.githash={git.sha}",
f"--label=com.clickhouse.build.version={version}",
] ]
if direct_urls: if direct_urls:
args.append(f"--build-arg=DIRECT_DOWNLOAD_URLS='{' '.join(direct_urls)}'") args.append(f"--build-arg=DIRECT_DOWNLOAD_URLS='{' '.join(direct_urls)}'")
@ -267,7 +270,9 @@ def build_and_push_image(
urls = [url for url in direct_urls[arch] if ".deb" in url] urls = [url for url in direct_urls[arch] if ".deb" in url]
else: else:
urls = [url for url in direct_urls[arch] if ".tgz" in url] urls = [url for url in direct_urls[arch] if ".tgz" in url]
cmd_args.extend(buildx_args(repo_urls, arch, direct_urls=urls)) cmd_args.extend(
buildx_args(repo_urls, arch, direct_urls=urls, version=version.describe)
)
if not push: if not push:
cmd_args.append(f"--tag={image.repo}:{arch_tag}") cmd_args.append(f"--tag={image.repo}:{arch_tag}")
cmd_args.extend( cmd_args.extend(

View File

@ -1,4 +1,4 @@
SET output_format_pretty_color=1; SET output_format_pretty_color=1, output_format_pretty_highlight_digit_groups=0;
SELECT toUInt64(round(exp10(number))) AS x, toString(x) AS s FROM system.numbers LIMIT 10 FORMAT Pretty; SELECT toUInt64(round(exp10(number))) AS x, toString(x) AS s FROM system.numbers LIMIT 10 FORMAT Pretty;
SELECT toUInt64(round(exp10(number))) AS x, toString(x) AS s FROM system.numbers LIMIT 10 FORMAT PrettyCompact; SELECT toUInt64(round(exp10(number))) AS x, toString(x) AS s FROM system.numbers LIMIT 10 FORMAT PrettyCompact;
SELECT toUInt64(round(exp10(number))) AS x, toString(x) AS s FROM system.numbers LIMIT 10 FORMAT PrettySpace; SELECT toUInt64(round(exp10(number))) AS x, toString(x) AS s FROM system.numbers LIMIT 10 FORMAT PrettySpace;

View File

@ -1,4 +1,4 @@
1 1
1 1
1 1 1 1 1
1 1

View File

@ -1,5 +1,5 @@
-- since actual user name is unknown, have to perform just smoke tests -- Since the actual user name is unknown, have to perform just smoke tests
select currentUser() IS NOT NULL; select currentUser() IS NOT NULL;
select length(currentUser()) > 0; select length(currentUser()) > 0;
select currentUser() = user(), currentUser() = USER(); select currentUser() = user(), currentUser() = USER(), current_user() = currentUser();
select currentUser() = initial_user from system.processes where query like '%$!@#%'; select currentUser() = initial_user from system.processes where query like '%$!@#%' AND current_database = currentDatabase();

View File

@ -4,7 +4,12 @@
set basedir [file dirname $argv0] set basedir [file dirname $argv0]
set basename [file tail $argv0] set basename [file tail $argv0]
exp_internal -f $env(CLICKHOUSE_TMP)/$basename.debuglog 0 if {[info exists env(CLICKHOUSE_TMP)]} {
set CLICKHOUSE_TMP $env(CLICKHOUSE_TMP)
} else {
set CLICKHOUSE_TMP "."
}
exp_internal -f $CLICKHOUSE_TMP/$basename.debuglog 0
log_user 0 log_user 0
set timeout 60 set timeout 60

View File

@ -2,8 +2,13 @@
set basedir [file dirname $argv0] set basedir [file dirname $argv0]
set basename [file tail $argv0] set basename [file tail $argv0]
exp_internal -f $env(CLICKHOUSE_TMP)/$basename.debuglog 0 if {[info exists env(CLICKHOUSE_TMP)]} {
set history_file $env(CLICKHOUSE_TMP)/$basename.history set CLICKHOUSE_TMP $env(CLICKHOUSE_TMP)
} else {
set CLICKHOUSE_TMP "."
}
exp_internal -f $CLICKHOUSE_TMP/$basename.debuglog 0
set history_file $CLICKHOUSE_TMP/$basename.history
log_user 0 log_user 0
set timeout 60 set timeout 60

View File

@ -2,8 +2,13 @@
set basedir [file dirname $argv0] set basedir [file dirname $argv0]
set basename [file tail $argv0] set basename [file tail $argv0]
exp_internal -f $env(CLICKHOUSE_TMP)/$basename.debuglog 0 if {[info exists env(CLICKHOUSE_TMP)]} {
set history_file $env(CLICKHOUSE_TMP)/$basename.history set CLICKHOUSE_TMP $env(CLICKHOUSE_TMP)
} else {
set CLICKHOUSE_TMP "."
}
exp_internal -f $CLICKHOUSE_TMP/$basename.debuglog 0
set history_file $CLICKHOUSE_TMP/$basename.history
log_user 0 log_user 0
set timeout 60 set timeout 60

View File

@ -2,8 +2,14 @@
set basedir [file dirname $argv0] set basedir [file dirname $argv0]
set basename [file tail $argv0] set basename [file tail $argv0]
exp_internal -f $env(CLICKHOUSE_TMP)/$basename.debuglog 0
set history_file $env(CLICKHOUSE_TMP)/$basename.history if {[info exists env(CLICKHOUSE_TMP)]} {
set CLICKHOUSE_TMP $env(CLICKHOUSE_TMP)
} else {
set CLICKHOUSE_TMP "."
}
exp_internal -f $CLICKHOUSE_TMP/$basename.debuglog 0
set history_file $CLICKHOUSE_TMP/$basename.history
log_user 0 log_user 0
set timeout 60 set timeout 60

View File

@ -2,8 +2,14 @@
set basedir [file dirname $argv0] set basedir [file dirname $argv0]
set basename [file tail $argv0] set basename [file tail $argv0]
exp_internal -f $env(CLICKHOUSE_TMP)/$basename.debuglog 0
set history_file $env(CLICKHOUSE_TMP)/$basename.history if {[info exists env(CLICKHOUSE_TMP)]} {
set CLICKHOUSE_TMP $env(CLICKHOUSE_TMP)
} else {
set CLICKHOUSE_TMP "."
}
exp_internal -f $CLICKHOUSE_TMP/$basename.debuglog 0
set history_file $CLICKHOUSE_TMP/$basename.history
log_user 0 log_user 0
set timeout 60 set timeout 60

View File

@ -2,8 +2,13 @@
set basedir [file dirname $argv0] set basedir [file dirname $argv0]
set basename [file tail $argv0] set basename [file tail $argv0]
exp_internal -f $env(CLICKHOUSE_TMP)/$basename.debuglog 0 if {[info exists env(CLICKHOUSE_TMP)]} {
set history_file $env(CLICKHOUSE_TMP)/$basename.history set CLICKHOUSE_TMP $env(CLICKHOUSE_TMP)
} else {
set CLICKHOUSE_TMP "."
}
exp_internal -f $CLICKHOUSE_TMP/$basename.debuglog 0
set history_file $CLICKHOUSE_TMP/$basename.history
log_user 0 log_user 0
set timeout 60 set timeout 60

View File

@ -2,8 +2,13 @@
set basedir [file dirname $argv0] set basedir [file dirname $argv0]
set basename [file tail $argv0] set basename [file tail $argv0]
exp_internal -f $env(CLICKHOUSE_TMP)/$basename.debuglog 0 if {[info exists env(CLICKHOUSE_TMP)]} {
set history_file $env(CLICKHOUSE_TMP)/$basename.history set CLICKHOUSE_TMP $env(CLICKHOUSE_TMP)
} else {
set CLICKHOUSE_TMP "."
}
exp_internal -f $CLICKHOUSE_TMP/$basename.debuglog 0
set history_file $CLICKHOUSE_TMP/$basename.history
log_user 0 log_user 0
set timeout 60 set timeout 60

View File

@ -2,8 +2,13 @@
set basedir [file dirname $argv0] set basedir [file dirname $argv0]
set basename [file tail $argv0] set basename [file tail $argv0]
exp_internal -f $env(CLICKHOUSE_TMP)/$basename.debuglog 0 if {[info exists env(CLICKHOUSE_TMP)]} {
set history_file $env(CLICKHOUSE_TMP)/$basename.history set CLICKHOUSE_TMP $env(CLICKHOUSE_TMP)
} else {
set CLICKHOUSE_TMP "."
}
exp_internal -f $CLICKHOUSE_TMP/$basename.debuglog 0
set history_file $CLICKHOUSE_TMP/$basename.history
log_user 0 log_user 0
set timeout 60 set timeout 60

View File

@ -5,8 +5,13 @@
set basedir [file dirname $argv0] set basedir [file dirname $argv0]
set basename [file tail $argv0] set basename [file tail $argv0]
exp_internal -f $env(CLICKHOUSE_TMP)/$basename.debuglog 0 if {[info exists env(CLICKHOUSE_TMP)]} {
set history_file $env(CLICKHOUSE_TMP)/$basename.history set CLICKHOUSE_TMP $env(CLICKHOUSE_TMP)
} else {
set CLICKHOUSE_TMP "."
}
exp_internal -f $CLICKHOUSE_TMP/$basename.debuglog 0
set history_file $CLICKHOUSE_TMP/$basename.history
log_user 0 log_user 0
set timeout 60 set timeout 60

View File

@ -2,8 +2,13 @@
set basedir [file dirname $argv0] set basedir [file dirname $argv0]
set basename [file tail $argv0] set basename [file tail $argv0]
exp_internal -f $env(CLICKHOUSE_TMP)/$basename.debuglog 0 if {[info exists env(CLICKHOUSE_TMP)]} {
set history_file $env(CLICKHOUSE_TMP)/$basename.history set CLICKHOUSE_TMP $env(CLICKHOUSE_TMP)
} else {
set CLICKHOUSE_TMP "."
}
exp_internal -f $CLICKHOUSE_TMP/$basename.debuglog 0
set history_file $CLICKHOUSE_TMP/$basename.history
log_user 0 log_user 0
set timeout 60 set timeout 60

View File

@ -2,7 +2,12 @@
set basedir [file dirname $argv0] set basedir [file dirname $argv0]
set basename [file tail $argv0] set basename [file tail $argv0]
exp_internal -f $env(CLICKHOUSE_TMP)/$basename.debuglog 0 if {[info exists env(CLICKHOUSE_TMP)]} {
set CLICKHOUSE_TMP $env(CLICKHOUSE_TMP)
} else {
set CLICKHOUSE_TMP "."
}
exp_internal -f $CLICKHOUSE_TMP/$basename.debuglog 0
log_user 0 log_user 0
set timeout 60 set timeout 60

View File

@ -2,8 +2,13 @@
set basedir [file dirname $argv0] set basedir [file dirname $argv0]
set basename [file tail $argv0] set basename [file tail $argv0]
exp_internal -f $env(CLICKHOUSE_TMP)/$basename.debuglog 0 if {[info exists env(CLICKHOUSE_TMP)]} {
set history_file $env(CLICKHOUSE_TMP)/$basename.history set CLICKHOUSE_TMP $env(CLICKHOUSE_TMP)
} else {
set CLICKHOUSE_TMP "."
}
exp_internal -f $CLICKHOUSE_TMP/$basename.debuglog 0
set history_file $CLICKHOUSE_TMP/$basename.history
log_user 0 log_user 0
set timeout 60 set timeout 60

View File

@ -5,8 +5,13 @@
set basedir [file dirname $argv0] set basedir [file dirname $argv0]
set basename [file tail $argv0] set basename [file tail $argv0]
exp_internal -f $env(CLICKHOUSE_TMP)/$basename.debuglog 0 if {[info exists env(CLICKHOUSE_TMP)]} {
set history_file $env(CLICKHOUSE_TMP)/$basename.history set CLICKHOUSE_TMP $env(CLICKHOUSE_TMP)
} else {
set CLICKHOUSE_TMP "."
}
exp_internal -f $CLICKHOUSE_TMP/$basename.debuglog 0
set history_file $CLICKHOUSE_TMP/$basename.history
log_user 0 log_user 0
set timeout 60 set timeout 60

View File

@ -2,8 +2,13 @@
set basedir [file dirname $argv0] set basedir [file dirname $argv0]
set basename [file tail $argv0] set basename [file tail $argv0]
exp_internal -f $env(CLICKHOUSE_TMP)/$basename.debuglog 0 if {[info exists env(CLICKHOUSE_TMP)]} {
set history_file $env(CLICKHOUSE_TMP)/$basename.history set CLICKHOUSE_TMP $env(CLICKHOUSE_TMP)
} else {
set CLICKHOUSE_TMP "."
}
exp_internal -f $CLICKHOUSE_TMP/$basename.debuglog 0
set history_file $CLICKHOUSE_TMP/$basename.history
log_user 0 log_user 0
set timeout 60 set timeout 60

View File

@ -2,7 +2,12 @@
set basedir [file dirname $argv0] set basedir [file dirname $argv0]
set basename [file tail $argv0] set basename [file tail $argv0]
exp_internal -f $env(CLICKHOUSE_TMP)/$basename.debuglog 0 if {[info exists env(CLICKHOUSE_TMP)]} {
set CLICKHOUSE_TMP $env(CLICKHOUSE_TMP)
} else {
set CLICKHOUSE_TMP "."
}
exp_internal -f $CLICKHOUSE_TMP/$basename.debuglog 0
log_user 0 log_user 0
set timeout 60 set timeout 60

View File

@ -2,8 +2,13 @@
set basedir [file dirname $argv0] set basedir [file dirname $argv0]
set basename [file tail $argv0] set basename [file tail $argv0]
exp_internal -f $env(CLICKHOUSE_TMP)/$basename.debuglog 0 if {[info exists env(CLICKHOUSE_TMP)]} {
set history_file $env(CLICKHOUSE_TMP)/$basename.history set CLICKHOUSE_TMP $env(CLICKHOUSE_TMP)
} else {
set CLICKHOUSE_TMP "."
}
exp_internal -f $CLICKHOUSE_TMP/$basename.debuglog 0
set history_file $CLICKHOUSE_TMP/$basename.history
log_user 0 log_user 0
set timeout 60 set timeout 60

View File

@ -2,7 +2,13 @@
set basedir [file dirname $argv0] set basedir [file dirname $argv0]
set basename [file tail $argv0] set basename [file tail $argv0]
exp_internal -f $env(CLICKHOUSE_TMP)/$basename.debuglog 0 if {[info exists env(CLICKHOUSE_TMP)]} {
set CLICKHOUSE_TMP $env(CLICKHOUSE_TMP)
} else {
set CLICKHOUSE_TMP "."
}
exp_internal -f $CLICKHOUSE_TMP/$basename.debuglog 0
set history_file $CLICKHOUSE_TMP/$basename.history
log_user 0 log_user 0
set timeout 20 set timeout 20
@ -15,8 +21,8 @@ expect_after {
-i $any_spawn_id timeout { exit 1 } -i $any_spawn_id timeout { exit 1 }
} }
system "echo \"drop table if exists t; create table t(i String) engine=Memory; insert into t select 'test string'\" > $env(CLICKHOUSE_TMP)/file_02112" system "echo \"drop table if exists t; create table t(i String) engine=Memory; insert into t select 'test string'\" > $CLICKHOUSE_TMP/file_02112"
spawn bash -c "source $basedir/../shell_config.sh ; \$CLICKHOUSE_CLIENT --disable_suggestion --interactive --queries-file $env(CLICKHOUSE_TMP)/file_02112" spawn bash -c "source $basedir/../shell_config.sh ; \$CLICKHOUSE_CLIENT --disable_suggestion --interactive --queries-file $CLICKHOUSE_TMP/file_02112"
expect ":) " expect ":) "
send -- "select i from t format TSV\r" send -- "select i from t format TSV\r"

View File

@ -2,7 +2,12 @@
set basedir [file dirname $argv0] set basedir [file dirname $argv0]
set basename [file tail $argv0] set basename [file tail $argv0]
exp_internal -f $env(CLICKHOUSE_TMP)/$basename.debuglog 0 if {[info exists env(CLICKHOUSE_TMP)]} {
set CLICKHOUSE_TMP $env(CLICKHOUSE_TMP)
} else {
set CLICKHOUSE_TMP "."
}
exp_internal -f $CLICKHOUSE_TMP/$basename.debuglog 0
log_user 0 log_user 0
set timeout 20 set timeout 20

View File

@ -2,7 +2,12 @@
set basedir [file dirname $argv0] set basedir [file dirname $argv0]
set basename [file tail $argv0] set basename [file tail $argv0]
exp_internal -f $env(CLICKHOUSE_TMP)/$basename.debuglog 0 if {[info exists env(CLICKHOUSE_TMP)]} {
set CLICKHOUSE_TMP $env(CLICKHOUSE_TMP)
} else {
set CLICKHOUSE_TMP "."
}
exp_internal -f $CLICKHOUSE_TMP/$basename.debuglog 0
log_user 0 log_user 0
set timeout 20 set timeout 20
@ -15,8 +20,8 @@ expect_after {
-i $any_spawn_id timeout { exit 1 } -i $any_spawn_id timeout { exit 1 }
} }
system "echo \"drop table if exists t; create table t(i String) engine=Memory; insert into t select 'test string'\" > $env(CLICKHOUSE_TMP)/file_02112" system "echo \"drop table if exists t; create table t(i String) engine=Memory; insert into t select 'test string'\" > $CLICKHOUSE_TMP/file_02112"
spawn bash -c "source $basedir/../shell_config.sh ; \$CLICKHOUSE_LOCAL --disable_suggestion --interactive --queries-file $env(CLICKHOUSE_TMP)/file_02112" spawn bash -c "source $basedir/../shell_config.sh ; \$CLICKHOUSE_LOCAL --disable_suggestion --interactive --queries-file $CLICKHOUSE_TMP/file_02112"
expect ":) " expect ":) "
send -- "select \* from t format TSV\r" send -- "select \* from t format TSV\r"

View File

@ -2,8 +2,13 @@
set basedir [file dirname $argv0] set basedir [file dirname $argv0]
set basename [file tail $argv0] set basename [file tail $argv0]
exp_internal -f $env(CLICKHOUSE_TMP)/$basename.debuglog 0 if {[info exists env(CLICKHOUSE_TMP)]} {
set history_file $env(CLICKHOUSE_TMP)/$basename.history set CLICKHOUSE_TMP $env(CLICKHOUSE_TMP)
} else {
set CLICKHOUSE_TMP "."
}
exp_internal -f $CLICKHOUSE_TMP/$basename.debuglog 0
set history_file $CLICKHOUSE_TMP/$basename.history
log_user 0 log_user 0
set timeout 60 set timeout 60

View File

@ -2,8 +2,13 @@
set basedir [file dirname $argv0] set basedir [file dirname $argv0]
set basename [file tail $argv0] set basename [file tail $argv0]
exp_internal -f $env(CLICKHOUSE_TMP)/$basename.debuglog 0 if {[info exists env(CLICKHOUSE_TMP)]} {
set history_file $env(CLICKHOUSE_TMP)/$basename.history set CLICKHOUSE_TMP $env(CLICKHOUSE_TMP)
} else {
set CLICKHOUSE_TMP "."
}
exp_internal -f $CLICKHOUSE_TMP/$basename.debuglog 0
set history_file $CLICKHOUSE_TMP/$basename.history
log_user 0 log_user 0
set timeout 60 set timeout 60

View File

@ -2,8 +2,13 @@
set basedir [file dirname $argv0] set basedir [file dirname $argv0]
set basename [file tail $argv0] set basename [file tail $argv0]
exp_internal -f $env(CLICKHOUSE_TMP)/$basename.debuglog 0 if {[info exists env(CLICKHOUSE_TMP)]} {
set history_file $env(CLICKHOUSE_TMP)/$basename.history set CLICKHOUSE_TMP $env(CLICKHOUSE_TMP)
} else {
set CLICKHOUSE_TMP "."
}
exp_internal -f $CLICKHOUSE_TMP/$basename.debuglog 0
set history_file $CLICKHOUSE_TMP/$basename.history
log_user 0 log_user 0
set timeout 60 set timeout 60

View File

@ -2,7 +2,12 @@
set basedir [file dirname $argv0] set basedir [file dirname $argv0]
set basename [file tail $argv0] set basename [file tail $argv0]
exp_internal -f $env(CLICKHOUSE_TMP)/$basename.debuglog 0 if {[info exists env(CLICKHOUSE_TMP)]} {
set CLICKHOUSE_TMP $env(CLICKHOUSE_TMP)
} else {
set CLICKHOUSE_TMP "."
}
exp_internal -f $CLICKHOUSE_TMP/$basename.debuglog 0
log_user 0 log_user 0
set timeout 20 set timeout 20

View File

@ -8,7 +8,12 @@
set basedir [file dirname $argv0] set basedir [file dirname $argv0]
set basename [file tail $argv0] set basename [file tail $argv0]
exp_internal -f $env(CLICKHOUSE_TMP)/$basename.debuglog 0 if {[info exists env(CLICKHOUSE_TMP)]} {
set CLICKHOUSE_TMP $env(CLICKHOUSE_TMP)
} else {
set CLICKHOUSE_TMP "."
}
exp_internal -f $CLICKHOUSE_TMP/$basename.debuglog 0
log_user 0 log_user 0
set timeout 60 set timeout 60

View File

@ -8,7 +8,12 @@
set basedir [file dirname $argv0] set basedir [file dirname $argv0]
set basename [file tail $argv0] set basename [file tail $argv0]
exp_internal -f $env(CLICKHOUSE_TMP)/$basename.debuglog 0 if {[info exists env(CLICKHOUSE_TMP)]} {
set CLICKHOUSE_TMP $env(CLICKHOUSE_TMP)
} else {
set CLICKHOUSE_TMP "."
}
exp_internal -f $CLICKHOUSE_TMP/$basename.debuglog 0
log_user 0 log_user 0
set timeout 60 set timeout 60

View File

@ -3,7 +3,12 @@
set basedir [file dirname $argv0] set basedir [file dirname $argv0]
set basename [file tail $argv0] set basename [file tail $argv0]
exp_internal -f $env(CLICKHOUSE_TMP)/$basename.debuglog 0 if {[info exists env(CLICKHOUSE_TMP)]} {
set CLICKHOUSE_TMP $env(CLICKHOUSE_TMP)
} else {
set CLICKHOUSE_TMP "."
}
exp_internal -f $CLICKHOUSE_TMP/$basename.debuglog 0
log_user 0 log_user 0
set timeout 20 set timeout 20

View File

@ -2,8 +2,13 @@
set basedir [file dirname $argv0] set basedir [file dirname $argv0]
set basename [file tail $argv0] set basename [file tail $argv0]
exp_internal -f $env(CLICKHOUSE_TMP)/$basename.debuglog 0 if {[info exists env(CLICKHOUSE_TMP)]} {
set history_file $env(CLICKHOUSE_TMP)/$basename.history set CLICKHOUSE_TMP $env(CLICKHOUSE_TMP)
} else {
set CLICKHOUSE_TMP "."
}
exp_internal -f $CLICKHOUSE_TMP/$basename.debuglog 0
set history_file $CLICKHOUSE_TMP/$basename.history
log_user 0 log_user 0
set timeout 60 set timeout 60

View File

@ -2,7 +2,12 @@
set basedir [file dirname $argv0] set basedir [file dirname $argv0]
set basename [file tail $argv0] set basename [file tail $argv0]
exp_internal -f $env(CLICKHOUSE_TMP)/$basename.debuglog 0 if {[info exists env(CLICKHOUSE_TMP)]} {
set CLICKHOUSE_TMP $env(CLICKHOUSE_TMP)
} else {
set CLICKHOUSE_TMP "."
}
exp_internal -f $CLICKHOUSE_TMP/$basename.debuglog 0
log_user 0 log_user 0
set timeout 60 set timeout 60

View File

@ -2,7 +2,12 @@
set basedir [file dirname $argv0] set basedir [file dirname $argv0]
set basename [file tail $argv0] set basename [file tail $argv0]
exp_internal -f $env(CLICKHOUSE_TMP)/$basename.debuglog 0 if {[info exists env(CLICKHOUSE_TMP)]} {
set CLICKHOUSE_TMP $env(CLICKHOUSE_TMP)
} else {
set CLICKHOUSE_TMP "."
}
exp_internal -f $CLICKHOUSE_TMP/$basename.debuglog 0
log_user 0 log_user 0
set timeout 60 set timeout 60

View File

@ -2,7 +2,12 @@
set basedir [file dirname $argv0] set basedir [file dirname $argv0]
set basename [file tail $argv0] set basename [file tail $argv0]
exp_internal -f $env(CLICKHOUSE_TMP)/$basename.debuglog 0 if {[info exists env(CLICKHOUSE_TMP)]} {
set CLICKHOUSE_TMP $env(CLICKHOUSE_TMP)
} else {
set CLICKHOUSE_TMP "."
}
exp_internal -f $CLICKHOUSE_TMP/$basename.debuglog 0
log_user 0 log_user 0
set timeout 60 set timeout 60

View File

@ -11,7 +11,12 @@
set basedir [file dirname $argv0] set basedir [file dirname $argv0]
set basename [file tail $argv0] set basename [file tail $argv0]
exp_internal -f $env(CLICKHOUSE_TMP)/$basename.debuglog 0 if {[info exists env(CLICKHOUSE_TMP)]} {
set CLICKHOUSE_TMP $env(CLICKHOUSE_TMP)
} else {
set CLICKHOUSE_TMP "."
}
exp_internal -f $CLICKHOUSE_TMP/$basename.debuglog 0
log_user 0 log_user 0
set timeout 60 set timeout 60
match_max 100000 match_max 100000

View File

@ -2,8 +2,13 @@
set basedir [file dirname $argv0] set basedir [file dirname $argv0]
set basename [file tail $argv0] set basename [file tail $argv0]
exp_internal -f $env(CLICKHOUSE_TMP)/$basename.debuglog 0 if {[info exists env(CLICKHOUSE_TMP)]} {
set history_file $env(CLICKHOUSE_TMP)/$basename.history set CLICKHOUSE_TMP $env(CLICKHOUSE_TMP)
} else {
set CLICKHOUSE_TMP "."
}
exp_internal -f $CLICKHOUSE_TMP/$basename.debuglog 0
set history_file $CLICKHOUSE_TMP/$basename.history
log_user 0 log_user 0
set timeout 60 set timeout 60

View File

@ -3,8 +3,13 @@
set basedir [file dirname $argv0] set basedir [file dirname $argv0]
set basename [file tail $argv0] set basename [file tail $argv0]
exp_internal -f $env(CLICKHOUSE_TMP)/$basename.debuglog 0 if {[info exists env(CLICKHOUSE_TMP)]} {
set history_file $env(CLICKHOUSE_TMP)/$basename.history set CLICKHOUSE_TMP $env(CLICKHOUSE_TMP)
} else {
set CLICKHOUSE_TMP "."
}
exp_internal -f $CLICKHOUSE_TMP/$basename.debuglog 0
set history_file $CLICKHOUSE_TMP/$basename.history
log_user 0 log_user 0
set timeout 60 set timeout 60

View File

@ -2,8 +2,13 @@
set basedir [file dirname $argv0] set basedir [file dirname $argv0]
set basename [file tail $argv0] set basename [file tail $argv0]
exp_internal -f $env(CLICKHOUSE_TMP)/$basename.debuglog 0 if {[info exists env(CLICKHOUSE_TMP)]} {
set history_file $env(CLICKHOUSE_TMP)/$basename.history set CLICKHOUSE_TMP $env(CLICKHOUSE_TMP)
} else {
set CLICKHOUSE_TMP "."
}
exp_internal -f $CLICKHOUSE_TMP/$basename.debuglog 0
set history_file $CLICKHOUSE_TMP/$basename.history
log_user 0 log_user 0
set timeout 60 set timeout 60

View File

@ -2,8 +2,13 @@
set basedir [file dirname $argv0] set basedir [file dirname $argv0]
set basename [file tail $argv0] set basename [file tail $argv0]
exp_internal -f $env(CLICKHOUSE_TMP)/$basename.debuglog 0 if {[info exists env(CLICKHOUSE_TMP)]} {
set history_file $env(CLICKHOUSE_TMP)/$basename.history set CLICKHOUSE_TMP $env(CLICKHOUSE_TMP)
} else {
set CLICKHOUSE_TMP "."
}
exp_internal -f $CLICKHOUSE_TMP/$basename.debuglog 0
set history_file $CLICKHOUSE_TMP/$basename.history
log_user 0 log_user 0
set timeout 60 set timeout 60

View File

@ -0,0 +1,68 @@
multiply(exp10(number), if(modulo(number, 2), 1, -1))
-1
10
-100
1000
-10000
100000
-1000000
10000000
-100000000
1000000000
-10000000000
100000000000
-1000000000000
10000000000000
-100000000000000
1000000000000000
-10000000000000000
100000000000000000
-1000000000000000000
10000000000000000000
-100000000000000000000
1e21
-1e22
1e23
-1e24
1e25
-1e26
1e27
-1e28
1e29
exp10(number)
1
10
100
1000
10000
100000
1000000
10000000
100000000
1000000000
exp10(number)
1
10
100
1000
10000
100000
1000000
10000000
100000000
1000000000
plus(exp10(number), exp10(negate(number)))
2
10.1
100.01
1000.001
10000.0001
100000.00001
1000000.000001
10000000.0000001
100000000.00000001
1000000000

View File

@ -0,0 +1,6 @@
SELECT exp10(number) * (number % 2 ? 1 : -1) FROM numbers(30) FORMAT PrettySpace SETTINGS output_format_pretty_color = 1;
SELECT exp10(number) FROM numbers(10) FORMAT PrettySpace SETTINGS output_format_pretty_color = 1, output_format_pretty_highlight_digit_groups = 0;
SELECT exp10(number) FROM numbers(10) FORMAT PrettySpace;
SELECT exp10(number) + exp10(-number) FROM numbers(10) FORMAT PrettySpace SETTINGS output_format_pretty_color = 1;

View File

@ -1601,6 +1601,7 @@ geohashEncode
geohashesInBox geohashesInBox
geoip geoip
geospatial geospatial
getClientHTTPHeader
getMacro getMacro
getOSKernelVersion getOSKernelVersion
getServerPort getServerPort

View File

@ -342,7 +342,7 @@ done
expect_tests=( $(find $ROOT_PATH/tests/queries -name '*.expect') ) expect_tests=( $(find $ROOT_PATH/tests/queries -name '*.expect') )
for test_case in "${expect_tests[@]}"; do for test_case in "${expect_tests[@]}"; do
pattern="^exp_internal -f \$env(CLICKHOUSE_TMP)/\$basename.debuglog 0$" pattern="^exp_internal -f \$CLICKHOUSE_TMP/\$basename.debuglog 0$"
grep -q "$pattern" "$test_case" || echo "Missing '$pattern' in '$test_case'" grep -q "$pattern" "$test_case" || echo "Missing '$pattern' in '$test_case'"
if grep -q "^spawn.*CLICKHOUSE_CLIENT_BINARY$" "$test_case"; then if grep -q "^spawn.*CLICKHOUSE_CLIENT_BINARY$" "$test_case"; then