Skip to content

Commit 9a2335a

Browse files
authored
YQ-3363 fix internal error for insert without params (ydb-platform#8120)
1 parent b98deeb commit 9a2335a

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed

ydb/library/yql/providers/s3/provider/yql_s3_datasink.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,12 +90,19 @@ class TS3DataSinkProvider : public TDataProviderBase {
9090
TExprNode::TPtr RewriteIO(const TExprNode::TPtr& write, TExprContext& ctx) override {
9191
const TS3Write w(write);
9292
auto settings = write->Tail().ChildrenList();
93+
94+
TExprNode::TPtr format = ExtractFormat(settings);
95+
if (!format) {
96+
ctx.AddError(TIssue(ctx.GetPosition(write->Pos()), "Missing format - please use WITH FORMAT when writing into S3"));
97+
return nullptr;
98+
}
99+
93100
return Build<TS3WriteObject>(ctx, w.Pos())
94101
.World(w.World())
95102
.DataSink(w.DataSink())
96103
.Target<TS3Target>()
97104
.Path(write->Child(2U)->Head().Tail().HeadPtr())
98-
.Format(ExtractFormat(settings))
105+
.Format(std::move(format))
99106
.Settings(ctx.NewList(w.Pos(), std::move(settings)))
100107
.Build()
101108
.Input(write->ChildPtr(3))

ydb/tests/fq/s3/test_insert.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -512,3 +512,28 @@ def test_insert_empty_object(self, kikimr, s3, client):
512512
assert result_set.columns[0].type.type_id == ydb.Type.STRING
513513
assert len(result_set.rows) == 1
514514
assert result_set.rows[0].items[0].text_value == ""
515+
516+
@yq_all
517+
@pytest.mark.parametrize("client", [{"folder_id": "my_folder"}], indirect=True)
518+
def test_insert_without_format_error(self, kikimr, s3, client, unique_prefix):
519+
resource = boto3.resource(
520+
"s3", endpoint_url=s3.s3_url, aws_access_key_id="key", aws_secret_access_key="secret_key"
521+
)
522+
523+
bucket = resource.Bucket("insert_bucket")
524+
bucket.create(ACL='public-read-write')
525+
bucket.objects.all().delete()
526+
527+
storage_connection_name = unique_prefix + "ibucket"
528+
client.create_storage_connection(storage_connection_name, "insert_bucket")
529+
530+
sql = f'''
531+
insert into `{storage_connection_name}`.`/test/`
532+
select * from AS_TABLE([<|foo:123, bar:"xxx"u|>,<|foo:456, bar:"yyy"u|>]);
533+
'''
534+
535+
query_id = client.create_query("simple", sql, type=fq.QueryContent.QueryType.ANALYTICS).result.query_id
536+
client.wait_query_status(query_id, fq.QueryMeta.FAILED)
537+
issues = str(client.describe_query(query_id).result.query.issue)
538+
539+
assert "Missing format - please use WITH FORMAT when writing into S3" in issues, "Incorrect Issues: " + issues

0 commit comments

Comments
 (0)