diff options
author | Andrey Neporada <[email protected]> | 2022-06-23 13:23:59 +0300 |
---|---|---|
committer | Andrey Neporada <[email protected]> | 2022-06-23 13:23:59 +0300 |
commit | 63a7206d158d3b276bb95b79ea2db092d408d1c0 (patch) | |
tree | f4077156ee5b1453c84c6e91e55659cedd512e2e | |
parent | aecdb821de0afc13c27eee8efaa50521021294c3 (diff) |
[YQL-14955] Fix Yield handling in PreserveStream
ref:64282b2038986a328ad3ea120901f71145cda088
-rw-r--r-- | ydb/library/yql/minikql/comp_nodes/mkql_queue.cpp | 6 |
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 }; |