Skip to content

Commit 9547d61

Browse files
nepalmaximyurchuk
authored andcommitted
Merge PR #10944: Fix ExtractMembers constraints for sorted tuple
commit_hash:3cbeb92e6a5008fdda11519d1b9fa5381af3a61f
1 parent 7d04dad commit 9547d61

File tree

2 files changed

+27
-5
lines changed

2 files changed

+27
-5
lines changed

yql/essentials/core/ut/yql_expr_constraint_ut.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,28 @@ Y_UNIT_TEST_SUITE(TYqlExprConstraints) {
441441
CheckConstraint<TSortedConstraintNode>(exprRoot, "LazyList", "Sorted(x[asc];z[asc])");
442442
}
443443

444+
Y_UNIT_TEST(ExtractSortedTuple) {
445+
const auto s = R"((
446+
(let mr_sink (DataSink 'yt (quote plato)))
447+
(let list (AsList
448+
(AsStruct '('a (String '4)) '('b (String 'c)) '('c (String 'x)))
449+
(AsStruct '('a (String '1)) '('b (String 'd)) '('c (String 'y)))
450+
(AsStruct '('a (String '3)) '('b (String 'b)) '('c (String 'z)))
451+
))
452+
(let sorted (Sort list '((Bool 'True) (Bool 'True)) (lambda '(item) '((Member item 'a) (Member item 'b)))))
453+
(let map (OrderedFlatMap sorted (lambda '(item) (OptionalIf (== (Member item 'a) (String '1)) (AddMember item 'x '((Member item 'a) (Member item 'b)))))))
454+
(let extract (ExtractMembers map '('x)))
455+
(let world (Write! world mr_sink (Key '('table (String 'Output))) extract '('('mode 'renew))))
456+
(let world (Commit! world mr_sink))
457+
(return world)
458+
))";
459+
460+
TExprContext exprCtx;
461+
const auto exprRoot = ParseAndAnnotate(s, exprCtx);
462+
CheckConstraint<TSortedConstraintNode>(exprRoot, "OrderedFlatMap", "Sorted(a,x/0[asc];b,x/1[asc])");
463+
CheckConstraint<TSortedConstraintNode>(exprRoot, "ExtractMembers", "Sorted(x[asc])");
464+
}
465+
444466
Y_UNIT_TEST(TopSort) {
445467
const auto s = R"((
446468
(let mr_sink (DataSink 'yt (quote plato)))

yql/essentials/core/yql_expr_constraint.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -688,10 +688,10 @@ class TCallableConstraintTransformer : public TCallableTransformerBase<TCallable
688688
TStatus ExtractMembersWrap(const TExprNode::TPtr& input, TExprNode::TPtr& output, TExprContext& ctx) const {
689689
const auto outItemType = GetSeqItemType(*input->GetTypeAnn()).Cast<TStructExprType>();
690690
const auto filter = [outItemType](const TPartOfConstraintBase::TPathType& path) { return !path.empty() && outItemType->FindItem(path.front()); };
691-
FilterFromHead<TSortedConstraintNode>(input, filter, ctx);
692-
FilterFromHead<TChoppedConstraintNode>(input, filter, ctx);
693-
FilterFromHead<TUniqueConstraintNode>(input, filter, ctx);
694-
FilterFromHead<TDistinctConstraintNode>(input, filter, ctx);
691+
FilterFromHead<TSortedConstraintNode, true>(input, filter, ctx);
692+
FilterFromHead<TChoppedConstraintNode, true>(input, filter, ctx);
693+
FilterFromHead<TUniqueConstraintNode, true>(input, filter, ctx);
694+
FilterFromHead<TDistinctConstraintNode, true>(input, filter, ctx);
695695
FilterFromHead<TPartOfSortedConstraintNode>(input, filter, ctx);
696696
FilterFromHead<TPartOfChoppedConstraintNode>(input, filter, ctx);
697697
FilterFromHead<TPartOfUniqueConstraintNode>(input, filter, ctx);
@@ -2943,7 +2943,7 @@ class TCallableConstraintTransformer : public TCallableTransformerBase<TCallable
29432943
input->AddConstraint(ctx.MakeConstraint<TUniqueConstraintNode>(columns));
29442944
input->AddConstraint(ctx.MakeConstraint<TDistinctConstraintNode>(columns));
29452945
}
2946-
2946+
29472947
return TStatus::Ok;
29482948
}
29492949

0 commit comments

Comments
 (0)