diff options
| author | Oleg Doronin <[email protected]> | 2024-07-25 17:05:02 +0300 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-07-25 17:05:02 +0300 |
| commit | b1edf9e53bcedbbee52bd4c4f377eacb52cce6f0 (patch) | |
| tree | aaa178d8c05da3dc4ed12b90fdcdff93bf2fe4bd | |
| parent | 4d1e99e04098a3919d7877ead4c43c6a1a995b48 (diff) | |
empty result set has been fixed (#7097)
| -rw-r--r-- | ydb/core/grpc_services/ydb_over_fq/execute_data_query.cpp | 5 | ||||
| -rw-r--r-- | ydb/tests/fq/s3/conftest.py | 13 | ||||
| -rw-r--r-- | ydb/tests/fq/s3/test_format_setting.py | 8 | ||||
| -rw-r--r-- | ydb/tests/fq/s3/test_ydb_over_fq.py | 28 |
4 files changed, 47 insertions, 7 deletions
diff --git a/ydb/core/grpc_services/ydb_over_fq/execute_data_query.cpp b/ydb/core/grpc_services/ydb_over_fq/execute_data_query.cpp index 2f6be1f7c7a..02ae2be9203 100644 --- a/ydb/core/grpc_services/ydb_over_fq/execute_data_query.cpp +++ b/ydb/core/grpc_services/ydb_over_fq/execute_data_query.cpp @@ -127,6 +127,11 @@ public: ) void HandleResultSets(const TString& queryId, const TActorContext& ctx) { + if (ResultSetSizes_.empty()) { + SendReply(ctx); + return; + } + Become(&ExecuteDataQueryRPC::GatherResultSetsState); QueryId_ = queryId; MakeLocalCall(CreateResultSetRequest(queryId, 0, 0), ctx); diff --git a/ydb/tests/fq/s3/conftest.py b/ydb/tests/fq/s3/conftest.py index 786ca79343a..12eeea71188 100644 --- a/ydb/tests/fq/s3/conftest.py +++ b/ydb/tests/fq/s3/conftest.py @@ -35,9 +35,10 @@ class TestCounter: def on_test_start(self): self.number_tests += 1 - assert self.number_tests <= self.tests_count_limit, \ - f"{self.error_string} exceeded limit {self.number_tests} vs {self.tests_count_limit}, " \ + assert self.number_tests <= self.tests_count_limit, ( + f"{self.error_string} exceeded limit {self.number_tests} vs {self.tests_count_limit}, " "this may lead timeouts on CI, please split this file" + ) @pytest.fixture(scope="module") @@ -104,7 +105,9 @@ def kikimr_starts_counter(): @pytest.fixture(scope="module") -def kikimr_yqv1(kikimr_params: pytest.FixtureRequest, s3: S3, kikimr_settings, mvp_external_ydb_endpoint, kikimr_starts_counter): +def kikimr_yqv1( + kikimr_params: pytest.FixtureRequest, s3: S3, kikimr_settings, mvp_external_ydb_endpoint, kikimr_starts_counter +): kikimr_starts_counter.on_test_start() kikimr_extensions = get_kikimr_extensions(s3, YQV1_VERSION_NAME, kikimr_settings, mvp_external_ydb_endpoint) with start_kikimr(kikimr_params, kikimr_extensions) as kikimr: @@ -112,7 +115,9 @@ def kikimr_yqv1(kikimr_params: pytest.FixtureRequest, s3: S3, kikimr_settings, m @pytest.fixture(scope="module") -def kikimr_yqv2(kikimr_params: pytest.FixtureRequest, s3: S3, kikimr_settings, mvp_external_ydb_endpoint, kikimr_starts_counter): +def kikimr_yqv2( + kikimr_params: pytest.FixtureRequest, s3: S3, kikimr_settings, mvp_external_ydb_endpoint, kikimr_starts_counter +): kikimr_starts_counter.on_test_start() kikimr_extensions = get_kikimr_extensions(s3, YQV2_VERSION_NAME, kikimr_settings, mvp_external_ydb_endpoint) with start_kikimr(kikimr_params, kikimr_extensions) as kikimr: diff --git a/ydb/tests/fq/s3/test_format_setting.py b/ydb/tests/fq/s3/test_format_setting.py index 45e8bc5a6c2..5ef18c26704 100644 --- a/ydb/tests/fq/s3/test_format_setting.py +++ b/ydb/tests/fq/s3/test_format_setting.py @@ -744,9 +744,11 @@ Pear;15;33''' connection_id=connection_response.result.connection_id, columns=[a, b], format_setting={ - "data.datetime.format" - if format_name != "ISO" and format_name != "POSIX" - else "data.datetime.format_name": format_name + ( + "data.datetime.format" + if format_name != "ISO" and format_name != "POSIX" + else "data.datetime.format_name" + ): format_name }, ) diff --git a/ydb/tests/fq/s3/test_ydb_over_fq.py b/ydb/tests/fq/s3/test_ydb_over_fq.py index 155fce37990..571b352acc4 100644 --- a/ydb/tests/fq/s3/test_ydb_over_fq.py +++ b/ydb/tests/fq/s3/test_ydb_over_fq.py @@ -362,3 +362,31 @@ class TestYdbOverFq(TestYdsBase): assert column.type == ydb.PrimitiveType.Int32 else: assert False + + @yq_all + @pytest.mark.parametrize("client", [{"folder_id": "my_folder"}], indirect=True) + def test_insert_data_query(self, kikimr, s3, client, unique_prefix, yq_version): + kikimr.control_plane.wait_bootstrap() + connection_id = client.create_storage_connection(unique_prefix + "fruitbucket", "fbucket").result.connection_id + bind_name = unique_prefix + "fruits_bind" + self.make_binding( + client, + bind_name, + "/sub/", + connection_id, + [("Fruit", "STRING"), ("Price", "INT32"), ("Weight", "INT32")], + ) + driver = self.make_yq_driver(kikimr.endpoint(), client.folder_id, "root@builtin") + session = driver.table_client.session().create() + with session.transaction() as tx: + query = ''' + insert into {}{} + select + 'Banana' as `Fruit`, + 3 as Price, + 100 as Weight + '''.format( + "bindings." if yq_version == "v1" else "", bind_name + ) + result = tx.execute(query) + assert len(result) == 0, str(result) |
