diff options
author | YDBot <[email protected]> | 2025-10-23 18:38:13 +0000 |
---|---|---|
committer | YDBot <[email protected]> | 2025-10-23 18:38:13 +0000 |
commit | 564cf7cb2255a107b4f44c18b2a1844041f20b4d (patch) | |
tree | 6a4a60e8bde612dcc3ac7fd93fffbd36351d4e35 /yql/essentials/minikql/computation | |
parent | 89a17b25091c24744b7ebd0650b5b810457b1145 (diff) | |
parent | a703d86902fd02bd8e373d959b2498c034657449 (diff) |
Diffstat (limited to 'yql/essentials/minikql/computation')
-rw-r--r-- | yql/essentials/minikql/computation/mkql_computation_node_holders.cpp | 48 |
1 files changed, 32 insertions, 16 deletions
diff --git a/yql/essentials/minikql/computation/mkql_computation_node_holders.cpp b/yql/essentials/minikql/computation/mkql_computation_node_holders.cpp index bd32a8035d7..d78e6d4702c 100644 --- a/yql/essentials/minikql/computation/mkql_computation_node_holders.cpp +++ b/yql/essentials/minikql/computation/mkql_computation_node_holders.cpp @@ -9,8 +9,8 @@ #include <yql/essentials/minikql/mkql_alloc.h> #include <yql/essentials/minikql/mkql_node_cast.h> #include <yql/essentials/minikql/mkql_string_util.h> - #include <yql/essentials/public/udf/udf_value.h> +#include <yql/essentials/utils/unaligned_read.h> #include <library/cpp/containers/stack_vector/stack_vec.h> #include <util/generic/singleton.h> @@ -2123,18 +2123,34 @@ public: return EState::AtNull == State_ || Iterator_.Ok(); } + void FromUnpack(NUdf::TUnboxedValue& out) { + if (EState::AtNull == State_) { + out = Parent_->PayloadPacker_.Unpack(GetSmallValue(*Parent_->NullPayload_), Parent_->Ctx_->HolderFactory); + } else { + const auto& iteratorValue = Iterator_.Get(); + const auto& aligned = NYql::TypedReadUnaligned(&iteratorValue.second); + out = Parent_->PayloadPacker_.Unpack(GetSmallValue(aligned), Parent_->Ctx_->HolderFactory); + } + } + + void FromIterator(NUdf::TUnboxedValue& out) { + if (EState::AtNull == State_) { + out = NUdf::TUnboxedValue(); + } else { + out = NUdf::TUnboxedValue(NUdf::TUnboxedValuePod(Iterator_.Get().first)); + } + } + bool Next(NUdf::TUnboxedValue& key) final { if (!Skip()) { return false; } - key = NoSwap - ? (EState::AtNull == State_ - ? NUdf::TUnboxedValue() - : NUdf::TUnboxedValue(NUdf::TUnboxedValuePod(Iterator_.Get().first))) - : (EState::AtNull == State_ - ? Parent_->PayloadPacker_.Unpack(GetSmallValue(*Parent_->NullPayload_), Parent_->Ctx_->HolderFactory) - : Parent_->PayloadPacker_.Unpack(GetSmallValue(Iterator_.Get().second), Parent_->Ctx_->HolderFactory)); + if constexpr (NoSwap) { + FromIterator(key); + } else { + FromUnpack(key); + } return true; } @@ -2142,13 +2158,11 @@ public: if (!Next(key)) { return false; } - payload = NoSwap - ? (EState::AtNull == State_ - ? Parent_->PayloadPacker_.Unpack(GetSmallValue(*Parent_->NullPayload_), Parent_->Ctx_->HolderFactory) - : Parent_->PayloadPacker_.Unpack(GetSmallValue(Iterator_.Get().second), Parent_->Ctx_->HolderFactory)) - : (EState::AtNull == State_ - ? NUdf::TUnboxedValue() - : NUdf::TUnboxedValue(NUdf::TUnboxedValuePod(Iterator_.Get().first))); + if constexpr (NoSwap) { + FromUnpack(payload); + } else { + FromIterator(payload); + } return true; } @@ -2191,7 +2205,9 @@ private: if (!it.Ok()) { return NUdf::TUnboxedValuePod(); } - return PayloadPacker_.Unpack(GetSmallValue(it.Get().second), Ctx_->HolderFactory).Release().MakeOptional(); + const auto& iteratorValue = it.Get(); + const auto& aligned = NYql::TypedReadUnaligned(&iteratorValue.second); + return PayloadPacker_.Unpack(GetSmallValue(aligned), Ctx_->HolderFactory).Release().MakeOptional(); } NUdf::TUnboxedValue GetKeysIterator() const final { |