Skip to content

Commit

Permalink
Backport #59356 to 23.12: Fix translate() with FixedString input
Browse files Browse the repository at this point in the history
  • Loading branch information
robot-clickhouse committed Jan 31, 2024
1 parent 74c7686 commit d70563b
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 4 deletions.
19 changes: 15 additions & 4 deletions src/Functions/translate.cpp
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
#include <Columns/ColumnString.h>
#include <Columns/ColumnFixedString.h>
#include <Columns/ColumnConst.h>
#include <Columns/ColumnFixedString.h>
#include <Columns/ColumnString.h>
#include <DataTypes/DataTypeFixedString.h>
#include <DataTypes/DataTypeString.h>
#include <Functions/FunctionFactory.h>
#include <Functions/FunctionHelpers.h>
#include <Common/HashTable/HashMap.h>
#include <Common/StringUtils/StringUtils.h>
#include <Common/UTF8Helpers.h>
#include <Common/HashTable/HashMap.h>
#include <Common/iota.h>

#include <numeric>


Expand Down Expand Up @@ -297,7 +301,14 @@ class FunctionTranslate : public IFunction
throw Exception(ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT, "Illegal type {} of third argument of function {}",
arguments[2]->getName(), getName());

return std::make_shared<DataTypeString>();
if (isString(arguments[0]))
return std::make_shared<DataTypeString>();
else
{
const auto * ptr = checkAndGetDataType<DataTypeFixedString>(arguments[0].get());
chassert(ptr);
return std::make_shared<DataTypeFixedString>(ptr->getN());
}
}

ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
AAA\0\0\0\0\0\0\0
A
1
2
3
2 changes: 2 additions & 0 deletions tests/queries/0_stateless/02981_translate_fixedstring.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
SELECT translate('aaa'::FixedString(10), 'a','A');
SELECT translate(number::String::FixedString(1), '0','A') from numbers(4);

0 comments on commit d70563b

Please sign in to comment.