#include #include #include #include #include #include #include namespace DB { template void SerializationDecimalBase::serializeBinary(const Field & field, WriteBuffer & ostr) const { FieldType x = get>(field); writeBinary(x, ostr); } template void SerializationDecimalBase::serializeBinary(const IColumn & column, size_t row_num, WriteBuffer & ostr) const { const FieldType & x = assert_cast(column).getElement(row_num); writeBinary(x, ostr); } template void SerializationDecimalBase::serializeBinaryBulk(const IColumn & column, WriteBuffer & ostr, size_t offset, size_t limit) const { const typename ColumnType::Container & x = typeid_cast(column).getData(); size_t size = x.size(); if (limit == 0 || offset + limit > size) limit = size - offset; ostr.write(reinterpret_cast(&x[offset]), sizeof(FieldType) * limit); } template void SerializationDecimalBase::deserializeBinary(Field & field, ReadBuffer & istr) const { typename FieldType::NativeType x; readBinary(x, istr); field = DecimalField(T(x), this->scale); } template void SerializationDecimalBase::deserializeBinary(IColumn & column, ReadBuffer & istr) const { typename FieldType::NativeType x; readBinary(x, istr); assert_cast(column).getData().push_back(FieldType(x)); } template void SerializationDecimalBase::deserializeBinaryBulk(IColumn & column, ReadBuffer & istr, size_t limit, double) const { typename ColumnType::Container & x = typeid_cast(column).getData(); size_t initial_size = x.size(); x.resize(initial_size + limit); size_t size = istr.readBig(reinterpret_cast(&x[initial_size]), sizeof(FieldType) * limit); x.resize(initial_size + size / sizeof(FieldType)); } template class SerializationDecimalBase; template class SerializationDecimalBase; template class SerializationDecimalBase; template class SerializationDecimalBase; template class SerializationDecimalBase; }