summaryrefslogtreecommitdiffstats
path: root/yql/essentials/minikql/comp_nodes/mkql_frombytes.cpp
diff options
context:
space:
mode:
authorvvvv <[email protected]>2025-10-09 12:25:18 +0300
committervvvv <[email protected]>2025-10-09 12:57:17 +0300
commitcb77d014972b2cdb27d2e6d979fc3a2772b27ad4 (patch)
tree7f3bcd8ce71c6bd0f3ccc11e31b9f665475b819e /yql/essentials/minikql/comp_nodes/mkql_frombytes.cpp
parentd58a8990d353b051c27e1069141117fdfde64358 (diff)
YQL-20086 minikql
commit_hash:e96f7390db5fcbe7e9f64f898141a263ad522daa
Diffstat (limited to 'yql/essentials/minikql/comp_nodes/mkql_frombytes.cpp')
-rw-r--r--yql/essentials/minikql/comp_nodes/mkql_frombytes.cpp223
1 files changed, 112 insertions, 111 deletions
diff --git a/yql/essentials/minikql/comp_nodes/mkql_frombytes.cpp b/yql/essentials/minikql/comp_nodes/mkql_frombytes.cpp
index 7e905056402..aead7098e35 100644
--- a/yql/essentials/minikql/comp_nodes/mkql_frombytes.cpp
+++ b/yql/essentials/minikql/comp_nodes/mkql_frombytes.cpp
@@ -19,8 +19,9 @@ namespace {
using NYql::SwapBytes;
template <bool IsOptional>
-class TFromBytesWrapper : public TMutableComputationNode<TFromBytesWrapper<IsOptional>> {
+class TFromBytesWrapper: public TMutableComputationNode<TFromBytesWrapper<IsOptional>> {
typedef TMutableComputationNode<TFromBytesWrapper<IsOptional>> TBaseComputation;
+
public:
TFromBytesWrapper(TComputationMutables& mutables, IComputationNode* data, NUdf::TDataTypeId schemeType, ui32 param1, ui32 param2)
: TBaseComputation(mutables)
@@ -47,150 +48,150 @@ public:
}
switch (SchemeType) {
- case NUdf::EDataSlot::TzDate: {
- const auto& ref = data.AsStringRef();
- if (ref.Size() != 4) {
- return NUdf::TUnboxedValuePod();
- }
-
- auto tzId = SwapBytes(ReadUnaligned<ui16>(ref.Data() + ref.Size() - sizeof(ui16)));
- auto value = SwapBytes(data.Get<ui16>());
- if (value < NUdf::MAX_DATE && tzId < NTi::GetTimezones().size()) {
- auto ret = NUdf::TUnboxedValuePod(value);
- ret.SetTimezoneId(tzId);
- return ret;
- }
+ case NUdf::EDataSlot::TzDate: {
+ const auto& ref = data.AsStringRef();
+ if (ref.Size() != 4) {
+ return NUdf::TUnboxedValuePod();
+ }
+
+ auto tzId = SwapBytes(ReadUnaligned<ui16>(ref.Data() + ref.Size() - sizeof(ui16)));
+ auto value = SwapBytes(data.Get<ui16>());
+ if (value < NUdf::MAX_DATE && tzId < NTi::GetTimezones().size()) {
+ auto ret = NUdf::TUnboxedValuePod(value);
+ ret.SetTimezoneId(tzId);
+ return ret;
+ }
- return NUdf::TUnboxedValuePod();
- }
-
- case NUdf::EDataSlot::TzDatetime: {
- const auto& ref = data.AsStringRef();
- if (ref.Size() != 6) {
return NUdf::TUnboxedValuePod();
}
- auto tzId = SwapBytes(ReadUnaligned<ui16>(ref.Data() + ref.Size() - sizeof(ui16)));
- auto value = SwapBytes(data.Get<ui32>());
- if (value < NUdf::MAX_DATETIME && tzId < NTi::GetTimezones().size()) {
- auto ret = NUdf::TUnboxedValuePod(value);
- ret.SetTimezoneId(tzId);
- return ret;
- }
+ case NUdf::EDataSlot::TzDatetime: {
+ const auto& ref = data.AsStringRef();
+ if (ref.Size() != 6) {
+ return NUdf::TUnboxedValuePod();
+ }
- return NUdf::TUnboxedValuePod();
- }
+ auto tzId = SwapBytes(ReadUnaligned<ui16>(ref.Data() + ref.Size() - sizeof(ui16)));
+ auto value = SwapBytes(data.Get<ui32>());
+ if (value < NUdf::MAX_DATETIME && tzId < NTi::GetTimezones().size()) {
+ auto ret = NUdf::TUnboxedValuePod(value);
+ ret.SetTimezoneId(tzId);
+ return ret;
+ }
- case NUdf::EDataSlot::TzTimestamp: {
- const auto& ref = data.AsStringRef();
- if (ref.Size() != 10) {
return NUdf::TUnboxedValuePod();
}
- auto tzId = SwapBytes(ReadUnaligned<ui16>(ref.Data() + ref.Size() - sizeof(ui16)));
- auto value = SwapBytes(data.Get<ui64>());
- if (value < NUdf::MAX_TIMESTAMP && tzId < NTi::GetTimezones().size()) {
- auto ret = NUdf::TUnboxedValuePod(value);
- ret.SetTimezoneId(tzId);
- return ret;
- }
+ case NUdf::EDataSlot::TzTimestamp: {
+ const auto& ref = data.AsStringRef();
+ if (ref.Size() != 10) {
+ return NUdf::TUnboxedValuePod();
+ }
- return NUdf::TUnboxedValuePod();
- }
+ auto tzId = SwapBytes(ReadUnaligned<ui16>(ref.Data() + ref.Size() - sizeof(ui16)));
+ auto value = SwapBytes(data.Get<ui64>());
+ if (value < NUdf::MAX_TIMESTAMP && tzId < NTi::GetTimezones().size()) {
+ auto ret = NUdf::TUnboxedValuePod(value);
+ ret.SetTimezoneId(tzId);
+ return ret;
+ }
- case NUdf::EDataSlot::TzDate32: {
- const auto& ref = data.AsStringRef();
- if (ref.Size() != 6) {
return NUdf::TUnboxedValuePod();
}
- auto tzId = SwapBytes(ReadUnaligned<ui16>(ref.Data() + ref.Size() - sizeof(ui16)));
- auto value = SwapBytes(data.Get<i32>());
- if (value >= NUdf::MIN_DATE32 && value <= NUdf::MAX_DATE32 && tzId < NTi::GetTimezones().size()) {
- auto ret = NUdf::TUnboxedValuePod(value);
- ret.SetTimezoneId(tzId);
- return ret;
- }
+ case NUdf::EDataSlot::TzDate32: {
+ const auto& ref = data.AsStringRef();
+ if (ref.Size() != 6) {
+ return NUdf::TUnboxedValuePod();
+ }
- return NUdf::TUnboxedValuePod();
- }
+ auto tzId = SwapBytes(ReadUnaligned<ui16>(ref.Data() + ref.Size() - sizeof(ui16)));
+ auto value = SwapBytes(data.Get<i32>());
+ if (value >= NUdf::MIN_DATE32 && value <= NUdf::MAX_DATE32 && tzId < NTi::GetTimezones().size()) {
+ auto ret = NUdf::TUnboxedValuePod(value);
+ ret.SetTimezoneId(tzId);
+ return ret;
+ }
- case NUdf::EDataSlot::TzDatetime64: {
- const auto& ref = data.AsStringRef();
- if (ref.Size() != 10) {
return NUdf::TUnboxedValuePod();
}
- auto tzId = SwapBytes(ReadUnaligned<ui16>(ref.Data() + ref.Size() - sizeof(ui16)));
- auto value = SwapBytes(data.Get<i64>());
- if (value >= NUdf::MIN_DATETIME64 && value <= NUdf::MAX_DATETIME64 && tzId < NTi::GetTimezones().size()) {
- auto ret = NUdf::TUnboxedValuePod(value);
- ret.SetTimezoneId(tzId);
- return ret;
- }
+ case NUdf::EDataSlot::TzDatetime64: {
+ const auto& ref = data.AsStringRef();
+ if (ref.Size() != 10) {
+ return NUdf::TUnboxedValuePod();
+ }
- return NUdf::TUnboxedValuePod();
- }
+ auto tzId = SwapBytes(ReadUnaligned<ui16>(ref.Data() + ref.Size() - sizeof(ui16)));
+ auto value = SwapBytes(data.Get<i64>());
+ if (value >= NUdf::MIN_DATETIME64 && value <= NUdf::MAX_DATETIME64 && tzId < NTi::GetTimezones().size()) {
+ auto ret = NUdf::TUnboxedValuePod(value);
+ ret.SetTimezoneId(tzId);
+ return ret;
+ }
- case NUdf::EDataSlot::TzTimestamp64: {
- const auto& ref = data.AsStringRef();
- if (ref.Size() != 10) {
return NUdf::TUnboxedValuePod();
}
- auto tzId = SwapBytes(ReadUnaligned<ui16>(ref.Data() + ref.Size() - sizeof(ui16)));
- auto value = SwapBytes(data.Get<i64>());
- if (value >= NUdf::MIN_TIMESTAMP64 && value <= NUdf::MAX_TIMESTAMP64 && tzId < NTi::GetTimezones().size()) {
- auto ret = NUdf::TUnboxedValuePod(value);
- ret.SetTimezoneId(tzId);
- return ret;
- }
+ case NUdf::EDataSlot::TzTimestamp64: {
+ const auto& ref = data.AsStringRef();
+ if (ref.Size() != 10) {
+ return NUdf::TUnboxedValuePod();
+ }
- return NUdf::TUnboxedValuePod();
- }
+ auto tzId = SwapBytes(ReadUnaligned<ui16>(ref.Data() + ref.Size() - sizeof(ui16)));
+ auto value = SwapBytes(data.Get<i64>());
+ if (value >= NUdf::MIN_TIMESTAMP64 && value <= NUdf::MAX_TIMESTAMP64 && tzId < NTi::GetTimezones().size()) {
+ auto ret = NUdf::TUnboxedValuePod(value);
+ ret.SetTimezoneId(tzId);
+ return ret;
+ }
- case NUdf::EDataSlot::JsonDocument: {
- if (!NBinaryJson::IsValidBinaryJson(TStringBuf(data.AsStringRef()))) {
return NUdf::TUnboxedValuePod();
}
- return data.Release();
- }
- case NUdf::EDataSlot::Decimal: {
- const auto& ref = data.AsStringRef();
- if (ref.Size() != 15) {
- return NUdf::TUnboxedValuePod();
+ case NUdf::EDataSlot::JsonDocument: {
+ if (!NBinaryJson::IsValidBinaryJson(TStringBuf(data.AsStringRef()))) {
+ return NUdf::TUnboxedValuePod();
+ }
+ return data.Release();
}
- NYql::NDecimal::TInt128 v = 0;
- ui8* p = (ui8*)&v;
- memcpy(p, ref.Data(), 15);
- p[0xF] = (p[0xE] & 0x80) ? 0xFF : 0x00;
- if (NYql::NDecimal::IsError(v)) {
- return NUdf::TUnboxedValuePod();
- }
+ case NUdf::EDataSlot::Decimal: {
+ const auto& ref = data.AsStringRef();
+ if (ref.Size() != 15) {
+ return NUdf::TUnboxedValuePod();
+ }
- if (!NYql::NDecimal::IsNormal(v)) {
- return NUdf::TUnboxedValuePod(v);
- }
+ NYql::NDecimal::TInt128 v = 0;
+ ui8* p = (ui8*)&v;
+ memcpy(p, ref.Data(), 15);
+ p[0xF] = (p[0xE] & 0x80) ? 0xFF : 0x00;
+ if (NYql::NDecimal::IsError(v)) {
+ return NUdf::TUnboxedValuePod();
+ }
- if (v >= DecimalBound) {
- return NUdf::TUnboxedValuePod(NYql::NDecimal::Inf());
- }
+ if (!NYql::NDecimal::IsNormal(v)) {
+ return NUdf::TUnboxedValuePod(v);
+ }
- if (v <= NegDecimalBound) {
- return NUdf::TUnboxedValuePod(-NYql::NDecimal::Inf());
- }
+ if (v >= DecimalBound) {
+ return NUdf::TUnboxedValuePod(NYql::NDecimal::Inf());
+ }
- return NUdf::TUnboxedValuePod(v);
- }
+ if (v <= NegDecimalBound) {
+ return NUdf::TUnboxedValuePod(-NYql::NDecimal::Inf());
+ }
- default:
- if (IsValidValue(SchemeType, data)) {
- return data.Release();
- } else {
- return NUdf::TUnboxedValuePod();
+ return NUdf::TUnboxedValuePod(v);
}
+
+ default:
+ if (IsValidValue(SchemeType, data)) {
+ return data.Release();
+ } else {
+ return NUdf::TUnboxedValuePod();
+ }
}
}
@@ -206,7 +207,7 @@ private:
NYql::NDecimal::TInt128 DecimalBound, NegDecimalBound;
};
-}
+} // namespace
IComputationNode* WrapFromBytes(TCallable& callable, const TComputationNodeFactoryContext& ctx) {
MKQL_ENSURE(callable.GetInputsCount() == 2 || callable.GetInputsCount() == 4, "Expected 2 or 4 args");
@@ -237,5 +238,5 @@ IComputationNode* WrapFromBytes(TCallable& callable, const TComputationNodeFacto
}
}
-}
-}
+} // namespace NMiniKQL
+} // namespace NKikimr