Minor style changes in JoinedTables

This commit is contained in:
vdimir 2021-07-08 13:49:13 +03:00
parent 5d7fc61bd5
commit d4256a8583
No known key found for this signature in database
GPG Key ID: F57B3E10A21DBB31
6 changed files with 31 additions and 21 deletions

View File

@ -1,6 +1,8 @@
#include <Interpreters/IdentifierSemantic.h>
#include <Common/typeid_cast.h>
#include <Interpreters/IdentifierSemantic.h>
#include <Interpreters/Context.h>
#include <Interpreters/StorageID.h>
#include <Parsers/ASTFunction.h>
@ -280,7 +282,10 @@ IdentifierMembershipCollector::IdentifierMembershipCollector(const ASTSelectQuer
QueryAliasesNoSubqueriesVisitor(aliases).visit(with);
QueryAliasesNoSubqueriesVisitor(aliases).visit(select.select());
tables = getDatabaseAndTablesWithColumns(getTableExpressions(select), context);
const auto & settings = context->getSettingsRef();
tables = getDatabaseAndTablesWithColumns(getTableExpressions(select), context,
settings.asterisk_include_alias_columns,
settings.asterisk_include_materialized_columns);
}
std::optional<size_t> IdentifierMembershipCollector::getIdentsMembership(ASTPtr ast) const

View File

@ -311,7 +311,7 @@ InterpreterSelectQuery::InterpreterSelectQuery(
ApplyWithSubqueryVisitor().visit(query_ptr);
}
JoinedTables joined_tables(getSubqueryContext(context), getSelectQuery());
JoinedTables joined_tables(getSubqueryContext(context), getSelectQuery(), options.with_all_cols);
bool got_storage_from_query = false;
if (!has_input && !storage)
@ -328,7 +328,7 @@ InterpreterSelectQuery::InterpreterSelectQuery(
metadata_snapshot = storage->getInMemoryMetadataPtr();
}
if (has_input || !joined_tables.resolveTables(options.with_all_cols))
if (has_input || !joined_tables.resolveTables())
joined_tables.makeFakeTable(storage, metadata_snapshot, source_header);
/// Rewrite JOINs
@ -337,7 +337,7 @@ InterpreterSelectQuery::InterpreterSelectQuery(
rewriteMultipleJoins(query_ptr, joined_tables.tablesWithColumns(), context->getCurrentDatabase(), context->getSettingsRef());
joined_tables.reset(getSelectQuery());
joined_tables.resolveTables(options.with_all_cols);
joined_tables.resolveTables();
if (storage && joined_tables.isLeftTableSubquery())
{

View File

@ -161,9 +161,10 @@ using RenameQualifiedIdentifiersVisitor = InDepthNodeVisitor<RenameQualifiedIden
}
JoinedTables::JoinedTables(ContextPtr context_, const ASTSelectQuery & select_query)
JoinedTables::JoinedTables(ContextPtr context_, const ASTSelectQuery & select_query, bool include_all_columns_)
: context(context_)
, table_expressions(getTableExpressions(select_query))
, include_all_columns(include_all_columns_)
, left_table_expression(extractTableExpression(select_query, 0))
, left_db_and_table(getDatabaseAndTable(select_query, 0))
{}
@ -218,13 +219,15 @@ StoragePtr JoinedTables::getLeftTableStorage()
return DatabaseCatalog::instance().getTable(table_id, context);
}
bool JoinedTables::resolveTables(bool include_all_columns)
bool JoinedTables::resolveTables()
{
tables_with_columns = getDatabaseAndTablesWithColumns(table_expressions, context, include_all_columns);
const auto & settings = context->getSettingsRef();
bool include_alias_cols = include_all_columns || settings.asterisk_include_alias_columns;
bool include_materialized_cols = include_all_columns || settings.asterisk_include_materialized_columns;
tables_with_columns = getDatabaseAndTablesWithColumns(table_expressions, context, include_alias_cols, include_materialized_cols);
if (tables_with_columns.size() != table_expressions.size())
throw Exception("Unexpected tables count", ErrorCodes::LOGICAL_ERROR);
const auto & settings = context->getSettingsRef();
if (settings.joined_subquery_requires_alias && tables_with_columns.size() > 1)
{
for (size_t i = 0; i < tables_with_columns.size(); ++i)
@ -312,4 +315,11 @@ std::shared_ptr<TableJoin> JoinedTables::makeTableJoin(const ASTSelectQuery & se
return table_join;
}
void JoinedTables::reset(const ASTSelectQuery & select_query)
{
table_expressions = getTableExpressions(select_query);
left_table_expression = extractTableExpression(select_query, 0);
left_db_and_table = getDatabaseAndTable(select_query, 0);
}
}

View File

@ -22,15 +22,12 @@ using StorageMetadataPtr = std::shared_ptr<const StorageInMemoryMetadata>;
class JoinedTables
{
public:
JoinedTables(ContextPtr context, const ASTSelectQuery & select_query);
JoinedTables(ContextPtr context, const ASTSelectQuery & select_query, bool include_all_columns_ = false);
void reset(const ASTSelectQuery & select_query)
{
*this = JoinedTables(Context::createCopy(context), select_query);
}
void reset(const ASTSelectQuery & select_query);
StoragePtr getLeftTableStorage();
bool resolveTables(bool include_all_columns);
bool resolveTables();
/// Make fake tables_with_columns[0] in case we have predefined input in InterpreterSelectQuery
void makeFakeTable(StoragePtr storage, const StorageMetadataPtr & metadata_snapshot, const Block & source_header);
@ -50,6 +47,7 @@ private:
ContextPtr context;
std::vector<const ASTTableExpression *> table_expressions;
TablesWithColumns tables_with_columns;
const bool include_all_columns;
/// Legacy (duplicated left table values)
ASTPtr left_table_expression;

View File

@ -116,13 +116,12 @@ static NamesAndTypesList getColumnsFromTableExpression(
TablesWithColumns getDatabaseAndTablesWithColumns(
const ASTTableExprConstPtrs & table_expressions,
ContextPtr context,
bool include_all)
bool include_alias_cols,
bool include_materialized_cols)
{
TablesWithColumns tables_with_columns;
String current_database = context->getCurrentDatabase();
bool include_alias_cols = include_all || context->getSettingsRef().asterisk_include_alias_columns;
bool include_materialized_cols = include_all || context->getSettingsRef().asterisk_include_materialized_columns;
for (const ASTTableExpression * table_expression : table_expressions)
{

View File

@ -21,8 +21,6 @@ const ASTTableExpression * getTableExpression(const ASTSelectQuery & select, siz
ASTPtr extractTableExpression(const ASTSelectQuery & select, size_t table_number);
TablesWithColumns getDatabaseAndTablesWithColumns(
const ASTTableExprConstPtrs & table_expressions,
ContextPtr context,
bool include_all = false);
const ASTTableExprConstPtrs & table_expressions, ContextPtr context, bool include_alias_cols, bool include_materialized_cols);
}