#include "mkql_block_serializer_test_utils.h" #include #include #include #include #include namespace NKikimr::NMiniKQL { std::shared_ptr DoSerializerRoundtrip( const std::shared_ptr& arrayData, TType* itemType, TType* blockType) { const ui64 blockLen = static_cast(arrayData->length); auto* pool = arrow::default_memory_pool(); TBlockSerializerParams params(pool, Nothing(), /*shouldSerializeOffset=*/true); auto serializer = MakeBlockSerializer(TTypeInfoHelper(), itemType, params); auto deserializer = MakeBlockDeserializer(TTypeInfoHelper(), itemType, params); TVector metadata; serializer->StoreMetadata(*arrayData, [&](ui64 meta) { metadata.push_back(meta); }); NYql::TChunkedBuffer buffer; serializer->StoreArray(*arrayData, buffer); size_t metaIdx = 0; deserializer->LoadMetadata([&]() -> ui64 { return metadata[metaIdx++]; }); auto restored = deserializer->LoadArray(buffer, blockLen, TMaybe(0)); ValidateDatum(restored, Nothing(), blockType, NYql::EDatumValidationMode::Expensive); UNIT_ASSERT_VALUES_EQUAL(restored->length, arrayData->length); return restored; } } // namespace NKikimr::NMiniKQL