summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrey Neporada <[email protected]>2022-06-23 13:23:59 +0300
committerAndrey Neporada <[email protected]>2022-06-23 13:23:59 +0300
commit63a7206d158d3b276bb95b79ea2db092d408d1c0 (patch)
treef4077156ee5b1453c84c6e91e55659cedd512e2e
parentaecdb821de0afc13c27eee8efaa50521021294c3 (diff)
[YQL-14955] Fix Yield handling in PreserveStream
ref:64282b2038986a328ad3ea120901f71145cda088
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_queue.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_queue.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_queue.cpp
index 082dea0b660..d398280c8a8 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_queue.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_queue.cpp
@@ -323,14 +323,17 @@ private:
case EPreserveState::Done:
return NUdf::EFetchStatus::Finish;
case EPreserveState::Feed:
+ case EPreserveState::Yield:
break;
default:
+ Y_VERIFY(Outpace > 0);
Buffer.PopFront();
--Outpace;
}
for (NUdf::TUnboxedValue item; State != EPreserveState::Emit && Outpace <= OutpaceGoal;) {
switch (Stream.Fetch(item)) {
case NUdf::EFetchStatus::Yield:
+ State = EPreserveState::Yield;
return NUdf::EFetchStatus::Yield;
case NUdf::EFetchStatus::Finish:
State = EPreserveState::Emit;
@@ -343,6 +346,8 @@ private:
++Outpace;
if (Outpace > OutpaceGoal) {
State = EPreserveState::GoOn;
+ } else {
+ State = EPreserveState::Feed;
}
}
}
@@ -358,6 +363,7 @@ private:
enum class EPreserveState {
Feed,
GoOn,
+ Yield,
Emit,
Done
};