summaryrefslogtreecommitdiffstats
path: root/yql/essentials/minikql/computation
diff options
context:
space:
mode:
authorYDBot <[email protected]>2025-10-23 18:38:13 +0000
committerYDBot <[email protected]>2025-10-23 18:38:13 +0000
commit564cf7cb2255a107b4f44c18b2a1844041f20b4d (patch)
tree6a4a60e8bde612dcc3ac7fd93fffbd36351d4e35 /yql/essentials/minikql/computation
parent89a17b25091c24744b7ebd0650b5b810457b1145 (diff)
parenta703d86902fd02bd8e373d959b2498c034657449 (diff)
Merge pull request #27203 from ydb-platform/merge-rightlib-251021-0051HEADmain
Diffstat (limited to 'yql/essentials/minikql/computation')
-rw-r--r--yql/essentials/minikql/computation/mkql_computation_node_holders.cpp48
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 {