Skip to content

Commit 1ffb60c

Browse files
committed
Drop default value for TResourceName template parameter
commit_hash:4d0a0750fa026093cb0f736dd1aafbb27decdc45 (cherry picked from commit 0859ef2)
1 parent 4b71891 commit 1ffb60c

File tree

1 file changed

+33
-56
lines changed

1 file changed

+33
-56
lines changed

yql/essentials/udfs/common/datetime2/datetime_udf.cpp

Lines changed: 33 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -593,20 +593,14 @@ struct TGetTimeComponent {
593593

594594
namespace {
595595

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,
600597
typename TStorage = std::conditional_t<TResourceName == TMResourceName,
601598
TTMStorage, TTM64Storage>>
602599
const TStorage& Reference(const TValue& value) {
603600
return *reinterpret_cast<const TStorage*>(value.GetRawPtr());
604601
}
605602

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,
610604
typename TStorage = std::conditional_t<TResourceName == TMResourceName,
611605
TTMStorage, TTM64Storage>>
612606
TStorage& Reference(TValue& value) {
@@ -638,20 +632,15 @@ TUnboxedValuePod DoAddYears(const TUnboxedValuePod& date, i64 years, const NUdf:
638632
return result;
639633
}
640634

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.
644635
#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; \
650640
} \
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) { \
655644
Reference<TResourceName>(tm).field = value; \
656645
} \
657646

@@ -674,10 +663,7 @@ TUnboxedValuePod DoAddYears(const TUnboxedValuePod& date, i64 years, const NUdf:
674663
#undef ACCESSORS
675664
#undef ACCESSORS_POLY
676665

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>
681667
inline bool ValidateYear(std::conditional_t<TResourceName == TMResourceName, ui16, i32> year) {
682668
if constexpr (TResourceName == TMResourceName) {
683669
return year >= NUdf::MIN_YEAR || year < NUdf::MAX_YEAR;
@@ -811,7 +797,7 @@ TUnboxedValuePod DoAddYears(const TUnboxedValuePod& date, i64 years, const NUdf:
811797
static void Process(const IValueBuilder* valueBuilder, TBlockItem arg, const TSink& sink) {
812798
try {
813799
TBlockItem res {0};
814-
Split(arg, Reference(res), *valueBuilder);
800+
Split(arg, Reference<TMResourceName>(res), *valueBuilder);
815801
sink(res);
816802
} catch (const std::exception& e) {
817803
UdfTerminate((TStringBuilder() << e.what()).data());
@@ -955,7 +941,7 @@ TUnboxedValuePod DoAddYears(const TUnboxedValuePod& date, i64 years, const NUdf:
955941

956942
auto& builder = valueBuilder->GetDateBuilder();
957943
TUnboxedValuePod result(0);
958-
auto& storage = Reference(result);
944+
auto& storage = Reference<TMResourceName>(result);
959945
storage.FromDate(builder, args[0].Get<ui16>());
960946
return result;
961947
} catch (const std::exception& e) {
@@ -990,7 +976,7 @@ TUnboxedValuePod DoAddYears(const TUnboxedValuePod& date, i64 years, const NUdf:
990976

991977
auto& builder = valueBuilder->GetDateBuilder();
992978
TUnboxedValuePod result(0);
993-
auto& storage = Reference(result);
979+
auto& storage = Reference<TMResourceName>(result);
994980
storage.FromDatetime(builder, args[0].Get<ui32>());
995981
return result;
996982
} catch (const std::exception& e) {
@@ -1025,7 +1011,7 @@ TUnboxedValuePod DoAddYears(const TUnboxedValuePod& date, i64 years, const NUdf:
10251011

10261012
auto& builder = valueBuilder->GetDateBuilder();
10271013
TUnboxedValuePod result(0);
1028-
auto& storage = Reference(result);
1014+
auto& storage = Reference<TMResourceName>(result);
10291015
storage.FromTimestamp(builder, args[0].Get<ui64>());
10301016
return result;
10311017
} catch (const std::exception& e) {
@@ -1060,7 +1046,7 @@ TUnboxedValuePod DoAddYears(const TUnboxedValuePod& date, i64 years, const NUdf:
10601046

10611047
auto& builder = valueBuilder->GetDateBuilder();
10621048
TUnboxedValuePod result(0);
1063-
auto& storage = Reference(result);
1049+
auto& storage = Reference<TMResourceName>(result);
10641050
storage.FromDate(builder, args[0].Get<ui16>(), args[0].GetTimezoneId());
10651051
return result;
10661052
} catch (const std::exception& e) {
@@ -1097,7 +1083,7 @@ TUnboxedValuePod DoAddYears(const TUnboxedValuePod& date, i64 years, const NUdf:
10971083

10981084
auto& builder = valueBuilder->GetDateBuilder();
10991085
TUnboxedValuePod result(0);
1100-
auto& storage = Reference(result);
1086+
auto& storage = Reference<TMResourceName>(result);
11011087
storage.FromDatetime(builder, args[0].Get<ui32>(), args[0].GetTimezoneId());
11021088
return result;
11031089
} catch (const std::exception& e) {
@@ -1134,7 +1120,7 @@ TUnboxedValuePod DoAddYears(const TUnboxedValuePod& date, i64 years, const NUdf:
11341120

11351121
auto& builder = valueBuilder->GetDateBuilder();
11361122
TUnboxedValuePod result(0);
1137-
auto& storage = Reference(result);
1123+
auto& storage = Reference<TMResourceName>(result);
11381124
storage.FromTimestamp(builder, args[0].Get<ui64>(), args[0].GetTimezoneId());
11391125
return result;
11401126
} catch (const std::exception& e) {
@@ -1173,7 +1159,7 @@ TUnboxedValuePod DoAddYears(const TUnboxedValuePod& date, i64 years, const NUdf:
11731159

11741160
template<typename TSink>
11751161
static void Process(const IValueBuilder* valueBuilder, TBlockItem item, const TSink& sink) {
1176-
auto& storage = Reference(item);
1162+
auto& storage = Reference<TMResourceName>(item);
11771163
sink(TBlockItem(Make(storage, *valueBuilder)));
11781164
}
11791165
};
@@ -1213,28 +1199,28 @@ TUnboxedValuePod DoAddYears(const TUnboxedValuePod& date, i64 years, const NUdf:
12131199

12141200
BEGIN_SIMPLE_STRICT_ARROW_UDF(TMakeDate, TDate(TAutoMap<TResource<TMResourceName>>)) {
12151201
auto& builder = valueBuilder->GetDateBuilder();
1216-
auto& storage = Reference(args[0]);
1202+
auto& storage = Reference<TMResourceName>(args[0]);
12171203
return TUnboxedValuePod(storage.ToDate(builder, false));
12181204
}
12191205
END_SIMPLE_ARROW_UDF(TMakeDate, TMakeDateKernelExec<TDate>::Do);
12201206

12211207
BEGIN_SIMPLE_STRICT_ARROW_UDF(TMakeDatetime, TDatetime(TAutoMap<TResource<TMResourceName>>)) {
12221208
auto& builder = valueBuilder->GetDateBuilder();
1223-
auto& storage = Reference(args[0]);
1209+
auto& storage = Reference<TMResourceName>(args[0]);
12241210
return TUnboxedValuePod(storage.ToDatetime(builder));
12251211
}
12261212
END_SIMPLE_ARROW_UDF(TMakeDatetime, TMakeDateKernelExec<TDatetime>::Do);
12271213

12281214
BEGIN_SIMPLE_STRICT_ARROW_UDF(TMakeTimestamp, TTimestamp(TAutoMap<TResource<TMResourceName>>)) {
12291215
auto& builder = valueBuilder->GetDateBuilder();
1230-
auto& storage = Reference(args[0]);
1216+
auto& storage = Reference<TMResourceName>(args[0]);
12311217
return TUnboxedValuePod(storage.ToTimestamp(builder));
12321218
}
12331219
END_SIMPLE_ARROW_UDF(TMakeTimestamp, TMakeDateKernelExec<TTimestamp>::Do);
12341220

12351221
BEGIN_SIMPLE_STRICT_ARROW_UDF(TMakeTzDate, TTzDate(TAutoMap<TResource<TMResourceName>>)) {
12361222
auto& builder = valueBuilder->GetDateBuilder();
1237-
auto& storage = Reference(args[0]);
1223+
auto& storage = Reference<TMResourceName>(args[0]);
12381224
try {
12391225
TUnboxedValuePod result(storage.ToDate(builder, true));
12401226
result.SetTimezoneId(storage.TimezoneId);
@@ -1250,7 +1236,7 @@ TUnboxedValuePod DoAddYears(const TUnboxedValuePod& date, i64 years, const NUdf:
12501236

12511237
BEGIN_SIMPLE_STRICT_ARROW_UDF(TMakeTzDatetime, TTzDatetime(TAutoMap<TResource<TMResourceName>>)) {
12521238
auto& builder = valueBuilder->GetDateBuilder();
1253-
auto& storage = Reference(args[0]);
1239+
auto& storage = Reference<TMResourceName>(args[0]);
12541240
TUnboxedValuePod result(storage.ToDatetime(builder));
12551241
result.SetTimezoneId(storage.TimezoneId);
12561242
return result;
@@ -1259,7 +1245,7 @@ TUnboxedValuePod DoAddYears(const TUnboxedValuePod& date, i64 years, const NUdf:
12591245

12601246
BEGIN_SIMPLE_STRICT_ARROW_UDF(TMakeTzTimestamp, TTzTimestamp(TAutoMap<TResource<TMResourceName>>)) {
12611247
auto& builder = valueBuilder->GetDateBuilder();
1262-
auto& storage = Reference(args[0]);
1248+
auto& storage = Reference<TMResourceName>(args[0]);
12631249
TUnboxedValuePod result(storage.ToTimestamp(builder));
12641250
result.SetTimezoneId(storage.TimezoneId);
12651251
return result;
@@ -1270,7 +1256,7 @@ TUnboxedValuePod DoAddYears(const TUnboxedValuePod& date, i64 years, const NUdf:
12701256
SIMPLE_STRICT_UDF(TConvert, TResource<TM64ResourceName>(TAutoMap<TResource<TMResourceName>>)) {
12711257
Y_UNUSED(valueBuilder);
12721258
TUnboxedValuePod result(0);
1273-
auto& arg = Reference(args[0]);
1259+
auto& arg = Reference<TMResourceName>(args[0]);
12741260
auto& storage = Reference<TM64ResourceName>(result);
12751261
storage.From(arg);
12761262
return result;
@@ -1697,7 +1683,7 @@ TUnboxedValue GetDayOfWeekName(const IValueBuilder* valueBuilder, const TUnboxed
16971683
template<typename TSink>
16981684
static void Process(const IValueBuilder* valueBuilder, TBlockItem item, const TSink& sink) {
16991685
Y_UNUSED(valueBuilder);
1700-
auto timezoneId = GetTimezoneId(item);
1686+
auto timezoneId = GetTimezoneId<TMResourceName>(item);
17011687
if (timezoneId >= NUdf::GetTimezones().size()) {
17021688
sink(TBlockItem{});
17031689
} else {
@@ -1706,15 +1692,6 @@ TUnboxedValue GetDayOfWeekName(const IValueBuilder* valueBuilder, const TUnboxed
17061692
}
17071693
};
17081694

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-
17181695
template<const char* TResourceName>
17191696
TUnboxedValue GetTimezoneName(const IValueBuilder* valueBuilder, const TUnboxedValuePod& arg) {
17201697
const ui16 tzId = GetTimezoneId<TResourceName>(arg);
@@ -2083,8 +2060,8 @@ class TToConverter : public TBoxedValue {
20832060
struct TStartOfKernelExec : TUnaryKernelExec<TStartOfKernelExec<Core>, TResourceBlockReader<false>, TResourceArrayBuilder<true>> {
20842061
template<typename TSink>
20852062
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();
20882065
sink(item);
20892066
} else {
20902067
sink(TBlockItem{});
@@ -2423,7 +2400,7 @@ class TBoundaryOf: public ::NYql::NUdf::TBoxedValue {
24232400
struct TStartEndOfBinaryKernelExec : TBinaryKernelExec<TStartEndOfBinaryKernelExec<UseEnd>> {
24242401
template<typename TSink>
24252402
static void Process(const IValueBuilder* valueBuilder, TBlockItem arg1, TBlockItem arg2, const TSink& sink) {
2426-
auto& storage = Reference(arg1);
2403+
auto& storage = Reference<TMResourceName>(arg1);
24272404
ui64 interval = std::abs(arg2.Get<i64>());
24282405
if (interval == 0) {
24292406
sink(arg1);
@@ -2566,7 +2543,7 @@ class TBoundaryOfInterval: public ::NYql::NUdf::TBoxedValue {
25662543
template<typename TSink>
25672544
static void Process(const IValueBuilder* valueBuilder, TBlockItem item, const TSink& sink) {
25682545
Y_UNUSED(valueBuilder);
2569-
auto& storage = Reference(item);
2546+
auto& storage = Reference<TMResourceName>(item);
25702547
sink(TBlockItem{(TDataType<TInterval>::TLayout)storage.ToTimeOfDay()});
25712548
}
25722549
};
@@ -3329,7 +3306,7 @@ class TShift : public TBoxedValue {
33293306
if constexpr (TResourceName == TMResourceName) {
33303307
static constexpr size_t size = 4;
33313308
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)) {
33333310
return false;
33343311
}
33353312
SetYear<TMResourceName>(result, year);
@@ -3341,7 +3318,7 @@ class TShift : public TBoxedValue {
33413318
negative = -1LL;
33423319
it++;
33433320
}
3344-
if (!ParseNDigits<size, true>::Do(it, year) || !ValidateYear(negative * year)) {
3321+
if (!ParseNDigits<size, true>::Do(it, year) || !ValidateYear<TM64ResourceName>(negative * year)) {
33453322
return false;
33463323
}
33473324
SetYear<TM64ResourceName>(result, negative * year);
@@ -3515,7 +3492,7 @@ class TShift : public TBoxedValue {
35153492
} \
35163493
auto& builder = valueBuilder->GetDateBuilder(); \
35173494
TUnboxedValuePod result(0); \
3518-
auto& storage = Reference(result); \
3495+
auto& storage = Reference<TMResourceName>(result); \
35193496
storage.FromTimestamp(builder, instant.MicroSeconds()); \
35203497
return result; \
35213498
}

0 commit comments

Comments
 (0)