Skip to content

Commit dda612b

Browse files
authored
Merge 8e90346 into 5594dac
2 parents 5594dac + 8e90346 commit dda612b

File tree

2 files changed

+78
-2
lines changed

2 files changed

+78
-2
lines changed

ydb/core/kqp/ut/federated_query/s3/kqp_federated_query_ut.cpp

+72
Original file line numberDiff line numberDiff line change
@@ -1591,6 +1591,78 @@ Y_UNIT_TEST_SUITE(KqpFederatedQuery) {
15911591
UNIT_ASSERT_STRING_CONTAINS(queryExecutionOperation.GetIssues().ToString(), "\"/Root/external_table\" is expected to be external data source");
15921592
}
15931593
}
1594+
1595+
Y_UNIT_TEST(QueryWithNoDataInS3) {
1596+
const TString externalDataSourceName = "tpc_h_s3_storage_connection";
1597+
const TString bucket = "test_bucket_no_data";
1598+
1599+
Aws::S3::S3Client s3Client = MakeS3Client();
1600+
CreateBucket(bucket, s3Client);
1601+
// Uncomment if you want to compare with query with data
1602+
//UploadObject(bucket, "l/l", R"json({"l_extendedprice": 0.0, "l_discount": 1.0, "l_partkey": 1})json", s3Client);
1603+
//UploadObject(bucket, "p/p", R"json({"p_partkey": 1, "p_type": "t"})json", s3Client);
1604+
1605+
auto kikimr = MakeKikimrRunner(NYql::IHTTPGateway::Make());
1606+
auto client = kikimr->GetQueryClient();
1607+
1608+
{
1609+
const TString query = fmt::format(R"sql(
1610+
CREATE EXTERNAL DATA SOURCE `{external_source}` WITH (
1611+
SOURCE_TYPE="ObjectStorage",
1612+
LOCATION="{location}",
1613+
AUTH_METHOD="NONE"
1614+
);
1615+
)sql",
1616+
"external_source"_a = externalDataSourceName,
1617+
"location"_a = GetBucketLocation(bucket)
1618+
);
1619+
auto result = client.ExecuteQuery(query, TTxControl::NoTx()).GetValueSync();
1620+
UNIT_ASSERT_C(result.GetStatus() == NYdb::EStatus::SUCCESS, result.GetIssues().ToString());
1621+
}
1622+
1623+
{
1624+
// YQ-2750
1625+
const TString query = fmt::format(R"sql(
1626+
$border = Date("1994-08-01");
1627+
select
1628+
100.00 * sum(case
1629+
when StartsWith(p.p_type, 'PROMO')
1630+
then l.l_extendedprice * (1 - l.l_discount)
1631+
else 0
1632+
end) / sum(l.l_extendedprice * (1 - l.l_discount)) as promo_revenue
1633+
from
1634+
{external_source}.`l/` with ( schema (
1635+
l_extendedprice double,
1636+
l_discount double,
1637+
l_partkey int64,
1638+
l_shipdate date
1639+
),
1640+
format = "json_each_row"
1641+
) as l
1642+
join
1643+
{external_source}.`p/` with ( schema (
1644+
p_partkey int64,
1645+
p_type string
1646+
),
1647+
format = "json_each_row"
1648+
) as p
1649+
on
1650+
l.l_partkey = p.p_partkey
1651+
where
1652+
cast(l.l_shipdate as timestamp) >= $border
1653+
and cast(l.l_shipdate as timestamp) < ($border + Interval("P31D"));
1654+
)sql",
1655+
"external_source"_a = externalDataSourceName
1656+
);
1657+
auto result = client.ExecuteQuery(query, TTxControl::BeginTx().CommitTx()).GetValueSync();
1658+
UNIT_ASSERT_C(result.GetStatus() == NYdb::EStatus::SUCCESS, result.GetIssues().ToString());
1659+
auto rs = result.GetResultSetParser(0);
1660+
UNIT_ASSERT_VALUES_EQUAL(rs.RowsCount(), 1);
1661+
rs.TryNextRow();
1662+
TMaybe<double> sum = rs.ColumnParser(0).GetOptionalDouble();
1663+
UNIT_ASSERT(!sum);
1664+
}
1665+
}
15941666
}
15951667

15961668
} // namespace NKikimr::NKqp

ydb/library/yql/core/type_ann/type_ann_list.cpp

+6-2
Original file line numberDiff line numberDiff line change
@@ -1915,16 +1915,20 @@ namespace {
19151915
}
19161916

19171917
IGraphTransformer::TStatus ForwardListWrapper(const TExprNode::TPtr& input, TExprNode::TPtr& output, TContext& ctx) {
1918-
Y_UNUSED(output);
19191918
if (!EnsureArgsCount(*input, 1, ctx.Expr)) {
19201919
return IGraphTransformer::TStatus::Error;
19211920
}
19221921

19231922
const TTypeAnnotationNode* itemType = nullptr;
1924-
if (!EnsureNewSeqType<false, false>(input->Head(), ctx.Expr, &itemType)) {
1923+
if (!EnsureNewSeqType<false, true>(input->Head(), ctx.Expr, &itemType)) {
19251924
return IGraphTransformer::TStatus::Error;
19261925
}
19271926

1927+
if (input->Head().GetTypeAnn()->GetKind() == ETypeAnnotationKind::List) { // Already a list, remove ForwardList
1928+
output = input->HeadPtr();
1929+
return IGraphTransformer::TStatus::Repeat;
1930+
}
1931+
19281932
input->SetTypeAnn(ctx.Expr.MakeType<TListExprType>(itemType));
19291933
return IGraphTransformer::TStatus::Ok;
19301934
}

0 commit comments

Comments
 (0)