diff options
author | uzhas <uzhas@ydb.tech> | 2023-06-29 15:38:31 +0300 |
---|---|---|
committer | uzhas <uzhas@ydb.tech> | 2023-06-29 15:38:31 +0300 |
commit | 10e7cfb0b633f154ca03f8dbc17560fc7d65fd28 (patch) | |
tree | 344e444fc6a9985141cadbb467b1663a7cab9e21 | |
parent | b08eaa934a6a9a456a1c96a5a0d69a92d3b54285 (diff) | |
download | ydb-10e7cfb0b633f154ca03f8dbc17560fc7d65fd28.tar.gz |
customize reading from bindings
-rw-r--r-- | ydb/library/yql/core/issue/protos/issue_id.proto | 2 | ||||
-rw-r--r-- | ydb/library/yql/core/issue/yql_issue.txt | 10 | ||||
-rw-r--r-- | ydb/library/yql/sql/settings/translation_settings.cpp | 1 | ||||
-rw-r--r-- | ydb/library/yql/sql/settings/translation_settings.h | 12 | ||||
-rw-r--r-- | ydb/library/yql/sql/v1/sql.cpp | 19 | ||||
-rw-r--r-- | ydb/library/yql/sql/v1/sql_ut.cpp | 85 |
6 files changed, 127 insertions, 2 deletions
diff --git a/ydb/library/yql/core/issue/protos/issue_id.proto b/ydb/library/yql/core/issue/protos/issue_id.proto index 19ff20fe84b..d03c2225f67 100644 --- a/ydb/library/yql/core/issue/protos/issue_id.proto +++ b/ydb/library/yql/core/issue/protos/issue_id.proto @@ -139,9 +139,11 @@ message TIssuesIds { YQL_DEPRECATED_POSITIONAL_SCHEMA = 4535; YQL_DUPLICATE_DECLARE = 4536; YQL_OFFSET_WITHOUT_SORT = 4537; + YQL_DEPRECATED_BINDINGS = 4538; // yql parser errors YQL_NOT_ALLOWED_IN_DISCOVERY = 4600; + YQL_DISABLED_BINDINGS = 4601; // jsonpath errors JSONPATH_PARSE_ERROR = 4700; diff --git a/ydb/library/yql/core/issue/yql_issue.txt b/ydb/library/yql/core/issue/yql_issue.txt index c6fa93b810c..3763e342b8e 100644 --- a/ydb/library/yql/core/issue/yql_issue.txt +++ b/ydb/library/yql/core/issue/yql_issue.txt @@ -631,4 +631,12 @@ ids { ids { code: YQL_OFFSET_WITHOUT_SORT severity: S_WARNING -}
\ No newline at end of file +} +ids { + code: YQL_DEPRECATED_BINDINGS + severity: S_WARNING +} +ids { + code: YQL_DISABLED_BINDINGS + severity: S_ERROR +} diff --git a/ydb/library/yql/sql/settings/translation_settings.cpp b/ydb/library/yql/sql/settings/translation_settings.cpp index 0b775bf79b0..61f3295fb3c 100644 --- a/ydb/library/yql/sql/settings/translation_settings.cpp +++ b/ydb/library/yql/sql/settings/translation_settings.cpp @@ -42,6 +42,7 @@ namespace NSQLTranslation { TTranslationSettings::TTranslationSettings() : ModuleMapping({{"core", "/lib/yql/core.yql"}}) + , BindingsMode(EBindingsMode::ENABLED) , Mode(ESqlMode::QUERY) , MaxErrors(SQL_MAX_PARSER_ERRORS) , EndOfQueryCommit(true) diff --git a/ydb/library/yql/sql/settings/translation_settings.h b/ydb/library/yql/sql/settings/translation_settings.h index 4d0ff5cdaff..ae7560ca65c 100644 --- a/ydb/library/yql/sql/settings/translation_settings.h +++ b/ydb/library/yql/sql/settings/translation_settings.h @@ -24,6 +24,17 @@ namespace NSQLTranslation { DISCOVERY = 4, }; + enum class EBindingsMode { + // raise error + DISABLED, + // classic support for bindings + ENABLED, + // bindings.my_binding -> current_cluster.my_binding + raise warning + DROP_WITH_WARNING, + // bindings.my_binding -> current_cluster.my_binding + DROP + }; + inline bool IsQueryMode(NSQLTranslation::ESqlMode mode) { return mode == NSQLTranslation::ESqlMode::QUERY || mode == NSQLTranslation::ESqlMode::DISCOVERY; } @@ -66,6 +77,7 @@ namespace NSQLTranslation { THashSet<TString> Libraries; THashSet<TString> Flags; + EBindingsMode BindingsMode; THashMap<TString, TTableBindingSettings> Bindings; // each (name, type) entry in this map is equivalent to diff --git a/ydb/library/yql/sql/v1/sql.cpp b/ydb/library/yql/sql/v1/sql.cpp index 93db0fb7ab0..b5b75969492 100644 --- a/ydb/library/yql/sql/v1/sql.cpp +++ b/ydb/library/yql/sql/v1/sql.cpp @@ -1447,7 +1447,24 @@ bool TSqlTranslation::ClusterExpr(const TRule_cluster_expr& node, bool allowWild if (value.GetLiteral()) { TString clusterName = *value.GetLiteral(); if (allowBinding && to_lower(clusterName) == "bindings") { - isBinding = true; + switch (Ctx.Settings.BindingsMode) { + case NSQLTranslation::EBindingsMode::DISABLED: + Ctx.Error(Ctx.Pos(), TIssuesIds::YQL_DISABLED_BINDINGS) << "Please remove 'bindings.' from your query, the support for this syntax has ended"; + Ctx.IncrementMonCounter("sql_errors", "DisabledBinding"); + return false; + case NSQLTranslation::EBindingsMode::ENABLED: + isBinding = true; + break; + case NSQLTranslation::EBindingsMode::DROP_WITH_WARNING: + Ctx.Warning(Ctx.Pos(), TIssuesIds::YQL_DEPRECATED_BINDINGS) << "Please remove 'bindings.' from your query, the support for this syntax will be dropped soon"; + Ctx.IncrementMonCounter("sql_errors", "DeprecatedBinding"); + [[fallthrough]]; + case NSQLTranslation::EBindingsMode::DROP: + service = Context().Scoped->CurrService; + cluster = Context().Scoped->CurrCluster; + break; + } + return true; } TString normalizedClusterName; diff --git a/ydb/library/yql/sql/v1/sql_ut.cpp b/ydb/library/yql/sql/v1/sql_ut.cpp index a90101c874c..0667828b586 100644 --- a/ydb/library/yql/sql/v1/sql_ut.cpp +++ b/ydb/library/yql/sql/v1/sql_ut.cpp @@ -2010,6 +2010,48 @@ Y_UNIT_TEST_SUITE(SqlParsingOnly) { VerifyProgram(res, elementStat, verifyLine); UNIT_ASSERT_VALUES_EQUAL(1, elementStat["MrTableConcat"]); + + settings.DefaultCluster = "plato"; + settings.BindingsMode = NSQLTranslation::EBindingsMode::DISABLED; + res = SqlToYqlWithSettings( + "select * from bindings.foo", + settings + ); + UNIT_ASSERT_VALUES_EQUAL(Err2Str(res), "<main>:1:15: Error: Please remove 'bindings.' from your query, the support for this syntax has ended, code: 4601\n"); + UNIT_ASSERT(!res.Root); + + settings.BindingsMode = NSQLTranslation::EBindingsMode::DROP; + res = SqlToYqlWithSettings( + "select * from bindings.foo", + settings + ); + + UNIT_ASSERT(res.Root); + + TVerifyLineFunc verifyLine2 = [](const TString& word, const TString& line) { + if (word == "MrTableConcat") { + UNIT_ASSERT_VALUES_UNEQUAL(TString::npos, + line.find(R"__((MrTableConcat (Key '('table (String '"foo")))) (Void) '())))__")); + } + }; + + TWordCountHive elementStat2 = {{TString("MrTableConcat"), 0}}; + VerifyProgram(res, elementStat2, verifyLine2); + + UNIT_ASSERT_VALUES_EQUAL(1, elementStat2["MrTableConcat"]); + + settings.BindingsMode = NSQLTranslation::EBindingsMode::DROP_WITH_WARNING; + res = SqlToYqlWithSettings( + "select * from bindings.foo", + settings + ); + UNIT_ASSERT_VALUES_EQUAL(Err2Str(res), "<main>:1:15: Warning: Please remove 'bindings.' from your query, the support for this syntax will be dropped soon, code: 4538\n"); + UNIT_ASSERT(res.Root); + + TWordCountHive elementStat3 = {{TString("MrTableConcat"), 0}}; + VerifyProgram(res, elementStat3, verifyLine2); + + UNIT_ASSERT_VALUES_EQUAL(1, elementStat3["MrTableConcat"]); } Y_UNIT_TEST(TableBindingsWithInsert) { @@ -2031,6 +2073,49 @@ Y_UNIT_TEST_SUITE(SqlParsingOnly) { VerifyProgram(res, elementStat, verifyLine); UNIT_ASSERT_VALUES_EQUAL(1, elementStat["Write!"]); + + settings.DefaultCluster = "plato"; + settings.BindingsMode = NSQLTranslation::EBindingsMode::DISABLED; + res = SqlToYqlWithSettings( + "insert into bindings.foo with truncate (x, y) values (1, 2);", + settings + ); + UNIT_ASSERT_VALUES_EQUAL(Err2Str(res), "<main>:1:13: Error: Please remove 'bindings.' from your query, the support for this syntax has ended, code: 4601\n"); + UNIT_ASSERT(!res.Root); + + settings.BindingsMode = NSQLTranslation::EBindingsMode::DROP; + res = SqlToYqlWithSettings( + "insert into bindings.foo with truncate (x, y) values (1, 2);", + settings + ); + UNIT_ASSERT_VALUES_EQUAL(Err2Str(res), ""); + UNIT_ASSERT(res.Root); + + TVerifyLineFunc verifyLine2 = [](const TString& word, const TString& line) { + if (word == "Write!") { + //UNIT_ASSERT_VALUES_EQUAL(line, ""); + UNIT_ASSERT_VALUES_UNEQUAL(TString::npos, + line.find(R"__((Write! world sink (Key '('table (String '"foo"))) values '('('mode 'renew)))__")); + } + }; + + TWordCountHive elementStat2 = {{TString("Write!"), 0}}; + VerifyProgram(res, elementStat2, verifyLine2); + + UNIT_ASSERT_VALUES_EQUAL(1, elementStat2["Write!"]); + + settings.BindingsMode = NSQLTranslation::EBindingsMode::DROP_WITH_WARNING; + res = SqlToYqlWithSettings( + "insert into bindings.foo with truncate (x, y) values (1, 2);", + settings + ); + UNIT_ASSERT_VALUES_EQUAL(Err2Str(res), "<main>:1:13: Warning: Please remove 'bindings.' from your query, the support for this syntax will be dropped soon, code: 4538\n"); + UNIT_ASSERT(res.Root); + + TWordCountHive elementStat3 = {{TString("Write!"), 0}}; + VerifyProgram(res, elementStat3, verifyLine2); + + UNIT_ASSERT_VALUES_EQUAL(1, elementStat3["Write!"]); } Y_UNIT_TEST(TrailingCommaInWithout) { |