From 9b38534853a5ffd3e6932165c81e2fa0ae8e56ad Mon Sep 17 00:00:00 2001 From: Michael Kolupaev Date: Wed, 5 Jun 2013 11:44:10 +0000 Subject: [PATCH] clickhouse: fixed higher order functions [#CONV-7444]. --- dbms/include/DB/Functions/FunctionsHigherOrder.h | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/dbms/include/DB/Functions/FunctionsHigherOrder.h b/dbms/include/DB/Functions/FunctionsHigherOrder.h index 92ff2c68058..e72f2af16c6 100644 --- a/dbms/include/DB/Functions/FunctionsHigherOrder.h +++ b/dbms/include/DB/Functions/FunctionsHigherOrder.h @@ -224,12 +224,6 @@ public: out_prerequisites.push_back(ExpressionActions::Action::applyFunction(new FunctionReplicate, replicate_arguments)); } - /// Если массив константный, попросим его материализовать. - if (arguments[1].column) - { - out_prerequisites.push_back(ExpressionActions::Action::applyFunction(new FunctionMaterialize, Names(1, arguments[1].name))); - } - DataTypePtr return_type = column_expression->getReturnType(); if (Impl::needBooleanExpression() && !dynamic_cast(&*return_type)) throw Exception("Expression for function " + getName() + " must return UInt8, found " @@ -243,10 +237,13 @@ public: { ColumnExpression * column_expression = dynamic_cast(&*block.getByPosition(arguments[0]).column); const ColumnArray * column_array = dynamic_cast(&*block.getByPosition(arguments[1]).column); + ColumnPtr temp_column; - /// Если это не ColumnArray, значит это константа, и мы просили ее материализовать. if (!column_array) - column_array = dynamic_cast(&*block.getByPosition(prerequisites.back()).column); + { + temp_column = dynamic_cast(*block.getByPosition(arguments[0]).column).convertToFullColumn(); + column_array = dynamic_cast(&*temp_column); + } Block temp_block; const ExpressionActions & expression = *column_expression->getExpression();