Skip to content

Commit e25069e

Browse files
committed
remove datetime modifications
1 parent 0199538 commit e25069e

File tree

2 files changed

+42
-138
lines changed

2 files changed

+42
-138
lines changed

ydb/library/yql/public/udf/arrow/udf_arrow_helpers.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ static arrow::Status Do(arrow::compute::KernelContext* ctx, const arrow::compute
384384
for (size_t j = 0; j < maxBlockLength && i < array.length; ++j, ++i) {
385385
auto item = readerImpl->GetItem(array, i);
386386
TDerived::Process(item, state.GetValueBuilder(), [&](auto out) {
387-
builderImpl->Add(out);
387+
builder.Add(out);
388388
});
389389
}
390390
auto outputDatum = builderImpl->Build(false);

ydb/library/yql/udfs/common/datetime2/datetime_udf.cpp

Lines changed: 41 additions & 137 deletions
Original file line numberDiff line numberDiff line change
@@ -389,38 +389,28 @@ TTMStorage& Reference(NUdf::TUnboxedValuePod& value) {
389389
return *reinterpret_cast<TTMStorage*>(value.GetRawPtr());
390390
}
391391

392-
template<typename TValue>
393-
TValue DoAddMonths(const TValue& date, i64 months, const NUdf::IDateBuilder& builder) {
392+
NUdf::TUnboxedValuePod DoAddMonths(const NUdf::TUnboxedValuePod& date, i64 months, const NUdf::IDateBuilder& builder) {
394393
auto result = date;
395394
auto& storage = Reference(result);
396395
if (!NYql::DateTime::DoAddMonths(storage, months, builder)) {
397-
return TValue{};
396+
return NUdf::TUnboxedValuePod{};
398397
}
399398
return result;
400399
}
401-
402-
template<typename TValue>
403-
TValue DoAddQuarters(const TValue& date, i64 quarters, const NUdf::IDateBuilder& builder) {
404-
return DoAddMonths(date, quarters * 3ll, builder);
405-
}
406-
407-
template<typename TValue>
408-
TValue DoAddYears(const TValue& date, i64 years, const NUdf::IDateBuilder& builder) {
400+
NUdf::TUnboxedValuePod DoAddYears(const NUdf::TUnboxedValuePod& date, i64 years, const NUdf::IDateBuilder& builder) {
409401
auto result = date;
410402
auto& storage = Reference(result);
411403
if (!NYql::DateTime::DoAddYears(storage, years, builder)) {
412-
return TValue{};
404+
return NUdf::TUnboxedValuePod{};
413405
}
414406
return result;
415407
}
416408

417409
#define ACCESSORS(field, type) \
418-
template<typename TValue> \
419-
inline type Get##field(const TValue& tm) { \
410+
inline type Get##field(const TUnboxedValuePod& tm) { \
420411
return (type)Reference(tm).field; \
421412
} \
422-
template<typename TValue> \
423-
Y_DECLARE_UNUSED inline void Set##field(TValue& tm, type value) { \
413+
Y_DECLARE_UNUSED inline void Set##field(TUnboxedValuePod& tm, type value) { \
424414
Reference(tm).field = value; \
425415
}
426416

@@ -562,24 +552,6 @@ TValue DoAddYears(const TValue& date, i64 years, const NUdf::IDateBuilder& build
562552
IFunctionTypeInfoBuilder& builder,
563553
bool typesOnly)
564554
{
565-
const auto typeInfoHelper = builder.TypeInfoHelper();
566-
567-
TTupleTypeInspector tuple(*typeInfoHelper, userType);
568-
Y_ENSURE(tuple);
569-
Y_ENSURE(tuple.GetElementsCount() > 0);
570-
TTupleTypeInspector argsTuple(*typeInfoHelper, tuple.GetElementType(0));
571-
Y_ENSURE(argsTuple);
572-
573-
if (argsTuple.GetElementsCount() != 1) {
574-
builder.SetError("Expected one argument");
575-
return true;
576-
}
577-
auto argType = argsTuple.GetElementType(0);
578-
TVector<const TType*> argBlockTypes;
579-
argBlockTypes.push_back(argType);
580-
581-
TBlockTypeInspector block(*typeInfoHelper, argType);
582-
583555
builder.UserType(userType);
584556
builder.Args()->Add<TUserDataType>().Flags(ICallablePayload::TArgumentFlags::AutoMap);
585557
builder.Returns(builder.Resource(TMResourceName));
@@ -752,124 +724,68 @@ TValue DoAddYears(const TValue& date, i64 years, const NUdf::IDateBuilder& build
752724

753725
// Get*
754726

755-
756727
#define GET_METHOD(field, type) \
757-
struct TGet##field##KernelExec : TUnaryKernelExec<TGet##field##KernelExec, TReaderTraits::TResource<true>, TFixedSizeArrayBuilder<type, false>> { \
758-
template<typename TSink> \
759-
static void Process(TBlockItem item, TSink& sink) { \
760-
sink(TBlockItem(Get##field<TBlockItem>(item))); \
761-
} \
762-
}; \
763-
BEGIN_SIMPLE_STRICT_ARROW_UDF(TGet##field, type(TAutoMap<TResource<TMResourceName>>)) { \
728+
SIMPLE_STRICT_UDF(TGet##field, type(TAutoMap<TResource<TMResourceName>>)) { \
764729
Y_UNUSED(valueBuilder); \
765730
return TUnboxedValuePod(Get##field(args[0])); \
766-
} \
767-
END_SIMPLE_ARROW_UDF_WITH_NULL_HANDLING(TGet##field, TGet##field##KernelExec::Do, arrow::compute::NullHandling::INTERSECTION);
731+
}
768732

769733
GET_METHOD(Year, ui16)
770734
GET_METHOD(DayOfYear, ui16)
771735
GET_METHOD(Month, ui8)
772-
773-
template<typename TValue>
774-
TValue GetMonthNameValue(size_t idx) {
775-
static const std::array<TValue, 12U> monthNames = {{
776-
TValue::Embedded(TStringRef::Of("January")),
777-
TValue::Embedded(TStringRef::Of("February")),
778-
TValue::Embedded(TStringRef::Of("March")),
779-
TValue::Embedded(TStringRef::Of("April")),
780-
TValue::Embedded(TStringRef::Of("May")),
781-
TValue::Embedded(TStringRef::Of("June")),
782-
TValue::Embedded(TStringRef::Of("July")),
783-
TValue::Embedded(TStringRef::Of("August")),
784-
TValue::Embedded(TStringRef::Of("September")),
785-
TValue::Embedded(TStringRef::Of("October")),
786-
TValue::Embedded(TStringRef::Of("November")),
787-
TValue::Embedded(TStringRef::Of("December"))
788-
}};
789-
return monthNames.at(idx);
790-
}
791-
792-
struct TGetMonthNameKernelExec : TUnaryKernelExec<TGetMonthNameKernelExec, TReaderTraits::TResource<true>, TStringArrayBuilder<arrow::StringType, false>> {
793-
template<typename TSink>
794-
static void Process(TBlockItem item, TSink& sink) {
795-
sink(GetMonthNameValue<TBlockItem>(GetMonth(item) - 1U));
796-
}
797-
};
798736

799-
BEGIN_SIMPLE_STRICT_ARROW_UDF(TGetMonthName, char*(TAutoMap<TResource<TMResourceName>>)) {
737+
SIMPLE_STRICT_UDF(TGetMonthName, char*(TAutoMap<TResource<TMResourceName>>)) {
800738
Y_UNUSED(valueBuilder);
801-
return GetMonthNameValue<TUnboxedValue>(GetMonth(*args) - 1U);
739+
static const std::array<TUnboxedValue, 12U> monthNames = {{
740+
TUnboxedValuePod::Embedded(TStringRef::Of("January")),
741+
TUnboxedValuePod::Embedded(TStringRef::Of("February")),
742+
TUnboxedValuePod::Embedded(TStringRef::Of("March")),
743+
TUnboxedValuePod::Embedded(TStringRef::Of("April")),
744+
TUnboxedValuePod::Embedded(TStringRef::Of("May")),
745+
TUnboxedValuePod::Embedded(TStringRef::Of("June")),
746+
TUnboxedValuePod::Embedded(TStringRef::Of("July")),
747+
TUnboxedValuePod::Embedded(TStringRef::Of("August")),
748+
TUnboxedValuePod::Embedded(TStringRef::Of("September")),
749+
TUnboxedValuePod::Embedded(TStringRef::Of("October")),
750+
TUnboxedValuePod::Embedded(TStringRef::Of("November")),
751+
TUnboxedValuePod::Embedded(TStringRef::Of("December"))
752+
}};
753+
return monthNames.at(GetMonth(*args) - 1U);
802754
}
803-
END_SIMPLE_ARROW_UDF_WITH_NULL_HANDLING(TGetMonthName, TGetMonthNameKernelExec::Do, arrow::compute::NullHandling::INTERSECTION);
804755

805756
GET_METHOD(WeekOfYear, ui8)
806757
GET_METHOD(WeekOfYearIso8601, ui8)
807758

808-
struct TGetDayOfMonthKernelExec : TUnaryKernelExec<TGetMonthNameKernelExec, TReaderTraits::TResource<true>, TFixedSizeArrayBuilder<ui8, false>> {
809-
template<typename TSink>
810-
static void Process(TBlockItem item, TSink& sink) {
811-
sink(GetDay(item));
812-
}
813-
};
814-
815-
BEGIN_SIMPLE_STRICT_ARROW_UDF(TGetDayOfMonth, ui8(TAutoMap<TResource<TMResourceName>>)) {
759+
SIMPLE_STRICT_UDF(TGetDayOfMonth, ui8(TAutoMap<TResource<TMResourceName>>)) {
816760
Y_UNUSED(valueBuilder);
817761
return TUnboxedValuePod(GetDay(args[0]));
818762
}
819-
END_SIMPLE_ARROW_UDF_WITH_NULL_HANDLING(TGetDayOfMonth, TGetDayOfMonthKernelExec::Do, arrow::compute::NullHandling::INTERSECTION);
820763

821764
GET_METHOD(DayOfWeek, ui8)
822765

823-
template<typename TValue>
824-
TValue GetDayNameValue(size_t idx) {
825-
static const std::array<TValue, 7U> dayNames = {{
826-
TValue::Embedded(TStringRef::Of("Monday")),
827-
TValue::Embedded(TStringRef::Of("Tuesday")),
828-
TValue::Embedded(TStringRef::Of("Wednesday")),
829-
TValue::Embedded(TStringRef::Of("Thursday")),
830-
TValue::Embedded(TStringRef::Of("Friday")),
831-
TValue::Embedded(TStringRef::Of("Saturday")),
832-
TValue::Embedded(TStringRef::Of("Sunday"))
833-
}};
834-
return dayNames.at(idx);
835-
}
836-
837-
struct TGetDayOfWeekNameKernelExec : TUnaryKernelExec<TGetDayOfWeekNameKernelExec, TReaderTraits::TResource<true>, TStringArrayBuilder<arrow::StringType, false>> {
838-
template<typename TSink>
839-
static void Process(TBlockItem item, TSink& sink) {
840-
sink(GetDayNameValue<TBlockItem>(GetDayOfWeek(item) - 1U));
841-
}
842-
};
843-
844-
BEGIN_SIMPLE_STRICT_ARROW_UDF(TGetDayOfWeekName, char*(TAutoMap<TResource<TMResourceName>>)) {
766+
SIMPLE_STRICT_UDF(TGetDayOfWeekName, char*(TAutoMap<TResource<TMResourceName>>)) {
845767
Y_UNUSED(valueBuilder);
846-
return GetDayNameValue<TUnboxedValuePod>(GetDayOfWeek(*args) - 1U);
768+
static const std::array<TUnboxedValue, 7U> dayNames = {{
769+
TUnboxedValuePod::Embedded(TStringRef::Of("Monday")),
770+
TUnboxedValuePod::Embedded(TStringRef::Of("Tuesday")),
771+
TUnboxedValuePod::Embedded(TStringRef::Of("Wednesday")),
772+
TUnboxedValuePod::Embedded(TStringRef::Of("Thursday")),
773+
TUnboxedValuePod::Embedded(TStringRef::Of("Friday")),
774+
TUnboxedValuePod::Embedded(TStringRef::Of("Saturday")),
775+
TUnboxedValuePod::Embedded(TStringRef::Of("Sunday"))
776+
}};
777+
return dayNames.at(GetDayOfWeek(*args) - 1U);
847778
}
848-
END_SIMPLE_ARROW_UDF_WITH_NULL_HANDLING(TGetDayOfWeekName, TGetDayOfWeekNameKernelExec::Do, arrow::compute::NullHandling::INTERSECTION);
849779

850780
GET_METHOD(TimezoneId, ui16)
851781

852-
struct TTGetTimezoneNameKernelExec : TUnaryKernelExec<TTGetTimezoneNameKernelExec, TReaderTraits::TResource<true>, TStringArrayBuilder<arrow::StringType, true>> {
853-
template<typename TSink>
854-
static void Process(TBlockItem item, TUdfKernelState& state, TSink& sink) {
855-
auto timezoneId = GetTimezoneId(item);
856-
if (timezoneId >= NUdf::GetTimezones().size()) {
857-
sink(TBlockItem{});
858-
} else {
859-
auto str = state.GetValueBuilder().NewString(NUdf::GetTimezones()[timezoneId]);
860-
sink(str);
861-
}
862-
}
863-
};
864-
865-
BEGIN_SIMPLE_STRICT_ARROW_UDF(TGetTimezoneName, char*(TAutoMap<TResource<TMResourceName>>)) {
782+
SIMPLE_STRICT_UDF(TGetTimezoneName, char*(TAutoMap<TResource<TMResourceName>>)) {
866783
auto timezoneId = GetTimezoneId(args[0]);
867784
if (timezoneId >= NUdf::GetTimezones().size()) {
868785
return TUnboxedValuePod();
869786
}
870787
return valueBuilder->NewString(NUdf::GetTimezones()[timezoneId]);
871788
}
872-
END_SIMPLE_ARROW_UDF(TGetTimezoneName, TTGetTimezoneNameKernelExec::Do);
873789

874790
// Update
875791

@@ -1241,32 +1157,20 @@ TValue DoAddYears(const TValue& date, i64 years, const NUdf::IDateBuilder& build
12411157
auto& storage = Reference(args[0]);
12421158
return TUnboxedValuePod((i64)storage.ToTimeOfDay());
12431159
}
1244-
END_SIMPLE_ARROW_UDF(TTimeOfDay, timeOfDayKernelExecDo);
12451160

12461161
// Add ...
12471162

1248-
template<auto Core>
1249-
struct TAddKernelExec : TBinaryKernelExec<TAddKernelExec<Core>> {
1250-
template<typename TSink>
1251-
static void Process(TBlockItem date, TBlockItem arg, TUdfKernelState& state, TSink& sink) {
1252-
sink(Core(date, arg.Get<i32>(), state.GetValueBuilder().GetDateBuilder()));
1253-
}
1254-
};
1255-
1256-
BEGIN_SIMPLE_STRICT_ARROW_UDF(TShiftYears, TOptional<TResource<TMResourceName>>(TAutoMap<TResource<TMResourceName>>, i32)) {
1163+
SIMPLE_STRICT_UDF(TShiftYears, TOptional<TResource<TMResourceName>>(TAutoMap<TResource<TMResourceName>>, i32)) {
12571164
return DoAddYears(args[0], args[1].Get<i32>(), valueBuilder->GetDateBuilder());
12581165
}
1259-
END_SIMPLE_ARROW_UDF(TShiftYears, TAddKernelExec<DoAddYears<TBlockItem>>::Do);
12601166

1261-
BEGIN_SIMPLE_STRICT_ARROW_UDF(TShiftQuarters, TOptional<TResource<TMResourceName>>(TAutoMap<TResource<TMResourceName>>, i32)) {
1262-
return DoAddQuarters(args[0], args[1].Get<i32>(), valueBuilder->GetDateBuilder());
1167+
SIMPLE_STRICT_UDF(TShiftQuarters, TOptional<TResource<TMResourceName>>(TAutoMap<TResource<TMResourceName>>, i32)) {
1168+
return DoAddMonths(args[0], 3ll * args[1].Get<i32>(), valueBuilder->GetDateBuilder());
12631169
}
1264-
END_SIMPLE_ARROW_UDF(TShiftQuarters, TAddKernelExec<DoAddQuarters<TBlockItem>>::Do);
12651170

1266-
BEGIN_SIMPLE_STRICT_ARROW_UDF(TShiftMonths, TOptional<TResource<TMResourceName>>(TAutoMap<TResource<TMResourceName>>, i32)) {
1171+
SIMPLE_STRICT_UDF(TShiftMonths, TOptional<TResource<TMResourceName>>(TAutoMap<TResource<TMResourceName>>, i32)) {
12671172
return DoAddMonths(args[0], args[1].Get<i32>(), valueBuilder->GetDateBuilder());
12681173
}
1269-
END_SIMPLE_ARROW_UDF(TShiftMonths, TAddKernelExec<DoAddMonths<TBlockItem>>::Do);
12701174

12711175
template<size_t Digits, bool Exacly = true>
12721176
struct PrintNDigits;

0 commit comments

Comments
 (0)