mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-20 08:40:50 +00:00
dbms: Server: fixed function names according to naming convention, added more comments and functional tests. [#METR-14099]
This commit is contained in:
parent
f360f244eb
commit
70d01a1696
@ -78,9 +78,9 @@ private:
|
||||
typedef Poco::SharedPtr<ExpressionAnalyzer> ExpressionAnalyzerPtr;
|
||||
|
||||
void init(BlockInputStreamPtr input, const Names & required_column_names = Names(), const NamesAndTypesList & table_column_names = NamesAndTypesList());
|
||||
void basic_init(BlockInputStreamPtr input, const NamesAndTypesList & table_column_names);
|
||||
void init_union_all();
|
||||
void init_query_analyzer();
|
||||
void basicInit(BlockInputStreamPtr input, const NamesAndTypesList & table_column_names);
|
||||
void initUnionAll();
|
||||
void initQueryAnalyzer();
|
||||
|
||||
/// Выполнить один запрос SELECT из цепочки UNION ALL.
|
||||
void executeSingleQuery(bool should_perform_union_hint = true);
|
||||
|
@ -39,24 +39,24 @@ void InterpreterSelectQuery::init(BlockInputStreamPtr input, const Names & requi
|
||||
{
|
||||
/// Функция rewriteExpressionList() работает правильно только, если имена столбцов совпадают
|
||||
/// для каждого запроса цепочки UNION ALL. Поэтому сначала выполняем инициализацию.
|
||||
basic_init(input, table_column_names);
|
||||
init_union_all();
|
||||
basicInit(input, table_column_names);
|
||||
initUnionAll();
|
||||
if (!required_column_names.empty() && (context.getColumns().size() != required_column_names.size()))
|
||||
{
|
||||
rewriteExpressionList(required_column_names);
|
||||
/// Теперь имеется устаревшая информация для выполнения запроса. Обновляем эту информацию.
|
||||
init_query_analyzer();
|
||||
initQueryAnalyzer();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!required_column_names.empty())
|
||||
rewriteExpressionList(required_column_names);
|
||||
basic_init(input, table_column_names);
|
||||
basicInit(input, table_column_names);
|
||||
}
|
||||
}
|
||||
|
||||
void InterpreterSelectQuery::basic_init(BlockInputStreamPtr input_, const NamesAndTypesList & table_column_names)
|
||||
void InterpreterSelectQuery::basicInit(BlockInputStreamPtr input_, const NamesAndTypesList & table_column_names)
|
||||
{
|
||||
ProfileEvents::increment(ProfileEvents::SelectQuery);
|
||||
|
||||
@ -110,7 +110,7 @@ void InterpreterSelectQuery::basic_init(BlockInputStreamPtr input_, const NamesA
|
||||
streams.push_back(input_);
|
||||
}
|
||||
|
||||
void InterpreterSelectQuery::init_union_all()
|
||||
void InterpreterSelectQuery::initUnionAll()
|
||||
{
|
||||
/// Создаем цепочку запросов SELECT и проверяем, что результаты всех запросов SELECT cовместимые.
|
||||
/// NOTE Мы можем безопасно применить static_cast вместо typeid_cast,
|
||||
@ -129,6 +129,9 @@ void InterpreterSelectQuery::init_union_all()
|
||||
}
|
||||
|
||||
// Переименовать столбцы каждого запроса цепочки UNION ALL в такие же имена, как в первом запросе.
|
||||
// Мы выполняем этот код именно здесь, потому что в противном случае следующего рода запрос бы не срабатывал:
|
||||
// SELECT X FROM (SELECT * FROM (SELECT 1 AS X, 2 AS Y) UNION ALL SELECT 3, 4)
|
||||
// из-за того, что астериски заменены столбцами только при создании объектов query_analyzer в basicInit().
|
||||
for (IAST * tree = query.next_union_all.get(); tree != nullptr; tree = static_cast<ASTSelectQuery *>(tree)->next_union_all.get())
|
||||
{
|
||||
auto & ast = static_cast<ASTSelectQuery &>(*tree);
|
||||
@ -136,7 +139,7 @@ void InterpreterSelectQuery::init_union_all()
|
||||
}
|
||||
}
|
||||
|
||||
void InterpreterSelectQuery::init_query_analyzer()
|
||||
void InterpreterSelectQuery::initQueryAnalyzer()
|
||||
{
|
||||
query_analyzer = new ExpressionAnalyzer(query_ptr, context, storage, subquery_depth, true);
|
||||
for (auto p = next_select_in_union_all.get(); p != nullptr; p = p->next_select_in_union_all.get())
|
||||
|
@ -0,0 +1,2 @@
|
||||
1
|
||||
3
|
1
dbms/tests/queries/0_stateless/00098_g_union_all.sql
Normal file
1
dbms/tests/queries/0_stateless/00098_g_union_all.sql
Normal file
@ -0,0 +1 @@
|
||||
SELECT X FROM (SELECT * FROM (SELECT 1 AS X, 2 AS Y) UNION ALL SELECT 3, 4) ORDER BY X ASC;
|
@ -0,0 +1,2 @@
|
||||
1
|
||||
3
|
1
dbms/tests/queries/0_stateless/00098_h_union_all.sql
Normal file
1
dbms/tests/queries/0_stateless/00098_h_union_all.sql
Normal file
@ -0,0 +1 @@
|
||||
SELECT X FROM (SELECT 1 AS X, 2 AS Y UNION ALL SELECT * FROM (SELECT 3, 4)) ORDER BY X ASC;
|
Loading…
Reference in New Issue
Block a user