diff --git a/src/Functions/trim.cpp b/src/Functions/trim.cpp index 29997ffd5e77..ac8167de7968 100644 --- a/src/Functions/trim.cpp +++ b/src/Functions/trim.cpp @@ -26,6 +26,7 @@ class FunctionTrim : public IFunction String getName() const override { return name; } bool isVariadic() const override { return true; } bool isSuitableForShortCircuitArgumentsExecution(const DataTypesWithConstInfo & /*arguments*/) const override { return true; } + bool useDefaultImplementationForConstants() const override { return true; } size_t getNumberOfArguments() const override { return 0; } DataTypePtr getReturnTypeImpl(const ColumnsWithTypeAndName & arguments) const override @@ -48,9 +49,16 @@ class FunctionTrim : public IFunction std::optional custom_trim_characters; if (arguments.size() == 2 && input_rows_count > 0) { - const ColumnConst * col_trim_characters_const = checkAndGetColumnConst(arguments[1].column.get()); - const String & trim_characters_string = col_trim_characters_const->getDataAt(0).toString(); - custom_trim_characters = std::make_optional(trim_characters_string); + if (const ColumnString * col_trim_characters = checkAndGetColumn(arguments[1].column.get())) + { + const String & trim_characters_string = col_trim_characters->getDataAt(0).toString(); + custom_trim_characters = std::make_optional(trim_characters_string); + } + else if (const ColumnConst * col_trim_characters_const = checkAndGetColumnConst(arguments[1].column.get())) + { + const String & trim_characters_string = col_trim_characters_const->getDataAt(0).toString(); + custom_trim_characters = std::make_optional(trim_characters_string); + } } ColumnPtr col_input_full; diff --git a/tests/queries/0_stateless/03315_trim_two_args.reference b/tests/queries/0_stateless/03315_trim_two_args.reference index ec87935bed38..ae7badfe2690 100644 --- a/tests/queries/0_stateless/03315_trim_two_args.reference +++ b/tests/queries/0_stateless/03315_trim_two_args.reference @@ -22,3 +22,4 @@ Negative tests Special tests abc b +1 diff --git a/tests/queries/0_stateless/03315_trim_two_args.sql b/tests/queries/0_stateless/03315_trim_two_args.sql index 7557ca4525b2..e410573267c9 100644 --- a/tests/queries/0_stateless/03315_trim_two_args.sql +++ b/tests/queries/0_stateless/03315_trim_two_args.sql @@ -106,3 +106,6 @@ INSERT INTO tab VALUES ('abc'); SELECT trim(trailing char(0) from col) FROM tab; SELECT trim(both 'ac' from col) FROM tab; DROP TABLE tab; + +-- Bug 78796 +SELECT isConstant(trimBoth(''));