dbms: in refactoring [#METR-10498]

This commit is contained in:
Pavel Kartavyy 2014-04-09 14:32:52 +04:00
parent 3c3d9289a3
commit 6a15b2b588
3 changed files with 10 additions and 5 deletions

View File

@ -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<String> NamesSet;

View File

@ -24,6 +24,7 @@
#include <DB/Storages/StorageMergeTree.h>
#include <DB/Storages/StorageDistributed.h>
#include <DB/Storages/StorageMemory.h>
#include <DB/Storages/StorageReplicatedMergeTree.h>
#include <DB/DataStreams/copyData.h>
@ -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<StorageMergeTree *>(storage.get()))
/// Для Remote, Distributed таблиц Set создавать не надо. Так как для передачи его все равно придется приобразовывать в текст
/// в formatAST, а использоваться он не будет
if (storage && ast &&
(dynamic_cast<StorageMergeTree *>(storage.get()) || dynamic_cast<StorageReplicatedMergeTree *>(storage.get())))
makeExplicitSetsRecursively(ast, storage->getSampleBlock(), create_ordered_set);
}

View File

@ -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)
{