Fix special build

This commit is contained in:
Pavel Kruglov 2021-06-15 12:53:48 +03:00
parent 9fd4d14521
commit bff79d7774
3 changed files with 25 additions and 25 deletions

View File

@ -1465,7 +1465,7 @@ public:
bool isVariadic() const override { return true; }
size_t getNumberOfArguments() const override { return 0; }
bool isInjective(const ColumnsWithTypeAndName &) const override { return std::is_same_v<Name, NameToString>; }
bool isSuitableForShortCircuitArgumentsExecution(ColumnsWithTypeAndName & /*arguments*/) const override { return true; }
bool isSuitableForShortCircuitArgumentsExecution(ColumnsWithTypeAndName & /*arguments*/) const override { return false; }
using DefaultReturnTypeGetter = std::function<DataTypePtr(const ColumnsWithTypeAndName &)>;
static DataTypePtr getReturnTypeDefaultImplementationForNulls(const ColumnsWithTypeAndName & arguments, const DefaultReturnTypeGetter & getter)
@ -1790,7 +1790,7 @@ public:
}
bool isVariadic() const override { return true; }
bool isSuitableForShortCircuitArgumentsExecution(ColumnsWithTypeAndName & /*arguments*/) const override { return true; }
bool isSuitableForShortCircuitArgumentsExecution(ColumnsWithTypeAndName & /*arguments*/) const override { return false; }
size_t getNumberOfArguments() const override { return 0; }
bool useDefaultImplementationForConstants() const override { return true; }
@ -2462,7 +2462,7 @@ public:
bool isDeterministic() const override { return true; }
bool isDeterministicInScopeOfQuery() const override { return true; }
bool isSuitableForShortCircuitArgumentsExecution(ColumnsWithTypeAndName & /*arguments*/) const override { return true; }
bool isSuitableForShortCircuitArgumentsExecution(ColumnsWithTypeAndName & /*arguments*/) const override { return false; }
bool hasInformationAboutMonotonicity() const override
{

View File

@ -940,6 +940,27 @@ private:
return nullptr;
}
static void executeShortCircuitArguments(ColumnsWithTypeAndName & arguments)
{
int last_short_circuit_argument_index = checkShirtCircuitArguments(arguments);
if (last_short_circuit_argument_index == -1)
return;
/// Check if condition is const or null to not create full mask from it.
if ((isColumnConst(*arguments[0].column) || arguments[0].column->onlyNull()) && !arguments[0].column->empty())
{
bool value = arguments[0].column->getBool(0);
executeColumnIfNeeded(arguments[1], !value);
executeColumnIfNeeded(arguments[2], value);
return;
}
IColumn::Filter mask;
auto mask_info = getMaskFromColumn(arguments[0].column, mask);
maskedExecute(arguments[1], mask, mask_info);
maskedExecute(arguments[2], mask, mask_info, /*inverted=*/true);
}
public:
String getName() const override
{
@ -976,27 +997,6 @@ public:
return getLeastSupertype({arguments[1], arguments[2]});
}
void executeShortCircuitArguments(ColumnsWithTypeAndName & arguments) const
{
int last_short_circuit_argument_index = checkShirtCircuitArguments(arguments);
if (last_short_circuit_argument_index == -1)
return;
/// Check if condition is const or null to not create full mask from it.
if ((isColumnConst(*arguments[0].column) || arguments[0].column->onlyNull()) && !arguments[0].column->empty())
{
bool value = arguments[0].column->getBool(0);
executeColumnIfNeeded(arguments[1], !value);
executeColumnIfNeeded(arguments[2], value);
return;
}
IColumn::Filter mask;
auto mask_info = getMaskFromColumn(arguments[0].column, mask);
maskedExecute(arguments[1], mask, mask_info);
maskedExecute(arguments[2], mask, mask_info, /*inverted=*/true);
}
ColumnPtr executeImpl(const ColumnsWithTypeAndName & args, const DataTypePtr & result_type, size_t input_rows_count) const override
{
ColumnsWithTypeAndName arguments = std::move(args);

View File

@ -262,7 +262,7 @@ public:
}
private:
void executeShortCircuitArguments(ColumnsWithTypeAndName & arguments) const
static void executeShortCircuitArguments(ColumnsWithTypeAndName & arguments)
{
int last_short_circuit_argument_index = checkShirtCircuitArguments(arguments);
if (last_short_circuit_argument_index < 0)