summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOleg Doronin <[email protected]>2024-07-25 17:05:02 +0300
committerGitHub <[email protected]>2024-07-25 17:05:02 +0300
commitb1edf9e53bcedbbee52bd4c4f377eacb52cce6f0 (patch)
treeaaa178d8c05da3dc4ed12b90fdcdff93bf2fe4bd
parent4d1e99e04098a3919d7877ead4c43c6a1a995b48 (diff)
empty result set has been fixed (#7097)
-rw-r--r--ydb/core/grpc_services/ydb_over_fq/execute_data_query.cpp5
-rw-r--r--ydb/tests/fq/s3/conftest.py13
-rw-r--r--ydb/tests/fq/s3/test_format_setting.py8
-rw-r--r--ydb/tests/fq/s3/test_ydb_over_fq.py28
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)