@@ -593,20 +593,14 @@ struct TGetTimeComponent {
593
593
594
594
namespace {
595
595
596
- // FIXME: The default value for TResourceName allows to omit
597
- // explicit specialization in functions that still doesn't support
598
- // big datetime types. Should be removed in future.
599
- template <const char * TResourceName = TMResourceName, typename TValue,
596
+ template <const char * TResourceName, typename TValue,
600
597
typename TStorage = std::conditional_t <TResourceName == TMResourceName,
601
598
TTMStorage, TTM64Storage>>
602
599
const TStorage& Reference (const TValue& value) {
603
600
return *reinterpret_cast <const TStorage*>(value.GetRawPtr ());
604
601
}
605
602
606
- // FIXME: The default value for TResourceName allows to omit
607
- // explicit specialization in functions that still doesn't support
608
- // big datetime types. Should be removed in future.
609
- template <const char * TResourceName = TMResourceName, typename TValue,
603
+ template <const char * TResourceName, typename TValue,
610
604
typename TStorage = std::conditional_t <TResourceName == TMResourceName,
611
605
TTMStorage, TTM64Storage>>
612
606
TStorage& Reference (TValue& value) {
@@ -638,20 +632,15 @@ TUnboxedValuePod DoAddYears(const TUnboxedValuePod& date, i64 years, const NUdf:
638
632
return result;
639
633
}
640
634
641
- // FIXME: The default value for TResourceName allows to omit
642
- // explicit specialization in functions that still doesn't support
643
- // big datetime types. Should be removed in future.
644
635
#define ACCESSORS_POLY (field, type, wtype ) \
645
- template <const char * TResourceName = TMResourceName, typename TValue, \
646
- typename rtype = std::conditional_t <TResourceName == TMResourceName, \
647
- type, wtype>> \
648
- inline rtype Get##field(const TValue& tm) { \
649
- return (rtype)Reference<TResourceName>(tm).field ; \
636
+ template <const char * TResourceName, typename TValue, typename TRetType \
637
+ = std::conditional_t <TResourceName == TMResourceName, type, wtype>> \
638
+ inline TRetType Get##field(const TValue& tm) { \
639
+ return (TRetType)Reference<TResourceName>(tm).field ; \
650
640
} \
651
- template <const char * TResourceName = TMResourceName, typename TValue, \
652
- typename itype = std::conditional_t <TResourceName == TMResourceName, \
653
- type, wtype>> \
654
- inline void Set##field(TValue& tm, itype value) { \
641
+ template <const char * TResourceName, typename TValue, typename TArgType \
642
+ = std::conditional_t <TResourceName == TMResourceName, type, wtype>> \
643
+ inline void Set##field(TValue& tm, TArgType value) { \
655
644
Reference<TResourceName>(tm).field = value; \
656
645
} \
657
646
@@ -674,10 +663,7 @@ TUnboxedValuePod DoAddYears(const TUnboxedValuePod& date, i64 years, const NUdf:
674
663
#undef ACCESSORS
675
664
#undef ACCESSORS_POLY
676
665
677
- // FIXME: The default value for TResourceName allows to omit
678
- // explicit specialization in functions that still doesn't support
679
- // big datetime types. Should be removed in future.
680
- template <const char * TResourceName = TMResourceName>
666
+ template <const char * TResourceName>
681
667
inline bool ValidateYear (std::conditional_t <TResourceName == TMResourceName, ui16, i32 > year) {
682
668
if constexpr (TResourceName == TMResourceName) {
683
669
return year >= NUdf::MIN_YEAR || year < NUdf::MAX_YEAR;
@@ -811,7 +797,7 @@ TUnboxedValuePod DoAddYears(const TUnboxedValuePod& date, i64 years, const NUdf:
811
797
static void Process (const IValueBuilder* valueBuilder, TBlockItem arg, const TSink& sink) {
812
798
try {
813
799
TBlockItem res {0 };
814
- Split (arg, Reference (res), *valueBuilder);
800
+ Split (arg, Reference<TMResourceName> (res), *valueBuilder);
815
801
sink (res);
816
802
} catch (const std::exception& e) {
817
803
UdfTerminate ((TStringBuilder () << e.what ()).data ());
@@ -955,7 +941,7 @@ TUnboxedValuePod DoAddYears(const TUnboxedValuePod& date, i64 years, const NUdf:
955
941
956
942
auto & builder = valueBuilder->GetDateBuilder ();
957
943
TUnboxedValuePod result (0 );
958
- auto & storage = Reference (result);
944
+ auto & storage = Reference<TMResourceName> (result);
959
945
storage.FromDate (builder, args[0 ].Get <ui16>());
960
946
return result;
961
947
} catch (const std::exception& e) {
@@ -990,7 +976,7 @@ TUnboxedValuePod DoAddYears(const TUnboxedValuePod& date, i64 years, const NUdf:
990
976
991
977
auto & builder = valueBuilder->GetDateBuilder ();
992
978
TUnboxedValuePod result (0 );
993
- auto & storage = Reference (result);
979
+ auto & storage = Reference<TMResourceName> (result);
994
980
storage.FromDatetime (builder, args[0 ].Get <ui32>());
995
981
return result;
996
982
} catch (const std::exception& e) {
@@ -1025,7 +1011,7 @@ TUnboxedValuePod DoAddYears(const TUnboxedValuePod& date, i64 years, const NUdf:
1025
1011
1026
1012
auto & builder = valueBuilder->GetDateBuilder ();
1027
1013
TUnboxedValuePod result (0 );
1028
- auto & storage = Reference (result);
1014
+ auto & storage = Reference<TMResourceName> (result);
1029
1015
storage.FromTimestamp (builder, args[0 ].Get <ui64>());
1030
1016
return result;
1031
1017
} catch (const std::exception& e) {
@@ -1060,7 +1046,7 @@ TUnboxedValuePod DoAddYears(const TUnboxedValuePod& date, i64 years, const NUdf:
1060
1046
1061
1047
auto & builder = valueBuilder->GetDateBuilder ();
1062
1048
TUnboxedValuePod result (0 );
1063
- auto & storage = Reference (result);
1049
+ auto & storage = Reference<TMResourceName> (result);
1064
1050
storage.FromDate (builder, args[0 ].Get <ui16>(), args[0 ].GetTimezoneId ());
1065
1051
return result;
1066
1052
} catch (const std::exception& e) {
@@ -1097,7 +1083,7 @@ TUnboxedValuePod DoAddYears(const TUnboxedValuePod& date, i64 years, const NUdf:
1097
1083
1098
1084
auto & builder = valueBuilder->GetDateBuilder ();
1099
1085
TUnboxedValuePod result (0 );
1100
- auto & storage = Reference (result);
1086
+ auto & storage = Reference<TMResourceName> (result);
1101
1087
storage.FromDatetime (builder, args[0 ].Get <ui32>(), args[0 ].GetTimezoneId ());
1102
1088
return result;
1103
1089
} catch (const std::exception& e) {
@@ -1134,7 +1120,7 @@ TUnboxedValuePod DoAddYears(const TUnboxedValuePod& date, i64 years, const NUdf:
1134
1120
1135
1121
auto & builder = valueBuilder->GetDateBuilder ();
1136
1122
TUnboxedValuePod result (0 );
1137
- auto & storage = Reference (result);
1123
+ auto & storage = Reference<TMResourceName> (result);
1138
1124
storage.FromTimestamp (builder, args[0 ].Get <ui64>(), args[0 ].GetTimezoneId ());
1139
1125
return result;
1140
1126
} catch (const std::exception& e) {
@@ -1173,7 +1159,7 @@ TUnboxedValuePod DoAddYears(const TUnboxedValuePod& date, i64 years, const NUdf:
1173
1159
1174
1160
template <typename TSink>
1175
1161
static void Process (const IValueBuilder* valueBuilder, TBlockItem item, const TSink& sink) {
1176
- auto & storage = Reference (item);
1162
+ auto & storage = Reference<TMResourceName> (item);
1177
1163
sink (TBlockItem (Make (storage, *valueBuilder)));
1178
1164
}
1179
1165
};
@@ -1213,28 +1199,28 @@ TUnboxedValuePod DoAddYears(const TUnboxedValuePod& date, i64 years, const NUdf:
1213
1199
1214
1200
BEGIN_SIMPLE_STRICT_ARROW_UDF (TMakeDate, TDate(TAutoMap<TResource<TMResourceName>>)) {
1215
1201
auto & builder = valueBuilder->GetDateBuilder ();
1216
- auto & storage = Reference (args[0 ]);
1202
+ auto & storage = Reference<TMResourceName> (args[0 ]);
1217
1203
return TUnboxedValuePod (storage.ToDate (builder, false ));
1218
1204
}
1219
1205
END_SIMPLE_ARROW_UDF (TMakeDate, TMakeDateKernelExec<TDate>::Do);
1220
1206
1221
1207
BEGIN_SIMPLE_STRICT_ARROW_UDF (TMakeDatetime, TDatetime(TAutoMap<TResource<TMResourceName>>)) {
1222
1208
auto & builder = valueBuilder->GetDateBuilder ();
1223
- auto & storage = Reference (args[0 ]);
1209
+ auto & storage = Reference<TMResourceName> (args[0 ]);
1224
1210
return TUnboxedValuePod (storage.ToDatetime (builder));
1225
1211
}
1226
1212
END_SIMPLE_ARROW_UDF (TMakeDatetime, TMakeDateKernelExec<TDatetime>::Do);
1227
1213
1228
1214
BEGIN_SIMPLE_STRICT_ARROW_UDF (TMakeTimestamp, TTimestamp(TAutoMap<TResource<TMResourceName>>)) {
1229
1215
auto & builder = valueBuilder->GetDateBuilder ();
1230
- auto & storage = Reference (args[0 ]);
1216
+ auto & storage = Reference<TMResourceName> (args[0 ]);
1231
1217
return TUnboxedValuePod (storage.ToTimestamp (builder));
1232
1218
}
1233
1219
END_SIMPLE_ARROW_UDF (TMakeTimestamp, TMakeDateKernelExec<TTimestamp>::Do);
1234
1220
1235
1221
BEGIN_SIMPLE_STRICT_ARROW_UDF (TMakeTzDate, TTzDate(TAutoMap<TResource<TMResourceName>>)) {
1236
1222
auto & builder = valueBuilder->GetDateBuilder ();
1237
- auto & storage = Reference (args[0 ]);
1223
+ auto & storage = Reference<TMResourceName> (args[0 ]);
1238
1224
try {
1239
1225
TUnboxedValuePod result (storage.ToDate (builder, true ));
1240
1226
result.SetTimezoneId (storage.TimezoneId );
@@ -1250,7 +1236,7 @@ TUnboxedValuePod DoAddYears(const TUnboxedValuePod& date, i64 years, const NUdf:
1250
1236
1251
1237
BEGIN_SIMPLE_STRICT_ARROW_UDF (TMakeTzDatetime, TTzDatetime(TAutoMap<TResource<TMResourceName>>)) {
1252
1238
auto & builder = valueBuilder->GetDateBuilder ();
1253
- auto & storage = Reference (args[0 ]);
1239
+ auto & storage = Reference<TMResourceName> (args[0 ]);
1254
1240
TUnboxedValuePod result (storage.ToDatetime (builder));
1255
1241
result.SetTimezoneId (storage.TimezoneId );
1256
1242
return result;
@@ -1259,7 +1245,7 @@ TUnboxedValuePod DoAddYears(const TUnboxedValuePod& date, i64 years, const NUdf:
1259
1245
1260
1246
BEGIN_SIMPLE_STRICT_ARROW_UDF (TMakeTzTimestamp, TTzTimestamp(TAutoMap<TResource<TMResourceName>>)) {
1261
1247
auto & builder = valueBuilder->GetDateBuilder ();
1262
- auto & storage = Reference (args[0 ]);
1248
+ auto & storage = Reference<TMResourceName> (args[0 ]);
1263
1249
TUnboxedValuePod result (storage.ToTimestamp (builder));
1264
1250
result.SetTimezoneId (storage.TimezoneId );
1265
1251
return result;
@@ -1270,7 +1256,7 @@ TUnboxedValuePod DoAddYears(const TUnboxedValuePod& date, i64 years, const NUdf:
1270
1256
SIMPLE_STRICT_UDF (TConvert, TResource<TM64ResourceName>(TAutoMap<TResource<TMResourceName>>)) {
1271
1257
Y_UNUSED (valueBuilder);
1272
1258
TUnboxedValuePod result (0 );
1273
- auto & arg = Reference (args[0 ]);
1259
+ auto & arg = Reference<TMResourceName> (args[0 ]);
1274
1260
auto & storage = Reference<TM64ResourceName>(result);
1275
1261
storage.From (arg);
1276
1262
return result;
@@ -1697,7 +1683,7 @@ TUnboxedValue GetDayOfWeekName(const IValueBuilder* valueBuilder, const TUnboxed
1697
1683
template <typename TSink>
1698
1684
static void Process (const IValueBuilder* valueBuilder, TBlockItem item, const TSink& sink) {
1699
1685
Y_UNUSED (valueBuilder);
1700
- auto timezoneId = GetTimezoneId (item);
1686
+ auto timezoneId = GetTimezoneId<TMResourceName> (item);
1701
1687
if (timezoneId >= NUdf::GetTimezones ().size ()) {
1702
1688
sink (TBlockItem{});
1703
1689
} else {
@@ -1706,15 +1692,6 @@ TUnboxedValue GetDayOfWeekName(const IValueBuilder* valueBuilder, const TUnboxed
1706
1692
}
1707
1693
};
1708
1694
1709
- BEGIN_SIMPLE_STRICT_ARROW_UDF (TGetTimezoneName, char *(TAutoMap<TResource<TMResourceName>>)) {
1710
- auto timezoneId = GetTimezoneId (args[0 ]);
1711
- if (timezoneId >= NUdf::GetTimezones ().size ()) {
1712
- return TUnboxedValuePod ();
1713
- }
1714
- return valueBuilder->NewString (NUdf::GetTimezones ()[timezoneId]);
1715
- }
1716
- END_SIMPLE_ARROW_UDF (TGetTimezoneName, TTGetTimezoneNameKernelExec::Do);
1717
-
1718
1695
template <const char * TResourceName>
1719
1696
TUnboxedValue GetTimezoneName (const IValueBuilder* valueBuilder, const TUnboxedValuePod& arg) {
1720
1697
const ui16 tzId = GetTimezoneId<TResourceName>(arg);
@@ -2083,8 +2060,8 @@ class TToConverter : public TBoxedValue {
2083
2060
struct TStartOfKernelExec : TUnaryKernelExec<TStartOfKernelExec<Core>, TResourceBlockReader<false >, TResourceArrayBuilder<true >> {
2084
2061
template <typename TSink>
2085
2062
static void Process (const IValueBuilder* valueBuilder, TBlockItem item, const TSink& sink) {
2086
- if (auto res = Core (Reference (item), *valueBuilder)) {
2087
- Reference (item) = res.GetRef ();
2063
+ if (auto res = Core (Reference<TMResourceName> (item), *valueBuilder)) {
2064
+ Reference<TMResourceName> (item) = res.GetRef ();
2088
2065
sink (item);
2089
2066
} else {
2090
2067
sink (TBlockItem{});
@@ -2423,7 +2400,7 @@ class TBoundaryOf: public ::NYql::NUdf::TBoxedValue {
2423
2400
struct TStartEndOfBinaryKernelExec : TBinaryKernelExec<TStartEndOfBinaryKernelExec<UseEnd>> {
2424
2401
template <typename TSink>
2425
2402
static void Process (const IValueBuilder* valueBuilder, TBlockItem arg1, TBlockItem arg2, const TSink& sink) {
2426
- auto & storage = Reference (arg1);
2403
+ auto & storage = Reference<TMResourceName> (arg1);
2427
2404
ui64 interval = std::abs (arg2.Get <i64 >());
2428
2405
if (interval == 0 ) {
2429
2406
sink (arg1);
@@ -2566,7 +2543,7 @@ class TBoundaryOfInterval: public ::NYql::NUdf::TBoxedValue {
2566
2543
template <typename TSink>
2567
2544
static void Process (const IValueBuilder* valueBuilder, TBlockItem item, const TSink& sink) {
2568
2545
Y_UNUSED (valueBuilder);
2569
- auto & storage = Reference (item);
2546
+ auto & storage = Reference<TMResourceName> (item);
2570
2547
sink (TBlockItem{(TDataType<TInterval>::TLayout)storage.ToTimeOfDay ()});
2571
2548
}
2572
2549
};
@@ -3329,7 +3306,7 @@ class TShift : public TBoxedValue {
3329
3306
if constexpr (TResourceName == TMResourceName) {
3330
3307
static constexpr size_t size = 4 ;
3331
3308
ui32 year = 0U ;
3332
- if (limit < size || !ParseNDigits<size>::Do (it, year) || !ValidateYear (year)) {
3309
+ if (limit < size || !ParseNDigits<size>::Do (it, year) || !ValidateYear<TMResourceName> (year)) {
3333
3310
return false ;
3334
3311
}
3335
3312
SetYear<TMResourceName>(result, year);
@@ -3341,7 +3318,7 @@ class TShift : public TBoxedValue {
3341
3318
negative = -1LL ;
3342
3319
it++;
3343
3320
}
3344
- if (!ParseNDigits<size, true >::Do (it, year) || !ValidateYear (negative * year)) {
3321
+ if (!ParseNDigits<size, true >::Do (it, year) || !ValidateYear<TM64ResourceName> (negative * year)) {
3345
3322
return false ;
3346
3323
}
3347
3324
SetYear<TM64ResourceName>(result, negative * year);
@@ -3515,7 +3492,7 @@ class TShift : public TBoxedValue {
3515
3492
} \
3516
3493
auto & builder = valueBuilder->GetDateBuilder (); \
3517
3494
TUnboxedValuePod result (0 ); \
3518
- auto & storage = Reference (result); \
3495
+ auto & storage = Reference<TMResourceName> (result); \
3519
3496
storage.FromTimestamp (builder, instant.MicroSeconds ()); \
3520
3497
return result; \
3521
3498
}
0 commit comments