diff options
author | Александр Новожилов <mrlolthe1st@ydb.tech> | 2024-01-17 01:02:41 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-17 01:02:41 +0300 |
commit | 9a1868542085a40049b909a514f659c60c2b7b06 (patch) | |
tree | 41dc18a0d38e62df3ae5ebf2d4585b71c5bf08a1 | |
parent | 30df0c15f47119138f6f500b0e2ccd34101a55b2 (diff) | |
download | ydb-9a1868542085a40049b909a514f659c60c2b7b06.tar.gz |
YQL-16252, YQL-16623: Support search_path (#788)
* YQL-16252, YQL-16623: Support search_path
* tests
* canon
* fixes
* fixes
* fix
* fix
* one more test
* typo
15 files changed, 420 insertions, 12 deletions
diff --git a/ydb/library/yql/core/pg_settings/guc_settings.cpp b/ydb/library/yql/core/pg_settings/guc_settings.cpp new file mode 100644 index 0000000000..ed8dd68876 --- /dev/null +++ b/ydb/library/yql/core/pg_settings/guc_settings.cpp @@ -0,0 +1,29 @@ +#include "guc_settings.h" + +void TGUCSettings::Setup(const std::unordered_map<std::string, std::string>& runtimeSettings) { + RollbackSettings_ = runtimeSettings; + RollBack(); +} + +std::optional<std::string> TGUCSettings::Get(const std::string& key) const { + auto it = Settings_.find(key); + if (it == Settings_.end()) { + return std::nullopt; + } + return it->second; +} + +void TGUCSettings::Set(const std::string& key, const std::string& val, bool isLocal) { + Settings_[key] = val; + if (!isLocal) { + SessionSettings_[key] = val; + } +} + +void TGUCSettings::Commit() { + RollbackSettings_ = SessionSettings_; +} + +void TGUCSettings::RollBack() { + Settings_ = SessionSettings_ = RollbackSettings_; +} diff --git a/ydb/library/yql/core/pg_settings/guc_settings.h b/ydb/library/yql/core/pg_settings/guc_settings.h new file mode 100644 index 0000000000..e709c7ec7f --- /dev/null +++ b/ydb/library/yql/core/pg_settings/guc_settings.h @@ -0,0 +1,20 @@ +#pragma once +#include <unordered_map> +#include <vector> +#include <string> +#include <optional> +#include <memory> + +class TGUCSettings { +public: + using TPtr = std::shared_ptr<TGUCSettings>; + void Setup(const std::unordered_map<std::string, std::string>& runtimeSettings); + std::optional<std::string> Get(const std::string&) const; + void Set(const std::string&, const std::string&, bool isLocal = false); + void Commit(); + void RollBack(); +private: + std::unordered_map<std::string, std::string> Settings_; + std::unordered_map<std::string, std::string> RollbackSettings_; + std::unordered_map<std::string, std::string> SessionSettings_; +}; diff --git a/ydb/library/yql/core/pg_settings/ya.make b/ydb/library/yql/core/pg_settings/ya.make new file mode 100644 index 0000000000..c749255765 --- /dev/null +++ b/ydb/library/yql/core/pg_settings/ya.make @@ -0,0 +1,7 @@ +LIBRARY() + +SRCS( + guc_settings.cpp +) + +END()
\ No newline at end of file diff --git a/ydb/library/yql/sql/pg/pg_sql.cpp b/ydb/library/yql/sql/pg/pg_sql.cpp index 808ef71b9b..5e4d328ca0 100644 --- a/ydb/library/yql/sql/pg/pg_sql.cpp +++ b/ydb/library/yql/sql/pg/pg_sql.cpp @@ -632,6 +632,54 @@ public: return QL(QA("values"), QVL(valNames.data(), valNames.size()), VL(valueRows)); } + TAstNode* ParseSetConfig(const FuncCall* value) { + auto length = ListLength(value->args); + if (length != 3) { + AddError(TStringBuilder() << "Expected 3 arguments, but got: " << length); + return; + } + auto loc = value->location; + VariableSetStmt config; + auto arg0 = ListNodeNth(value->args, 0); + auto arg1 = ListNodeNth(value->args, 1); + auto arg2 = ListNodeNth(value->args, 2); + if (NodeTag(arg2) != T_TypeCast) { + AddError(TStringBuilder() << "Expected type cast node as is_local arg, but got node with tag"); + return; + } + auto isLocalCast = CAST_NODE(TypeCast, arg2)->arg; + if (NodeTag(isLocalCast) != T_A_Const) { + AddError(TStringBuilder() << "Expected a_const in cast, but got something wrong: " << NodeTag(isLocalCast)); + return nullptr; + } + auto isLocalConst = CAST_NODE(A_Const, isLocalCast); + if (NodeTag(isLocalConst->val) != T_String) { + AddError(TStringBuilder() << "Expected string in const, but got something wrong: " << NodeTag(isLocalCast)); + return nullptr; + } + auto rawVal = TString(StrVal(isLocalConst->val)); + if (rawVal != "t" && rawVal != "f") { + AddError(TStringBuilder() << "Expected t/f, but got " << rawVal); + return; + } + config.is_local = rawVal == "t"; + + if (NodeTag(arg0) != T_A_Const || NodeTag(arg1) != T_A_Const) { + AddError(TStringBuilder() << "Expected const with string, but got something else: " << NodeTag(arg0)); + return nullptr; + } + + auto name = CAST_NODE(A_Const, arg0)->val; + auto val = CAST_NODE(A_Const, arg1)->val; + if (NodeTag(name) != T_String || NodeTag(val) != T_String) { + AddError(TStringBuilder() << "Expected string const as name arg, but got something else: " << NodeTag(name)); + return; + } + config.name = (char*)StrVal(name); + config.args = list_make1((void*)(&val)); + return ParseVariableSetStmt(&config, true); + } + using TTraverseSelectStack = TStack<std::pair<const SelectStmt*, bool>>; using TTraverseNodeStack = TStack<std::pair<const Node*, bool>>; @@ -974,6 +1022,34 @@ public: res.emplace_back(CreatePgStarResultItem()); i++; } + bool maybeSelectWithJustSetConfig = !inner && !sort && windowItems.empty() && !having && !groupBy && !whereFilter && !x->distinctClause && ListLength(x->targetList) == 1; + if (maybeSelectWithJustSetConfig) { + auto node = ListNodeNth(x->targetList, 0); + if (NodeTag(node) != T_ResTarget) { + NodeNotImplemented(x, node); + return nullptr; + } + auto r = CAST_NODE(ResTarget, node); + if (!r->val) { + AddError("SelectStmt: expected val"); + return nullptr; + } + auto call = r->val; + if (NodeTag(call) == T_FuncCall) { + auto fn = CAST_NODE(FuncCall, call); + if (ListLength(fn->funcname) == 1) { + auto nameNode = ListNodeNth(fn->funcname, 0); + if (NodeTag(nameNode) != T_String) { + AddError("Function name must be string"); + return nullptr; + } + auto name = to_lower(TString(StrVal(ListNodeNth(fn->funcname, 0)))); + if (name == "set_config") { + return ParseSetConfig(fn); + } + } + } + } for (int targetIndex = 0; targetIndex < ListLength(x->targetList); ++targetIndex) { auto node = ListNodeNth(x->targetList, targetIndex); if (NodeTag(node) != T_ResTarget) { @@ -1993,13 +2069,38 @@ public: } [[nodiscard]] - TAstNode* ParseVariableSetStmt(const VariableSetStmt* value) { + TAstNode* ParseVariableSetStmt(const VariableSetStmt* value, bool isSetConfig = false) { if (value->kind != VAR_SET_VALUE) { AddError(TStringBuilder() << "VariableSetStmt, not supported kind: " << (int)value->kind); return nullptr; } auto name = to_lower(TString(value->name)); + if (isSetConfig) { + if (ListLength(value->args) != 1) { + AddError(TStringBuilder() << "VariableSetStmt, expected 1 arg, but got: " << ListLength(value->args)); + return nullptr; + } + auto val = ListNodeNth(value->args, 0); + if (NodeTag(val) != T_String) { + AddError(TStringBuilder() << "VariableSetStmt, expected string literal for " << value->name << " option"); + return nullptr; + } + TString rawStr = TString(StrVal(val)); + if (name != "search_path") { + AddError(TStringBuilder() << "VariableSetStmt, set_config doesn't support that option:" << name); + return nullptr; + } + if (rawStr != "pg_catalog" && rawStr != "public") { + AddError(TStringBuilder() << "VariableSetStmt, search path supports only public and pg_catalogue, but got :" << rawStr); + return nullptr; + } + if (Settings.GUCSettings) { + Settings.GUCSettings->Set(name, rawStr, value->is_local); + } + return Statements.back(); + } + if (name == "useblocks" || name == "emitaggapply") { if (ListLength(value->args) != 1) { AddError(TStringBuilder() << "VariableSetStmt, expected 1 arg, but got: " << ListLength(value->args)); @@ -2277,10 +2378,12 @@ public: case TRANS_STMT_COMMIT: Statements.push_back(L(A("let"), A("world"), L(A("CommitAll!"), A("world")))); + Settings.GUCSettings->Commit(); return true; case TRANS_STMT_ROLLBACK: Statements.push_back(L(A("let"), A("world"), L(A("CommitAll!"), A("world"), QL(QL(QA("mode"), QA("rollback")))))); + Settings.GUCSettings->RollBack(); return true; default: AddError(TStringBuilder() << "TransactionStmt: kind is not supported: " << (int)value->kind); @@ -2413,6 +2516,20 @@ public: return true; } + TString ResolveCluster(const TStringBuf schemaname) { + if (schemaname == "public") { + return ""; + } + if (schemaname == "" && Settings.GUCSettings) { + auto search_path = Settings.GUCSettings->Get("search_path"); + if (!search_path || *search_path == "public") { + return Settings.DefaultCluster; + } + return TString(*search_path); + } + return TString(schemaname); + } + TAstNode* BuildClusterSinkOrSourceExpression( bool isSink, const TStringBuf schemaname) { const auto p = Settings.ClusterMapping.FindPtr(schemaname); @@ -2443,7 +2560,7 @@ public: return {}; } - const auto cluster = !schemaname.Empty() && schemaname != "public" ? schemaname : Settings.DefaultCluster; + const auto cluster = ResolveCluster(schemaname); const auto sinkOrSource = BuildClusterSinkOrSourceExpression(isSink, cluster); const auto key = BuildTableKeyExpression(relname, isScheme); return {sinkOrSource, key}; @@ -2470,7 +2587,7 @@ public: return {}; } - const auto cluster = !schemaname.Empty() && schemaname != "public" ? schemaname : Settings.DefaultCluster; + const auto cluster = ResolveCluster(schemaname); const auto sinkOrSource = BuildClusterSinkOrSourceExpression(true, cluster); const auto key = BuildPgObjectExpression(objectName, pgObjectType); return {sinkOrSource, key}; @@ -3262,6 +3379,7 @@ public: } auto name = names.back(); + const bool isAggregateFunc = NYql::NPg::HasAggregation(name); const bool hasReturnSet = NYql::NPg::HasReturnSetProc(name); diff --git a/ydb/library/yql/sql/pg/pg_sql_ut.cpp b/ydb/library/yql/sql/pg/pg_sql_ut.cpp index 10011b7f62..d99fcfaa61 100644 --- a/ydb/library/yql/sql/pg/pg_sql_ut.cpp +++ b/ydb/library/yql/sql/pg/pg_sql_ut.cpp @@ -456,4 +456,121 @@ SELECT COUNT(*) FROM public.t;"); auto issue = *(res.Issues.begin()); UNIT_ASSERT(issue.GetMessage().Contains("VariableSetStmt, not supported BlockEngine option value: foo")); } + + Y_UNIT_TEST(SetConfig_SearchPath) { + TTranslationSettings settings; + settings.GUCSettings = std::make_shared<TGUCSettings>(); + settings.ClusterMapping["pg_catalog"] = NYql::PgProviderName; + settings.DefaultCluster = ""; + + auto res = SqlToYqlWithMode( + R"(select set_config('search_path', 'pg_catalog', false);)", + NSQLTranslation::ESqlMode::QUERY, + 10, + {}, + EDebugOutput::ToCerr, + false, + settings); + UNIT_ASSERT_C(res.IsOk(), res.Issues.ToString()); + UNIT_ASSERT(res.Root); + + res = SqlToYqlWithMode( + R"(select oid, +typinput::int4 as typinput, +typname, +typnamespace, +typtype +from pg_type)", + NSQLTranslation::ESqlMode::QUERY, + 10, + {}, + EDebugOutput::None, + false, + settings); + UNIT_ASSERT(res.IsOk()); + UNIT_ASSERT(res.Root); + + res = SqlToYqlWithMode( + R"(select oid, +typinput::int4 as typinput, +typname, +typnamespace, +typtype +from pg_catalog.pg_type)", + NSQLTranslation::ESqlMode::QUERY, + 10, + {}, + EDebugOutput::None, + false, + settings); + UNIT_ASSERT(res.IsOk()); + UNIT_ASSERT(res.Root); + + res = SqlToYqlWithMode( + R"(select set_config('search_path', 'public', false);)", + NSQLTranslation::ESqlMode::QUERY, + 10, + {}, + EDebugOutput::None, + false, + settings); + UNIT_ASSERT(res.IsOk()); + UNIT_ASSERT(res.Root); + + res = SqlToYqlWithMode( + R"(select set_config('search_path', 'yql', false);)", + NSQLTranslation::ESqlMode::QUERY, + 10, + {}, + EDebugOutput::None, + false, + settings); + UNIT_ASSERT(!res.IsOk()); + UNIT_ASSERT(!res.Root); + + res = SqlToYqlWithMode( + R"(select set_config('search_path', 'pg_catalog', false);)", + NSQLTranslation::ESqlMode::QUERY, + 10, + {}, + EDebugOutput::None, + false, + settings); + UNIT_ASSERT(res.IsOk()); + UNIT_ASSERT(res.Root); + + res = SqlToYqlWithMode( + R"(rollback;)", + NSQLTranslation::ESqlMode::QUERY, + 10, + {}, + EDebugOutput::None, + false, + settings); + UNIT_ASSERT(res.IsOk()); + UNIT_ASSERT(res.Root); + + google::protobuf::Arena arena; + const auto service = TString(NYql::YtProviderName); + settings.ClusterMapping["hahn"] = NYql::YtProviderName; + settings.ClusterMapping["mon"] = NYql::SolomonProviderName; + settings.MaxErrors = 10; + settings.Mode = NSQLTranslation::ESqlMode::QUERY; + settings.Arena = &arena; + settings.AnsiLexer = false; + settings.SyntaxVersion = 1; + settings.PgParser = true; + + res = SqlToYql( + R"(select oid, +typinput::int4 as typinput, +typname, +typnamespace, +typtype +from pg_type)", + settings); + UNIT_ASSERT(res.Issues.ToString().Contains("Unknown cluster:")); + UNIT_ASSERT(!res.IsOk()); + UNIT_ASSERT(!res.Root); + } } diff --git a/ydb/library/yql/sql/settings/translation_settings.h b/ydb/library/yql/sql/settings/translation_settings.h index 4ec571a932..2dad2e646d 100644 --- a/ydb/library/yql/sql/settings/translation_settings.h +++ b/ydb/library/yql/sql/settings/translation_settings.h @@ -1,5 +1,7 @@ #pragma once +#include <ydb/library/yql/core/pg_settings/guc_settings.h> + #include <util/generic/hash.h> #include <util/generic/hash_set.h> #include <util/generic/map.h> @@ -110,6 +112,8 @@ namespace NSQLTranslation { bool AutoParametrizeEnabled = false; bool AutoParametrizeValuesStmt = false; THashSet<TString> AutoParametrizeExprDisabledScopes = {}; + + TGUCSettings::TPtr GUCSettings = std::make_shared<TGUCSettings>(); }; bool ParseTranslationSettings(const TString& query, NSQLTranslation::TTranslationSettings& settings, NYql::TIssues& issues); diff --git a/ydb/library/yql/sql/settings/ya.make b/ydb/library/yql/sql/settings/ya.make index d703c6b709..b1fcf57ca3 100644 --- a/ydb/library/yql/sql/settings/ya.make +++ b/ydb/library/yql/sql/settings/ya.make @@ -9,6 +9,7 @@ PEERDIR( library/cpp/deprecated/split library/cpp/json ydb/library/yql/core/issue + ydb/library/yql/core/pg_settings ydb/library/yql/core/issue/protos ydb/library/yql/utils ) diff --git a/ydb/library/yql/tests/sql/dq_file/part15/canondata/result.json b/ydb/library/yql/tests/sql/dq_file/part15/canondata/result.json index 82099eb4f1..c6716667ca 100644 --- a/ydb/library/yql/tests/sql/dq_file/part15/canondata/result.json +++ b/ydb/library/yql/tests/sql/dq_file/part15/canondata/result.json @@ -2263,6 +2263,28 @@ } ], "test.test[pg-unknown-default.txt-Results]": [], + "test.test[pg_catalog-pg_set_config_commit-default.txt-Analyze]": [ + { + "checksum": "68060cb3253dfbfa478b2c0ff4ee0b52", + "size": 2171, + "uri": "https://{canondata_backend}/1880306/db71d33ed2525c218cc0dde3f5b7b9ce7f9aa317/resource.tar.gz#test.test_pg_catalog-pg_set_config_commit-default.txt-Analyze_/plan.txt" + } + ], + "test.test[pg_catalog-pg_set_config_commit-default.txt-Debug]": [ + { + "checksum": "33f854f63b0fc28ef95bb639aade1fe9", + "size": 876, + "uri": "https://{canondata_backend}/1880306/db71d33ed2525c218cc0dde3f5b7b9ce7f9aa317/resource.tar.gz#test.test_pg_catalog-pg_set_config_commit-default.txt-Debug_/opt.yql_patched" + } + ], + "test.test[pg_catalog-pg_set_config_commit-default.txt-Plan]": [ + { + "checksum": "68060cb3253dfbfa478b2c0ff4ee0b52", + "size": 2171, + "uri": "https://{canondata_backend}/1880306/db71d33ed2525c218cc0dde3f5b7b9ce7f9aa317/resource.tar.gz#test.test_pg_catalog-pg_set_config_commit-default.txt-Plan_/plan.txt" + } + ], + "test.test[pg_catalog-pg_set_config_commit-default.txt-Results]": [], "test.test[pragma-yson_auto_convert--Analyze]": [ { "checksum": "b4dd508a329723c74293d80f0278c705", diff --git a/ydb/library/yql/tests/sql/dq_file/part4/canondata/result.json b/ydb/library/yql/tests/sql/dq_file/part4/canondata/result.json index fb6fe2f901..c29d789481 100644 --- a/ydb/library/yql/tests/sql/dq_file/part4/canondata/result.json +++ b/ydb/library/yql/tests/sql/dq_file/part4/canondata/result.json @@ -2153,6 +2153,28 @@ } ], "test.test[pg-tpch-q09-default.txt-Results]": [], + "test.test[pg_catalog-pg_set_config-default.txt-Analyze]": [ + { + "checksum": "4eaabd8e0d2437ccd8ba8311ee9b195d", + "size": 1357, + "uri": "https://{canondata_backend}/1937001/ceb29095b5e35ed4cc1eb104072815b0be7ac715/resource.tar.gz#test.test_pg_catalog-pg_set_config-default.txt-Analyze_/plan.txt" + } + ], + "test.test[pg_catalog-pg_set_config-default.txt-Debug]": [ + { + "checksum": "c0fc5bdb405f341292917207a1a9b077", + "size": 800, + "uri": "https://{canondata_backend}/1937001/ceb29095b5e35ed4cc1eb104072815b0be7ac715/resource.tar.gz#test.test_pg_catalog-pg_set_config-default.txt-Debug_/opt.yql_patched" + } + ], + "test.test[pg_catalog-pg_set_config-default.txt-Plan]": [ + { + "checksum": "4eaabd8e0d2437ccd8ba8311ee9b195d", + "size": 1357, + "uri": "https://{canondata_backend}/1937001/ceb29095b5e35ed4cc1eb104072815b0be7ac715/resource.tar.gz#test.test_pg_catalog-pg_set_config-default.txt-Plan_/plan.txt" + } + ], + "test.test[pg_catalog-pg_set_config-default.txt-Results]": [], "test.test[produce-reduce_all-default.txt-Analyze]": [ { "checksum": "9bd46d79daaa9520002fc1a9f8ead7ad", diff --git a/ydb/library/yql/tests/sql/sql2yql/canondata/result.json b/ydb/library/yql/tests/sql/sql2yql/canondata/result.json index 409d77064d..349c8228ea 100644 --- a/ydb/library/yql/tests/sql/sql2yql/canondata/result.json +++ b/ydb/library/yql/tests/sql/sql2yql/canondata/result.json @@ -13208,6 +13208,20 @@ "uri": "https://{canondata_backend}/1773845/118c740ff9ea824c1b2998c5bad993b2a2276f6e/resource.tar.gz#test_sql2yql.test_pg_catalog-pg_locks_/sql.yql" } ], + "test_sql2yql.test[pg_catalog-pg_set_config]": [ + { + "checksum": "0b00c0ffc35339caa3a22beb1e12d9af", + "size": 1776, + "uri": "https://{canondata_backend}/1942173/1ce1eb52fea966081c3286eec52d5acc98c048a6/resource.tar.gz#test_sql2yql.test_pg_catalog-pg_set_config_/sql.yql" + } + ], + "test_sql2yql.test[pg_catalog-pg_set_config_commit]": [ + { + "checksum": "8f4536c9243a0a083e4bd355461525c6", + "size": 1860, + "uri": "https://{canondata_backend}/1942173/1ce1eb52fea966081c3286eec52d5acc98c048a6/resource.tar.gz#test_sql2yql.test_pg_catalog-pg_set_config_commit_/sql.yql" + } + ], "test_sql2yql.test[pg_catalog-pg_shdescription]": [ { "checksum": "3c2389e9a1d831db2944939e11919590", diff --git a/ydb/library/yql/tests/sql/suites/pg_catalog/pg_set_config.sql b/ydb/library/yql/tests/sql/suites/pg_catalog/pg_set_config.sql new file mode 100644 index 0000000000..f04de1c0d5 --- /dev/null +++ b/ydb/library/yql/tests/sql/suites/pg_catalog/pg_set_config.sql @@ -0,0 +1,5 @@ +--!syntax_pg +select set_config('search_path', 'pg_catalog', false); +select oid, typinput::int4 as typinput, typname, typnamespace, typtype from pg_type; +select set_config('search_path', 'public', false); +select oid, typinput::int4 as typinput, typname, typnamespace, typtype from pg_catalog.pg_type; diff --git a/ydb/library/yql/tests/sql/suites/pg_catalog/pg_set_config_commit.sql b/ydb/library/yql/tests/sql/suites/pg_catalog/pg_set_config_commit.sql new file mode 100644 index 0000000000..5df0cac811 --- /dev/null +++ b/ydb/library/yql/tests/sql/suites/pg_catalog/pg_set_config_commit.sql @@ -0,0 +1,6 @@ +--!syntax_pg +select set_config('search_path', 'pg_catalog', false); +commit; +select oid, typinput::int4 as typinput, typname, typnamespace, typtype from pg_type; +rollback; +select oid, typinput::int4 as typinput, typname, typnamespace, typtype from pg_type; diff --git a/ydb/library/yql/tests/sql/yt_native_file/part15/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part15/canondata/result.json index 033d09bf70..04eea3709e 100644 --- a/ydb/library/yql/tests/sql/yt_native_file/part15/canondata/result.json +++ b/ydb/library/yql/tests/sql/yt_native_file/part15/canondata/result.json @@ -2040,6 +2040,27 @@ "uri": "https://{canondata_backend}/1923547/61458c9c64b8429a1ff4c80acb29f295ac160173/resource.tar.gz#test.test_pg-unknown-default.txt-Results_/results.txt" } ], + "test.test[pg_catalog-pg_set_config_commit-default.txt-Debug]": [ + { + "checksum": "90a2cbfdc0e2b05b0e0519c7e6d7fd5f", + "size": 816, + "uri": "https://{canondata_backend}/1942415/f984090b55dc18be59f4bd18b1adb52d0c0c4f56/resource.tar.gz#test.test_pg_catalog-pg_set_config_commit-default.txt-Debug_/opt.yql" + } + ], + "test.test[pg_catalog-pg_set_config_commit-default.txt-Plan]": [ + { + "checksum": "68060cb3253dfbfa478b2c0ff4ee0b52", + "size": 2171, + "uri": "https://{canondata_backend}/1942415/f984090b55dc18be59f4bd18b1adb52d0c0c4f56/resource.tar.gz#test.test_pg_catalog-pg_set_config_commit-default.txt-Plan_/plan.txt" + } + ], + "test.test[pg_catalog-pg_set_config_commit-default.txt-Results]": [ + { + "checksum": "9e0d1aa68d849723ce01958eb48252db", + "size": 48462, + "uri": "https://{canondata_backend}/1942415/f984090b55dc18be59f4bd18b1adb52d0c0c4f56/resource.tar.gz#test.test_pg_catalog-pg_set_config_commit-default.txt-Results_/results.txt" + } + ], "test.test[pragma-yson_auto_convert--Debug]": [ { "checksum": "e9ad6c82ef2a21b3a8b8692df194fe72", diff --git a/ydb/library/yql/tests/sql/yt_native_file/part4/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part4/canondata/result.json index 005d1dc4ee..a1316d31d7 100644 --- a/ydb/library/yql/tests/sql/yt_native_file/part4/canondata/result.json +++ b/ydb/library/yql/tests/sql/yt_native_file/part4/canondata/result.json @@ -1741,6 +1741,27 @@ "uri": "https://{canondata_backend}/937458/e5bf2059ff1773755323cbc5a526b3a57c820703/resource.tar.gz#test.test_pg-tpch-q09-default.txt-Results_/results.txt" } ], + "test.test[pg_catalog-pg_set_config-default.txt-Debug]": [ + { + "checksum": "e1ac509be349f61477e97f8f46d36361", + "size": 736, + "uri": "https://{canondata_backend}/1880306/b8b828a21bbfc443a7e752a79a78e9a185098989/resource.tar.gz#test.test_pg_catalog-pg_set_config-default.txt-Debug_/opt.yql" + } + ], + "test.test[pg_catalog-pg_set_config-default.txt-Plan]": [ + { + "checksum": "4eaabd8e0d2437ccd8ba8311ee9b195d", + "size": 1357, + "uri": "https://{canondata_backend}/1880306/b8b828a21bbfc443a7e752a79a78e9a185098989/resource.tar.gz#test.test_pg_catalog-pg_set_config-default.txt-Plan_/plan.txt" + } + ], + "test.test[pg_catalog-pg_set_config-default.txt-Results]": [ + { + "checksum": "9e0d1aa68d849723ce01958eb48252db", + "size": 48462, + "uri": "https://{canondata_backend}/1880306/b8b828a21bbfc443a7e752a79a78e9a185098989/resource.tar.gz#test.test_pg_catalog-pg_set_config-default.txt-Results_/results.txt" + } + ], "test.test[produce-reduce_all-default.txt-Debug]": [ { "checksum": "bf18d4de67411fd4d4c0e9747d2d14f9", diff --git a/ydb/library/yql/tools/pgrun/pgrun.cpp b/ydb/library/yql/tools/pgrun/pgrun.cpp index 1ad3d59d8a..62f3a4227c 100644 --- a/ydb/library/yql/tools/pgrun/pgrun.cpp +++ b/ydb/library/yql/tools/pgrun/pgrun.cpp @@ -1014,6 +1014,16 @@ int Main(int argc, char* argv[]) const TString username = GetUsername(); THashSet<TString> sqlFlags; + NSQLTranslation::TTranslationSettings settings; + settings.ClusterMapping = clusterMapping; + settings.DefaultCluster = DefaultCluster; + settings.Flags = sqlFlags; + settings.SyntaxVersion = 1; + settings.AnsiLexer = false; + settings.V0Behavior = NSQLTranslation::EV0Behavior::Report; + settings.AssumeYdbOnClusterWithSlash = false; + settings.PgParser = true; + for (const auto& raw_stmt : TStatementIterator{Cin.ReadAll()}) { const auto stmt = GetFormattedStmt(raw_stmt); Cout << stmt << '\n'; @@ -1035,16 +1045,7 @@ int Main(int argc, char* argv[]) } google::protobuf::Arena arena; - NSQLTranslation::TTranslationSettings settings; settings.Arena = &arena; - settings.ClusterMapping = clusterMapping; - settings.DefaultCluster = DefaultCluster; - settings.Flags = sqlFlags; - settings.SyntaxVersion = 1; - settings.AnsiLexer = false; - settings.V0Behavior = NSQLTranslation::EV0Behavior::Report; - settings.AssumeYdbOnClusterWithSlash = false; - settings.PgParser = true; auto program = factory.Create("-stdin-", stmt); |