mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-25 17:12:03 +00:00
dbms: in refactoring [#METR-10498]
This commit is contained in:
parent
076db911e8
commit
3974dd8e1d
@ -103,8 +103,7 @@ public:
|
||||
Tables external_tables;
|
||||
|
||||
/// Создаем какие сможем Set из секции In для использования индекса по ним
|
||||
/// ordered_set нужен если в In используется индекс
|
||||
void makeExplicitSetsForIndex(bool create_ordered_set);
|
||||
void makeSetsForIndex();
|
||||
private:
|
||||
typedef std::set<String> NamesSet;
|
||||
|
||||
@ -319,7 +318,7 @@ private:
|
||||
void assertArrayJoin();
|
||||
|
||||
void makeExplicitSet(ASTFunction * node, const Block & sample_block, bool create_ordered_set);
|
||||
void makeExplicitSetsRecursively(ASTPtr & node, const Block & sample_block, bool create_ordered_set);
|
||||
void makeSetsForIndexRecursively(ASTPtr & node, const Block & sample_block);
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -260,6 +260,9 @@ public:
|
||||
|
||||
bool is_dropped;
|
||||
|
||||
/// Поддерживается ли индекс в секции In
|
||||
virtual bool supportIndexforIn() { return false; };
|
||||
|
||||
protected:
|
||||
IStorage() : is_dropped(false) {}
|
||||
|
||||
|
@ -77,6 +77,8 @@ public:
|
||||
void prepareAlterModify(const ASTAlterQuery::Parameters & params);
|
||||
void commitAlterModify(const ASTAlterQuery::Parameters & params);
|
||||
|
||||
bool supportIndexforIn() { return true; }
|
||||
|
||||
private:
|
||||
String path;
|
||||
String name;
|
||||
|
@ -64,6 +64,8 @@ public:
|
||||
*/
|
||||
void drop() override;
|
||||
|
||||
bool supportIndexforIn() { return true; }
|
||||
|
||||
private:
|
||||
friend class ReplicatedMergeTreeBlockOutputStream;
|
||||
|
||||
|
@ -499,19 +499,16 @@ void ExpressionAnalyzer::normalizeTreeImpl(ASTPtr & ast, MapOfASTs & finished_as
|
||||
finished_asts[initial_ast] = ast;
|
||||
}
|
||||
|
||||
void ExpressionAnalyzer::makeExplicitSetsForIndex(bool create_ordered_set)
|
||||
void ExpressionAnalyzer::makeSetsForIndex()
|
||||
{
|
||||
/// Для Remote, Distributed таблиц Set создавать не надо. Так как для передачи его все равно придется приобразовывать в текст
|
||||
/// в formatAST, а использоваться он не будет
|
||||
if (storage && ast &&
|
||||
(dynamic_cast<StorageMergeTree *>(storage.get()) || dynamic_cast<StorageReplicatedMergeTree *>(storage.get())))
|
||||
makeExplicitSetsRecursively(ast, storage->getSampleBlock(), create_ordered_set);
|
||||
if (storage && ast && storage->supportIndexforIn())
|
||||
makeSetsForIndexRecursively(ast, storage->getSampleBlock());
|
||||
}
|
||||
|
||||
void ExpressionAnalyzer::makeExplicitSetsRecursively(ASTPtr & node, const Block & sample_block, bool create_ordered_set)
|
||||
void ExpressionAnalyzer::makeSetsForIndexRecursively(ASTPtr & node, const Block & sample_block)
|
||||
{
|
||||
for (auto & child : node->children)
|
||||
makeExplicitSetsRecursively(child, sample_block, create_ordered_set);
|
||||
makeSetsForIndexRecursively(child, sample_block);
|
||||
|
||||
ASTFunction * func = dynamic_cast<ASTFunction *>(node.get());
|
||||
if (func && func->kind == ASTFunction::FUNCTION && (func->name == "in" || func->name == "notIn"))
|
||||
@ -523,7 +520,7 @@ void ExpressionAnalyzer::makeExplicitSetsRecursively(ASTPtr & node, const Block
|
||||
{
|
||||
try
|
||||
{
|
||||
makeExplicitSet(func, sample_block, create_ordered_set);
|
||||
makeExplicitSet(func, sample_block, true);
|
||||
}
|
||||
catch (const DB::Exception & e)
|
||||
{
|
||||
|
@ -501,8 +501,7 @@ QueryProcessingStage::Enum InterpreterSelectQuery::executeFetchColumns(BlockInpu
|
||||
|
||||
QueryProcessingStage::Enum from_stage = QueryProcessingStage::FetchColumns;
|
||||
|
||||
/// Создаем какие сможем In для использования в индексе. Внутри In создаем дополнительно сортированный вектор значений
|
||||
query_analyzer->makeExplicitSetsForIndex(true);
|
||||
query_analyzer->makeSetsForIndex();
|
||||
/// Инициализируем изначальные потоки данных, на которые накладываются преобразования запроса. Таблица или подзапрос?
|
||||
if (!interpreter_subquery)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user