2019-02-22 17:45:56 +00:00
|
|
|
#include <Processors/Transforms/ExpressionTransform.h>
|
|
|
|
#include <Interpreters/ExpressionAnalyzer.h>
|
|
|
|
|
|
|
|
namespace DB
|
|
|
|
{
|
|
|
|
|
|
|
|
static Block transformHeader(Block header, const ExpressionActionsPtr & expression)
|
|
|
|
{
|
|
|
|
expression->execute(header, true);
|
|
|
|
return header;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ExpressionTransform::ExpressionTransform(const Block & header, ExpressionActionsPtr expression)
|
|
|
|
: ISimpleTransform(header, transformHeader(header, expression), false)
|
|
|
|
, expression(std::move(expression))
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void ExpressionTransform::transform(Chunk & chunk)
|
|
|
|
{
|
2019-04-05 10:52:07 +00:00
|
|
|
auto block = getInputPort().getHeader().cloneWithColumns(chunk.detachColumns());
|
2019-02-22 17:45:56 +00:00
|
|
|
expression->execute(block);
|
2019-04-08 10:37:09 +00:00
|
|
|
auto num_rows = block.rows();
|
2019-02-22 17:45:56 +00:00
|
|
|
chunk.setColumns(block.getColumns(), num_rows);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|