2017-04-01 09:19:00 +00:00
|
|
|
#include <Interpreters/ExpressionActions.h>
|
|
|
|
#include <DataStreams/ExpressionBlockInputStream.h>
|
2016-01-13 00:32:59 +00:00
|
|
|
|
|
|
|
|
|
|
|
namespace DB
|
|
|
|
{
|
|
|
|
|
2017-09-08 03:47:27 +00:00
|
|
|
ExpressionBlockInputStream::ExpressionBlockInputStream(const BlockInputStreamPtr & input, const ExpressionActionsPtr & expression_)
|
2017-04-01 07:20:54 +00:00
|
|
|
: expression(expression_)
|
2016-01-13 00:32:59 +00:00
|
|
|
{
|
2017-09-08 02:29:47 +00:00
|
|
|
children.push_back(input);
|
2016-01-13 00:32:59 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
String ExpressionBlockInputStream::getName() const { return "Expression"; }
|
|
|
|
|
|
|
|
const Block & ExpressionBlockInputStream::getTotals()
|
|
|
|
{
|
2017-04-01 07:20:54 +00:00
|
|
|
if (IProfilingBlockInputStream * child = dynamic_cast<IProfilingBlockInputStream *>(&*children.back()))
|
|
|
|
{
|
|
|
|
totals = child->getTotals();
|
|
|
|
expression->executeOnTotals(totals);
|
|
|
|
}
|
2016-01-13 00:32:59 +00:00
|
|
|
|
2017-04-01 07:20:54 +00:00
|
|
|
return totals;
|
2016-01-13 00:32:59 +00:00
|
|
|
}
|
|
|
|
|
2018-02-18 03:23:48 +00:00
|
|
|
Block ExpressionBlockInputStream::getHeader() const
|
2018-01-06 18:10:44 +00:00
|
|
|
{
|
2018-01-09 00:19:58 +00:00
|
|
|
Block res = children.back()->getHeader();
|
|
|
|
expression->execute(res);
|
|
|
|
return res;
|
2018-01-06 18:10:44 +00:00
|
|
|
}
|
|
|
|
|
2016-01-13 00:32:59 +00:00
|
|
|
Block ExpressionBlockInputStream::readImpl()
|
|
|
|
{
|
2017-04-01 07:20:54 +00:00
|
|
|
Block res = children.back()->read();
|
|
|
|
if (!res)
|
|
|
|
return res;
|
|
|
|
expression->execute(res);
|
|
|
|
return res;
|
2016-01-13 00:32:59 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|