#pragma once #include #include #include namespace NKikimr::NMiniKQL { //Dummy synchronous in-memory spiller class TMockSpiller: public ISpiller{ public: TMockSpiller() : NextKey_(0) {} NThreading::TFuture Put(NYql::TChunkedBuffer&& blob) override { auto promise = NThreading::NewPromise(); auto key = NextKey_; Storage_[key] = std::move(blob); PutSizes_.push_back(Storage_[key].Size()); NextKey_++; promise.SetValue(key); return promise.GetFuture();; } NThreading::TFuture> Get(TKey key) override { auto promise = NThreading::NewPromise>(); if (auto it = Storage_.find(key); it != Storage_.end()) { promise.SetValue(it->second); } else { promise.SetValue(std::nullopt); } return promise.GetFuture(); } NThreading::TFuture> Extract(TKey key) override { auto promise = NThreading::NewPromise>(); if (auto it = Storage_.find(key); it != Storage_.end()) { promise.SetValue(std::move(it->second)); Storage_.erase(it); } else { promise.SetValue(std::nullopt); } return promise.GetFuture(); } NThreading::TFuture Delete(TKey key) override { auto promise = NThreading::NewPromise(); promise.SetValue(); Storage_.erase(key); return promise.GetFuture(); } const std::vector& GetPutSizes() const { return PutSizes_; } private: ISpiller::TKey NextKey_; std::unordered_map Storage_; std::vector PutSizes_; }; inline ISpiller::TPtr CreateMockSpiller() { return std::make_shared(); } } //namespace NKikimr::NMiniKQL