Skip to content

Commit

Permalink
Merge pull request #59422 from ClickHouse/cherrypick/23.11/d45b248f96…
Browse files Browse the repository at this point in the history
…f6ff022f3cde7f61c3d36533714757

Cherry pick #59356 to 23.11: Fix translate() with FixedString input
  • Loading branch information
Algunenano committed Jan 31, 2024
2 parents f63d1c1 + 9a349dd commit e4c9514
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 4 deletions.
18 changes: 14 additions & 4 deletions src/Functions/translate.cpp
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
#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 <numeric>


Expand Down Expand Up @@ -297,7 +300,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 e4c9514

Please sign in to comment.