@@ -75,7 +75,7 @@ TExprNode::TPtr OptimizePgCastOverPgConst(const TExprNode::TPtr& input, TExprCon
75
75
return input;
76
76
}
77
77
auto val = input->Child (0 );
78
- if (!val->IsCallable (" PgConst" )) {
78
+ if (!val->IsCallable (" PgConst" )) {
79
79
return input;
80
80
}
81
81
@@ -85,7 +85,7 @@ TExprNode::TPtr OptimizePgCastOverPgConst(const TExprNode::TPtr& input, TExprCon
85
85
YQL_CLOG (DEBUG, Core) << " Remove PgCast unknown->text over PgConst" ;
86
86
return ctx.ChangeChild (*val, 1 , castToType);
87
87
}
88
-
88
+
89
89
return input;
90
90
}
91
91
@@ -6282,17 +6282,38 @@ void RegisterCoSimpleCallables1(TCallableOptimizerMap& map) {
6282
6282
return node;
6283
6283
};
6284
6284
6285
- map[" ShuffleByKeys " ] = map[ " PartitionsByKeys" ] = [](const TExprNode::TPtr& node, TExprContext& ctx, TOptimizeContext& optCtx) {
6285
+ map[" PartitionsByKeys" ] = [](const TExprNode::TPtr& node, TExprContext& ctx, TOptimizeContext& optCtx) {
6286
6286
if (IsEmpty (node->Head (), *optCtx.Types )) {
6287
6287
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 ();
6289
- if (node->IsCallable (" ShuffleByKeys" )) {
6290
- auto lambdaType = node->Tail ().GetTypeAnn ();
6291
- if (lambdaType->GetKind () == ETypeAnnotationKind::Optional) {
6292
- lambdaResult = ctx.NewCallable (lambdaResult->Pos (), " ToList" , { lambdaResult });
6293
- } else if (lambdaType->GetKind () == ETypeAnnotationKind::Stream) {
6294
- lambdaResult = ctx.NewCallable (lambdaResult->Pos (), " ForwardList" , { lambdaResult });
6295
- }
6288
+
6289
+ TExprNode::TPtr sequence = KeepConstraints (node->HeadPtr (), node->Tail ().Head ().Head (), ctx);
6290
+ auto lambdaResult = ctx.Builder (node->Pos ()).Apply (node->Tail ()).With (0 , sequence).Seal ().Build ();
6291
+ return lambdaResult;
6292
+ }
6293
+ return node;
6294
+ };
6295
+
6296
+ map[" ShuffleByKeys" ] = [](const TExprNode::TPtr& node, TExprContext& ctx, TOptimizeContext& optCtx) {
6297
+ if (IsEmpty (node->Head (), *optCtx.Types )) {
6298
+ YQL_CLOG (DEBUG, Core) << node->Content () << " over empty input." ;
6299
+
6300
+ auto & lambdaArg = node->Tail ().Head ().Head ();
6301
+
6302
+ TExprNode::TPtr sequence = node->HeadPtr ();
6303
+ auto * sequenceType = sequence->GetTypeAnn ();
6304
+ YQL_ENSURE (sequenceType, " No argument type for sequence in " << node->Content ());
6305
+
6306
+ if (sequenceType->GetKind () != ETypeAnnotationKind::Stream) {
6307
+ sequence = ctx.NewCallable (sequence->Pos (), " ToStream" , { sequence });
6308
+ }
6309
+ sequence = KeepConstraints (sequence, lambdaArg, ctx);
6310
+
6311
+ auto lambdaResult = ctx.Builder (node->Pos ()).Apply (node->Tail ()).With (0 , sequence).Seal ().Build ();
6312
+ auto lambdaType = node->Tail ().GetTypeAnn ();
6313
+ if (lambdaType->GetKind () == ETypeAnnotationKind::Optional) {
6314
+ lambdaResult = ctx.NewCallable (lambdaResult->Pos (), " ToList" , { lambdaResult });
6315
+ } else if (lambdaType->GetKind () == ETypeAnnotationKind::Stream || lambdaType->GetKind () == ETypeAnnotationKind::Flow) {
6316
+ lambdaResult = ctx.NewCallable (lambdaResult->Pos (), " ForwardList" , { lambdaResult });
6296
6317
}
6297
6318
return lambdaResult;
6298
6319
}
0 commit comments