From bff79d77744ca127d9cc1978c0a55bd77e82ed6d Mon Sep 17 00:00:00 2001 From: Pavel Kruglov Date: Tue, 15 Jun 2021 12:53:48 +0300 Subject: [PATCH] Fix special build --- src/Functions/FunctionsConversion.h | 6 ++--- src/Functions/if.cpp | 42 ++++++++++++++--------------- src/Functions/multiIf.cpp | 2 +- 3 files changed, 25 insertions(+), 25 deletions(-) diff --git a/src/Functions/FunctionsConversion.h b/src/Functions/FunctionsConversion.h index e0ea4f39915..139899dcf54 100644 --- a/src/Functions/FunctionsConversion.h +++ b/src/Functions/FunctionsConversion.h @@ -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; } - bool isSuitableForShortCircuitArgumentsExecution(ColumnsWithTypeAndName & /*arguments*/) const override { return true; } + bool isSuitableForShortCircuitArgumentsExecution(ColumnsWithTypeAndName & /*arguments*/) const override { return false; } using DefaultReturnTypeGetter = std::function; 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 { diff --git a/src/Functions/if.cpp b/src/Functions/if.cpp index f29e5451e4b..93922524fe6 100644 --- a/src/Functions/if.cpp +++ b/src/Functions/if.cpp @@ -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); diff --git a/src/Functions/multiIf.cpp b/src/Functions/multiIf.cpp index 9d43aeb25a4..e07c9b12fd8 100644 --- a/src/Functions/multiIf.cpp +++ b/src/Functions/multiIf.cpp @@ -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)