mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-19 16:20:50 +00:00
Merge branch 'master' into pr-local-plan
This commit is contained in:
commit
1d1f41521e
@ -58,7 +58,7 @@ Connection: Close
|
|||||||
Content-Type: text/tab-separated-values; charset=UTF-8
|
Content-Type: text/tab-separated-values; charset=UTF-8
|
||||||
X-ClickHouse-Server-Display-Name: clickhouse.ru-central1.internal
|
X-ClickHouse-Server-Display-Name: clickhouse.ru-central1.internal
|
||||||
X-ClickHouse-Query-Id: 5abe861c-239c-467f-b955-8a201abb8b7f
|
X-ClickHouse-Query-Id: 5abe861c-239c-467f-b955-8a201abb8b7f
|
||||||
X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0","elapsed_ns":"662334"}
|
X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0","elapsed_ns":"662334", "real_time_microseconds": "0"}
|
||||||
|
|
||||||
1
|
1
|
||||||
```
|
```
|
||||||
@ -472,7 +472,7 @@ $ curl -v 'http://localhost:8123/predefined_query'
|
|||||||
< X-ClickHouse-Format: Template
|
< X-ClickHouse-Format: Template
|
||||||
< X-ClickHouse-Timezone: Asia/Shanghai
|
< X-ClickHouse-Timezone: Asia/Shanghai
|
||||||
< Keep-Alive: timeout=10
|
< Keep-Alive: timeout=10
|
||||||
< X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0","elapsed_ns":"662334"}
|
< X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0","elapsed_ns":"662334", "real_time_microseconds":"0"}
|
||||||
<
|
<
|
||||||
# HELP "Query" "Number of executing queries"
|
# HELP "Query" "Number of executing queries"
|
||||||
# TYPE "Query" counter
|
# TYPE "Query" counter
|
||||||
@ -668,7 +668,7 @@ $ curl -vv -H 'XXX:xxx' 'http://localhost:8123/hi'
|
|||||||
< Content-Type: text/html; charset=UTF-8
|
< Content-Type: text/html; charset=UTF-8
|
||||||
< Transfer-Encoding: chunked
|
< Transfer-Encoding: chunked
|
||||||
< Keep-Alive: timeout=10
|
< Keep-Alive: timeout=10
|
||||||
< X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0","elapsed_ns":"662334"}
|
< X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0","elapsed_ns":"662334", "real_time_microseconds":"0"}
|
||||||
<
|
<
|
||||||
* Connection #0 to host localhost left intact
|
* Connection #0 to host localhost left intact
|
||||||
Say Hi!%
|
Say Hi!%
|
||||||
@ -708,7 +708,7 @@ $ curl -v -H 'XXX:xxx' 'http://localhost:8123/get_config_static_handler'
|
|||||||
< Content-Type: text/plain; charset=UTF-8
|
< Content-Type: text/plain; charset=UTF-8
|
||||||
< Transfer-Encoding: chunked
|
< Transfer-Encoding: chunked
|
||||||
< Keep-Alive: timeout=10
|
< Keep-Alive: timeout=10
|
||||||
< X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0","elapsed_ns":"662334"}
|
< X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0","elapsed_ns":"662334", "real_time_microseconds":"0"}
|
||||||
<
|
<
|
||||||
* Connection #0 to host localhost left intact
|
* Connection #0 to host localhost left intact
|
||||||
<html ng-app="SMI2"><head><base href="http://ui.tabix.io/"></head><body><div ui-view="" class="content-ui"></div><script src="http://loader.tabix.io/master.js"></script></body></html>%
|
<html ng-app="SMI2"><head><base href="http://ui.tabix.io/"></head><body><div ui-view="" class="content-ui"></div><script src="http://loader.tabix.io/master.js"></script></body></html>%
|
||||||
@ -766,7 +766,7 @@ $ curl -vv -H 'XXX:xxx' 'http://localhost:8123/get_absolute_path_static_handler'
|
|||||||
< Content-Type: text/html; charset=UTF-8
|
< Content-Type: text/html; charset=UTF-8
|
||||||
< Transfer-Encoding: chunked
|
< Transfer-Encoding: chunked
|
||||||
< Keep-Alive: timeout=10
|
< Keep-Alive: timeout=10
|
||||||
< X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0","elapsed_ns":"662334"}
|
< X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0","elapsed_ns":"662334", "real_time_microseconds":"0"}
|
||||||
<
|
<
|
||||||
<html><body>Absolute Path File</body></html>
|
<html><body>Absolute Path File</body></html>
|
||||||
* Connection #0 to host localhost left intact
|
* Connection #0 to host localhost left intact
|
||||||
@ -785,7 +785,7 @@ $ curl -vv -H 'XXX:xxx' 'http://localhost:8123/get_relative_path_static_handler'
|
|||||||
< Content-Type: text/html; charset=UTF-8
|
< Content-Type: text/html; charset=UTF-8
|
||||||
< Transfer-Encoding: chunked
|
< Transfer-Encoding: chunked
|
||||||
< Keep-Alive: timeout=10
|
< Keep-Alive: timeout=10
|
||||||
< X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0","elapsed_ns":"662334"}
|
< X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0","elapsed_ns":"662334", "real_time_microseconds":"0"}
|
||||||
<
|
<
|
||||||
<html><body>Relative Path File</body></html>
|
<html><body>Relative Path File</body></html>
|
||||||
* Connection #0 to host localhost left intact
|
* Connection #0 to host localhost left intact
|
||||||
|
@ -50,7 +50,7 @@ Connection: Close
|
|||||||
Content-Type: text/tab-separated-values; charset=UTF-8
|
Content-Type: text/tab-separated-values; charset=UTF-8
|
||||||
X-ClickHouse-Server-Display-Name: clickhouse.ru-central1.internal
|
X-ClickHouse-Server-Display-Name: clickhouse.ru-central1.internal
|
||||||
X-ClickHouse-Query-Id: 5abe861c-239c-467f-b955-8a201abb8b7f
|
X-ClickHouse-Query-Id: 5abe861c-239c-467f-b955-8a201abb8b7f
|
||||||
X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0","elapsed_ns":"662334"}
|
X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0","elapsed_ns":"662334", "real_time_microseconds":"0"}
|
||||||
|
|
||||||
1
|
1
|
||||||
```
|
```
|
||||||
@ -367,7 +367,7 @@ $ curl -v 'http://localhost:8123/predefined_query'
|
|||||||
< X-ClickHouse-Format: Template
|
< X-ClickHouse-Format: Template
|
||||||
< X-ClickHouse-Timezone: Asia/Shanghai
|
< X-ClickHouse-Timezone: Asia/Shanghai
|
||||||
< Keep-Alive: timeout=10
|
< Keep-Alive: timeout=10
|
||||||
< X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0"}
|
< X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0", "elapsed_ns":"662334", "real_time_microseconds":"0"}
|
||||||
<
|
<
|
||||||
# HELP "Query" "Number of executing queries"
|
# HELP "Query" "Number of executing queries"
|
||||||
# TYPE "Query" counter
|
# TYPE "Query" counter
|
||||||
@ -601,7 +601,7 @@ $ curl -v -H 'XXX:xxx' 'http://localhost:8123/get_config_static_handler'
|
|||||||
< Content-Type: text/plain; charset=UTF-8
|
< Content-Type: text/plain; charset=UTF-8
|
||||||
< Transfer-Encoding: chunked
|
< Transfer-Encoding: chunked
|
||||||
< Keep-Alive: timeout=10
|
< Keep-Alive: timeout=10
|
||||||
< X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0","elapsed_ns":"662334"}
|
< X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0","elapsed_ns":"662334", "real_time_microseconds":"0"}
|
||||||
<
|
<
|
||||||
* Connection #0 to host localhost left intact
|
* Connection #0 to host localhost left intact
|
||||||
<html ng-app="SMI2"><head><base href="http://ui.tabix.io/"></head><body><div ui-view="" class="content-ui"></div><script src="http://loader.tabix.io/master.js"></script></body></html>%
|
<html ng-app="SMI2"><head><base href="http://ui.tabix.io/"></head><body><div ui-view="" class="content-ui"></div><script src="http://loader.tabix.io/master.js"></script></body></html>%
|
||||||
@ -659,7 +659,7 @@ $ curl -vv -H 'XXX:xxx' 'http://localhost:8123/get_absolute_path_static_handler'
|
|||||||
< Content-Type: text/html; charset=UTF-8
|
< Content-Type: text/html; charset=UTF-8
|
||||||
< Transfer-Encoding: chunked
|
< Transfer-Encoding: chunked
|
||||||
< Keep-Alive: timeout=10
|
< Keep-Alive: timeout=10
|
||||||
< X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0","elapsed_ns":"662334"}
|
< X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0","elapsed_ns":"662334", "real_time_microseconds":"0"}
|
||||||
<
|
<
|
||||||
<html><body>Absolute Path File</body></html>
|
<html><body>Absolute Path File</body></html>
|
||||||
* Connection #0 to host localhost left intact
|
* Connection #0 to host localhost left intact
|
||||||
@ -678,7 +678,7 @@ $ curl -vv -H 'XXX:xxx' 'http://localhost:8123/get_relative_path_static_handler'
|
|||||||
< Content-Type: text/html; charset=UTF-8
|
< Content-Type: text/html; charset=UTF-8
|
||||||
< Transfer-Encoding: chunked
|
< Transfer-Encoding: chunked
|
||||||
< Keep-Alive: timeout=10
|
< Keep-Alive: timeout=10
|
||||||
< X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0","elapsed_ns":"662334"}
|
< X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0","elapsed_ns":"662334", "real_time_microseconds":"0"}
|
||||||
<
|
<
|
||||||
<html><body>Relative Path File</body></html>
|
<html><body>Relative Path File</body></html>
|
||||||
* Connection #0 to host localhost left intact
|
* Connection #0 to host localhost left intact
|
||||||
|
@ -53,7 +53,7 @@ Connection: Close
|
|||||||
Content-Type: text/tab-separated-values; charset=UTF-8
|
Content-Type: text/tab-separated-values; charset=UTF-8
|
||||||
X-ClickHouse-Server-Display-Name: clickhouse.ru-central1.internal
|
X-ClickHouse-Server-Display-Name: clickhouse.ru-central1.internal
|
||||||
X-ClickHouse-Query-Id: 5abe861c-239c-467f-b955-8a201abb8b7f
|
X-ClickHouse-Query-Id: 5abe861c-239c-467f-b955-8a201abb8b7f
|
||||||
X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0","elapsed_ns":"662334"}
|
X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0","elapsed_ns":"662334","real_time_microseconds":"0"}
|
||||||
|
|
||||||
1
|
1
|
||||||
```
|
```
|
||||||
@ -363,7 +363,7 @@ $ curl -v 'http://localhost:8123/predefined_query'
|
|||||||
< X-ClickHouse-Format: Template
|
< X-ClickHouse-Format: Template
|
||||||
< X-ClickHouse-Timezone: Asia/Shanghai
|
< X-ClickHouse-Timezone: Asia/Shanghai
|
||||||
< Keep-Alive: timeout=10
|
< Keep-Alive: timeout=10
|
||||||
< X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0","elapsed_ns":"662334"}
|
< X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0","elapsed_ns":"662334", "real_time_microseconds":"0"}
|
||||||
<
|
<
|
||||||
# HELP "Query" "Number of executing queries"
|
# HELP "Query" "Number of executing queries"
|
||||||
# TYPE "Query" counter
|
# TYPE "Query" counter
|
||||||
@ -524,7 +524,7 @@ $ curl -vv -H 'XXX:xxx' 'http://localhost:8123/hi'
|
|||||||
< Content-Type: text/html; charset=UTF-8
|
< Content-Type: text/html; charset=UTF-8
|
||||||
< Transfer-Encoding: chunked
|
< Transfer-Encoding: chunked
|
||||||
< Keep-Alive: timeout=10
|
< Keep-Alive: timeout=10
|
||||||
< X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0","elapsed_ns":"662334"}
|
< X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0","elapsed_ns":"662334", "real_time_microseconds":"0"}
|
||||||
<
|
<
|
||||||
* Connection #0 to host localhost left intact
|
* Connection #0 to host localhost left intact
|
||||||
Say Hi!%
|
Say Hi!%
|
||||||
@ -564,7 +564,7 @@ $ curl -v -H 'XXX:xxx' 'http://localhost:8123/get_config_static_handler'
|
|||||||
< Content-Type: text/plain; charset=UTF-8
|
< Content-Type: text/plain; charset=UTF-8
|
||||||
< Transfer-Encoding: chunked
|
< Transfer-Encoding: chunked
|
||||||
< Keep-Alive: timeout=10
|
< Keep-Alive: timeout=10
|
||||||
< X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0","elapsed_ns":"662334"}
|
< X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0","elapsed_ns":"662334","real_time_microseconds":"0"}
|
||||||
<
|
<
|
||||||
* Connection #0 to host localhost left intact
|
* Connection #0 to host localhost left intact
|
||||||
<html ng-app="SMI2"><head><base href="http://ui.tabix.io/"></head><body><div ui-view="" class="content-ui"></div><script src="http://loader.tabix.io/master.js"></script></body></html>%
|
<html ng-app="SMI2"><head><base href="http://ui.tabix.io/"></head><body><div ui-view="" class="content-ui"></div><script src="http://loader.tabix.io/master.js"></script></body></html>%
|
||||||
@ -616,7 +616,7 @@ $ curl -vv -H 'XXX:xxx' 'http://localhost:8123/get_absolute_path_static_handler'
|
|||||||
< Content-Type: text/html; charset=UTF-8
|
< Content-Type: text/html; charset=UTF-8
|
||||||
< Transfer-Encoding: chunked
|
< Transfer-Encoding: chunked
|
||||||
< Keep-Alive: timeout=10
|
< Keep-Alive: timeout=10
|
||||||
< X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0","elapsed_ns":"662334"}
|
< X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0","elapsed_ns":"662334","real_time_microseconds":"0"}
|
||||||
<
|
<
|
||||||
<html><body>Absolute Path File</body></html>
|
<html><body>Absolute Path File</body></html>
|
||||||
* Connection #0 to host localhost left intact
|
* Connection #0 to host localhost left intact
|
||||||
@ -635,7 +635,7 @@ $ curl -vv -H 'XXX:xxx' 'http://localhost:8123/get_relative_path_static_handler'
|
|||||||
< Content-Type: text/html; charset=UTF-8
|
< Content-Type: text/html; charset=UTF-8
|
||||||
< Transfer-Encoding: chunked
|
< Transfer-Encoding: chunked
|
||||||
< Keep-Alive: timeout=10
|
< Keep-Alive: timeout=10
|
||||||
< X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0","elapsed_ns":"662334"}
|
< X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0","elapsed_ns":"662334","real_time_microseconds":"0"}
|
||||||
<
|
<
|
||||||
<html><body>Relative Path File</body></html>
|
<html><body>Relative Path File</body></html>
|
||||||
* Connection #0 to host localhost left intact
|
* Connection #0 to host localhost left intact
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
#include <Parsers/Access/ASTCreateUserQuery.h>
|
#include <Parsers/Access/ASTCreateUserQuery.h>
|
||||||
#include <Parsers/Access/ASTAuthenticationData.h>
|
#include <Parsers/Access/ASTAuthenticationData.h>
|
||||||
#include <Parsers/ASTDropQuery.h>
|
#include <Parsers/ASTDropQuery.h>
|
||||||
|
#include <Parsers/ASTExplainQuery.h>
|
||||||
#include <Parsers/ASTSelectQuery.h>
|
#include <Parsers/ASTSelectQuery.h>
|
||||||
#include <Parsers/ASTSetQuery.h>
|
#include <Parsers/ASTSetQuery.h>
|
||||||
#include <Parsers/ASTUseQuery.h>
|
#include <Parsers/ASTUseQuery.h>
|
||||||
@ -2111,6 +2112,15 @@ MultiQueryProcessingStage ClientBase::analyzeMultiQueryText(
|
|||||||
// - Other formats (e.g. FORMAT CSV) are arbitrarily more complex and tricky to parse. For example, we may be unable to distinguish if the semicolon
|
// - Other formats (e.g. FORMAT CSV) are arbitrarily more complex and tricky to parse. For example, we may be unable to distinguish if the semicolon
|
||||||
// is part of the data or ends the statement. In this case, we simply assume that the end of the INSERT statement is determined by \n\n (two newlines).
|
// is part of the data or ends the statement. In this case, we simply assume that the end of the INSERT statement is determined by \n\n (two newlines).
|
||||||
auto * insert_ast = parsed_query->as<ASTInsertQuery>();
|
auto * insert_ast = parsed_query->as<ASTInsertQuery>();
|
||||||
|
// We also consider the INSERT query in EXPLAIN queries (same as normal INSERT queries)
|
||||||
|
if (!insert_ast)
|
||||||
|
{
|
||||||
|
auto * explain_ast = parsed_query->as<ASTExplainQuery>();
|
||||||
|
if (explain_ast && explain_ast->getExplainedQuery())
|
||||||
|
{
|
||||||
|
insert_ast = explain_ast->getExplainedQuery()->as<ASTInsertQuery>();
|
||||||
|
}
|
||||||
|
}
|
||||||
const char * query_to_execute_end = this_query_end;
|
const char * query_to_execute_end = this_query_end;
|
||||||
if (insert_ast && insert_ast->data)
|
if (insert_ast && insert_ast->data)
|
||||||
{
|
{
|
||||||
|
@ -91,6 +91,8 @@ void ProgressValues::writeJSON(WriteBuffer & out) const
|
|||||||
writeText(result_bytes, out);
|
writeText(result_bytes, out);
|
||||||
writeCString("\",\"elapsed_ns\":\"", out);
|
writeCString("\",\"elapsed_ns\":\"", out);
|
||||||
writeText(elapsed_ns, out);
|
writeText(elapsed_ns, out);
|
||||||
|
writeCString("\",\"real_time_microseconds\":\"", out);
|
||||||
|
writeText(real_time_microseconds, out);
|
||||||
writeCString("\"", out);
|
writeCString("\"", out);
|
||||||
writeCString("}", out);
|
writeCString("}", out);
|
||||||
}
|
}
|
||||||
@ -110,6 +112,7 @@ bool Progress::incrementPiecewiseAtomically(const Progress & rhs)
|
|||||||
result_bytes += rhs.result_bytes;
|
result_bytes += rhs.result_bytes;
|
||||||
|
|
||||||
elapsed_ns += rhs.elapsed_ns;
|
elapsed_ns += rhs.elapsed_ns;
|
||||||
|
real_time_microseconds += rhs.real_time_microseconds;
|
||||||
|
|
||||||
return rhs.read_rows || rhs.written_rows;
|
return rhs.read_rows || rhs.written_rows;
|
||||||
}
|
}
|
||||||
@ -129,6 +132,7 @@ void Progress::reset()
|
|||||||
result_bytes = 0;
|
result_bytes = 0;
|
||||||
|
|
||||||
elapsed_ns = 0;
|
elapsed_ns = 0;
|
||||||
|
real_time_microseconds = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ProgressValues Progress::getValues() const
|
ProgressValues Progress::getValues() const
|
||||||
@ -148,6 +152,7 @@ ProgressValues Progress::getValues() const
|
|||||||
res.result_bytes = result_bytes.load(std::memory_order_relaxed);
|
res.result_bytes = result_bytes.load(std::memory_order_relaxed);
|
||||||
|
|
||||||
res.elapsed_ns = elapsed_ns.load(std::memory_order_relaxed);
|
res.elapsed_ns = elapsed_ns.load(std::memory_order_relaxed);
|
||||||
|
res.real_time_microseconds = real_time_microseconds.load(std::memory_order_relaxed);
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
@ -169,6 +174,7 @@ ProgressValues Progress::fetchValuesAndResetPiecewiseAtomically()
|
|||||||
res.result_bytes = result_bytes.fetch_and(0);
|
res.result_bytes = result_bytes.fetch_and(0);
|
||||||
|
|
||||||
res.elapsed_ns = elapsed_ns.fetch_and(0);
|
res.elapsed_ns = elapsed_ns.fetch_and(0);
|
||||||
|
res.real_time_microseconds = real_time_microseconds.fetch_and(0);
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
@ -190,6 +196,7 @@ Progress Progress::fetchAndResetPiecewiseAtomically()
|
|||||||
res.result_bytes = result_bytes.fetch_and(0);
|
res.result_bytes = result_bytes.fetch_and(0);
|
||||||
|
|
||||||
res.elapsed_ns = elapsed_ns.fetch_and(0);
|
res.elapsed_ns = elapsed_ns.fetch_and(0);
|
||||||
|
res.real_time_microseconds = real_time_microseconds.fetch_and(0);
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
@ -209,6 +216,7 @@ Progress & Progress::operator=(Progress && other) noexcept
|
|||||||
result_bytes = other.result_bytes.load(std::memory_order_relaxed);
|
result_bytes = other.result_bytes.load(std::memory_order_relaxed);
|
||||||
|
|
||||||
elapsed_ns = other.elapsed_ns.load(std::memory_order_relaxed);
|
elapsed_ns = other.elapsed_ns.load(std::memory_order_relaxed);
|
||||||
|
real_time_microseconds = other.real_time_microseconds.load(std::memory_order_relaxed);
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
@ -244,4 +252,9 @@ void Progress::incrementElapsedNs(UInt64 elapsed_ns_)
|
|||||||
elapsed_ns.fetch_add(elapsed_ns_, std::memory_order_relaxed);
|
elapsed_ns.fetch_add(elapsed_ns_, std::memory_order_relaxed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Progress::incrementRealTimeMicroseconds(UInt64 microseconds)
|
||||||
|
{
|
||||||
|
real_time_microseconds.fetch_add(microseconds, std::memory_order_relaxed);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,7 @@ struct ProgressValues
|
|||||||
UInt64 result_bytes = 0;
|
UInt64 result_bytes = 0;
|
||||||
|
|
||||||
UInt64 elapsed_ns = 0;
|
UInt64 elapsed_ns = 0;
|
||||||
|
UInt64 real_time_microseconds = 0;
|
||||||
|
|
||||||
void read(ReadBuffer & in, UInt64 server_revision);
|
void read(ReadBuffer & in, UInt64 server_revision);
|
||||||
void write(WriteBuffer & out, UInt64 client_revision) const;
|
void write(WriteBuffer & out, UInt64 client_revision) const;
|
||||||
@ -40,6 +41,7 @@ struct ReadProgress
|
|||||||
UInt64 read_bytes = 0;
|
UInt64 read_bytes = 0;
|
||||||
UInt64 total_rows_to_read = 0;
|
UInt64 total_rows_to_read = 0;
|
||||||
UInt64 total_bytes_to_read = 0;
|
UInt64 total_bytes_to_read = 0;
|
||||||
|
UInt64 real_time_microseconds = 0;
|
||||||
|
|
||||||
ReadProgress(UInt64 read_rows_, UInt64 read_bytes_, UInt64 total_rows_to_read_ = 0, UInt64 total_bytes_to_read_ = 0)
|
ReadProgress(UInt64 read_rows_, UInt64 read_bytes_, UInt64 total_rows_to_read_ = 0, UInt64 total_bytes_to_read_ = 0)
|
||||||
: read_rows(read_rows_), read_bytes(read_bytes_), total_rows_to_read(total_rows_to_read_), total_bytes_to_read(total_bytes_to_read_) {}
|
: read_rows(read_rows_), read_bytes(read_bytes_), total_rows_to_read(total_rows_to_read_), total_bytes_to_read(total_bytes_to_read_) {}
|
||||||
@ -96,6 +98,8 @@ struct Progress
|
|||||||
|
|
||||||
std::atomic<UInt64> elapsed_ns {0};
|
std::atomic<UInt64> elapsed_ns {0};
|
||||||
|
|
||||||
|
std::atomic<UInt64> real_time_microseconds {0};
|
||||||
|
|
||||||
Progress() = default;
|
Progress() = default;
|
||||||
|
|
||||||
Progress(UInt64 read_rows_, UInt64 read_bytes_, UInt64 total_rows_to_read_ = 0, UInt64 total_bytes_to_read_ = 0)
|
Progress(UInt64 read_rows_, UInt64 read_bytes_, UInt64 total_rows_to_read_ = 0, UInt64 total_bytes_to_read_ = 0)
|
||||||
@ -125,6 +129,8 @@ struct Progress
|
|||||||
|
|
||||||
void incrementElapsedNs(UInt64 elapsed_ns_);
|
void incrementElapsedNs(UInt64 elapsed_ns_);
|
||||||
|
|
||||||
|
void incrementRealTimeMicroseconds(UInt64 microseconds);
|
||||||
|
|
||||||
void reset();
|
void reset();
|
||||||
|
|
||||||
ProgressValues getValues() const;
|
ProgressValues getValues() const;
|
||||||
|
@ -90,6 +90,7 @@ namespace ProfileEvents
|
|||||||
extern const Event SelectQueryTimeMicroseconds;
|
extern const Event SelectQueryTimeMicroseconds;
|
||||||
extern const Event InsertQueryTimeMicroseconds;
|
extern const Event InsertQueryTimeMicroseconds;
|
||||||
extern const Event OtherQueryTimeMicroseconds;
|
extern const Event OtherQueryTimeMicroseconds;
|
||||||
|
extern const Event RealTimeMicroseconds;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace DB
|
namespace DB
|
||||||
@ -398,9 +399,14 @@ void logQueryFinish(
|
|||||||
/// Update performance counters before logging to query_log
|
/// Update performance counters before logging to query_log
|
||||||
CurrentThread::finalizePerformanceCounters();
|
CurrentThread::finalizePerformanceCounters();
|
||||||
|
|
||||||
QueryStatusInfo info = process_list_elem->getInfo(true, context->getSettingsRef().log_profile_events);
|
std::shared_ptr<ProfileEvents::Counters::Snapshot> profile_counters;
|
||||||
elem.type = QueryLogElementType::QUERY_FINISH;
|
QueryStatusInfo info = process_list_elem->getInfo(true, true);
|
||||||
|
if (context->getSettingsRef().log_profile_events)
|
||||||
|
profile_counters = info.profile_counters;
|
||||||
|
else
|
||||||
|
profile_counters.swap(info.profile_counters);
|
||||||
|
|
||||||
|
elem.type = QueryLogElementType::QUERY_FINISH;
|
||||||
addStatusInfoToQueryLogElement(elem, info, query_ast, context);
|
addStatusInfoToQueryLogElement(elem, info, query_ast, context);
|
||||||
|
|
||||||
if (pulling_pipeline)
|
if (pulling_pipeline)
|
||||||
@ -419,6 +425,7 @@ void logQueryFinish(
|
|||||||
{
|
{
|
||||||
Progress p;
|
Progress p;
|
||||||
p.incrementPiecewiseAtomically(Progress{ResultProgress{elem.result_rows, elem.result_bytes}});
|
p.incrementPiecewiseAtomically(Progress{ResultProgress{elem.result_rows, elem.result_bytes}});
|
||||||
|
p.incrementRealTimeMicroseconds((*profile_counters)[ProfileEvents::RealTimeMicroseconds]);
|
||||||
progress_callback(p);
|
progress_callback(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -126,6 +126,7 @@ void listFilesWithRegexpMatchingImpl(
|
|||||||
/// Otherwise it will not allow to work with symlinks in `user_files_path` directory.
|
/// Otherwise it will not allow to work with symlinks in `user_files_path` directory.
|
||||||
fs::canonical(path_for_ls + for_match);
|
fs::canonical(path_for_ls + for_match);
|
||||||
fs::path absolute_path = fs::absolute(path_for_ls + for_match);
|
fs::path absolute_path = fs::absolute(path_for_ls + for_match);
|
||||||
|
absolute_path = absolute_path.lexically_normal(); /// ensure that the resulting path is normalized (e.g., removes any redundant slashes or . and .. segments)
|
||||||
result.push_back(absolute_path.string());
|
result.push_back(absolute_path.string());
|
||||||
}
|
}
|
||||||
catch (const std::exception &) // NOLINT
|
catch (const std::exception &) // NOLINT
|
||||||
|
@ -5,7 +5,7 @@ networks:
|
|||||||
enable_ipv6: true
|
enable_ipv6: true
|
||||||
ipam:
|
ipam:
|
||||||
config:
|
config:
|
||||||
- subnet: 10.5.0.0/12
|
- subnet: 10.0.0.0/12
|
||||||
gateway: 10.5.1.1
|
gateway: 10.0.0.1
|
||||||
- subnet: 2001:3984:3989::/64
|
- subnet: 2001:3984:3989::/64
|
||||||
gateway: 2001:3984:3989::1
|
gateway: 2001:3984:3989::1
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
explain ast insert into test values balabala;
|
explain ast insert into test values (balabala);
|
||||||
explain ast insert into test format TabSeparated balabala;
|
explain ast insert into test format TabSeparated balabala;
|
@ -8,3 +8,7 @@ Syntax error
|
|||||||
7
|
7
|
||||||
8
|
8
|
||||||
9
|
9
|
||||||
|
InsertQuery (children 1)
|
||||||
|
Identifier TEST2
|
||||||
|
InsertQuery (children 1)
|
||||||
|
Identifier TEST1
|
||||||
|
@ -51,6 +51,13 @@ INSERT INTO TEST2 VALUES
|
|||||||
SELECT * FROM TEST1 ORDER BY value;
|
SELECT * FROM TEST1 ORDER BY value;
|
||||||
SELECT * FROM TEST2 ORDER BY value;
|
SELECT * FROM TEST2 ORDER BY value;
|
||||||
DROP TABLE TEST1; DROP TABLE TEST2;
|
DROP TABLE TEST1; DROP TABLE TEST2;
|
||||||
|
|
||||||
|
EXPLAIN AST INSERT INTO TEST2 FORMAT CSV
|
||||||
|
1
|
||||||
|
2
|
||||||
|
|
||||||
|
EXPLAIN AST INSERT INTO TEST1 VALUES (101),(102);
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
$CLICKHOUSE_CLIENT -m < "$SQL_FILE_NAME"
|
$CLICKHOUSE_CLIENT -m < "$SQL_FILE_NAME"
|
||||||
|
@ -1,2 +1,3 @@
|
|||||||
Map(LowCardinality(String), LowCardinality(String))
|
Map(LowCardinality(String), LowCardinality(String))
|
||||||
1 1
|
1 1
|
||||||
|
3 100 1
|
||||||
|
@ -5,3 +5,11 @@ SELECT
|
|||||||
*,
|
*,
|
||||||
mapFromString(_headers['X-ClickHouse-Summary'])['read_rows']
|
mapFromString(_headers['X-ClickHouse-Summary'])['read_rows']
|
||||||
FROM url('http://127.0.0.1:8123/?query=select+1&user=default', LineAsString, 's String');
|
FROM url('http://127.0.0.1:8123/?query=select+1&user=default', LineAsString, 's String');
|
||||||
|
|
||||||
|
-- The real_time_microseconds is not available in the `X-ClickHouse-Progress` header (it is only available in the `X-ClickHouse-Summary` header).
|
||||||
|
-- We need to wait until the query is finished to get the real_time_microseconds.
|
||||||
|
SELECT
|
||||||
|
*,
|
||||||
|
mapFromString(_headers['X-ClickHouse-Summary'])['read_rows'],
|
||||||
|
toUInt64OrZero(mapFromString(_headers['X-ClickHouse-Summary'])['real_time_microseconds']) >= 0 ? 1 : 0
|
||||||
|
FROM url('http://127.0.0.1:8123/?query=SELECT%20uniq%28number%253%29%20FROM%20numbers%28100%29&user=default&wait_end_of_query=1', LineAsString, 's String');
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
data_hive/partitioning/column0=Elizabeth/sample.parquet
|
8
tests/queries/0_stateless/03232_file_path_normalizing.sh
Executable file
8
tests/queries/0_stateless/03232_file_path_normalizing.sh
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Tags: no-fasttest
|
||||||
|
|
||||||
|
CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
|
||||||
|
# shellcheck source=../shell_config.sh
|
||||||
|
. "$CURDIR"/../shell_config.sh
|
||||||
|
|
||||||
|
$CLICKHOUSE_LOCAL -q "SELECT substring(_path, position(_path, 'data_hive')) FROM file('$CURDIR/data_hive/partitioning/column0=*/sample.parquet') LIMIT 1;"
|
Loading…
Reference in New Issue
Block a user