mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-17 20:02:05 +00:00
dbms: fixed error with multiple GLOBAL subqueries [#METR-17622].
This commit is contained in:
parent
4724de39bd
commit
3fbb61cbad
@ -239,9 +239,10 @@ void ExpressionAnalyzer::analyzeAggregation()
|
||||
|
||||
void ExpressionAnalyzer::initGlobalSubqueriesAndExternalTables()
|
||||
{
|
||||
/// Преобразует GLOBAL-подзапросы во внешние таблицы; кладёт их в словарь external_tables: name -> StoragePtr.
|
||||
initGlobalSubqueries(ast);
|
||||
|
||||
/// Создаёт словарь external_tables: name -> StoragePtr.
|
||||
/// Добавляет уже существующие внешние таблицы (не подзапросы) в словарь external_tables.
|
||||
findExternalTables(ast);
|
||||
}
|
||||
|
||||
@ -896,10 +897,6 @@ static SharedPtr<InterpreterSelectQuery> interpretSubquery(
|
||||
|
||||
void ExpressionAnalyzer::addExternalStorage(ASTPtr & subquery_or_table_name)
|
||||
{
|
||||
/// Сгенерируем имя для внешней таблицы.
|
||||
while (context.tryGetExternalTable("_data" + toString(external_table_id)))
|
||||
++external_table_id;
|
||||
|
||||
if (const ASTIdentifier * table = typeid_cast<const ASTIdentifier *>(&*subquery_or_table_name))
|
||||
{
|
||||
/// Если это уже внешняя таблица, ничего заполять не нужно. Просто запоминаем ее наличие.
|
||||
@ -910,13 +907,20 @@ void ExpressionAnalyzer::addExternalStorage(ASTPtr & subquery_or_table_name)
|
||||
}
|
||||
}
|
||||
|
||||
/// Сгенерируем имя для внешней таблицы.
|
||||
String external_table_name = "_data" + toString(external_table_id);
|
||||
while (context.tryGetExternalTable(external_table_name)
|
||||
|| external_tables.count(external_table_name))
|
||||
{
|
||||
++external_table_id;
|
||||
external_table_name = "_data" + toString(external_table_id);
|
||||
}
|
||||
|
||||
SharedPtr<InterpreterSelectQuery> interpreter = interpretSubquery(subquery_or_table_name, context, subquery_depth + 1);
|
||||
|
||||
Block sample = interpreter->getSampleBlock();
|
||||
NamesAndTypesListPtr columns = new NamesAndTypesList(sample.getColumnsList());
|
||||
|
||||
String external_table_name = "_data" + toString(external_table_id);
|
||||
|
||||
/** Заменяем подзапрос на имя временной таблицы.
|
||||
* Именно в таком виде, запрос отправится на удалённый сервер.
|
||||
* На удалённый сервер отправится эта временная таблица, и на его стороне,
|
||||
|
@ -0,0 +1 @@
|
||||
1 1
|
@ -0,0 +1 @@
|
||||
SELECT 1 GLOBAL IN (SELECT 1), 2 GLOBAL IN (SELECT 2) FROM remote('127.0.0.2', system.one);
|
Loading…
Reference in New Issue
Block a user