Skip to content

Commit ded155e

Browse files
authored
Merge pull request #1425 from Altinity/backports/releases/25.3.14/82900
25.3.14 Stable backport of ClickHouse#82900: `trim` - return a const value for all-const inputs (Bug 78796)
2 parents 0dcf2e5 + f306431 commit ded155e

3 files changed

Lines changed: 15 additions & 3 deletions

File tree

src/Functions/trim.cpp

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ class FunctionTrim : public IFunction
2626
String getName() const override { return name; }
2727
bool isVariadic() const override { return true; }
2828
bool isSuitableForShortCircuitArgumentsExecution(const DataTypesWithConstInfo & /*arguments*/) const override { return true; }
29+
bool useDefaultImplementationForConstants() const override { return true; }
2930
size_t getNumberOfArguments() const override { return 0; }
3031

3132
DataTypePtr getReturnTypeImpl(const ColumnsWithTypeAndName & arguments) const override
@@ -48,9 +49,16 @@ class FunctionTrim : public IFunction
4849
std::optional<SearchSymbols> custom_trim_characters;
4950
if (arguments.size() == 2 && input_rows_count > 0)
5051
{
51-
const ColumnConst * col_trim_characters_const = checkAndGetColumnConst<ColumnString>(arguments[1].column.get());
52-
const String & trim_characters_string = col_trim_characters_const->getDataAt(0).toString();
53-
custom_trim_characters = std::make_optional<SearchSymbols>(trim_characters_string);
52+
if (const ColumnString * col_trim_characters = checkAndGetColumn<ColumnString>(arguments[1].column.get()))
53+
{
54+
const String & trim_characters_string = col_trim_characters->getDataAt(0).toString();
55+
custom_trim_characters = std::make_optional<SearchSymbols>(trim_characters_string);
56+
}
57+
else if (const ColumnConst * col_trim_characters_const = checkAndGetColumnConst<ColumnString>(arguments[1].column.get()))
58+
{
59+
const String & trim_characters_string = col_trim_characters_const->getDataAt(0).toString();
60+
custom_trim_characters = std::make_optional<SearchSymbols>(trim_characters_string);
61+
}
5462
}
5563

5664
ColumnPtr col_input_full;

tests/queries/0_stateless/03315_trim_two_args.reference

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,4 @@ Negative tests
2222
Special tests
2323
abc
2424
b
25+
1

tests/queries/0_stateless/03315_trim_two_args.sql

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,3 +106,6 @@ INSERT INTO tab VALUES ('abc');
106106
SELECT trim(trailing char(0) from col) FROM tab;
107107
SELECT trim(both 'ac' from col) FROM tab;
108108
DROP TABLE tab;
109+
110+
-- Bug 78796
111+
SELECT isConstant(trimBoth(''));

0 commit comments

Comments
 (0)