mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-29 21:20:49 +00:00
slightly better performance
This commit is contained in:
parent
6800e53652
commit
81ac6382a3
@ -39,6 +39,8 @@ class AggregateFunctionArgMinMax final : public IAggregateFunctionTupleArgHelper
|
|||||||
private:
|
private:
|
||||||
const DataTypePtr & type_res;
|
const DataTypePtr & type_res;
|
||||||
const DataTypePtr & type_val;
|
const DataTypePtr & type_val;
|
||||||
|
const SerializationPtr serialization_res;
|
||||||
|
const SerializationPtr serialization_val;
|
||||||
bool tuple_argument;
|
bool tuple_argument;
|
||||||
|
|
||||||
using Base = IAggregateFunctionTupleArgHelper<Data, AggregateFunctionArgMinMax<Data>, 2>;
|
using Base = IAggregateFunctionTupleArgHelper<Data, AggregateFunctionArgMinMax<Data>, 2>;
|
||||||
@ -48,6 +50,8 @@ public:
|
|||||||
: Base({type_res_, type_val_}, {}, tuple_argument_)
|
: Base({type_res_, type_val_}, {}, tuple_argument_)
|
||||||
, type_res(this->argument_types[0])
|
, type_res(this->argument_types[0])
|
||||||
, type_val(this->argument_types[1])
|
, type_val(this->argument_types[1])
|
||||||
|
, serialization_res(type_res->getDefaultSerialization())
|
||||||
|
, serialization_val(type_val->getDefaultSerialization())
|
||||||
{
|
{
|
||||||
if (!type_val->isComparable())
|
if (!type_val->isComparable())
|
||||||
throw Exception(
|
throw Exception(
|
||||||
@ -84,14 +88,14 @@ public:
|
|||||||
|
|
||||||
void serialize(ConstAggregateDataPtr __restrict place, WriteBuffer & buf) const override
|
void serialize(ConstAggregateDataPtr __restrict place, WriteBuffer & buf) const override
|
||||||
{
|
{
|
||||||
this->data(place).result.write(buf, *type_res);
|
this->data(place).result.write(buf, *serialization_res);
|
||||||
this->data(place).value.write(buf, *type_val);
|
this->data(place).value.write(buf, *serialization_val);
|
||||||
}
|
}
|
||||||
|
|
||||||
void deserialize(AggregateDataPtr __restrict place, ReadBuffer & buf, Arena * arena) const override
|
void deserialize(AggregateDataPtr __restrict place, ReadBuffer & buf, Arena * arena) const override
|
||||||
{
|
{
|
||||||
this->data(place).result.read(buf, *type_res, arena);
|
this->data(place).result.read(buf, *serialization_res, arena);
|
||||||
this->data(place).value.read(buf, *type_val, arena);
|
this->data(place).value.read(buf, *serialization_val, arena);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool allocatesMemoryInArena() const override { return Data::allocatesMemoryInArena(); }
|
bool allocatesMemoryInArena() const override { return Data::allocatesMemoryInArena(); }
|
||||||
|
@ -55,7 +55,8 @@ class AggregateFunctionGroupArrayInsertAtGeneric final
|
|||||||
: public IAggregateFunctionDataHelper<AggregateFunctionGroupArrayInsertAtDataGeneric, AggregateFunctionGroupArrayInsertAtGeneric>
|
: public IAggregateFunctionDataHelper<AggregateFunctionGroupArrayInsertAtDataGeneric, AggregateFunctionGroupArrayInsertAtGeneric>
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
DataTypePtr & type;
|
DataTypePtr type;
|
||||||
|
SerializationPtr serialization;
|
||||||
Field default_value;
|
Field default_value;
|
||||||
UInt64 length_to_resize = 0; /// zero means - do not do resizing.
|
UInt64 length_to_resize = 0; /// zero means - do not do resizing.
|
||||||
|
|
||||||
@ -63,6 +64,7 @@ public:
|
|||||||
AggregateFunctionGroupArrayInsertAtGeneric(const DataTypes & arguments, const Array & params)
|
AggregateFunctionGroupArrayInsertAtGeneric(const DataTypes & arguments, const Array & params)
|
||||||
: IAggregateFunctionDataHelper<AggregateFunctionGroupArrayInsertAtDataGeneric, AggregateFunctionGroupArrayInsertAtGeneric>(arguments, params)
|
: IAggregateFunctionDataHelper<AggregateFunctionGroupArrayInsertAtDataGeneric, AggregateFunctionGroupArrayInsertAtGeneric>(arguments, params)
|
||||||
, type(argument_types[0])
|
, type(argument_types[0])
|
||||||
|
, serialization(type->getDefaultSerialization())
|
||||||
{
|
{
|
||||||
if (!params.empty())
|
if (!params.empty())
|
||||||
{
|
{
|
||||||
@ -154,7 +156,7 @@ public:
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
writeBinary(UInt8(0), buf);
|
writeBinary(UInt8(0), buf);
|
||||||
type->getDefaultSerialization()->serializeBinary(elem, buf);
|
serialization->serializeBinary(elem, buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -175,7 +177,7 @@ public:
|
|||||||
UInt8 is_null = 0;
|
UInt8 is_null = 0;
|
||||||
readBinary(is_null, buf);
|
readBinary(is_null, buf);
|
||||||
if (!is_null)
|
if (!is_null)
|
||||||
type->getDefaultSerialization()->deserializeBinary(arr[i], buf);
|
serialization->deserializeBinary(arr[i], buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,14 +50,14 @@ public:
|
|||||||
assert_cast<ColVecType &>(to).insertDefault();
|
assert_cast<ColVecType &>(to).insertDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
void write(WriteBuffer & buf, const IDataType & /*data_type*/) const
|
void write(WriteBuffer & buf, const ISerialization & /*serialization*/) const
|
||||||
{
|
{
|
||||||
writeBinary(has(), buf);
|
writeBinary(has(), buf);
|
||||||
if (has())
|
if (has())
|
||||||
writeBinary(value, buf);
|
writeBinary(value, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
void read(ReadBuffer & buf, const IDataType & /*data_type*/, Arena *)
|
void read(ReadBuffer & buf, const ISerialization & /*serialization*/, Arena *)
|
||||||
{
|
{
|
||||||
readBinary(has_value, buf);
|
readBinary(has_value, buf);
|
||||||
if (has())
|
if (has())
|
||||||
@ -221,14 +221,14 @@ public:
|
|||||||
assert_cast<ColumnString &>(to).insertDefault();
|
assert_cast<ColumnString &>(to).insertDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
void write(WriteBuffer & buf, const IDataType & /*data_type*/) const
|
void write(WriteBuffer & buf, const ISerialization & /*serialization*/) const
|
||||||
{
|
{
|
||||||
writeBinary(size, buf);
|
writeBinary(size, buf);
|
||||||
if (has())
|
if (has())
|
||||||
buf.write(getData(), size);
|
buf.write(getData(), size);
|
||||||
}
|
}
|
||||||
|
|
||||||
void read(ReadBuffer & buf, const IDataType & /*data_type*/, Arena * arena)
|
void read(ReadBuffer & buf, const ISerialization & /*serialization*/, Arena * arena)
|
||||||
{
|
{
|
||||||
Int32 rhs_size;
|
Int32 rhs_size;
|
||||||
readBinary(rhs_size, buf);
|
readBinary(rhs_size, buf);
|
||||||
@ -427,24 +427,24 @@ public:
|
|||||||
to.insertDefault();
|
to.insertDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
void write(WriteBuffer & buf, const IDataType & data_type) const
|
void write(WriteBuffer & buf, const ISerialization & serialization) const
|
||||||
{
|
{
|
||||||
if (!value.isNull())
|
if (!value.isNull())
|
||||||
{
|
{
|
||||||
writeBinary(true, buf);
|
writeBinary(true, buf);
|
||||||
data_type.getDefaultSerialization()->serializeBinary(value, buf);
|
serialization.serializeBinary(value, buf);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
writeBinary(false, buf);
|
writeBinary(false, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
void read(ReadBuffer & buf, const IDataType & data_type, Arena *)
|
void read(ReadBuffer & buf, const ISerialization & serialization, Arena *)
|
||||||
{
|
{
|
||||||
bool is_not_null;
|
bool is_not_null;
|
||||||
readBinary(is_not_null, buf);
|
readBinary(is_not_null, buf);
|
||||||
|
|
||||||
if (is_not_null)
|
if (is_not_null)
|
||||||
data_type.getDefaultSerialization()->deserializeBinary(value, buf);
|
serialization.deserializeBinary(value, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
void change(const IColumn & column, size_t row_num, Arena *)
|
void change(const IColumn & column, size_t row_num, Arena *)
|
||||||
@ -678,15 +678,15 @@ struct AggregateFunctionAnyHeavyData : Data
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void write(WriteBuffer & buf, const IDataType & data_type) const
|
void write(WriteBuffer & buf, const ISerialization & serialization) const
|
||||||
{
|
{
|
||||||
Data::write(buf, data_type);
|
Data::write(buf, serialization);
|
||||||
writeBinary(counter, buf);
|
writeBinary(counter, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
void read(ReadBuffer & buf, const IDataType & data_type, Arena * arena)
|
void read(ReadBuffer & buf, const ISerialization & serialization, Arena * arena)
|
||||||
{
|
{
|
||||||
Data::read(buf, data_type, arena);
|
Data::read(buf, serialization, arena);
|
||||||
readBinary(counter, buf);
|
readBinary(counter, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -698,12 +698,14 @@ template <typename Data>
|
|||||||
class AggregateFunctionsSingleValue final : public IAggregateFunctionDataHelper<Data, AggregateFunctionsSingleValue<Data>>
|
class AggregateFunctionsSingleValue final : public IAggregateFunctionDataHelper<Data, AggregateFunctionsSingleValue<Data>>
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
DataTypePtr & type;
|
DataTypePtr type;
|
||||||
|
SerializationPtr serialization;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
AggregateFunctionsSingleValue(const DataTypePtr & type_)
|
AggregateFunctionsSingleValue(const DataTypePtr & type_)
|
||||||
: IAggregateFunctionDataHelper<Data, AggregateFunctionsSingleValue<Data>>({type_}, {})
|
: IAggregateFunctionDataHelper<Data, AggregateFunctionsSingleValue<Data>>({type_}, {})
|
||||||
, type(this->argument_types[0])
|
, type(this->argument_types[0])
|
||||||
|
, serialization(type->getDefaultSerialization())
|
||||||
{
|
{
|
||||||
if (StringRef(Data::name()) == StringRef("min")
|
if (StringRef(Data::name()) == StringRef("min")
|
||||||
|| StringRef(Data::name()) == StringRef("max"))
|
|| StringRef(Data::name()) == StringRef("max"))
|
||||||
@ -733,12 +735,12 @@ public:
|
|||||||
|
|
||||||
void serialize(ConstAggregateDataPtr __restrict place, WriteBuffer & buf) const override
|
void serialize(ConstAggregateDataPtr __restrict place, WriteBuffer & buf) const override
|
||||||
{
|
{
|
||||||
this->data(place).write(buf, *type.get());
|
this->data(place).write(buf, *serialization);
|
||||||
}
|
}
|
||||||
|
|
||||||
void deserialize(AggregateDataPtr __restrict place, ReadBuffer & buf, Arena * arena) const override
|
void deserialize(AggregateDataPtr __restrict place, ReadBuffer & buf, Arena * arena) const override
|
||||||
{
|
{
|
||||||
this->data(place).read(buf, *type.get(), arena);
|
this->data(place).read(buf, *serialization, arena);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool allocatesMemoryInArena() const override
|
bool allocatesMemoryInArena() const override
|
||||||
|
@ -64,7 +64,9 @@ class AggregateFunctionMapBase : public IAggregateFunctionDataHelper<
|
|||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
DataTypePtr keys_type;
|
DataTypePtr keys_type;
|
||||||
|
SerializationPtr keys_serialization;
|
||||||
DataTypes values_types;
|
DataTypes values_types;
|
||||||
|
Serializations values_serializations;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
using Base = IAggregateFunctionDataHelper<
|
using Base = IAggregateFunctionDataHelper<
|
||||||
@ -72,9 +74,14 @@ public:
|
|||||||
|
|
||||||
AggregateFunctionMapBase(const DataTypePtr & keys_type_,
|
AggregateFunctionMapBase(const DataTypePtr & keys_type_,
|
||||||
const DataTypes & values_types_, const DataTypes & argument_types_)
|
const DataTypes & values_types_, const DataTypes & argument_types_)
|
||||||
: Base(argument_types_, {} /* parameters */), keys_type(keys_type_),
|
: Base(argument_types_, {} /* parameters */)
|
||||||
values_types(values_types_)
|
, keys_type(keys_type_)
|
||||||
|
, keys_serialization(keys_type->getDefaultSerialization())
|
||||||
|
, values_types(values_types_)
|
||||||
{
|
{
|
||||||
|
values_serializations.reserve(values_types.size());
|
||||||
|
for (const auto & type : values_types)
|
||||||
|
values_serializations.emplace_back(type->getDefaultSerialization());
|
||||||
}
|
}
|
||||||
|
|
||||||
DataTypePtr getReturnType() const override
|
DataTypePtr getReturnType() const override
|
||||||
@ -248,9 +255,9 @@ public:
|
|||||||
|
|
||||||
for (const auto & elem : merged_maps)
|
for (const auto & elem : merged_maps)
|
||||||
{
|
{
|
||||||
keys_type->getDefaultSerialization()->serializeBinary(elem.first, buf);
|
keys_serialization->serializeBinary(elem.first, buf);
|
||||||
for (size_t col = 0; col < values_types.size(); ++col)
|
for (size_t col = 0; col < values_types.size(); ++col)
|
||||||
values_types[col]->getDefaultSerialization()->serializeBinary(elem.second[col], buf);
|
values_serializations[col]->serializeBinary(elem.second[col], buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -263,12 +270,12 @@ public:
|
|||||||
for (size_t i = 0; i < size; ++i)
|
for (size_t i = 0; i < size; ++i)
|
||||||
{
|
{
|
||||||
Field key;
|
Field key;
|
||||||
keys_type->getDefaultSerialization()->deserializeBinary(key, buf);
|
keys_serialization->deserializeBinary(key, buf);
|
||||||
|
|
||||||
Array values;
|
Array values;
|
||||||
values.resize(values_types.size());
|
values.resize(values_types.size());
|
||||||
for (size_t col = 0; col < values_types.size(); ++col)
|
for (size_t col = 0; col < values_types.size(); ++col)
|
||||||
values_types[col]->getDefaultSerialization()->deserializeBinary(values[col], buf);
|
values_serializations[col]->deserializeBinary(values[col], buf);
|
||||||
|
|
||||||
if constexpr (IsDecimalNumber<T>)
|
if constexpr (IsDecimalNumber<T>)
|
||||||
merged_maps[key.get<DecimalField<T>>()] = values;
|
merged_maps[key.get<DecimalField<T>>()] = values;
|
||||||
|
@ -82,7 +82,7 @@ void NativeBlockInputStream::readData(const IDataType & type, ColumnPtr & column
|
|||||||
auto serialization = type.getDefaultSerialization();
|
auto serialization = type.getDefaultSerialization();
|
||||||
|
|
||||||
serialization->deserializeBinaryBulkStatePrefix(settings, state);
|
serialization->deserializeBinaryBulkStatePrefix(settings, state);
|
||||||
serialization->deserializeBinaryBulkWithMultipleStreams(column, rows, settings, state);
|
serialization->deserializeBinaryBulkWithMultipleStreams(column, rows, settings, state, nullptr);
|
||||||
|
|
||||||
if (column->size() != rows)
|
if (column->size() != rows)
|
||||||
throw Exception("Cannot read all data in NativeBlockInputStream. Rows read: " + toString(column->size()) + ". Rows expected: " + toString(rows) + ".",
|
throw Exception("Cannot read all data in NativeBlockInputStream. Rows read: " + toString(column->size()) + ". Rows expected: " + toString(rows) + ".",
|
||||||
|
@ -174,7 +174,7 @@ public:
|
|||||||
size_t limit,
|
size_t limit,
|
||||||
DeserializeBinaryBulkSettings & settings,
|
DeserializeBinaryBulkSettings & settings,
|
||||||
DeserializeBinaryBulkStatePtr & state,
|
DeserializeBinaryBulkStatePtr & state,
|
||||||
SubstreamsCache * cache = nullptr) const;
|
SubstreamsCache * cache) const;
|
||||||
|
|
||||||
/** Override these methods for data types that require just single stream (most of data types).
|
/** Override these methods for data types that require just single stream (most of data types).
|
||||||
*/
|
*/
|
||||||
|
@ -110,7 +110,7 @@ void SerializationFixedString::serializeTextEscaped(const IColumn & column, size
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SerializationFixedString::alignStringLength(size_t n, ColumnFixedString::Chars & data, size_t string_start)
|
void SerializationFixedString::alignStringLength(size_t n, PaddedPODArray<UInt8> & data, size_t string_start)
|
||||||
{
|
{
|
||||||
size_t length = data.size() - string_start;
|
size_t length = data.size() - string_start;
|
||||||
if (length < n)
|
if (length < n)
|
||||||
|
@ -44,7 +44,7 @@ public:
|
|||||||
/// Makes sure that the length of a newly inserted string to `chars` is equal to getN().
|
/// Makes sure that the length of a newly inserted string to `chars` is equal to getN().
|
||||||
/// If the length is less than getN() the function will add zero characters up to getN().
|
/// If the length is less than getN() the function will add zero characters up to getN().
|
||||||
/// If the length is greater than getN() the function will throw an exception.
|
/// If the length is greater than getN() the function will throw an exception.
|
||||||
static void alignStringLength(size_t n, PaddedPODArray<UInt8> & chars, size_t old_size);
|
static void alignStringLength(size_t n, PaddedPODArray<UInt8> & data, size_t string_start);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -439,6 +439,7 @@ std::vector<DictionaryAttribute> DictionaryStructure::getAttributes(
|
|||||||
name,
|
name,
|
||||||
underlying_type,
|
underlying_type,
|
||||||
initial_type,
|
initial_type,
|
||||||
|
initial_type->getDefaultSerialization(),
|
||||||
type,
|
type,
|
||||||
expression,
|
expression,
|
||||||
null_value,
|
null_value,
|
||||||
|
@ -58,6 +58,7 @@ struct DictionaryAttribute final
|
|||||||
const std::string name;
|
const std::string name;
|
||||||
const AttributeUnderlyingType underlying_type;
|
const AttributeUnderlyingType underlying_type;
|
||||||
const DataTypePtr type;
|
const DataTypePtr type;
|
||||||
|
const SerializationPtr serialization;
|
||||||
const DataTypePtr nested_type;
|
const DataTypePtr nested_type;
|
||||||
const std::string expression;
|
const std::string expression;
|
||||||
const Field null_value;
|
const Field null_value;
|
||||||
|
@ -358,7 +358,7 @@ void ExternalQueryBuilder::composeKeyCondition(const Columns & key_columns, cons
|
|||||||
/// key_i=value_i
|
/// key_i=value_i
|
||||||
writeQuoted(key_description.name, out);
|
writeQuoted(key_description.name, out);
|
||||||
writeString("=", out);
|
writeString("=", out);
|
||||||
key_description.type->getDefaultSerialization()->serializeTextQuoted(*key_columns[i], row, out, format_settings);
|
key_description.serialization->serializeTextQuoted(*key_columns[i], row, out, format_settings);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -415,7 +415,7 @@ void ExternalQueryBuilder::composeKeyTuple(const Columns & key_columns, const si
|
|||||||
writeString(", ", out);
|
writeString(", ", out);
|
||||||
|
|
||||||
first = false;
|
first = false;
|
||||||
(*dict_struct.key)[i].type->getDefaultSerialization()->serializeTextQuoted(*key_columns[i], row, out, format_settings);
|
(*dict_struct.key)[i].serialization->serializeTextQuoted(*key_columns[i], row, out, format_settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
writeString(")", out);
|
writeString(")", out);
|
||||||
|
@ -726,9 +726,10 @@ struct ConvertImplGenericToString
|
|||||||
WriteBufferFromVector<ColumnString::Chars> write_buffer(data_to);
|
WriteBufferFromVector<ColumnString::Chars> write_buffer(data_to);
|
||||||
|
|
||||||
FormatSettings format_settings;
|
FormatSettings format_settings;
|
||||||
|
auto serialization = type.getDefaultSerialization();
|
||||||
for (size_t i = 0; i < size; ++i)
|
for (size_t i = 0; i < size; ++i)
|
||||||
{
|
{
|
||||||
type.getDefaultSerialization()->serializeText(col_from, i, write_buffer, format_settings);
|
serialization->serializeText(col_from, i, write_buffer, format_settings);
|
||||||
writeChar(0, write_buffer);
|
writeChar(0, write_buffer);
|
||||||
offsets_to[i] = write_buffer.count();
|
offsets_to[i] = write_buffer.count();
|
||||||
}
|
}
|
||||||
@ -1109,11 +1110,12 @@ struct ConvertImplGenericFromString
|
|||||||
size_t current_offset = 0;
|
size_t current_offset = 0;
|
||||||
|
|
||||||
FormatSettings format_settings;
|
FormatSettings format_settings;
|
||||||
|
auto serialization = data_type_to.getDefaultSerialization();
|
||||||
for (size_t i = 0; i < size; ++i)
|
for (size_t i = 0; i < size; ++i)
|
||||||
{
|
{
|
||||||
ReadBufferFromMemory read_buffer(&chars[current_offset], offsets[i] - current_offset - 1);
|
ReadBufferFromMemory read_buffer(&chars[current_offset], offsets[i] - current_offset - 1);
|
||||||
|
|
||||||
data_type_to.getDefaultSerialization()->deserializeWholeText(column_to, read_buffer, format_settings);
|
serialization->deserializeWholeText(column_to, read_buffer, format_settings);
|
||||||
|
|
||||||
if (!read_buffer.eof())
|
if (!read_buffer.eof())
|
||||||
throwExceptionForIncompletelyParsedValue(read_buffer, result_type);
|
throwExceptionForIncompletelyParsedValue(read_buffer, result_type);
|
||||||
|
@ -868,6 +868,8 @@ bool FunctionArrayElement::matchKeyToIndexNumberConst(
|
|||||||
const IColumn & data, const Offsets & offsets,
|
const IColumn & data, const Offsets & offsets,
|
||||||
const Field & index, PaddedPODArray<UInt64> & matched_idxs)
|
const Field & index, PaddedPODArray<UInt64> & matched_idxs)
|
||||||
{
|
{
|
||||||
|
std::cerr << "index type: " << index.getTypeName() << "\n";
|
||||||
|
std::cerr << "index: " << toString(index) << "\n";
|
||||||
const auto * data_numeric = checkAndGetColumn<ColumnVector<DataType>>(&data);
|
const auto * data_numeric = checkAndGetColumn<ColumnVector<DataType>>(&data);
|
||||||
if (!data_numeric)
|
if (!data_numeric)
|
||||||
return false;
|
return false;
|
||||||
|
@ -47,6 +47,8 @@ namespace DB
|
|||||||
typename ColVecConc::Container & vec_concurrency = col_concurrency->getData();
|
typename ColVecConc::Container & vec_concurrency = col_concurrency->getData();
|
||||||
|
|
||||||
std::multiset<typename ArgDataType::FieldType> ongoing_until;
|
std::multiset<typename ArgDataType::FieldType> ongoing_until;
|
||||||
|
auto begin_serializaion = arguments[0].type->getDefaultSerialization();
|
||||||
|
auto end_serialization = arguments[1].type->getDefaultSerialization();
|
||||||
for (size_t i = 0; i < input_rows_count; ++i)
|
for (size_t i = 0; i < input_rows_count; ++i)
|
||||||
{
|
{
|
||||||
const auto begin = vec_begin[i];
|
const auto begin = vec_begin[i];
|
||||||
@ -56,8 +58,8 @@ namespace DB
|
|||||||
{
|
{
|
||||||
const FormatSettings default_format;
|
const FormatSettings default_format;
|
||||||
WriteBufferFromOwnString buf_begin, buf_end;
|
WriteBufferFromOwnString buf_begin, buf_end;
|
||||||
arguments[0].type->getDefaultSerialization()->serializeTextQuoted(*(arguments[0].column), i, buf_begin, default_format);
|
begin_serializaion->serializeTextQuoted(*(arguments[0].column), i, buf_begin, default_format);
|
||||||
arguments[1].type->getDefaultSerialization()->serializeTextQuoted(*(arguments[1].column), i, buf_end, default_format);
|
end_serialization->serializeTextQuoted(*(arguments[1].column), i, buf_end, default_format);
|
||||||
throw Exception(
|
throw Exception(
|
||||||
"Incorrect order of events: " + buf_begin.str() + " > " + buf_end.str(),
|
"Incorrect order of events: " + buf_begin.str() + " > " + buf_end.str(),
|
||||||
ErrorCodes::INCORRECT_DATA);
|
ErrorCodes::INCORRECT_DATA);
|
||||||
|
@ -58,11 +58,12 @@ public:
|
|||||||
|
|
||||||
String tmp;
|
String tmp;
|
||||||
FormatSettings format_settings;
|
FormatSettings format_settings;
|
||||||
|
auto serialization = src.type->getDefaultSerialization();
|
||||||
for (size_t i = 0; i < size; ++i)
|
for (size_t i = 0; i < size; ++i)
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
WriteBufferFromString out(tmp);
|
WriteBufferFromString out(tmp);
|
||||||
src.type->getDefaultSerialization()->serializeText(*src.column, i, out, format_settings);
|
serialization->serializeText(*src.column, i, out, format_settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
res_data[i] = UTF8::countCodePoints(reinterpret_cast<const UInt8 *>(tmp.data()), tmp.size());
|
res_data[i] = UTF8::countCodePoints(reinterpret_cast<const UInt8 *>(tmp.data()), tmp.size());
|
||||||
|
@ -107,7 +107,7 @@ void MergeTreeIndexGranuleSet::deserializeBinary(ReadBuffer & istr)
|
|||||||
auto serialization = type->getDefaultSerialization();
|
auto serialization = type->getDefaultSerialization();
|
||||||
|
|
||||||
serialization->deserializeBinaryBulkStatePrefix(settings, state);
|
serialization->deserializeBinaryBulkStatePrefix(settings, state);
|
||||||
serialization->deserializeBinaryBulkWithMultipleStreams(new_column, rows_to_read, settings, state);
|
serialization->deserializeBinaryBulkWithMultipleStreams(new_column, rows_to_read, settings, state, nullptr);
|
||||||
|
|
||||||
block.insert(ColumnWithTypeAndName(new_column, type, column.name));
|
block.insert(ColumnWithTypeAndName(new_column, type, column.name));
|
||||||
}
|
}
|
||||||
|
@ -220,14 +220,14 @@ void MergeTreeReaderCompact::readData(
|
|||||||
|
|
||||||
auto serialization = type_in_storage->getDefaultSerialization();
|
auto serialization = type_in_storage->getDefaultSerialization();
|
||||||
serialization->deserializeBinaryBulkStatePrefix(deserialize_settings, state);
|
serialization->deserializeBinaryBulkStatePrefix(deserialize_settings, state);
|
||||||
serialization->deserializeBinaryBulkWithMultipleStreams(temp_column, rows_to_read, deserialize_settings, state);
|
serialization->deserializeBinaryBulkWithMultipleStreams(temp_column, rows_to_read, deserialize_settings, state, nullptr);
|
||||||
column = type_in_storage->getSubcolumn(name_and_type.getSubcolumnName(), *temp_column);
|
column = type_in_storage->getSubcolumn(name_and_type.getSubcolumnName(), *temp_column);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
auto serialization = type->getDefaultSerialization();
|
auto serialization = type->getDefaultSerialization();
|
||||||
serialization->deserializeBinaryBulkStatePrefix(deserialize_settings, state);
|
serialization->deserializeBinaryBulkStatePrefix(deserialize_settings, state);
|
||||||
serialization->deserializeBinaryBulkWithMultipleStreams(column, rows_to_read, deserialize_settings, state);
|
serialization->deserializeBinaryBulkWithMultipleStreams(column, rows_to_read, deserialize_settings, state, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The buffer is left in inconsistent state after reading single offsets
|
/// The buffer is left in inconsistent state after reading single offsets
|
||||||
|
Loading…
Reference in New Issue
Block a user