mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-10 01:25:21 +00:00
Serialization of sort description.
This commit is contained in:
parent
65ef7e7440
commit
1ed4e1b847
@ -15,6 +15,11 @@
|
|||||||
namespace DB
|
namespace DB
|
||||||
{
|
{
|
||||||
|
|
||||||
|
namespace ErrorCodes
|
||||||
|
{
|
||||||
|
extern const int NOT_IMPLEMENTED;
|
||||||
|
}
|
||||||
|
|
||||||
void dumpSortDescription(const SortDescription & description, WriteBuffer & out)
|
void dumpSortDescription(const SortDescription & description, WriteBuffer & out)
|
||||||
{
|
{
|
||||||
bool first = true;
|
bool first = true;
|
||||||
@ -209,4 +214,58 @@ JSONBuilder::ItemPtr explainSortDescription(const SortDescription & description)
|
|||||||
return json_array;
|
return json_array;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void serializeSortDescription(const SortDescription & sort_description, WriteBuffer & out)
|
||||||
|
{
|
||||||
|
writeVarUInt(sort_description.size(), out);
|
||||||
|
for (const auto & desc : sort_description)
|
||||||
|
{
|
||||||
|
writeStringBinary(desc.column_name, out);
|
||||||
|
|
||||||
|
UInt8 flags = 0;
|
||||||
|
if (desc.direction > 0)
|
||||||
|
flags |= 1;
|
||||||
|
if (desc.nulls_direction > 0)
|
||||||
|
flags |= 2;
|
||||||
|
if (desc.collator)
|
||||||
|
flags |= 4;
|
||||||
|
if (desc.with_fill)
|
||||||
|
flags |= 8;
|
||||||
|
|
||||||
|
writeIntBinary(flags, out);
|
||||||
|
|
||||||
|
if (desc.collator)
|
||||||
|
writeStringBinary(desc.collator->getLocale(), out);
|
||||||
|
|
||||||
|
if (desc.with_fill)
|
||||||
|
throw Exception(ErrorCodes::NOT_IMPLEMENTED, "WITH FILL is not supported in serialized sort description");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void deserializeSortDescription(SortDescription & sort_description, ReadBuffer & in)
|
||||||
|
{
|
||||||
|
size_t size = 0;
|
||||||
|
readVarUInt(size, in);
|
||||||
|
sort_description.resize(size);
|
||||||
|
for (auto & desc : sort_description)
|
||||||
|
{
|
||||||
|
readStringBinary(desc.column_name, in);
|
||||||
|
UInt8 flags = 0;
|
||||||
|
readIntBinary(flags, in);
|
||||||
|
|
||||||
|
desc.direction = (flags & 1) ? 1 : -1;
|
||||||
|
desc.nulls_direction = (flags & 2) ? 1 : -1;
|
||||||
|
|
||||||
|
if (flags & 4)
|
||||||
|
{
|
||||||
|
String collator_locale;
|
||||||
|
readStringBinary(collator_locale, in);
|
||||||
|
if (!collator_locale.empty())
|
||||||
|
desc.collator = std::make_shared<Collator>(collator_locale);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (flags & 8)
|
||||||
|
throw Exception(ErrorCodes::NOT_IMPLEMENTED, "WITH FILL is not supported in deserialized sort description");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -140,4 +140,11 @@ void dumpSortDescription(const SortDescription & description, WriteBuffer & out)
|
|||||||
std::string dumpSortDescription(const SortDescription & description);
|
std::string dumpSortDescription(const SortDescription & description);
|
||||||
|
|
||||||
JSONBuilder::ItemPtr explainSortDescription(const SortDescription & description);
|
JSONBuilder::ItemPtr explainSortDescription(const SortDescription & description);
|
||||||
|
|
||||||
|
class WriteBuffer;
|
||||||
|
class ReadBuffer;
|
||||||
|
|
||||||
|
void serializeSortDescription(const SortDescription & sort_description, WriteBuffer & out);
|
||||||
|
void deserializeSortDescription(SortDescription & sort_description, ReadBuffer & in);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user