From 6a15b2b58816f510bc1d35017003e8f3a8f3bc22 Mon Sep 17 00:00:00 2001 From: Pavel Kartavyy Date: Wed, 9 Apr 2014 14:32:52 +0400 Subject: [PATCH] dbms: in refactoring [#METR-10498] --- dbms/include/DB/Interpreters/ExpressionAnalyzer.h | 3 ++- dbms/src/Interpreters/ExpressionAnalyzer.cpp | 8 ++++++-- dbms/src/Interpreters/InterpreterSelectQuery.cpp | 4 ++-- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/dbms/include/DB/Interpreters/ExpressionAnalyzer.h b/dbms/include/DB/Interpreters/ExpressionAnalyzer.h index 328c62068ca..83f89f2a56d 100644 --- a/dbms/include/DB/Interpreters/ExpressionAnalyzer.h +++ b/dbms/include/DB/Interpreters/ExpressionAnalyzer.h @@ -102,8 +102,9 @@ public: /// Все новые временные таблицы, полученные при выполнении подзапросов GLOBAL IN. Tables external_tables; + /// Создаем какие сможем Set из секции In для использования индекса по ним /// ordered_set нужен если в In используется индекс - void makeExplicitSets(bool create_ordered_set); + void makeExplicitSetsForIndex(bool create_ordered_set); private: typedef std::set NamesSet; diff --git a/dbms/src/Interpreters/ExpressionAnalyzer.cpp b/dbms/src/Interpreters/ExpressionAnalyzer.cpp index 94813abc2ed..9e92b5ab618 100644 --- a/dbms/src/Interpreters/ExpressionAnalyzer.cpp +++ b/dbms/src/Interpreters/ExpressionAnalyzer.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include @@ -498,9 +499,12 @@ void ExpressionAnalyzer::normalizeTreeImpl(ASTPtr & ast, MapOfASTs & finished_as finished_asts[initial_ast] = ast; } -void ExpressionAnalyzer::makeExplicitSets(bool create_ordered_set) +void ExpressionAnalyzer::makeExplicitSetsForIndex(bool create_ordered_set) { - if (storage && ast && dynamic_cast(storage.get())) + /// Для Remote, Distributed таблиц Set создавать не надо. Так как для передачи его все равно придется приобразовывать в текст + /// в formatAST, а использоваться он не будет + if (storage && ast && + (dynamic_cast(storage.get()) || dynamic_cast(storage.get()))) makeExplicitSetsRecursively(ast, storage->getSampleBlock(), create_ordered_set); } diff --git a/dbms/src/Interpreters/InterpreterSelectQuery.cpp b/dbms/src/Interpreters/InterpreterSelectQuery.cpp index ad32d958ac9..80e95e9e8d6 100644 --- a/dbms/src/Interpreters/InterpreterSelectQuery.cpp +++ b/dbms/src/Interpreters/InterpreterSelectQuery.cpp @@ -501,8 +501,8 @@ QueryProcessingStage::Enum InterpreterSelectQuery::executeFetchColumns(BlockInpu QueryProcessingStage::Enum from_stage = QueryProcessingStage::FetchColumns; - /// Создаем In заданные явно. Внутри In создаем дополнительно сортированный вектор значений - query_analyzer->makeExplicitSets(true); + /// Создаем какие сможем In для использования в индексе. Внутри In создаем дополнительно сортированный вектор значений + query_analyzer->makeExplicitSetsForIndex(true); /// Инициализируем изначальные потоки данных, на которые накладываются преобразования запроса. Таблица или подзапрос? if (!interpreter_subquery) {