提交 d0a8faef 编写于 作者: C chertus

better InflatingExpressionTransform

上级 cc61fb94
......@@ -100,7 +100,7 @@ void ISimpleTransform::work()
return;
}
has_input = false;
has_input = !needInputData();
if (!skip_empty_chunks || current_data.chunk)
transformed = true;
......
......@@ -27,6 +27,7 @@ protected:
bool set_input_not_needed_after_read = false;
virtual void transform(Chunk & chunk) = 0;
virtual bool needInputData() const { return true; }
void stopReading() { no_more_data_needed = true; }
public:
......
......@@ -18,35 +18,6 @@ InflatingExpressionTransform::InflatingExpressionTransform(Block input_header, E
, default_totals(default_totals_)
{}
void InflatingExpressionTransform::work()
{
if (current_data.exception)
return;
try
{
transform(current_data.chunk);
}
catch (DB::Exception &)
{
current_data.exception = std::current_exception();
current_data.chunk.clear();
transformed = true;
has_input = false;
return;
}
if (!not_processed)
has_input = false;
if (!skip_empty_chunks || current_data.chunk)
transformed = true;
if (transformed && !current_data.chunk)
/// Support invariant that chunks must have the same number of columns as header.
current_data.chunk = Chunk(getOutputPort().getHeader().cloneEmpty().getColumns(), 0);
}
void InflatingExpressionTransform::transform(Chunk & chunk)
{
if (!initialized)
......
......@@ -15,10 +15,10 @@ public:
bool on_totals_ = false, bool default_totals_ = false);
String getName() const override { return "InflatingExpressionTransform"; }
void work() override;
protected:
void transform(Chunk & chunk) override;
bool needInputData() const override { return !not_processed; }
private:
ExpressionActionsPtr expression;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册