yql_result_provider.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #pragma once
  2. #include <yql/essentials/core/yql_type_annotation.h>
  3. #include <yql/essentials/core/yql_execution.h>
  4. namespace Nkikimr::NMiniKQL {
  5. class IFunctionRegistry;
  6. }
  7. namespace NYql {
  8. class IResultWriter : public TThrRefBase {
  9. public:
  10. virtual void Init(bool discard, const TString& label, TMaybe<TPosition> pos, bool unordered) = 0;
  11. virtual void Write(const TStringBuf& resultData) = 0;
  12. virtual void Commit(bool overflow) = 0;
  13. virtual bool IsDiscard() const = 0;
  14. virtual TStringBuf Str() = 0;
  15. virtual ui64 Size() = 0;
  16. };
  17. TIntrusivePtr<IResultWriter> CreateYsonResultWriter(NYson::EYsonFormat format);
  18. struct TResultProviderConfig : TThrRefBase {
  19. using TResultWriterFactory = std::function<TIntrusivePtr<IResultWriter>()>;
  20. TResultProviderConfig(TTypeAnnotationContext& types,
  21. const NKikimr::NMiniKQL::IFunctionRegistry& functionRegistry,
  22. IDataProvider::EResultFormat format, const TString& formatDetails, TResultWriterFactory writerFactory)
  23. : Types(types)
  24. , FunctionRegistry(functionRegistry)
  25. , WriterFactory(writerFactory)
  26. {
  27. FillSettings.Format = format;
  28. FillSettings.FormatDetails = formatDetails;
  29. }
  30. TTypeAnnotationContext& Types;
  31. const NKikimr::NMiniKQL::IFunctionRegistry& FunctionRegistry;
  32. IDataProvider::TFillSettings FillSettings;
  33. TResultWriterFactory WriterFactory;
  34. TVector<TString> CommittedResults;
  35. bool SupportsResultPosition = false;
  36. };
  37. TIntrusivePtr<IDataProvider> CreateResultProvider(const TIntrusivePtr<TResultProviderConfig>& config);
  38. const THashSet<TStringBuf>& ResultProviderFunctions();
  39. }