Skip to content

Commit 3e5e3f9

Browse files
committed
Fix review issues
1 parent 8e90346 commit 3e5e3f9

File tree

2 files changed

+46
-9
lines changed

2 files changed

+46
-9
lines changed

ydb/library/yql/core/common_opt/yql_co_simple1.cpp

+44-3
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ TExprNode::TPtr OptimizePgCastOverPgConst(const TExprNode::TPtr& input, TExprCon
7575
return input;
7676
}
7777
auto val = input->Child(0);
78-
if (!val->IsCallable("PgConst")) {
78+
if (!val->IsCallable("PgConst")) {
7979
return input;
8080
}
8181

@@ -85,7 +85,7 @@ TExprNode::TPtr OptimizePgCastOverPgConst(const TExprNode::TPtr& input, TExprCon
8585
YQL_CLOG(DEBUG, Core) << "Remove PgCast unknown->text over PgConst";
8686
return ctx.ChangeChild(*val, 1, castToType);
8787
}
88-
88+
8989
return input;
9090
}
9191

@@ -6285,7 +6285,48 @@ void RegisterCoSimpleCallables1(TCallableOptimizerMap& map) {
62856285
map["ShuffleByKeys"] = map["PartitionsByKeys"] = [](const TExprNode::TPtr& node, TExprContext& ctx, TOptimizeContext& optCtx) {
62866286
if (IsEmpty(node->Head(), *optCtx.Types)) {
62876287
YQL_CLOG(DEBUG, Core) << node->Content() << " over empty input.";
6288-
auto lambdaResult = ctx.Builder(node->Pos()).Apply(node->Tail()).With(0, KeepConstraints(node->HeadPtr(), node->Tail().Head().Head(), ctx)).Seal().Build();
6288+
6289+
// lambda argument type:
6290+
auto& lambdaArg = node->Tail().Head().Head();
6291+
auto* lambdaArgType = lambdaArg.GetTypeAnn();
6292+
YQL_ENSURE(lambdaArgType, "No argument type for lambda in " << node->Content());
6293+
6294+
// sequence type:
6295+
auto* sequenceType = node->Head().GetTypeAnn();
6296+
YQL_ENSURE(sequenceType, "No argument type for sequence in " << node->Content());
6297+
6298+
TStringBuf typeConversionFunc;
6299+
if (sequenceType->GetKind() != lambdaArgType->GetKind()) {
6300+
switch (lambdaArgType->GetKind()) {
6301+
case ETypeAnnotationKind::List:
6302+
if (sequenceType->GetKind() == ETypeAnnotationKind::Optional) {
6303+
typeConversionFunc = "ToList";
6304+
} else if (IsIn({ ETypeAnnotationKind::Stream, ETypeAnnotationKind::Flow }, sequenceType->GetKind())) {
6305+
typeConversionFunc = "ForwardList";
6306+
}
6307+
break;
6308+
case ETypeAnnotationKind::Flow:
6309+
typeConversionFunc = "ToFlow";
6310+
break;
6311+
case ETypeAnnotationKind::Stream:
6312+
typeConversionFunc = "ToStream";
6313+
break;
6314+
case ETypeAnnotationKind::Optional:
6315+
if (sequenceType->GetKind() == ETypeAnnotationKind::List) {
6316+
typeConversionFunc = "ToOptional";
6317+
}
6318+
// TODO: convert from Stream/Flow to Optional
6319+
break;
6320+
default:
6321+
break;
6322+
}
6323+
}
6324+
6325+
TExprNode::TPtr sequence = KeepConstraints(node->HeadPtr(), lambdaArg, ctx);
6326+
if (typeConversionFunc) {
6327+
sequence = KeepConstraints(ctx.NewCallable(sequence->Pos(), typeConversionFunc, { sequence }), lambdaArg, ctx);
6328+
}
6329+
auto lambdaResult = ctx.Builder(node->Pos()).Apply(node->Tail()).With(0, sequence).Seal().Build();
62896330
if (node->IsCallable("ShuffleByKeys")) {
62906331
auto lambdaType = node->Tail().GetTypeAnn();
62916332
if (lambdaType->GetKind() == ETypeAnnotationKind::Optional) {

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

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

19171917
IGraphTransformer::TStatus ForwardListWrapper(const TExprNode::TPtr& input, TExprNode::TPtr& output, TContext& ctx) {
1918+
Y_UNUSED(output);
19181919
if (!EnsureArgsCount(*input, 1, ctx.Expr)) {
19191920
return IGraphTransformer::TStatus::Error;
19201921
}
19211922

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

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

0 commit comments

Comments
 (0)