Skip to content

Commit

Permalink
Merge pull request #59424 from ClickHouse/cherrypick/24.1/d45b248f96f…
Browse files Browse the repository at this point in the history
…6ff022f3cde7f61c3d36533714757

Cherry pick #59356 to 24.1: Fix translate() with FixedString input
  • Loading branch information
robot-ch-test-poll3 committed Jan 31, 2024
2 parents e724900 + d45b248 commit f720d34
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 5 deletions.
20 changes: 15 additions & 5 deletions src/Functions/translate.cpp
Original file line number Diff line number Diff line change
@@ -1,12 +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 <Common/iota.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 @@ -298,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 f720d34

Please sign in to comment.