#pragma once #include "interface.h" #include #include #include #include #include #include #include #include #include namespace NYql { namespace NPureCalc { class TProgramFactory: public IProgramFactory { private: TProgramFactoryOptions Options_; TExprContext ExprContext_; TIntrusivePtr FuncRegistry_; IModuleResolver::TPtr ModuleResolver_; TUserDataTable UserData_; EBlockEngineMode BlockEngineMode_; IOutputStream* ExprOutputStream_; THashMap Modules_; NKikimr::NUdf::ICountersProvider* CountersProvider_; public: explicit TProgramFactory(const TProgramFactoryOptions&); ~TProgramFactory() override; public: void AddUdfModule( const TStringBuf& moduleName, NKikimr::NUdf::TUniquePtr&& module ) override; void SetCountersProvider(NKikimr::NUdf::ICountersProvider* provider) override; IPullStreamWorkerFactoryPtr MakePullStreamWorkerFactory(const TInputSpecBase&, const TOutputSpecBase&, TString, ETranslationMode, ui16) override; IPullListWorkerFactoryPtr MakePullListWorkerFactory(const TInputSpecBase&, const TOutputSpecBase&, TString, ETranslationMode, ui16) override; IPushStreamWorkerFactoryPtr MakePushStreamWorkerFactory(const TInputSpecBase&, const TOutputSpecBase&, TString, ETranslationMode, ui16) override; }; } }