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 <yql/essentials/providers/common/config/yql_setting.h>
#include <util/generic/map.h>
#include <util/generic/ptr.h>
namespace NYql {
enum class EDatumValidationMode {
None,
Cheap,
Expensive,
};
constexpr EDatumValidationMode DefaultDatumValidationMode = EDatumValidationMode::None;
constexpr EDatumValidationMode DefaultDatumTestValidationMode = EDatumValidationMode::Cheap;
template <typename TType>
class TRuntimeSetting {
public:
using TConfSetting = NYql::NCommon::TConfSetting<TType, NYql::NCommon::EConfSettingType::Static>;
explicit TRuntimeSetting(const TType& value)
: DefaultValue_(value)
{
}
TType Get() const {
return Setting_.Get().GetOrElse(DefaultValue_);
}
void Set(const TType& value) {
Setting_ = value;
}
private:
friend class TRuntimeSettingsConfiguration;
TConfSetting Setting_;
TType DefaultValue_;
};
struct TRuntimeSettings {
using TPtr = TSharedPtr<TRuntimeSettings, TAtomicCounter>;
using TConstPtr = TSharedPtr<const TRuntimeSettings, TAtomicCounter>;
TRuntimeSettings();
virtual ~TRuntimeSettings();
// =============================== Host settings ===============================
TRuntimeSetting<EDatumValidationMode> DatumValidation{DefaultDatumValidationMode};
// Noop feature.
// Used for testing only.
TRuntimeSetting<bool> TestHostSetting{false};
// =============================== Host settings end ===========================
using TUdfSettings = TMap<TString, TString>;
TStringBuf GetUdfSetting(TStringBuf module, TStringBuf settingName) const {
const auto moduleIt = ModuleToSettings_.find(module);
if (moduleIt == ModuleToSettings_.end()) {
return TStringBuf{};
}
const auto settingIt = moduleIt->second.find(settingName);
if (settingIt == moduleIt->second.end()) {
return TStringBuf{};
}
return settingIt->second;
}
void SetUdfSetting(const TString& module, const TString& settingName, const TString& value) {
ModuleToSettings_[module][settingName] = value;
}
const TMap<TString, TUdfSettings>& GetUdfSettings() const {
return ModuleToSettings_;
}
private:
TMap<TString, TUdfSettings> ModuleToSettings_;
};
TRuntimeSettings::TConstPtr MakeRuntimeSettings(auto&&... args) {
return MakeShared<const TRuntimeSettings, TAtomicCounter>(std::forward<decltype(args)>(args)...);
}
TRuntimeSettings::TPtr MakeRuntimeSettingsMutable(auto&&... args) {
return MakeShared<TRuntimeSettings, TAtomicCounter>(std::forward<decltype(args)>(args)...);
}
} // namespace NYql
template <>
void Out<NYql::EDatumValidationMode>(IOutputStream& out, NYql::EDatumValidationMode value);
|