Browse Source

Keep Issue fields after censorship (#714)

* Keep Issue fields after censorship

* Tests
Hor911 1 year ago
parent
commit
29b2945061

+ 2 - 1
ydb/core/fq/libs/common/util.cpp

@@ -50,7 +50,8 @@ public:
 
     TIntrusivePtr<NYql::TIssue> Run(const NYql::TIssue& issue) {
         auto msg = RemoveDatabaseFromStr(issue.GetMessage(), DatabasePath);
-        auto newIssue = MakeIntrusive<NYql::TIssue>(msg);
+        auto newIssue = MakeIntrusive<NYql::TIssue>(issue.Position, issue.EndPosition, msg);
+        newIssue->SetCode(issue.GetCode(), issue.GetSeverity());
         for (auto issue : issue.GetSubIssues()) {
             newIssue->AddSubIssue(Run(*issue));
         }

+ 9 - 2
ydb/tests/fq/s3/conftest.py

@@ -15,6 +15,7 @@ from ydb.tests.tools.fq_runner.kikimr_utils import DefaultConfigExtension
 from ydb.tests.tools.fq_runner.kikimr_utils import YQv2Extension
 from ydb.tests.tools.fq_runner.kikimr_utils import ComputeExtension
 from ydb.tests.tools.fq_runner.kikimr_utils import StatsModeExtension
+from ydb.tests.tools.fq_runner.kikimr_utils import BindingsModeExtension
 from ydb.tests.tools.fq_runner.kikimr_utils import start_kikimr
 from ydb.tests.fq.s3.s3_helpers import S3
 from library.recipes import common as recipes_common
@@ -67,14 +68,20 @@ def stats_mode():
 
 
 @pytest.fixture
-def kikimr(request: pytest.FixtureRequest, s3: S3, yq_version: str, stats_mode: str):
+def bindings_mode():
+    return ''
+
+
+@pytest.fixture
+def kikimr(request: pytest.FixtureRequest, s3: S3, yq_version: str, stats_mode: str, bindings_mode: str):
     kikimr_extensions = [AddInflightExtension(),
                          AddDataInflightExtension(),
                          AddFormatSizeLimitExtension(),
                          DefaultConfigExtension(s3.s3_url),
                          YQv2Extension(yq_version),
                          ComputeExtension(),
-                         StatsModeExtension(stats_mode)]
+                         StatsModeExtension(stats_mode),
+                         BindingsModeExtension(bindings_mode, yq_version)]
     with start_kikimr(request, kikimr_extensions) as kikimr:
         yield kikimr
 

+ 10 - 1
ydb/tests/fq/s3/test_bindings.py

@@ -371,7 +371,8 @@ class TestBindings:
 
     @yq_all
     @pytest.mark.parametrize("client", [{"folder_id": "my_folder"}], indirect=True)
-    def test_s3_insert(self, kikimr, s3, client):
+    @pytest.mark.parametrize("bindings_mode", ["BM_DROP_WITH_WARNING"])
+    def test_s3_insert(self, kikimr, s3, client, bindings_mode, yq_version):
 
         resource = boto3.resource(
             "s3",
@@ -401,6 +402,10 @@ class TestBindings:
 
         query_id = client.create_query("simple", sql, type=fq.QueryContent.QueryType.ANALYTICS).result.query_id
         client.wait_query_status(query_id, fq.QueryMeta.COMPLETED)
+        if yq_version == "v2":
+            issues = str(client.describe_query(query_id).result.query.issue)
+            assert "message: \"Please remove \\\'bindings.\\\' from your query, the support for this syntax will be dropped soon" in issues
+            assert "severity: 2" in issues
 
         sql = R'''
             select foo, bar from bindings.`s3binding`;
@@ -408,6 +413,10 @@ class TestBindings:
 
         query_id = client.create_query("simple", sql, type=fq.QueryContent.QueryType.ANALYTICS).result.query_id
         client.wait_query_status(query_id, fq.QueryMeta.COMPLETED)
+        if yq_version == "v2":
+            issues = str(client.describe_query(query_id).result.query.issue)
+            assert "message: \"Please remove \\\'bindings.\\\' from your query, the support for this syntax will be dropped soon" in issues
+            assert "severity: 2" in issues
 
         data = client.get_result_data(query_id)
         result_set = data.result.result_set

+ 19 - 0
ydb/tests/tools/fq_runner/kikimr_utils.py

@@ -224,6 +224,25 @@ class StatsModeExtension(ExtensionPoint):
         kikimr.control_plane.fq_config['control_plane_storage']['dump_raw_statistics'] = True
 
 
+class BindingsModeExtension(ExtensionPoint):
+
+    def __init__(self, bindings_mode, yq_version):
+        YQv2Extension.__init__.__annotations__ = {
+            'bindings_mode': str,
+            'yq_version': str,
+            'return': None
+        }
+        super().__init__()
+        self.bindings_mode = bindings_mode
+        self.yq_version = yq_version
+
+    def is_applicable(self, request):
+        return self.yq_version == 'v2' and self.bindings_mode != ''
+
+    def apply_to_kikimr(self, request, kikimr):
+        kikimr.compute_plane.config_generator.yaml_config["table_service_config"]["bindings_mode"] = self.bindings_mode
+
+
 @contextmanager
 def start_kikimr(request, kikimr_extensions):
     start_kikimr.__annotations__ = {