mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-19 16:20:50 +00:00
Merge pull request #69455 from yariks5s/group_concat_return_string
`groupConcat` consistency with `arrayStringConcat`
This commit is contained in:
commit
ccfb7ad38c
@ -116,15 +116,17 @@ class GroupConcatImpl final
|
|||||||
SerializationPtr serialization;
|
SerializationPtr serialization;
|
||||||
UInt64 limit;
|
UInt64 limit;
|
||||||
const String delimiter;
|
const String delimiter;
|
||||||
|
const DataTypePtr type;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
GroupConcatImpl(const DataTypePtr & data_type_, const Array & parameters_, UInt64 limit_, const String & delimiter_)
|
GroupConcatImpl(const DataTypePtr & data_type_, const Array & parameters_, UInt64 limit_, const String & delimiter_)
|
||||||
: IAggregateFunctionDataHelper<GroupConcatData<has_limit>, GroupConcatImpl<has_limit>>(
|
: IAggregateFunctionDataHelper<GroupConcatData<has_limit>, GroupConcatImpl<has_limit>>(
|
||||||
{data_type_}, parameters_, std::make_shared<DataTypeString>())
|
{data_type_}, parameters_, std::make_shared<DataTypeString>())
|
||||||
, serialization(this->argument_types[0]->getDefaultSerialization())
|
|
||||||
, limit(limit_)
|
, limit(limit_)
|
||||||
, delimiter(delimiter_)
|
, delimiter(delimiter_)
|
||||||
|
, type(data_type_)
|
||||||
{
|
{
|
||||||
|
serialization = isFixedString(type) ? std::make_shared<DataTypeString>()->getDefaultSerialization() : this->argument_types[0]->getDefaultSerialization();
|
||||||
}
|
}
|
||||||
|
|
||||||
String getName() const override { return name; }
|
String getName() const override { return name; }
|
||||||
@ -140,7 +142,14 @@ public:
|
|||||||
if (cur_data.data_size != 0)
|
if (cur_data.data_size != 0)
|
||||||
cur_data.insertChar(delimiter.c_str(), delimiter.size(), arena);
|
cur_data.insertChar(delimiter.c_str(), delimiter.size(), arena);
|
||||||
|
|
||||||
cur_data.insert(columns[0], serialization, row_num, arena);
|
if (isFixedString(type))
|
||||||
|
{
|
||||||
|
ColumnWithTypeAndName col = {columns[0]->getPtr(), type, "column"};
|
||||||
|
const auto & col_str = castColumn(col, std::make_shared<DataTypeString>());
|
||||||
|
cur_data.insert(col_str.get(), serialization, row_num, arena);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
cur_data.insert(columns[0], serialization, row_num, arena);
|
||||||
}
|
}
|
||||||
|
|
||||||
void merge(AggregateDataPtr __restrict place, ConstAggregateDataPtr rhs, Arena * arena) const override
|
void merge(AggregateDataPtr __restrict place, ConstAggregateDataPtr rhs, Arena * arena) const override
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
1
|
@ -0,0 +1,10 @@
|
|||||||
|
CREATE TABLE t (st FixedString(54)) ENGINE=MergeTree ORDER BY ();
|
||||||
|
|
||||||
|
INSERT INTO t VALUES
|
||||||
|
('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRTUVWXYZ'),
|
||||||
|
('\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0'),
|
||||||
|
('IIIIIIIIII\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0');
|
||||||
|
|
||||||
|
WITH (SELECT groupConcat(',')(st) FROM t) AS a,
|
||||||
|
(SELECT groupConcat(',')(st :: String) FROM t) AS b
|
||||||
|
SELECT equals(a, b);
|
Loading…
Reference in New Issue
Block a user