From 572bf62d4adfca806743975d39c5e2e1f5db1a73 Mon Sep 17 00:00:00 2001 From: Vitaly Stoyan Date: Mon, 27 May 2024 13:10:39 +0000 Subject: [PATCH] init --- ydb/library/yql/core/facade/yql_facade.cpp | 26 +++++++++++++++++-- ydb/library/yql/core/ut/yql_qplayer_ut.cpp | 19 ++++++++++---- .../yql/sql/settings/translation_settings.cpp | 4 +++ .../yql/sql/settings/translation_settings.h | 5 +++- 4 files changed, 46 insertions(+), 8 deletions(-) diff --git a/ydb/library/yql/core/facade/yql_facade.cpp b/ydb/library/yql/core/facade/yql_facade.cpp index c566d4ddfa8d..76980f63593a 100644 --- a/ydb/library/yql/core/facade/yql_facade.cpp +++ b/ydb/library/yql/core/facade/yql_facade.cpp @@ -572,13 +572,24 @@ void TProgram::HandleTranslationSettings(NSQLTranslation::TTranslationSettings& const NSQLTranslation::TTranslationSettings*& currentSettings) { if (QContext_.CanWrite()) { - auto clusterMappingsNode = NYT::TNode(); + auto clusterMappingsNode = NYT::TNode::CreateMap(); for (const auto& c : currentSettings->ClusterMapping) { clusterMappingsNode(c.first, c.second); } + auto sqlFlagsNode = NYT::TNode::CreateList(); + for (const auto& f : currentSettings->Flags) { + sqlFlagsNode.Add(f); + } + auto dataNode = NYT::TNode() - ("ClusterMapping", clusterMappingsNode); + ("ClusterMapping", clusterMappingsNode) + ("V0Behavior", ui64(currentSettings->V0Behavior)) + ("V0WarnAsError", currentSettings->V0WarnAsError->Allow()) + ("DqDefaultAuto", currentSettings->DqDefaultAuto->Allow()) + ("BlockDefaultAuto", currentSettings->BlockDefaultAuto->Allow()) + ("SqlFlags", sqlFlagsNode); + auto data = NYT::NodeToYsonString(dataNode, NYT::NYson::EYsonFormat::Binary); QContext_.GetWriter()->Put({FacadeComponent, TranslationLabel}, data).GetValueSync(); } else if (QContext_.CanRead()) { @@ -588,10 +599,20 @@ void TProgram::HandleTranslationSettings(NSQLTranslation::TTranslationSettings& } auto dataNode = NYT::NodeFromYsonString(loaded->Value); + loadedSettings.ClusterMapping.clear(); for (const auto& c : dataNode["ClusterMapping"].AsMap()) { loadedSettings.ClusterMapping[c.first] = c.second.AsString(); } + loadedSettings.Flags.clear(); + for (const auto& f : dataNode["SqlFlags"].AsList()) { + loadedSettings.Flags.insert(f.AsString()); + } + + loadedSettings.V0Behavior = (NSQLTranslation::EV0Behavior)dataNode["V0Behavior"].AsUint64(); + loadedSettings.V0WarnAsError = NSQLTranslation::ISqlFeaturePolicy::Make(dataNode["V0WarnAsError"].AsBool()); + loadedSettings.DqDefaultAuto = NSQLTranslation::ISqlFeaturePolicy::Make(dataNode["DqDefaultAuto"].AsBool()); + loadedSettings.BlockDefaultAuto = NSQLTranslation::ISqlFeaturePolicy::Make(dataNode["BlockDefaultAuto"].AsBool()); currentSettings = &loadedSettings; } } @@ -629,6 +650,7 @@ bool TProgram::ParseSql(const NSQLTranslation::TTranslationSettings& settings) HandleSourceCode(sourceCode); const NSQLTranslation::TTranslationSettings* currentSettings = &settings; NSQLTranslation::TTranslationSettings loadedSettings; + loadedSettings.PgParser = settings.PgParser; if (QContext_) { HandleTranslationSettings(loadedSettings, currentSettings); } diff --git a/ydb/library/yql/core/ut/yql_qplayer_ut.cpp b/ydb/library/yql/core/ut/yql_qplayer_ut.cpp index 124f6aeda12a..d65387fe45ac 100644 --- a/ydb/library/yql/core/ut/yql_qplayer_ut.cpp +++ b/ydb/library/yql/core/ut/yql_qplayer_ut.cpp @@ -50,6 +50,7 @@ void WithTables(const F&& f) { struct TRunSettings { bool IsSql = true; + bool IsPg = false; THashMap Tables; TMaybe ParametersYson; THashMap StaticFiles, DynamicFiles; @@ -114,8 +115,9 @@ bool RunProgram(bool replay, const TString& query, const TQContext& qContext, co program->AddUserDataTable(MakeUserTables(runSettings.DynamicFiles)); } - if (runSettings.IsSql) { + if (runSettings.IsSql || runSettings.IsPg) { NSQLTranslation::TTranslationSettings settings; + settings.PgParser = runSettings.IsPg; if (!replay) { settings.ClusterMapping["plato"] = TString(YtProviderName); } @@ -123,7 +125,7 @@ bool RunProgram(bool replay, const TString& query, const TQContext& qContext, co if (!program->ParseSql(settings)) { program->PrintErrorsTo(Cerr); return false; - } + } } else if (!program->ParseYql()) { program->PrintErrorsTo(Cerr); return false; @@ -134,7 +136,7 @@ bool RunProgram(bool replay, const TString& query, const TQContext& qContext, co return false; } - TProgram::TStatus status = replay ? + TProgram::TStatus status = replay ? program->Optimize(GetUsername()) : program->Run(GetUsername()); if (status == TProgram::TStatus::Error) { @@ -188,7 +190,7 @@ Y_UNIT_TEST_SUITE(QPlayerTests) { (return world) ) )"; - + TRunSettings runSettings; runSettings.IsSql = false; CheckProgram(s, runSettings); @@ -200,12 +202,19 @@ Y_UNIT_TEST_SUITE(QPlayerTests) { CheckProgram(s, runSettings); } + Y_UNIT_TEST(SimplePg) { + auto s = "select 1::text"; + TRunSettings runSettings; + runSettings.IsPg = true; + CheckProgram(s, runSettings); + } + Y_UNIT_TEST(Udf) { auto s = "select String::AsciiToUpper('a')"; TRunSettings runSettings; CheckProgram(s, runSettings); } - + Y_UNIT_TEST(YtGetFolder) { auto s = "select * from plato.folder('','_yql_row_spec')"; WithTables([&](const auto& tables) { diff --git a/ydb/library/yql/sql/settings/translation_settings.cpp b/ydb/library/yql/sql/settings/translation_settings.cpp index 6fddf1fbe716..6b86b7a0bd1c 100644 --- a/ydb/library/yql/sql/settings/translation_settings.cpp +++ b/ydb/library/yql/sql/settings/translation_settings.cpp @@ -40,6 +40,10 @@ namespace NSQLTranslation { return new TAlwaysAllowPolicy; } + ISqlFeaturePolicy::TPtr ISqlFeaturePolicy::Make(bool allow) { + return allow ? MakeAlwaysAllow() : MakeAlwaysDisallow(); + } + TTranslationSettings::TTranslationSettings() : ModuleMapping({{"core", "/lib/yql/core.yql"}}) , BindingsMode(EBindingsMode::ENABLED) diff --git a/ydb/library/yql/sql/settings/translation_settings.h b/ydb/library/yql/sql/settings/translation_settings.h index 1c913f03c74d..cc623c08b0d8 100644 --- a/ydb/library/yql/sql/settings/translation_settings.h +++ b/ydb/library/yql/sql/settings/translation_settings.h @@ -44,7 +44,8 @@ namespace NSQLTranslation { using TIncrementMonCounterFunction = std::function; - enum class EV0Behavior { + // persisted + enum class EV0Behavior : ui32 { Silent = 0, Report, Disable @@ -60,6 +61,8 @@ namespace NSQLTranslation { static TPtr MakeAlwaysDisallow(); static TPtr MakeAlwaysAllow(); + + static TPtr Make(bool allow); }; struct TTableBindingSettings {