#pragma once #include #include #include #include #include namespace NKikimr::NMiniKQL { class IBlockSerializer { public: virtual ~IBlockSerializer() = default; virtual size_t ArrayMetadataCount() const = 0; using TMetadataSink = std::function; virtual void StoreMetadata(const arrow::ArrayData& data, const TMetadataSink& metaSink) const = 0; virtual void StoreArray(const arrow::ArrayData& data, NYql::TChunkedBuffer& dst) const = 0; }; class IBlockDeserializer { public: virtual ~IBlockDeserializer() = default; using TMetadataSource = std::function; virtual void LoadMetadata(const TMetadataSource& metaSource) = 0; virtual std::shared_ptr LoadArray(NYql::TChunkedBuffer& src, ui64 blockLen, ui64 offset) = 0; }; std::unique_ptr MakeBlockSerializer(const NYql::NUdf::ITypeInfoHelper& typeInfoHelper, const NYql::NUdf::TType* type); std::unique_ptr MakeBlockDeserializer(const NYql::NUdf::ITypeInfoHelper& typeInfoHelper, const NYql::NUdf::TType* type); }