mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-22 23:52:03 +00:00
remove code duplicates for creating table AST node
This commit is contained in:
parent
3931a4db5c
commit
1eae5c38ea
@ -139,7 +139,7 @@ private:
|
||||
* instead of doing a subquery, you just need to read it.
|
||||
*/
|
||||
|
||||
auto database_and_table_name = ASTIdentifier::createSpecial(external_table_name);
|
||||
auto database_and_table_name = createDatabaseAndTableNode("", external_table_name);
|
||||
|
||||
if (auto ast_table_expr = typeid_cast<ASTTableExpression *>(subquery_or_table_name_or_table_expression.get()))
|
||||
{
|
||||
|
@ -91,24 +91,6 @@ StoragePtr tryGetTable(const ASTPtr & database_and_table, const Context & contex
|
||||
return context.tryGetTable(db_and_table.database, db_and_table.table);
|
||||
}
|
||||
|
||||
|
||||
void replaceDatabaseAndTable(ASTPtr & database_and_table, const String & database_name, const String & table_name)
|
||||
{
|
||||
ASTPtr table = ASTIdentifier::createSpecial(table_name);
|
||||
|
||||
if (!database_name.empty())
|
||||
{
|
||||
ASTPtr database = ASTIdentifier::createSpecial(database_name);
|
||||
|
||||
database_and_table = ASTIdentifier::createSpecial(database_name + "." + table_name);
|
||||
database_and_table->children = {database, table};
|
||||
}
|
||||
else
|
||||
{
|
||||
database_and_table = ASTIdentifier::createSpecial(table_name);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -148,7 +130,7 @@ void InJoinSubqueriesPreprocessor::process(ASTSelectQuery * query) const
|
||||
|
||||
forEachNonGlobalSubquery(query, [&] (IAST * subquery, IAST * function, IAST * table_join)
|
||||
{
|
||||
forEachTable(subquery, [&] (ASTPtr & database_and_table)
|
||||
forEachTable(subquery, [&] (ASTPtr & database_and_table)
|
||||
{
|
||||
StoragePtr storage = tryGetTable(database_and_table, context);
|
||||
|
||||
@ -191,7 +173,8 @@ void InJoinSubqueriesPreprocessor::process(ASTSelectQuery * query) const
|
||||
std::string table;
|
||||
std::tie(database, table) = getRemoteDatabaseAndTableName(*storage);
|
||||
|
||||
replaceDatabaseAndTable(database_and_table, database, table);
|
||||
/// TODO: find a way to avoid AST node replacing
|
||||
database_and_table = createDatabaseAndTableNode(database, table);
|
||||
}
|
||||
else
|
||||
throw Exception("InJoinSubqueriesPreprocessor: unexpected value of 'distributed_product_mode' setting", ErrorCodes::LOGICAL_ERROR);
|
||||
|
@ -19,6 +19,19 @@ namespace ErrorCodes
|
||||
extern const int NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
ASTPtr createDatabaseAndTableNode(const String & database_name, const String & table_name)
|
||||
{
|
||||
if (database_name.empty())
|
||||
return ASTIdentifier::createSpecial(table_name);
|
||||
|
||||
ASTPtr database = ASTIdentifier::createSpecial(database_name);
|
||||
ASTPtr table = ASTIdentifier::createSpecial(table_name);
|
||||
|
||||
ASTPtr database_and_table = ASTIdentifier::createSpecial(database_name + "." + table_name);
|
||||
database_and_table->children = {database, table};
|
||||
return database_and_table;
|
||||
}
|
||||
|
||||
|
||||
ASTPtr ASTSelectQuery::clone() const
|
||||
{
|
||||
@ -323,12 +336,9 @@ void ASTSelectQuery::setDatabaseIfNeeded(const String & database_name)
|
||||
}
|
||||
else if (table_expression->database_and_table_name->children.empty())
|
||||
{
|
||||
ASTPtr database = ASTIdentifier::createSpecial(database_name);
|
||||
ASTPtr table = table_expression->database_and_table_name;
|
||||
const ASTIdentifier & identifier = static_cast<const ASTIdentifier &>(*table_expression->database_and_table_name);
|
||||
|
||||
const String & old_name = static_cast<ASTIdentifier &>(*table_expression->database_and_table_name).name;
|
||||
table_expression->database_and_table_name = ASTIdentifier::createSpecial(database_name + "." + old_name);
|
||||
table_expression->database_and_table_name->children = {database, table};
|
||||
table_expression->database_and_table_name = createDatabaseAndTableNode(database_name, identifier.name);
|
||||
}
|
||||
else if (table_expression->database_and_table_name->children.size() != 2)
|
||||
{
|
||||
@ -356,19 +366,7 @@ void ASTSelectQuery::replaceDatabaseAndTable(const String & database_name, const
|
||||
table_expression = table_expr.get();
|
||||
}
|
||||
|
||||
ASTPtr table = ASTIdentifier::createSpecial(table_name);
|
||||
|
||||
if (!database_name.empty())
|
||||
{
|
||||
ASTPtr database = ASTIdentifier::createSpecial(database_name);
|
||||
|
||||
table_expression->database_and_table_name = ASTIdentifier::createSpecial(database_name + "." + table_name);
|
||||
table_expression->database_and_table_name->children = {database, table};
|
||||
}
|
||||
else
|
||||
{
|
||||
table_expression->database_and_table_name = ASTIdentifier::createSpecial(table_name);
|
||||
}
|
||||
table_expression->database_and_table_name = createDatabaseAndTableNode(database_name, table_name);
|
||||
}
|
||||
|
||||
|
||||
|
@ -53,4 +53,7 @@ protected:
|
||||
void formatImpl(const FormatSettings & settings, FormatState & state, FormatStateStacked frame) const override;
|
||||
};
|
||||
|
||||
|
||||
ASTPtr createDatabaseAndTableNode(const String & database_name, const String & table_name);
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user