aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoruzhas <uzhas@ydb.tech>2023-06-29 15:38:31 +0300
committeruzhas <uzhas@ydb.tech>2023-06-29 15:38:31 +0300
commit10e7cfb0b633f154ca03f8dbc17560fc7d65fd28 (patch)
tree344e444fc6a9985141cadbb467b1663a7cab9e21
parentb08eaa934a6a9a456a1c96a5a0d69a92d3b54285 (diff)
downloadydb-10e7cfb0b633f154ca03f8dbc17560fc7d65fd28.tar.gz
customize reading from bindings
-rw-r--r--ydb/library/yql/core/issue/protos/issue_id.proto2
-rw-r--r--ydb/library/yql/core/issue/yql_issue.txt10
-rw-r--r--ydb/library/yql/sql/settings/translation_settings.cpp1
-rw-r--r--ydb/library/yql/sql/settings/translation_settings.h12
-rw-r--r--ydb/library/yql/sql/v1/sql.cpp19
-rw-r--r--ydb/library/yql/sql/v1/sql_ut.cpp85
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) {