mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-25 11:10:49 +00:00
Fix tests
This commit is contained in:
parent
4e5db93af3
commit
74a8b14ca4
@ -15,10 +15,10 @@ namespace ErrorCodes
|
||||
extern const int LOGICAL_ERROR;
|
||||
}
|
||||
|
||||
ColumnFunction::ColumnFunction(size_t size, FunctionBasePtr function_, const ColumnsWithTypeAndName & columns_to_capture)
|
||||
ColumnFunction::ColumnFunction(size_t size, FunctionBasePtr function_, const ColumnsWithTypeAndName & columns_to_capture, bool ignore_arguments_types)
|
||||
: size_(size), function(function_)
|
||||
{
|
||||
appendArguments(columns_to_capture);
|
||||
appendArguments(columns_to_capture, ignore_arguments_types);
|
||||
}
|
||||
|
||||
MutableColumnPtr ColumnFunction::cloneResized(size_t size) const
|
||||
@ -173,7 +173,7 @@ size_t ColumnFunction::allocatedBytes() const
|
||||
return total_size;
|
||||
}
|
||||
|
||||
void ColumnFunction::appendArguments(const ColumnsWithTypeAndName & columns)
|
||||
void ColumnFunction::appendArguments(const ColumnsWithTypeAndName & columns, bool ignore_arguments_types)
|
||||
{
|
||||
auto args = function->getArgumentTypes().size();
|
||||
auto were_captured = captured_columns.size();
|
||||
@ -186,15 +186,15 @@ void ColumnFunction::appendArguments(const ColumnsWithTypeAndName & columns)
|
||||
+ ".", ErrorCodes::LOGICAL_ERROR);
|
||||
|
||||
for (const auto & column : columns)
|
||||
appendArgument(column);
|
||||
appendArgument(column, ignore_arguments_types);
|
||||
}
|
||||
|
||||
void ColumnFunction::appendArgument(const ColumnWithTypeAndName & column)
|
||||
void ColumnFunction::appendArgument(const ColumnWithTypeAndName & column, bool ignore_argument_type)
|
||||
{
|
||||
const auto & argumnet_types = function->getArgumentTypes();
|
||||
|
||||
auto index = captured_columns.size();
|
||||
if (!column.type->equals(*argumnet_types[index]))
|
||||
if (!ignore_argument_type && !column.type->equals(*argumnet_types[index]))
|
||||
throw Exception("Cannot capture column " + std::to_string(argumnet_types.size()) +
|
||||
" because it has incompatible type: got " + column.type->getName() +
|
||||
", but " + argumnet_types[index]->getName() + " is expected.", ErrorCodes::LOGICAL_ERROR);
|
||||
|
@ -25,7 +25,7 @@ class ColumnFunction final : public COWHelper<IColumn, ColumnFunction>
|
||||
private:
|
||||
friend class COWHelper<IColumn, ColumnFunction>;
|
||||
|
||||
ColumnFunction(size_t size, FunctionBasePtr function_, const ColumnsWithTypeAndName & columns_to_capture);
|
||||
ColumnFunction(size_t size, FunctionBasePtr function_, const ColumnsWithTypeAndName & columns_to_capture, bool ignore_arguments_types = false);
|
||||
|
||||
public:
|
||||
const char * getFamilyName() const override { return "Function"; }
|
||||
@ -51,7 +51,7 @@ public:
|
||||
size_t byteSizeAt(size_t n) const override;
|
||||
size_t allocatedBytes() const override;
|
||||
|
||||
void appendArguments(const ColumnsWithTypeAndName & columns);
|
||||
void appendArguments(const ColumnsWithTypeAndName & columns, bool ignore_arguments_types = false);
|
||||
ColumnWithTypeAndName reduce(bool reduce_arguments = false) const;
|
||||
|
||||
Field operator[](size_t) const override
|
||||
@ -159,7 +159,7 @@ private:
|
||||
FunctionBasePtr function;
|
||||
ColumnsWithTypeAndName captured_columns;
|
||||
|
||||
void appendArgument(const ColumnWithTypeAndName & column);
|
||||
void appendArgument(const ColumnWithTypeAndName & column, bool ignore_argument_type = false);
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -236,6 +236,7 @@ void maskedExecute(ColumnWithTypeAndName & column, const PaddedPODArray<UInt8> &
|
||||
if (default_value_for_expanding_mask)
|
||||
{
|
||||
result.column = result.column->convertToFullColumnIfLowCardinality();
|
||||
result.column = result.column->convertToFullColumnIfConst();
|
||||
expandMaskColumnByMask(result.column, mask, reverse, *default_value_for_expanding_mask);
|
||||
}
|
||||
else
|
||||
|
@ -74,8 +74,15 @@ bool ExpressionActions::rewriteShortCircuitArguments(const ActionsDAG::NodeRawCo
|
||||
bool have_rewritten_child = false;
|
||||
for (const auto * child : children)
|
||||
{
|
||||
if (!need_outside.contains(child) || need_outside.at(child) || child->is_lazy_executed)
|
||||
if (!need_outside.contains(child) || need_outside.at(child))
|
||||
continue;
|
||||
|
||||
if (child->is_lazy_executed)
|
||||
{
|
||||
have_rewritten_child = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
switch (child->type)
|
||||
{
|
||||
case ActionsDAG::ActionType::FUNCTION:
|
||||
@ -92,6 +99,7 @@ bool ExpressionActions::rewriteShortCircuitArguments(const ActionsDAG::NodeRawCo
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return have_rewritten_child;
|
||||
}
|
||||
|
||||
@ -419,7 +427,7 @@ static void executeAction(const ExpressionActions::Action & action, ExecutionCon
|
||||
}
|
||||
|
||||
if (action.node->is_lazy_executed)
|
||||
res_column.column = ColumnFunction::create(num_rows, action.node->function_base, std::move(arguments));
|
||||
res_column.column = ColumnFunction::create(num_rows, action.node->function_base, std::move(arguments), true);
|
||||
else
|
||||
{
|
||||
ProfileEvents::increment(ProfileEvents::FunctionExecute);
|
||||
|
Loading…
Reference in New Issue
Block a user