mkql_block_transport.h 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. #pragma once
  2. #include <yql/essentials/minikql/mkql_node.h>
  3. #include <yql/essentials/utils/chunked_buffer.h>
  4. #include <arrow/datum.h>
  5. #include <functional>
  6. #include <memory>
  7. namespace NKikimr::NMiniKQL {
  8. class IBlockSerializer {
  9. public:
  10. virtual ~IBlockSerializer() = default;
  11. virtual size_t ArrayMetadataCount() const = 0;
  12. using TMetadataSink = std::function<void(ui64 meta)>;
  13. virtual void StoreMetadata(const arrow::ArrayData& data, const TMetadataSink& metaSink) const = 0;
  14. virtual void StoreArray(const arrow::ArrayData& data, NYql::TChunkedBuffer& dst) const = 0;
  15. };
  16. class IBlockDeserializer {
  17. public:
  18. virtual ~IBlockDeserializer() = default;
  19. using TMetadataSource = std::function<ui64()>;
  20. virtual void LoadMetadata(const TMetadataSource& metaSource) = 0;
  21. virtual std::shared_ptr<arrow::ArrayData> LoadArray(NYql::TChunkedBuffer& src, ui64 blockLen, ui64 offset) = 0;
  22. };
  23. std::unique_ptr<IBlockSerializer> MakeBlockSerializer(const NYql::NUdf::ITypeInfoHelper& typeInfoHelper, const NYql::NUdf::TType* type);
  24. std::unique_ptr<IBlockDeserializer> MakeBlockDeserializer(const NYql::NUdf::ITypeInfoHelper& typeInfoHelper, const NYql::NUdf::TType* type);
  25. }