@@ -386,6 +386,21 @@ NYT::TNode DataValueToNode(const NKikimr::NUdf::TUnboxedValuePod& value, NKikimr
386
386
NUdf::TUnboxedValue json = ValueToString (EDataSlot::JsonDocument, value);
387
387
return NYT::TNode (ToString (TStringBuf (value.AsStringRef ())));
388
388
}
389
+ case NUdf::TDataType<NUdf::TTzDate32>::Id: {
390
+ TStringStream out;
391
+ out << value.Get <i32>() << " ," << NKikimr::NMiniKQL::GetTimezoneIANAName (value.GetTimezoneId ());
392
+ return NYT::TNode (out.Str ());
393
+ }
394
+ case NUdf::TDataType<NUdf::TTzDatetime64>::Id: {
395
+ TStringStream out;
396
+ out << value.Get <i64>() << " ," << NKikimr::NMiniKQL::GetTimezoneIANAName (value.GetTimezoneId ());
397
+ return NYT::TNode (out.Str ());
398
+ }
399
+ case NUdf::TDataType<NUdf::TTzTimestamp64>::Id: {
400
+ TStringStream out;
401
+ out << value.Get <i64>() << " ," << NKikimr::NMiniKQL::GetTimezoneIANAName (value.GetTimezoneId ());
402
+ return NYT::TNode (out.Str ());
403
+ }
389
404
}
390
405
YQL_ENSURE (false , " Unsupported type: " << static_cast <int >(dataType->GetSchemeType ()));
391
406
}
@@ -1084,6 +1099,57 @@ NUdf::TUnboxedValue ReadYsonValue(TType* type, ui64 nativeYtTypeFlags,
1084
1099
return ValueFromString (EDataSlot::JsonDocument, json.AsStringRef ());
1085
1100
}
1086
1101
1102
+ case NUdf::TDataType<NUdf::TTzDate32>::Id: {
1103
+ auto nextString = ReadNextString (cmd, buf);
1104
+ NUdf::TUnboxedValuePod data;
1105
+ if (isTableFormat) {
1106
+ i32 value;
1107
+ ui16 tzId = 0 ;
1108
+ YQL_ENSURE (DeserializeTzDate32 (nextString, value, tzId));
1109
+ data = NUdf::TUnboxedValuePod (value);
1110
+ data.SetTimezoneId (tzId);
1111
+ } else {
1112
+ data = ValueFromString (NUdf::EDataSlot::TzDate32, nextString);
1113
+ YQL_ENSURE (data, " incorrect tz date format for value " << nextString);
1114
+ }
1115
+
1116
+ return data;
1117
+ }
1118
+
1119
+ case NUdf::TDataType<NUdf::TTzDatetime64>::Id: {
1120
+ auto nextString = ReadNextString (cmd, buf);
1121
+ NUdf::TUnboxedValuePod data;
1122
+ if (isTableFormat) {
1123
+ i64 value;
1124
+ ui16 tzId = 0 ;
1125
+ YQL_ENSURE (DeserializeTzDatetime64 (nextString, value, tzId));
1126
+ data = NUdf::TUnboxedValuePod (value);
1127
+ data.SetTimezoneId (tzId);
1128
+ } else {
1129
+ data = ValueFromString (NUdf::EDataSlot::TzDatetime64, nextString);
1130
+ YQL_ENSURE (data, " incorrect tz datetime format for value " << nextString);
1131
+ }
1132
+
1133
+ return data;
1134
+ }
1135
+
1136
+ case NUdf::TDataType<NUdf::TTzTimestamp64>::Id: {
1137
+ auto nextString = ReadNextString (cmd, buf);
1138
+ NUdf::TUnboxedValuePod data;
1139
+ if (isTableFormat) {
1140
+ i64 value;
1141
+ ui16 tzId = 0 ;
1142
+ YQL_ENSURE (DeserializeTzTimestamp64 (nextString, value, tzId));
1143
+ data = NUdf::TUnboxedValuePod (value);
1144
+ data.SetTimezoneId (tzId);
1145
+ } else {
1146
+ data = ValueFromString (NUdf::EDataSlot::TzTimestamp64, nextString);
1147
+ YQL_ENSURE (data, " incorrect tz timestamp format for value " << nextString);
1148
+ }
1149
+
1150
+ return data;
1151
+ }
1152
+
1087
1153
default :
1088
1154
YQL_ENSURE (false , " Unsupported data type: " << schemeType);
1089
1155
}
@@ -2198,6 +2264,39 @@ void WriteYsonValueInTableFormat(TOutputBuf& buf, TType* type, ui64 nativeYtType
2198
2264
break ;
2199
2265
}
2200
2266
2267
+ case NUdf::TDataType<NUdf::TTzDate32>::Id: {
2268
+ ui16 tzId = SwapBytes (value.GetTimezoneId ());
2269
+ ui32 data = 0x80 ^ SwapBytes ((ui32)value.Get <i32>());
2270
+ ui32 size = sizeof (data) + sizeof (tzId);
2271
+ buf.Write (StringMarker);
2272
+ buf.WriteVarI32 (size);
2273
+ buf.WriteMany ((const char *)&data, sizeof (data));
2274
+ buf.WriteMany ((const char *)&tzId, sizeof (tzId));
2275
+ break ;
2276
+ }
2277
+
2278
+ case NUdf::TDataType<NUdf::TTzDatetime64>::Id: {
2279
+ ui16 tzId = SwapBytes (value.GetTimezoneId ());
2280
+ ui64 data = 0x80 ^ SwapBytes ((ui64)value.Get <i64>());
2281
+ ui32 size = sizeof (data) + sizeof (tzId);
2282
+ buf.Write (StringMarker);
2283
+ buf.WriteVarI32 (size);
2284
+ buf.WriteMany ((const char *)&data, sizeof (data));
2285
+ buf.WriteMany ((const char *)&tzId, sizeof (tzId));
2286
+ break ;
2287
+ }
2288
+
2289
+ case NUdf::TDataType<NUdf::TTzTimestamp64>::Id: {
2290
+ ui16 tzId = SwapBytes (value.GetTimezoneId ());
2291
+ ui64 data = 0x80 ^ SwapBytes ((ui64)value.Get <i64>());
2292
+ ui32 size = sizeof (data) + sizeof (tzId);
2293
+ buf.Write (StringMarker);
2294
+ buf.WriteVarI32 (size);
2295
+ buf.WriteMany ((const char *)&data, sizeof (data));
2296
+ buf.WriteMany ((const char *)&tzId, sizeof (tzId));
2297
+ break ;
2298
+ }
2299
+
2201
2300
case NUdf::TDataType<NUdf::TJsonDocument>::Id: {
2202
2301
buf.Write (StringMarker);
2203
2302
NUdf::TUnboxedValue json = ValueToString (EDataSlot::JsonDocument, value);
@@ -2480,6 +2579,36 @@ void WriteSkiffData(NKikimr::NMiniKQL::TType* type, ui64 nativeYtTypeFlags, cons
2480
2579
break ;
2481
2580
}
2482
2581
2582
+ case NUdf::TDataType<NUdf::TTzDate32>::Id: {
2583
+ ui16 tzId = SwapBytes (value.GetTimezoneId ());
2584
+ ui32 data = 0x80 ^ SwapBytes ((ui32)value.Get <i32>());
2585
+ ui32 size = sizeof (data) + sizeof (tzId);
2586
+ buf.WriteMany ((const char *)&size, sizeof (size));
2587
+ buf.WriteMany ((const char *)&data, sizeof (data));
2588
+ buf.WriteMany ((const char *)&tzId, sizeof (tzId));
2589
+ break ;
2590
+ }
2591
+
2592
+ case NUdf::TDataType<NUdf::TTzDatetime64>::Id: {
2593
+ ui16 tzId = SwapBytes (value.GetTimezoneId ());
2594
+ ui64 data = 0x80 ^ SwapBytes ((ui64)value.Get <i64>());
2595
+ ui32 size = sizeof (data) + sizeof (tzId);
2596
+ buf.WriteMany ((const char *)&size, sizeof (size));
2597
+ buf.WriteMany ((const char *)&data, sizeof (data));
2598
+ buf.WriteMany ((const char *)&tzId, sizeof (tzId));
2599
+ break ;
2600
+ }
2601
+
2602
+ case NUdf::TDataType<NUdf::TTzTimestamp64>::Id: {
2603
+ ui16 tzId = SwapBytes (value.GetTimezoneId ());
2604
+ ui64 data = 0x80 ^ SwapBytes ((ui64)value.Get <i64>());
2605
+ ui32 size = sizeof (data) + sizeof (tzId);
2606
+ buf.WriteMany ((const char *)&size, sizeof (size));
2607
+ buf.WriteMany ((const char *)&data, sizeof (data));
2608
+ buf.WriteMany ((const char *)&tzId, sizeof (tzId));
2609
+ break ;
2610
+ }
2611
+
2483
2612
case NUdf::TDataType<NUdf::TJsonDocument>::Id: {
2484
2613
NUdf::TUnboxedValue json = ValueToString (EDataSlot::JsonDocument, value);
2485
2614
auto str = json.AsStringRef ();
0 commit comments