mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-24 18:50:49 +00:00
Fix join for totals.
This commit is contained in:
parent
31ed0f0e38
commit
94305c41e3
@ -749,13 +749,17 @@ void InterpreterSelectQuery::executeImpl(TPipeline & pipeline, const BlockInputS
|
||||
header_before_join = pipeline.getHeader();
|
||||
|
||||
/// In case joined subquery has totals, and we don't, add default chunk to totals.
|
||||
bool default_totals = false;
|
||||
if (!pipeline.hasTotals())
|
||||
{
|
||||
pipeline.addDefaultTotals();
|
||||
default_totals = true;
|
||||
}
|
||||
|
||||
pipeline.addSimpleTransform([&](const Block & header, QueryPipeline::StreamType type)
|
||||
{
|
||||
bool on_totals = type == QueryPipeline::StreamType::Totals;
|
||||
return std::make_shared<ExpressionTransform>(header, expressions.before_join, on_totals);
|
||||
return std::make_shared<ExpressionTransform>(header, expressions.before_join, on_totals, default_totals);
|
||||
});
|
||||
}
|
||||
else
|
||||
|
@ -11,10 +11,11 @@ static Block transformHeader(Block header, const ExpressionActionsPtr & expressi
|
||||
}
|
||||
|
||||
|
||||
ExpressionTransform::ExpressionTransform(const Block & header, ExpressionActionsPtr expression, bool on_totals)
|
||||
ExpressionTransform::ExpressionTransform(const Block & header, ExpressionActionsPtr expression, bool on_totals, bool default_totals)
|
||||
: ISimpleTransform(header, transformHeader(header, expression), on_totals)
|
||||
, expression(std::move(expression))
|
||||
, on_totals(on_totals)
|
||||
, default_totals(default_totals)
|
||||
{
|
||||
}
|
||||
|
||||
@ -24,7 +25,7 @@ void ExpressionTransform::transform(Chunk & chunk)
|
||||
|
||||
if (on_totals)
|
||||
{
|
||||
if (!expression->hasTotalsInJoin())
|
||||
if (default_totals && !expression->hasTotalsInJoin())
|
||||
return;
|
||||
|
||||
expression->executeOnTotals(block);
|
||||
|
@ -10,7 +10,7 @@ using ExpressionActionsPtr = std::shared_ptr<ExpressionActions>;
|
||||
class ExpressionTransform : public ISimpleTransform
|
||||
{
|
||||
public:
|
||||
ExpressionTransform(const Block & header, ExpressionActionsPtr expression, bool on_totals = false);
|
||||
ExpressionTransform(const Block & header, ExpressionActionsPtr expression, bool on_totals = false, bool default_totals = false);
|
||||
|
||||
String getName() const override { return "ExpressionTransform"; }
|
||||
|
||||
@ -20,6 +20,7 @@ protected:
|
||||
private:
|
||||
ExpressionActionsPtr expression;
|
||||
bool on_totals;
|
||||
bool default_totals;
|
||||
};
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user