Skip to content

Commit ea5d31f

Browse files
authored
YQ-3363 fix internal error for insert without params (#8074)
1 parent 4b0313d commit ea5d31f

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

0 commit comments

Comments
 (0)