mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-11 17:02:25 +00:00
sign rewrite fixes, count() is working, others do not [#CONV-6778]
This commit is contained in:
parent
55d143e974
commit
c27cc5a3e9
@ -123,7 +123,8 @@ ASTPtr Expression::createSignColumn()
|
|||||||
ASTIdentifier * p_sign_column = new ASTIdentifier;
|
ASTIdentifier * p_sign_column = new ASTIdentifier;
|
||||||
ASTIdentifier & sign_column = *p_sign_column;
|
ASTIdentifier & sign_column = *p_sign_column;
|
||||||
ASTPtr sign_column_node = new ASTIdentifier(ast->range, sign_column_name);
|
ASTPtr sign_column_node = new ASTIdentifier(ast->range, sign_column_name);
|
||||||
sign_column.type = findColumn(sign_column_name)->second;
|
sign_column.name = sign_column_name;
|
||||||
|
sign_column.type = storage->getDataTypeByName(sign_column_name);
|
||||||
return sign_column_node;
|
return sign_column_node;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -144,9 +145,10 @@ ASTPtr Expression::rewriteCount()
|
|||||||
ASTFunction * p_sum = new ASTFunction;
|
ASTFunction * p_sum = new ASTFunction;
|
||||||
ASTFunction & sum = *p_sum;
|
ASTFunction & sum = *p_sum;
|
||||||
ASTPtr sum_node = p_sum;
|
ASTPtr sum_node = p_sum;
|
||||||
|
sum.name = "sum";
|
||||||
sum.arguments = exp_list_node;
|
sum.arguments = exp_list_node;
|
||||||
sum.children.push_back(exp_list_node);
|
sum.children.push_back(exp_list_node);
|
||||||
sum.aggregate_function = context.getAggregateFunctionFactory().get("sum", argument_types);
|
sum.aggregate_function = context.getAggregateFunctionFactory().get(sum.name, argument_types);
|
||||||
sum.return_type = sum.aggregate_function->getReturnType();
|
sum.return_type = sum.aggregate_function->getReturnType();
|
||||||
|
|
||||||
required_columns.insert(sign_column_name);
|
required_columns.insert(sign_column_name);
|
||||||
@ -163,13 +165,14 @@ ASTPtr Expression::rewriteSum(const ASTFunction * node)
|
|||||||
ASTExpressionList & mult_exp_list = *p_mult_exp_list;
|
ASTExpressionList & mult_exp_list = *p_mult_exp_list;
|
||||||
ASTPtr mult_exp_list_node = p_mult_exp_list;
|
ASTPtr mult_exp_list_node = p_mult_exp_list;
|
||||||
mult_exp_list.children.push_back(createSignColumn());
|
mult_exp_list.children.push_back(createSignColumn());
|
||||||
mult_exp_list.children.push_back(node->arguments);
|
mult_exp_list.children.push_back(node->arguments->children[0]);
|
||||||
|
|
||||||
/// x * Sign
|
/// x * Sign
|
||||||
ASTFunction * p_mult = new ASTFunction;
|
ASTFunction * p_mult = new ASTFunction;
|
||||||
ASTFunction & mult = *p_mult;
|
ASTFunction & mult = *p_mult;
|
||||||
ASTPtr mult_node = p_mult;
|
ASTPtr mult_node = p_mult;
|
||||||
mult.function = context.getFunctionFactory().get("multiply", context);
|
mult.name = "multiply";
|
||||||
|
mult.function = context.getFunctionFactory().get(mult.name, context);
|
||||||
mult.arguments = mult_exp_list_node;
|
mult.arguments = mult_exp_list_node;
|
||||||
mult.children.push_back(mult_exp_list_node);
|
mult.children.push_back(mult_exp_list_node);
|
||||||
mult.return_type = mult.function->getReturnType(getArgumentTypes(mult_exp_list));
|
mult.return_type = mult.function->getReturnType(getArgumentTypes(mult_exp_list));
|
||||||
@ -186,9 +189,10 @@ ASTPtr Expression::rewriteSum(const ASTFunction * node)
|
|||||||
ASTFunction * p_sum = new ASTFunction;
|
ASTFunction * p_sum = new ASTFunction;
|
||||||
ASTFunction & sum = *p_sum;
|
ASTFunction & sum = *p_sum;
|
||||||
ASTPtr sum_node = p_sum;
|
ASTPtr sum_node = p_sum;
|
||||||
|
sum.name = "sum";
|
||||||
sum.arguments = exp_list_node;
|
sum.arguments = exp_list_node;
|
||||||
sum.children.push_back(exp_list_node);
|
sum.children.push_back(exp_list_node);
|
||||||
sum.aggregate_function = context.getAggregateFunctionFactory().get("sum", argument_types);
|
sum.aggregate_function = context.getAggregateFunctionFactory().get(sum.name, argument_types);
|
||||||
sum.return_type = sum.aggregate_function->getReturnType();
|
sum.return_type = sum.aggregate_function->getReturnType();
|
||||||
|
|
||||||
required_columns.insert(sign_column_name);
|
required_columns.insert(sign_column_name);
|
||||||
@ -211,7 +215,8 @@ ASTPtr Expression::rewriteAvg(const ASTFunction * node)
|
|||||||
ASTFunction * p_div = new ASTFunction;
|
ASTFunction * p_div = new ASTFunction;
|
||||||
ASTFunction & div = *p_div;
|
ASTFunction & div = *p_div;
|
||||||
ASTPtr div_node = p_div;
|
ASTPtr div_node = p_div;
|
||||||
div.function = context.getFunctionFactory().get("divide", context);
|
div.name = "divide";
|
||||||
|
div.function = context.getFunctionFactory().get(div.name, context);
|
||||||
div.arguments = div_exp_list_node;
|
div.arguments = div_exp_list_node;
|
||||||
div.children.push_back(div_exp_list_node);
|
div.children.push_back(div_exp_list_node);
|
||||||
div.return_type = div.function->getReturnType(getArgumentTypes(div_exp_list));
|
div.return_type = div.function->getReturnType(getArgumentTypes(div_exp_list));
|
||||||
|
Loading…
Reference in New Issue
Block a user