aboutsummaryrefslogtreecommitdiffstats
path: root/yql/essentials/providers/result/provider/yql_result_provider.h
blob: 3ab11e78bd40b199de01f54484a9da44c31aa5f5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#pragma once

#include <yql/essentials/core/yql_type_annotation.h>
#include <yql/essentials/core/yql_execution.h>

namespace Nkikimr::NMiniKQL {
    class IFunctionRegistry;
}

namespace NYql {

class IResultWriter : public TThrRefBase {
public:
    virtual void Init(bool discard, const TString& label, TMaybe<TPosition> pos, bool unordered) = 0;
    virtual void Write(const TStringBuf& resultData) = 0;
    virtual void Commit(bool overflow) = 0;
    virtual bool IsDiscard() const = 0;
    virtual TStringBuf Str() = 0;
    virtual ui64 Size() = 0;
};

TIntrusivePtr<IResultWriter> CreateYsonResultWriter(NYson::EYsonFormat format);

struct TResultProviderConfig : TThrRefBase {
    using TResultWriterFactory = std::function<TIntrusivePtr<IResultWriter>()>;

    TResultProviderConfig(TTypeAnnotationContext& types,
        const NKikimr::NMiniKQL::IFunctionRegistry& functionRegistry,
        IDataProvider::EResultFormat format, const TString& formatDetails, TResultWriterFactory writerFactory)
        : Types(types)
        , FunctionRegistry(functionRegistry)
        , WriterFactory(writerFactory)
    {
        FillSettings.Format = format;
        FillSettings.FormatDetails = formatDetails;
    }

    TTypeAnnotationContext& Types;
    const NKikimr::NMiniKQL::IFunctionRegistry& FunctionRegistry;
    IDataProvider::TFillSettings FillSettings;
    TResultWriterFactory WriterFactory;
    TVector<TString> CommittedResults;
    bool SupportsResultPosition = false;
};

TIntrusivePtr<IDataProvider> CreateResultProvider(const TIntrusivePtr<TResultProviderConfig>& config);
const THashSet<TStringBuf>& ResultProviderFunctions();

}