#pragma once #include #include #include namespace NYql { enum class EDatumValidationMode { None, Cheap, Expensive, }; constexpr EDatumValidationMode DefaultDatumValidationMode = EDatumValidationMode::None; constexpr EDatumValidationMode DefaultDatumTestValidationMode = EDatumValidationMode::Cheap; template class TRuntimeSetting { public: using TConfSetting = NYql::NCommon::TConfSetting; 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; using TConstPtr = TSharedPtr; TRuntimeSettings(); virtual ~TRuntimeSettings(); // =============================== Host settings =============================== TRuntimeSetting DatumValidation{DefaultDatumValidationMode}; // Noop feature. // Used for testing only. TRuntimeSetting TestHostSetting{false}; // =============================== Host settings end =========================== using TUdfSettings = TMap; 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& GetUdfSettings() const { return ModuleToSettings_; } private: TMap ModuleToSettings_; }; TRuntimeSettings::TConstPtr MakeRuntimeSettings(auto&&... args) { return MakeShared(std::forward(args)...); } TRuntimeSettings::TPtr MakeRuntimeSettingsMutable(auto&&... args) { return MakeShared(std::forward(args)...); } } // namespace NYql template <> void Out(IOutputStream& out, NYql::EDatumValidationMode value);