提交 d4f98f5b 编写于 作者: M Michael Kolupaev

clickhouse: fixed lambda expressions [#CONV-7444].

上级 f7aedd22
......@@ -206,6 +206,7 @@ public:
/// Выполнить функцию над блоком.
void execute(Block & block, const ColumnNumbers & arguments, size_t result)
{
/// TODO: Не падать, увидев константный массив.
const ColumnArray * column_array = dynamic_cast<const ColumnArray *>(&*block.getByPosition(arguments[1]).column);
ColumnExpression * column_expression = dynamic_cast<ColumnExpression *>(&*block.getByPosition(arguments[0]).column);
......
......@@ -535,7 +535,7 @@ void ExpressionAnalyzer::getActionsImpl(ASTPtr ast, bool no_subqueries, bool onl
ASTFunction * lambda = dynamic_cast<ASTFunction *>(&*child);
if (lambda && lambda->name == "lambda")
{
/// Если аргумент лямбда-функция, только запомним ее примерный тип.
/// Если аргумент - лямбда-функция, только запомним ее примерный тип.
if (lambda->arguments->children.size() != 2)
throw Exception("lambda requires two arguments", ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH);
......@@ -603,6 +603,7 @@ void ExpressionAnalyzer::getActionsImpl(ASTPtr ast, bool no_subqueries, bool onl
String result_name = lambda->arguments->children[1]->getColumnName();
lambda_actions->finalize(Names(1, result_name));
DataTypePtr result_type = lambda_actions->getSampleBlock().getByName(result_name).type;
argument_types[i] = new DataTypeExpression(lambda_type->getArgumentTypes(), result_type);
ColumnWithNameAndType lambda_column;
lambda_column.column = new ColumnExpression(1, lambda_actions, lambda_args, result_type, result_name);
......@@ -953,9 +954,6 @@ ExpressionActionsPtr ExpressionAnalyzer::getActions(bool project_result)
ExpressionActionsPtr ExpressionAnalyzer::getConstActions()
{
if (has_aggregation)
throw Exception("Expression has aggregation", ErrorCodes::LOGICAL_ERROR);
ExpressionActionsPtr actions = new ExpressionActions(NamesAndTypesList(), settings);
getActionsImpl(ast, true, true, *actions);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册