ClickHouse/src/Interpreters/SubqueryForSet.cpp

62 lines
1.5 KiB
C++
Raw Normal View History

#include <Interpreters/SubqueryForSet.h>
#include <Interpreters/InterpreterSelectWithUnionQuery.h>
#include <Interpreters/IJoin.h>
2019-09-09 19:43:37 +00:00
#include <Interpreters/MergeJoin.h>
#include <Interpreters/ExpressionActions.h>
#include <DataStreams/LazyBlockInputStream.h>
namespace DB
{
void SubqueryForSet::makeSource(std::shared_ptr<InterpreterSelectWithUnionQuery> & interpreter,
NamesWithAliases && joined_block_aliases_)
{
joined_block_aliases = std::move(joined_block_aliases_);
2020-09-01 13:53:11 +00:00
source = QueryPipeline::getPipe(interpreter->execute().pipeline);
2020-09-01 13:53:11 +00:00
sample_block = source.getHeader();
renameColumns(sample_block);
}
void SubqueryForSet::renameColumns(Block & block)
{
for (const auto & name_with_alias : joined_block_aliases)
{
if (block.has(name_with_alias.first))
{
auto pos = block.getPositionByName(name_with_alias.first);
auto column = block.getByPosition(pos);
block.erase(pos);
column.name = name_with_alias.second;
block.insert(std::move(column));
}
}
}
2019-09-09 19:43:37 +00:00
void SubqueryForSet::setJoinActions(ExpressionActionsPtr actions)
{
actions->execute(sample_block);
joined_block_actions = actions;
}
bool SubqueryForSet::insertJoinedBlock(Block & block)
{
renameColumns(block);
if (joined_block_actions)
joined_block_actions->execute(block);
return join->addJoinedBlock(block);
}
2020-09-01 13:53:11 +00:00
void SubqueryForSet::setTotals(Block totals)
2019-09-09 19:43:37 +00:00
{
2020-09-01 13:53:11 +00:00
if (join)
{
renameColumns(totals);
join->setTotals(totals);
}
2019-09-09 19:43:37 +00:00
}
}