aboutsummaryrefslogtreecommitdiffstats
path: root/yql/tools/yqlrun/http/yql_server.h
blob: 580f3261456a067f6091506b6ec8dcba87089b9e (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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#pragma once

#include "server.h"
#include "assets_servlet.h"
#include "yql_servlet.h"
#include "yql_functions_servlet.h"

#include <yql/essentials/core/facade/yql_facade.h>
#include <yql/essentials/core/yql_type_annotation.h>
#include <yql/essentials/minikql/mkql_function_registry.h>

#include <util/stream/file.h>
#include <util/system/user.h>
#include <util/system/tempfile.h>


namespace NYql {
namespace NHttp {

enum class EDataSource {
    FILE,
    YAMR,
    YT
};

///////////////////////////////////////////////////////////////////////////////
// TYqlServer
///////////////////////////////////////////////////////////////////////////////
class TYqlServer: private TNonCopyable
{
public:
    inline TYqlServer(
            const TServerConfig& config,
            const NKikimr::NMiniKQL::IFunctionRegistry* functionRegistry,
            TUdfIndex::TPtr udfIndex,
            ui64 nextUniqueId,
            TUserDataTable filesMapping,
            THolder<TGatewaysConfig>&& gatewaysConfig,
            const THashSet<TString>& sqlFlags,
            IModuleResolver::TPtr modules,
            IUdfResolver::TPtr udfResolver,
            TFileStoragePtr fileStorage)
        : HttpServer(config)
        , FunctionRegistry(functionRegistry)
        , UdfIndex(udfIndex)
        , NextUniqueId(nextUniqueId)
        , FilesMapping(std::move(filesMapping))
        , GatewaysConfig(std::move(gatewaysConfig))
        , SqlFlags(sqlFlags)
        , Modules(modules)
        , UdfResolver(udfResolver)
        , FileStorage(fileStorage)
    {
    }

    template <typename TAction>
    void RegisterAction(const TString& path) {
        RegisterServlet(path, new TYqlServlet<TAction>(*this));
    }

    void RegisterServlet(const TString& path, TAutoPtr<IServlet> sp) {
        HttpServer.RegisterServlet(path, sp);
    }

    void ShutdownOn(int signal);
    void Start();
    void Wait();

public:
    TServer HttpServer;
    const NKikimr::NMiniKQL::IFunctionRegistry* FunctionRegistry;
    TUdfIndex::TPtr UdfIndex;
    ui64 NextUniqueId;
    TUserDataTable FilesMapping;
    const THolder<TGatewaysConfig> GatewaysConfig;
    const THashSet<TString> SqlFlags;
    IModuleResolver::TPtr Modules;
    IUdfResolver::TPtr UdfResolver;
    TFileStoragePtr FileStorage;
};

TAutoPtr<TYqlServer> CreateYqlServer(
        TServerConfig config,
        const NKikimr::NMiniKQL::IFunctionRegistry* functionRegistry,
        TUdfIndex::TPtr udfIndex,
        ui64 nextUniqueId,
        TUserDataTable filesMapping,
        THolder<TGatewaysConfig>&& gatewaysConfig,
        const THashSet<TString>& sqlFlags,
        IModuleResolver::TPtr modules = nullptr,
        IUdfResolver::TPtr udfResolver = nullptr,
        TFileStoragePtr fileStorage = nullptr);

} // namspace NHttp
} // namspace NYql