mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-26 01:22:04 +00:00
Better UNION ALL: development #1947
This commit is contained in:
parent
492053bc43
commit
17ffe77b8c
@ -165,17 +165,28 @@ ExpressionAnalyzer::ExpressionAnalyzer(
|
||||
: ast(ast_), context(context_), settings(context.getSettings()),
|
||||
subquery_depth(subquery_depth_),
|
||||
source_columns(source_columns_), required_result_columns(required_result_columns_.begin(), required_result_columns_.end()),
|
||||
storage(storage_ ? storage_ : getTable()),
|
||||
storage(storage_),
|
||||
do_global(do_global_), subqueries_for_sets(subqueries_for_set_)
|
||||
{
|
||||
init();
|
||||
}
|
||||
|
||||
|
||||
void ExpressionAnalyzer::init()
|
||||
{
|
||||
select_query = typeid_cast<ASTSelectQuery *>(ast.get());
|
||||
|
||||
if (!storage && select_query)
|
||||
{
|
||||
auto select_database = select_query->database();
|
||||
auto select_table = select_query->table();
|
||||
|
||||
if (select_table
|
||||
&& !typeid_cast<const ASTSelectWithUnionQuery *>(select_table.get())
|
||||
&& !typeid_cast<const ASTFunction *>(select_table.get()))
|
||||
{
|
||||
String database = select_database
|
||||
? typeid_cast<const ASTIdentifier &>(*select_database).name
|
||||
: "";
|
||||
const String & table = typeid_cast<const ASTIdentifier &>(*select_table).name;
|
||||
storage = context.tryGetTable(database, table);
|
||||
}
|
||||
}
|
||||
|
||||
removeDuplicateColumns(source_columns);
|
||||
|
||||
addAliasColumns();
|
||||
@ -909,29 +920,6 @@ void ExpressionAnalyzer::addASTAliases(ASTPtr & ast, int ignore_levels)
|
||||
}
|
||||
|
||||
|
||||
StoragePtr ExpressionAnalyzer::getTable()
|
||||
{
|
||||
if (const ASTSelectQuery * select = typeid_cast<const ASTSelectQuery *>(ast.get()))
|
||||
{
|
||||
auto select_database = select->database();
|
||||
auto select_table = select->table();
|
||||
|
||||
if (select_table
|
||||
&& !typeid_cast<const ASTSelectWithUnionQuery *>(select_table.get())
|
||||
&& !typeid_cast<const ASTFunction *>(select_table.get()))
|
||||
{
|
||||
String database = select_database
|
||||
? typeid_cast<const ASTIdentifier &>(*select_database).name
|
||||
: "";
|
||||
const String & table = typeid_cast<const ASTIdentifier &>(*select_table).name;
|
||||
return context.tryGetTable(database, table);
|
||||
}
|
||||
}
|
||||
|
||||
return StoragePtr();
|
||||
}
|
||||
|
||||
|
||||
void ExpressionAnalyzer::normalizeTree()
|
||||
{
|
||||
SetOfASTs tmp_set;
|
||||
|
@ -161,8 +161,8 @@ private:
|
||||
/// Columns after ARRAY JOIN, JOIN, and/or aggregation.
|
||||
NamesAndTypesList aggregated_columns;
|
||||
|
||||
/// The table from which the query is made.
|
||||
const StoragePtr storage;
|
||||
/// The main table in FROM clause, if exists.
|
||||
StoragePtr storage;
|
||||
|
||||
bool has_aggregation = false;
|
||||
NamesAndTypesList aggregation_keys;
|
||||
@ -211,8 +211,6 @@ private:
|
||||
Tables external_tables;
|
||||
size_t external_table_id = 1;
|
||||
|
||||
void init();
|
||||
|
||||
static NamesAndTypesList::iterator findColumn(const String & name, NamesAndTypesList & cols);
|
||||
NamesAndTypesList::iterator findColumn(const String & name) { return findColumn(name, source_columns); }
|
||||
|
||||
@ -307,9 +305,6 @@ private:
|
||||
const NameSet & available_columns, NameSet & required_source_columns, NameSet & ignored_names,
|
||||
const NameSet & available_joined_columns, NameSet & required_joined_columns);
|
||||
|
||||
/// Get the table from which the query is made
|
||||
StoragePtr getTable();
|
||||
|
||||
/// columns - the columns that are present before the transformations begin.
|
||||
void initChain(ExpressionActionsChain & chain, const NamesAndTypesList & columns) const;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user