Fix tests

This commit is contained in:
Pavel Kruglov 2021-04-28 01:31:49 +03:00
parent 4e5db93af3
commit 74a8b14ca4
4 changed files with 20 additions and 11 deletions

View File

@ -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);

View File

@ -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);
};
}

View File

@ -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

View File

@ -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);