diff options
| author | imunkin <[email protected]> | 2025-02-18 18:13:04 +0300 | 
|---|---|---|
| committer | imunkin <[email protected]> | 2025-02-18 18:52:09 +0300 | 
| commit | add906303b66ed6c98751c33c4806d398662be2f (patch) | |
| tree | 2c394721fb31d6783209452c69bd4e043e44de3e | |
| parent | 92ee8c57eca250bf8648398e0cd69031f9768275 (diff) | |
YQL-18303: Introduce Update overload
commit_hash:3afbcdd00ad47ecf35cb29bb25a5d7658ed1d5cb
11 files changed, 1879 insertions, 299 deletions
diff --git a/yql/essentials/udfs/common/datetime2/datetime_udf.cpp b/yql/essentials/udfs/common/datetime2/datetime_udf.cpp index 5d0ca213e30..30c1a46ef25 100644 --- a/yql/essentials/udfs/common/datetime2/datetime_udf.cpp +++ b/yql/essentials/udfs/common/datetime2/datetime_udf.cpp @@ -512,8 +512,16 @@ TValue DoAddYears(const TValue& date, i64 years, const NUdf::IDateBuilder& build  #undef ACCESSORS  #undef ACCESSORS_POLY -    inline bool ValidateYear(ui16 year) { -        return year >= NUdf::MIN_YEAR - 1 || year <= NUdf::MAX_YEAR + 1; +    // FIXME: The default value for TResourceName allows to omit +    // explicit specialization in functions that still doesn't support +    // big datetime types. Should be removed in future. +    template<const char* TResourceName = TMResourceName> +    inline bool ValidateYear(std::conditional_t<TResourceName == TMResourceName, ui16, i32> year) { +        if constexpr (TResourceName == TMResourceName) { +            return year >= NUdf::MIN_YEAR || year < NUdf::MAX_YEAR; +        } else { +            return year >= NUdf::MIN_YEAR32 || year < NUdf::MAX_YEAR32; +        }      }      inline bool ValidateMonth(ui8 month) { @@ -1412,88 +1420,8 @@ TUnboxedValue GetTimezoneName(const IValueBuilder* valueBuilder, const TUnboxedV      // Update      class TUpdate : public TBoxedValue { -        const TSourcePosition Pos_;      public: -        explicit TUpdate(TSourcePosition pos) -            : Pos_(pos) -        {} - -        TUnboxedValue Run( -            const IValueBuilder* valueBuilder, -            const TUnboxedValuePod* args) const override -        { -            try { -                EMPTY_RESULT_ON_EMPTY_ARG(0); -                auto result = args[0]; - -                if (args[1]) { -                    auto year = args[1].Get<ui16>(); -                    if (!ValidateYear(year)) { -                        return TUnboxedValuePod(); -                    } -                    SetYear(result, year); -                } -                if (args[2]) { -                    auto month = args[2].Get<ui8>(); -                    if (!ValidateMonth(month)) { -                        return TUnboxedValuePod(); -                    } -                    SetMonth(result, month); -                } -                if (args[3]) { -                    auto day = args[3].Get<ui8>(); -                    if (!ValidateDay(day)) { -                        return TUnboxedValuePod(); -                    } -                    SetDay(result, day); -                } -                if (args[4]) { -                    auto hour = args[4].Get<ui8>(); -                    if (!ValidateHour(hour)) { -                        return TUnboxedValuePod(); -                    } -                    SetHour(result, hour); -                } -                if (args[5]) { -                    auto minute = args[5].Get<ui8>(); -                    if (!ValidateMinute(minute)) { -                        return TUnboxedValuePod(); -                    } -                    SetMinute(result, minute); -                } -                if (args[6]) { -                    auto second = args[6].Get<ui8>(); -                    if (!ValidateSecond(second)) { -                        return TUnboxedValuePod(); -                    } -                    SetSecond(result, second); -                } -                if (args[7]) { -                    auto microsecond = args[7].Get<ui32>(); -                    if (!ValidateMicrosecond(microsecond)) { -                        return TUnboxedValuePod(); -                    } -                    SetMicrosecond(result, microsecond); -                } -                if (args[8]) { -                    auto timezoneId = args[8].Get<ui16>(); -                    if (!ValidateTimezoneId(timezoneId)) { -                        return TUnboxedValuePod(); -                    } -                    SetTimezoneId(result, timezoneId); -                } - -                auto& builder = valueBuilder->GetDateBuilder(); -                auto& storage = Reference(result); -                if (!storage.Validate(builder)) { -                    return TUnboxedValuePod(); -                } -                return result; -            } catch (const std::exception& e) { -                UdfTerminate((TStringBuilder() << Pos_ << " " << e.what()).data()); -            } -        } - +        typedef bool TTypeAwareMarker;          static const TStringRef& Name() {              static auto name = TStringRef::Of("Update");              return name; @@ -1501,7 +1429,7 @@ TUnboxedValue GetTimezoneName(const IValueBuilder* valueBuilder, const TUnboxedV          static bool DeclareSignature(              const TStringRef& name, -            TType*, +            TType* userType,              IFunctionTypeInfoBuilder& builder,              bool typesOnly)          { @@ -1509,28 +1437,179 @@ TUnboxedValue GetTimezoneName(const IValueBuilder* valueBuilder, const TUnboxedV                  return false;              } -            auto resourceType = builder.Resource(TMResourceName); -            auto optionalResourceType = builder.Optional()->Item(resourceType).Build(); +            if (!userType) { +                builder.SetError("User type is missing"); +                return true; +            } -            builder.OptionalArgs(8).Args()->Add(resourceType).Flags(ICallablePayload::TArgumentFlags::AutoMap) -                .Add(builder.Optional()->Item<ui16>().Build()).Name("Year") -                .Add(builder.Optional()->Item<ui8>().Build()).Name("Month") -                .Add(builder.Optional()->Item<ui8>().Build()).Name("Day") -                .Add(builder.Optional()->Item<ui8>().Build()).Name("Hour") -                .Add(builder.Optional()->Item<ui8>().Build()).Name("Minute") -                .Add(builder.Optional()->Item<ui8>().Build()).Name("Second") -                .Add(builder.Optional()->Item<ui32>().Build()).Name("Microsecond") -                .Add(builder.Optional()->Item<ui16>().Build()).Name("TimezoneId"); +            builder.UserType(userType); -            builder.Returns(optionalResourceType); +            const auto typeInfoHelper = builder.TypeInfoHelper(); +            TTupleTypeInspector tuple(*typeInfoHelper, userType); +            Y_ENSURE(tuple, "Tuple with args and options tuples expected"); +            Y_ENSURE(tuple.GetElementsCount() > 0, +                     "Tuple has to contain positional arguments"); -            if (!typesOnly) { -                builder.Implementation(new TUpdate(builder.GetSourcePosition())); +            TTupleTypeInspector argsTuple(*typeInfoHelper, tuple.GetElementType(0)); +            Y_ENSURE(argsTuple, "Tuple with args expected"); +            if (argsTuple.GetElementsCount() == 0) { +                builder.SetError("At least one argument expected"); +                return true;              } -            builder.IsStrict(); +            auto argType = argsTuple.GetElementType(0); + +            if (const auto optType = TOptionalTypeInspector(*typeInfoHelper, argType)) { +                argType = optType.GetItemType(); +            } + +            TResourceTypeInspector resource(*typeInfoHelper, argType); +            if (!resource) { +                TDataTypeInspector data(*typeInfoHelper, argType); +                if (!data) { +                    SetInvalidTypeError(builder, typeInfoHelper, argType); +                    return true; +                } + +                const auto features = NUdf::GetDataTypeInfo(NUdf::GetDataSlot(data.GetTypeId())).Features; +                if (features & NUdf::BigDateType) { +                    BuildSignature<TM64ResourceName>(builder, typesOnly); +                    return true; +                } +                if (features & (NUdf::DateType | NUdf::TzDateType)) { +                    BuildSignature<TMResourceName>(builder, typesOnly); +                    return true; +                } + +                SetInvalidTypeError(builder, typeInfoHelper, argType); +                return true; +            } + +            if (resource.GetTag() == TStringRef::Of(TM64ResourceName)) { +                BuildSignature<TM64ResourceName>(builder, typesOnly); +                return true; +            } + +            if (resource.GetTag() == TStringRef::Of(TMResourceName)) { +                BuildSignature<TMResourceName>(builder, typesOnly); +                return true; +            } + +            ::TStringBuilder sb; +            sb << "Unexpected Resource tag: got '" << resource.GetTag() << "'"; +            builder.SetError(sb);              return true;          } +    private: +        template<const char* TResourceName> +        class TImpl : public TBoxedValue { +        public: +            TUnboxedValue Run(const IValueBuilder* valueBuilder, const TUnboxedValuePod* args) const final { +                try { +                    EMPTY_RESULT_ON_EMPTY_ARG(0); +                    auto result = args[0]; + +                    if (args[1]) { +                        auto year = args[1].Get<std::conditional_t<TResourceName == TMResourceName, ui16, i32>>(); +                        if (!ValidateYear<TResourceName>(year)) { +                            return TUnboxedValuePod(); +                        } +                        SetYear<TResourceName>(result, year); +                    } +                    if (args[2]) { +                        auto month = args[2].Get<ui8>(); +                        if (!ValidateMonth(month)) { +                            return TUnboxedValuePod(); +                        } +                        SetMonth<TResourceName>(result, month); +                    } +                    if (args[3]) { +                        auto day = args[3].Get<ui8>(); +                        if (!ValidateDay(day)) { +                            return TUnboxedValuePod(); +                        } +                        SetDay<TResourceName>(result, day); +                    } +                    if (args[4]) { +                        auto hour = args[4].Get<ui8>(); +                        if (!ValidateHour(hour)) { +                            return TUnboxedValuePod(); +                        } +                        SetHour<TResourceName>(result, hour); +                    } +                    if (args[5]) { +                        auto minute = args[5].Get<ui8>(); +                        if (!ValidateMinute(minute)) { +                            return TUnboxedValuePod(); +                        } +                        SetMinute<TResourceName>(result, minute); +                    } +                    if (args[6]) { +                        auto second = args[6].Get<ui8>(); +                        if (!ValidateSecond(second)) { +                            return TUnboxedValuePod(); +                        } +                        SetSecond<TResourceName>(result, second); +                    } +                    if (args[7]) { +                        auto microsecond = args[7].Get<ui32>(); +                        if (!ValidateMicrosecond(microsecond)) { +                            return TUnboxedValuePod(); +                        } +                        SetMicrosecond<TResourceName>(result, microsecond); +                    } +                    if (args[8]) { +                        auto timezoneId = args[8].Get<ui16>(); +                        if (!ValidateTimezoneId(timezoneId)) { +                            return TUnboxedValuePod(); +                        } +                        SetTimezoneId<TResourceName>(result, timezoneId); +                    } + +                    auto& builder = valueBuilder->GetDateBuilder(); +                    auto& storage = Reference<TResourceName>(result); +                    if (!storage.Validate(builder)) { +                        return TUnboxedValuePod(); +                    } +                    return result; +                } catch (const std::exception& e) { +                    TStringBuilder sb; +                    sb << CurrentExceptionMessage(); +                    sb << Endl << "[" << TStringBuf(Name()) << "]" ; +                    UdfTerminate(sb.c_str()); +                } +            } + +        }; + +        static void SetInvalidTypeError(NUdf::IFunctionTypeInfoBuilder& builder, +            ITypeInfoHelper::TPtr typeInfoHelper, const TType* argType) +        { +            ::TStringBuilder sb; +            sb << "Invalid argument type: got "; +            TTypePrinter(*typeInfoHelper, argType).Out(sb.Out); +            sb << ", but Resource<" << TMResourceName <<"> or Resource<" +               << TM64ResourceName << "> expected"; +            builder.SetError(sb); +        } + +        template<const char* TResourceName> +        static void BuildSignature(NUdf::IFunctionTypeInfoBuilder& builder, bool typesOnly) { +            builder.Returns<TOptional<TResource<TResourceName>>>(); +            builder.OptionalArgs(8).Args()->Add<TAutoMap<TResource<TResourceName>>>() +                .template Add<TOptional<std::conditional_t<TResourceName == TMResourceName, ui16, i32>>>().Name("Year") +                .template Add<TOptional<ui8>>().Name("Month") +                .template Add<TOptional<ui8>>().Name("Day") +                .template Add<TOptional<ui8>>().Name("Hour") +                .template Add<TOptional<ui8>>().Name("Minute") +                .template Add<TOptional<ui8>>().Name("Second") +                .template Add<TOptional<ui32>>().Name("Microsecond") +                .template Add<TOptional<ui16>>().Name("TimezoneId"); +            builder.IsStrict(); +            if (!typesOnly) { +                builder.Implementation(new TImpl<TResourceName>()); +            } +    }      };      // From* diff --git a/yql/essentials/udfs/common/datetime2/test/canondata/test.test_Update_/results.txt b/yql/essentials/udfs/common/datetime2/test/canondata/test.test_Update_/results.txt index 75dfcd0b39a..002d4c76306 100644 --- a/yql/essentials/udfs/common/datetime2/test/canondata/test.test_Update_/results.txt +++ b/yql/essentials/udfs/common/datetime2/test/canondata/test.test_Update_/results.txt @@ -8,227 +8,463 @@                          "StructType";                          [                              [ -                                "column0"; +                                "explicit";                                  [ -                                    "OptionalType"; +                                    "StructType";                                      [ -                                        "DataType"; -                                        "String" +                                        [ +                                            "inday"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "inhour"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "inminute"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "inmonth"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "inmsec"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "insecond"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "intzid"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "inyear"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "ipdate"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "unhour"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "unminute"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "unmsec"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "unsecond"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "untzid"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "upday"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "upmonth"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "uptime"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "upyear"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]                                      ]                                  ]                              ];                              [ -                                "column1"; +                                "implicit";                                  [ -                                    "OptionalType"; +                                    "StructType";                                      [ -                                        "DataType"; -                                        "String" +                                        [ +                                            "inday"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "inhour"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "inminute"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "inmonth"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "inmsec"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "insecond"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "intzid"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "inyear"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "ipdate"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "unhour"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "unminute"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "unmsec"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "unsecond"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "untzid"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "upday"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "upmonth"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "uptime"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "upyear"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]                                      ]                                  ] +                            ] +                        ] +                    ] +                ]; +                "Data" = [ +                    [ +                        [ +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            [ +                                "2001-12-01T11:20:19.345678,GMT"                              ];                              [ -                                "column2"; -                                [ -                                    "OptionalType"; -                                    [ -                                        "DataType"; -                                        "String" -                                    ] -                                ] +                                "2001-12-01T21:10:19.345678,GMT"                              ];                              [ -                                "column3"; -                                [ -                                    "OptionalType"; -                                    [ -                                        "DataType"; -                                        "String" -                                    ] -                                ] +                                "2001-12-01T21:20:19.123456,GMT"                              ];                              [ -                                "column4"; -                                [ -                                    "OptionalType"; -                                    [ -                                        "DataType"; -                                        "String" -                                    ] -                                ] +                                "2001-12-01T21:20:09.345678,GMT"                              ];                              [ -                                "column5"; -                                [ -                                    "OptionalType"; -                                    [ -                                        "DataType"; -                                        "String" -                                    ] -                                ] +                                "2001-12-01T21:20:19.345678,America/Creston"                              ];                              [ -                                "column6"; -                                [ -                                    "OptionalType"; -                                    [ -                                        "DataType"; -                                        "String" -                                    ] -                                ] +                                "2001-12-20T21:20:19.345678,GMT"                              ];                              [ -                                "column7"; -                                [ -                                    "OptionalType"; -                                    [ -                                        "DataType"; -                                        "String" -                                    ] -                                ] +                                "2001-07-01T21:20:19.345678,GMT"                              ];                              [ -                                "column8"; -                                [ -                                    "OptionalType"; -                                    [ -                                        "DataType"; -                                        "String" -                                    ] -                                ] +                                "2001-12-01T11:10:09.345678,GMT"                              ];                              [ -                                "column9"; -                                [ -                                    "OptionalType"; -                                    [ -                                        "DataType"; -                                        "String" -                                    ] -                                ] +                                "2005-12-01T21:20:19.345678,GMT" +                            ] +                        ]; +                        [ +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            [ +                                "2001-12-01T11:20:19.345678,GMT"                              ];                              [ -                                "column10"; -                                [ -                                    "OptionalType"; -                                    [ -                                        "DataType"; -                                        "String" -                                    ] -                                ] +                                "2001-12-01T21:10:19.345678,GMT"                              ];                              [ -                                "column11"; -                                [ -                                    "OptionalType"; -                                    [ -                                        "DataType"; -                                        "String" -                                    ] -                                ] +                                "2001-12-01T21:20:19.123456,GMT"                              ];                              [ -                                "column12"; -                                [ -                                    "OptionalType"; -                                    [ -                                        "DataType"; -                                        "String" -                                    ] -                                ] +                                "2001-12-01T21:20:09.345678,GMT"                              ];                              [ -                                "column13"; -                                [ -                                    "OptionalType"; -                                    [ -                                        "DataType"; -                                        "String" -                                    ] -                                ] +                                "2001-12-01T21:20:19.345678,America/Creston"                              ];                              [ -                                "column14"; -                                [ -                                    "OptionalType"; -                                    [ -                                        "DataType"; -                                        "String" -                                    ] -                                ] +                                "2001-12-20T21:20:19.345678,GMT"                              ];                              [ -                                "column15"; -                                [ -                                    "OptionalType"; -                                    [ -                                        "DataType"; -                                        "String" -                                    ] -                                ] +                                "2001-07-01T21:20:19.345678,GMT"                              ];                              [ -                                "column16"; -                                [ -                                    "OptionalType"; -                                    [ -                                        "DataType"; -                                        "String" -                                    ] -                                ] +                                "2001-12-01T11:10:09.345678,GMT"                              ];                              [ -                                "column17"; -                                [ -                                    "OptionalType"; -                                    [ -                                        "DataType"; -                                        "String" -                                    ] -                                ] +                                "2005-12-01T21:20:19.345678,GMT"                              ]                          ]                      ] -                ]; -                "Data" = [ -                    [ -                        [ -                            "2005-12-01T21:20:19.345678,GMT" -                        ]; -                        #; -                        [ -                            "2001-07-01T21:20:19.345678,GMT" -                        ]; -                        #; -                        [ -                            "2001-12-20T21:20:19.345678,GMT" -                        ]; -                        #; -                        #; -                        [ -                            "2001-12-01T11:10:09.345678,GMT" -                        ]; -                        [ -                            "2001-12-01T11:20:19.345678,GMT" -                        ]; -                        #; -                        [ -                            "2001-12-01T21:10:19.345678,GMT" -                        ]; -                        #; -                        [ -                            "2001-12-01T21:20:09.345678,GMT" -                        ]; -                        #; -                        [ -                            "2001-12-01T21:20:19.123456,GMT" -                        ]; -                        #; -                        [ -                            "2001-12-01T21:20:19.345678,America/Creston" -                        ]; -                        # -                    ]                  ]              }          ] diff --git a/yql/essentials/udfs/common/datetime2/test/cases/Update.sql b/yql/essentials/udfs/common/datetime2/test/cases/Update.sql index 59221221b37..e67a5ecf565 100644 --- a/yql/essentials/udfs/common/datetime2/test/cases/Update.sql +++ b/yql/essentials/udfs/common/datetime2/test/cases/Update.sql @@ -1,25 +1,35 @@  /* syntax version 1 */ -SELECT -    cast(DateTime::MakeTzTimestamp(DateTime::Update(tm, 2005)) as String), -    cast(DateTime::MakeTzTimestamp(DateTime::Update(tm, 2200 as Year)) as String), -    cast(DateTime::MakeTzTimestamp(DateTime::Update(tm, NULL, 7)) as String), -    cast(DateTime::MakeTzTimestamp(DateTime::Update(tm, 13 as Month)) as String), -    cast(DateTime::MakeTzTimestamp(DateTime::Update(tm, NULL, NULL, 20)) as String), -    cast(DateTime::MakeTzTimestamp(DateTime::Update(tm, 32 as Day)) as String), -    cast(DateTime::MakeTzTimestamp(DateTime::Update(tm, 2018, 2, 30)) as String), -    cast(DateTime::MakeTzTimestamp(DateTime::Update(tm, NULL, NULL, NULL, 11, 10, 9)) as String), -    cast(DateTime::MakeTzTimestamp(DateTime::Update(tm, 11 as Hour)) as String), -    cast(DateTime::MakeTzTimestamp(DateTime::Update(tm, 24 as Hour)) as String), -    cast(DateTime::MakeTzTimestamp(DateTime::Update(tm, 10 as Minute)) as String), -    cast(DateTime::MakeTzTimestamp(DateTime::Update(tm, 60 as Minute)) as String), -    cast(DateTime::MakeTzTimestamp(DateTime::Update(tm, 9 as Second)) as String), -    cast(DateTime::MakeTzTimestamp(DateTime::Update(tm, 60 as Second)) as String), -    cast(DateTime::MakeTzTimestamp(DateTime::Update(tm, 123456 as Microsecond)) as String), -    cast(DateTime::MakeTzTimestamp(DateTime::Update(tm, 2000000 as Microsecond)) as String), -    cast(DateTime::MakeTzTimestamp(DateTime::Update(tm, 100 as TimezoneId)) as String), -    cast(DateTime::MakeTzTimestamp(DateTime::Update(tm, 1000 as TimezoneId)) as String) -from ( -    select -        cast(ftztimestamp as TzTimestamp) as tm -    from Input -); +$check = ($arg) -> { +    return <| +        upyear:   CAST(DateTime::MakeTzTimestamp(DateTime::Update($arg, 2005)) AS String), +        inyear:   CAST(DateTime::MakeTzTimestamp(DateTime::Update($arg, 2200 as Year)) AS String), +        upmonth:  CAST(DateTime::MakeTzTimestamp(DateTime::Update($arg, NULL, 7)) AS String), +        inmonth:  CAST(DateTime::MakeTzTimestamp(DateTime::Update($arg, 13 as Month)) AS String), +        upday:    CAST(DateTime::MakeTzTimestamp(DateTime::Update($arg, NULL, NULL, 20)) AS String), +        inday:    CAST(DateTime::MakeTzTimestamp(DateTime::Update($arg, 32 as Day)) AS String), +        ipdate:   CAST(DateTime::MakeTzTimestamp(DateTime::Update($arg, 2018, 2, 30)) AS String), +        uptime:   CAST(DateTime::MakeTzTimestamp(DateTime::Update($arg, NULL, NULL, NULL, 11, 10, 9)) AS String), +        unhour:   CAST(DateTime::MakeTzTimestamp(DateTime::Update($arg, 11 as Hour)) AS String), +        inhour:   CAST(DateTime::MakeTzTimestamp(DateTime::Update($arg, 24 as Hour)) AS String), +        unminute: CAST(DateTime::MakeTzTimestamp(DateTime::Update($arg, 10 as Minute)) AS String), +        inminute: CAST(DateTime::MakeTzTimestamp(DateTime::Update($arg, 60 as Minute)) AS String), +        unsecond: CAST(DateTime::MakeTzTimestamp(DateTime::Update($arg, 9 as Second)) AS String), +        insecond: CAST(DateTime::MakeTzTimestamp(DateTime::Update($arg, 60 as Second)) AS String), +        unmsec:   CAST(DateTime::MakeTzTimestamp(DateTime::Update($arg, 123456 as Microsecond)) AS String), +        inmsec:   CAST(DateTime::MakeTzTimestamp(DateTime::Update($arg, 2000000 as Microsecond)) AS String), +        untzid:   CAST(DateTime::MakeTzTimestamp(DateTime::Update($arg, 100 as TimezoneId)) AS String), +        intzid:   CAST(DateTime::MakeTzTimestamp(DateTime::Update($arg, 1000 as TimezoneId)) AS String), +    |> +}; + +$typeDispatcher = ($row) -> { +    $tm = $row.tm; +    return <| +        explicit: $check(DateTime::Split($tm)), +        implicit: $check($tm), +    |>; +}; + +$input = SELECT CAST(ftztimestamp AS TzTimestamp) as tm FROM Input; + +PROCESS $input USING $typeDispatcher(TableRow()); diff --git a/yql/essentials/udfs/common/datetime2/test_bigdates/canondata/result.json b/yql/essentials/udfs/common/datetime2/test_bigdates/canondata/result.json index 7ac2c62c4ad..01840317a7d 100644 --- a/yql/essentials/udfs/common/datetime2/test_bigdates/canondata/result.json +++ b/yql/essentials/udfs/common/datetime2/test_bigdates/canondata/result.json @@ -28,5 +28,15 @@          {              "uri": "file://test.test_StartOf_/results.txt"          } +    ], +    "test.test[UpdateTz]": [ +        { +            "uri": "file://test.test_UpdateTz_/results.txt" +        } +    ], +    "test.test[Update]": [ +        { +            "uri": "file://test.test_Update_/results.txt" +        }      ]  } diff --git a/yql/essentials/udfs/common/datetime2/test_bigdates/canondata/test.test_UpdateTz_/results.txt b/yql/essentials/udfs/common/datetime2/test_bigdates/canondata/test.test_UpdateTz_/results.txt new file mode 100644 index 00000000000..763afc4374d --- /dev/null +++ b/yql/essentials/udfs/common/datetime2/test_bigdates/canondata/test.test_UpdateTz_/results.txt @@ -0,0 +1,64 @@ +[ +    { +        "Write" = [ +            { +                "Type" = [ +                    "ListType"; +                    [ +                        "StructType"; +                        [ +                            [ +                                "column0"; +                                [ +                                    "OptionalType"; +                                    [ +                                        "DataType"; +                                        "String" +                                    ] +                                ] +                            ] +                        ] +                    ] +                ]; +                "Data" = [ +                    [ +                        [ +                            "2025-02-16T21:00:00Z" +                        ] +                    ] +                ] +            } +        ] +    }; +    { +        "Write" = [ +            { +                "Type" = [ +                    "ListType"; +                    [ +                        "StructType"; +                        [ +                            [ +                                "column0"; +                                [ +                                    "OptionalType"; +                                    [ +                                        "DataType"; +                                        "String" +                                    ] +                                ] +                            ] +                        ] +                    ] +                ]; +                "Data" = [ +                    [ +                        [ +                            "2025-02-16T21:00:00Z" +                        ] +                    ] +                ] +            } +        ] +    } +]
\ No newline at end of file diff --git a/yql/essentials/udfs/common/datetime2/test_bigdates/canondata/test.test_Update_/results.txt b/yql/essentials/udfs/common/datetime2/test_bigdates/canondata/test.test_Update_/results.txt new file mode 100644 index 00000000000..4449395d3cf --- /dev/null +++ b/yql/essentials/udfs/common/datetime2/test_bigdates/canondata/test.test_Update_/results.txt @@ -0,0 +1,1110 @@ +[ +    { +        "Write" = [ +            { +                "Type" = [ +                    "ListType"; +                    [ +                        "StructType"; +                        [ +                            [ +                                "explicit"; +                                [ +                                    "StructType"; +                                    [ +                                        [ +                                            "inday"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "inhour"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "inminute"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "inmonth"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "inmsec"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "insecond"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "intzid"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "inyear"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "ipdate"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "iptime"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "unhour"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "unminute"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "unmsec"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "unsecond"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "untzid"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "update"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "upday"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "upmonth"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "uptime"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "upyear"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ] +                                    ] +                                ] +                            ]; +                            [ +                                "implicit"; +                                [ +                                    "StructType"; +                                    [ +                                        [ +                                            "inday"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "inhour"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "inminute"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "inmonth"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "inmsec"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "insecond"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "intzid"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "inyear"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "ipdate"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "iptime"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "unhour"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "unminute"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "unmsec"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "unsecond"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "untzid"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "update"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "upday"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "upmonth"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "uptime"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ]; +                                        [ +                                            "upyear"; +                                            [ +                                                "OptionalType"; +                                                [ +                                                    "DataType"; +                                                    "String" +                                                ] +                                            ] +                                        ] +                                    ] +                                ] +                            ] +                        ] +                    ] +                ]; +                "Data" = [ +                    [ +                        [ +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            [ +                                "-144169-01-01T19:00:00Z" +                            ]; +                            [ +                                "-144169-01-01T00:24:00Z" +                            ]; +                            [ +                                "-144169-01-01T00:00:00.123456Z" +                            ]; +                            [ +                                "-144169-01-01T00:00:09Z" +                            ]; +                            #; +                            [ +                                "2025-02-17T00:00:00Z" +                            ]; +                            [ +                                "-144169-01-17T00:00:00Z" +                            ]; +                            [ +                                "-144169-02-01T00:00:00Z" +                            ]; +                            [ +                                "-144169-01-01T19:24:09Z" +                            ]; +                            [ +                                "2025-01-01T00:00:00Z" +                            ] +                        ]; +                        [ +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            [ +                                "-144169-01-01T19:00:00Z" +                            ]; +                            [ +                                "-144169-01-01T00:24:00Z" +                            ]; +                            [ +                                "-144169-01-01T00:00:00.123456Z" +                            ]; +                            [ +                                "-144169-01-01T00:00:09Z" +                            ]; +                            #; +                            [ +                                "2025-02-17T00:00:00Z" +                            ]; +                            [ +                                "-144169-01-17T00:00:00Z" +                            ]; +                            [ +                                "-144169-02-01T00:00:00Z" +                            ]; +                            [ +                                "-144169-01-01T19:24:09Z" +                            ]; +                            [ +                                "2025-01-01T00:00:00Z" +                            ] +                        ] +                    ]; +                    [ +                        [ +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            [ +                                "-1-01-01T19:59:59.999999Z" +                            ]; +                            [ +                                "-1-01-01T23:24:59.999999Z" +                            ]; +                            [ +                                "-1-01-01T23:59:59.123456Z" +                            ]; +                            [ +                                "-1-01-01T23:59:09.999999Z" +                            ]; +                            [ +                                "-1-01-01T21:29:42.999999Z" +                            ]; +                            [ +                                "2025-02-17T23:59:59.999999Z" +                            ]; +                            [ +                                "-1-01-17T23:59:59.999999Z" +                            ]; +                            [ +                                "-1-02-01T23:59:59.999999Z" +                            ]; +                            [ +                                "-1-01-01T19:24:09.999999Z" +                            ]; +                            [ +                                "2025-01-01T23:59:59.999999Z" +                            ] +                        ]; +                        [ +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            [ +                                "-1-01-01T19:59:59.999999Z" +                            ]; +                            [ +                                "-1-01-01T23:24:59.999999Z" +                            ]; +                            [ +                                "-1-01-01T23:59:59.123456Z" +                            ]; +                            [ +                                "-1-01-01T23:59:09.999999Z" +                            ]; +                            [ +                                "-1-01-01T21:29:42.999999Z" +                            ]; +                            [ +                                "2025-02-17T23:59:59.999999Z" +                            ]; +                            [ +                                "-1-01-17T23:59:59.999999Z" +                            ]; +                            [ +                                "-1-02-01T23:59:59.999999Z" +                            ]; +                            [ +                                "-1-01-01T19:24:09.999999Z" +                            ]; +                            [ +                                "2025-01-01T23:59:59.999999Z" +                            ] +                        ] +                    ]; +                    [ +                        [ +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            [ +                                "1-01-01T19:00:00Z" +                            ]; +                            [ +                                "1-01-01T00:24:00Z" +                            ]; +                            [ +                                "1-01-01T00:00:00.123456Z" +                            ]; +                            [ +                                "1-01-01T00:00:09Z" +                            ]; +                            [ +                                "-1-12-31T21:29:43Z" +                            ]; +                            [ +                                "2025-02-17T00:00:00Z" +                            ]; +                            [ +                                "1-01-17T00:00:00Z" +                            ]; +                            [ +                                "1-02-01T00:00:00Z" +                            ]; +                            [ +                                "1-01-01T19:24:09Z" +                            ]; +                            [ +                                "2025-01-01T00:00:00Z" +                            ] +                        ]; +                        [ +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            [ +                                "1-01-01T19:00:00Z" +                            ]; +                            [ +                                "1-01-01T00:24:00Z" +                            ]; +                            [ +                                "1-01-01T00:00:00.123456Z" +                            ]; +                            [ +                                "1-01-01T00:00:09Z" +                            ]; +                            [ +                                "-1-12-31T21:29:43Z" +                            ]; +                            [ +                                "2025-02-17T00:00:00Z" +                            ]; +                            [ +                                "1-01-17T00:00:00Z" +                            ]; +                            [ +                                "1-02-01T00:00:00Z" +                            ]; +                            [ +                                "1-01-01T19:24:09Z" +                            ]; +                            [ +                                "2025-01-01T00:00:00Z" +                            ] +                        ] +                    ]; +                    [ +                        [ +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            [ +                                "1969-12-31T19:59:59.999999Z" +                            ]; +                            [ +                                "1969-12-31T23:24:59.999999Z" +                            ]; +                            [ +                                "1969-12-31T23:59:59.123456Z" +                            ]; +                            [ +                                "1969-12-31T23:59:09.999999Z" +                            ]; +                            [ +                                "1969-12-31T20:59:59.999999Z" +                            ]; +                            [ +                                "2025-02-17T23:59:59.999999Z" +                            ]; +                            [ +                                "1969-12-17T23:59:59.999999Z" +                            ]; +                            #; +                            [ +                                "1969-12-31T19:24:09.999999Z" +                            ]; +                            [ +                                "2025-12-31T23:59:59.999999Z" +                            ] +                        ]; +                        [ +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            [ +                                "1969-12-31T19:59:59.999999Z" +                            ]; +                            [ +                                "1969-12-31T23:24:59.999999Z" +                            ]; +                            [ +                                "1969-12-31T23:59:59.123456Z" +                            ]; +                            [ +                                "1969-12-31T23:59:09.999999Z" +                            ]; +                            [ +                                "1969-12-31T20:59:59.999999Z" +                            ]; +                            [ +                                "2025-02-17T23:59:59.999999Z" +                            ]; +                            [ +                                "1969-12-17T23:59:59.999999Z" +                            ]; +                            #; +                            [ +                                "1969-12-31T19:24:09.999999Z" +                            ]; +                            [ +                                "2025-12-31T23:59:59.999999Z" +                            ] +                        ] +                    ]; +                    [ +                        [ +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            [ +                                "1970-01-01T19:00:00Z" +                            ]; +                            [ +                                "1970-01-01T00:24:00Z" +                            ]; +                            [ +                                "1970-01-01T00:00:00.123456Z" +                            ]; +                            [ +                                "1970-01-01T00:00:09Z" +                            ]; +                            [ +                                "1969-12-31T21:00:00Z" +                            ]; +                            [ +                                "2025-02-17T00:00:00Z" +                            ]; +                            [ +                                "1970-01-17T00:00:00Z" +                            ]; +                            [ +                                "1970-02-01T00:00:00Z" +                            ]; +                            [ +                                "1970-01-01T19:24:09Z" +                            ]; +                            [ +                                "2025-01-01T00:00:00Z" +                            ] +                        ]; +                        [ +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            [ +                                "1970-01-01T19:00:00Z" +                            ]; +                            [ +                                "1970-01-01T00:24:00Z" +                            ]; +                            [ +                                "1970-01-01T00:00:00.123456Z" +                            ]; +                            [ +                                "1970-01-01T00:00:09Z" +                            ]; +                            [ +                                "1969-12-31T21:00:00Z" +                            ]; +                            [ +                                "2025-02-17T00:00:00Z" +                            ]; +                            [ +                                "1970-01-17T00:00:00Z" +                            ]; +                            [ +                                "1970-02-01T00:00:00Z" +                            ]; +                            [ +                                "1970-01-01T19:24:09Z" +                            ]; +                            [ +                                "2025-01-01T00:00:00Z" +                            ] +                        ] +                    ]; +                    [ +                        [ +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            [ +                                "2025-01-01T19:00:00Z" +                            ]; +                            [ +                                "2025-01-01T00:24:00Z" +                            ]; +                            [ +                                "2025-01-01T00:00:00.123456Z" +                            ]; +                            [ +                                "2025-01-01T00:00:09Z" +                            ]; +                            [ +                                "2024-12-31T21:00:00Z" +                            ]; +                            [ +                                "2025-02-17T00:00:00Z" +                            ]; +                            [ +                                "2025-01-17T00:00:00Z" +                            ]; +                            [ +                                "2025-02-01T00:00:00Z" +                            ]; +                            [ +                                "2025-01-01T19:24:09Z" +                            ]; +                            [ +                                "2025-01-01T00:00:00Z" +                            ] +                        ]; +                        [ +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            [ +                                "2025-01-01T19:00:00Z" +                            ]; +                            [ +                                "2025-01-01T00:24:00Z" +                            ]; +                            [ +                                "2025-01-01T00:00:00.123456Z" +                            ]; +                            [ +                                "2025-01-01T00:00:09Z" +                            ]; +                            [ +                                "2024-12-31T21:00:00Z" +                            ]; +                            [ +                                "2025-02-17T00:00:00Z" +                            ]; +                            [ +                                "2025-01-17T00:00:00Z" +                            ]; +                            [ +                                "2025-02-01T00:00:00Z" +                            ]; +                            [ +                                "2025-01-01T19:24:09Z" +                            ]; +                            [ +                                "2025-01-01T00:00:00Z" +                            ] +                        ] +                    ]; +                    [ +                        [ +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            [ +                                "2106-01-01T19:00:00Z" +                            ]; +                            [ +                                "2106-01-01T00:24:00Z" +                            ]; +                            [ +                                "2106-01-01T00:00:00.123456Z" +                            ]; +                            [ +                                "2106-01-01T00:00:09Z" +                            ]; +                            [ +                                "2105-12-31T21:00:00Z" +                            ]; +                            [ +                                "2025-02-17T00:00:00Z" +                            ]; +                            [ +                                "2106-01-17T00:00:00Z" +                            ]; +                            [ +                                "2106-02-01T00:00:00Z" +                            ]; +                            [ +                                "2106-01-01T19:24:09Z" +                            ]; +                            [ +                                "2025-01-01T00:00:00Z" +                            ] +                        ]; +                        [ +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            [ +                                "2106-01-01T19:00:00Z" +                            ]; +                            [ +                                "2106-01-01T00:24:00Z" +                            ]; +                            [ +                                "2106-01-01T00:00:00.123456Z" +                            ]; +                            [ +                                "2106-01-01T00:00:09Z" +                            ]; +                            [ +                                "2105-12-31T21:00:00Z" +                            ]; +                            [ +                                "2025-02-17T00:00:00Z" +                            ]; +                            [ +                                "2106-01-17T00:00:00Z" +                            ]; +                            [ +                                "2106-02-01T00:00:00Z" +                            ]; +                            [ +                                "2106-01-01T19:24:09Z" +                            ]; +                            [ +                                "2025-01-01T00:00:00Z" +                            ] +                        ] +                    ]; +                    [ +                        [ +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            [ +                                "148107-12-31T19:59:59.999999Z" +                            ]; +                            [ +                                "148107-12-31T23:24:59.999999Z" +                            ]; +                            [ +                                "148107-12-31T23:59:59.123456Z" +                            ]; +                            [ +                                "148107-12-31T23:59:09.999999Z" +                            ]; +                            [ +                                "148107-12-31T20:59:59.999999Z" +                            ]; +                            [ +                                "2025-02-17T23:59:59.999999Z" +                            ]; +                            [ +                                "148107-12-17T23:59:59.999999Z" +                            ]; +                            #; +                            [ +                                "148107-12-31T19:24:09.999999Z" +                            ]; +                            [ +                                "2025-12-31T23:59:59.999999Z" +                            ] +                        ]; +                        [ +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            #; +                            [ +                                "148107-12-31T19:59:59.999999Z" +                            ]; +                            [ +                                "148107-12-31T23:24:59.999999Z" +                            ]; +                            [ +                                "148107-12-31T23:59:59.123456Z" +                            ]; +                            [ +                                "148107-12-31T23:59:09.999999Z" +                            ]; +                            [ +                                "148107-12-31T20:59:59.999999Z" +                            ]; +                            [ +                                "2025-02-17T23:59:59.999999Z" +                            ]; +                            [ +                                "148107-12-17T23:59:59.999999Z" +                            ]; +                            #; +                            [ +                                "148107-12-31T19:24:09.999999Z" +                            ]; +                            [ +                                "2025-12-31T23:59:59.999999Z" +                            ] +                        ] +                    ] +                ] +            } +        ] +    } +]
\ No newline at end of file diff --git a/yql/essentials/udfs/common/datetime2/test_bigdates/cases/Update.cfg b/yql/essentials/udfs/common/datetime2/test_bigdates/cases/Update.cfg new file mode 100644 index 00000000000..73382ef1be0 --- /dev/null +++ b/yql/essentials/udfs/common/datetime2/test_bigdates/cases/Update.cfg @@ -0,0 +1 @@ +in plato.Input Update.in diff --git a/yql/essentials/udfs/common/datetime2/test_bigdates/cases/Update.in b/yql/essentials/udfs/common/datetime2/test_bigdates/cases/Update.in new file mode 100644 index 00000000000..4eb94e06a48 --- /dev/null +++ b/yql/essentials/udfs/common/datetime2/test_bigdates/cases/Update.in @@ -0,0 +1,8 @@ +{"ftimestamp64"="-144169-01-01T00:00:00.000000Z"}; +{"ftimestamp64"="-1-01-01T23:59:59.999999Z"}; +{"ftimestamp64"="1-01-01T00:00:00.000000Z"}; +{"ftimestamp64"="1969-12-31T23:59:59.999999Z"}; +{"ftimestamp64"="1970-01-01T00:00:00.000000Z"}; +{"ftimestamp64"="2025-01-01T00:00:00.000000Z"}; +{"ftimestamp64"="2106-01-01T00:00:00.000000Z"}; +{"ftimestamp64"="148107-12-31T23:59:59.999999Z"}; diff --git a/yql/essentials/udfs/common/datetime2/test_bigdates/cases/Update.in.attr b/yql/essentials/udfs/common/datetime2/test_bigdates/cases/Update.in.attr new file mode 100644 index 00000000000..91994000ceb --- /dev/null +++ b/yql/essentials/udfs/common/datetime2/test_bigdates/cases/Update.in.attr @@ -0,0 +1,16 @@ +{ +    "_yql_row_spec" = { +        "Type" = [ +            "StructType"; +            [ +                [ +                    "ftimestamp64"; +                    [ +                        "DataType"; +                        "String" +                    ] +                ] +            ] +        ] +    } +} diff --git a/yql/essentials/udfs/common/datetime2/test_bigdates/cases/Update.sql b/yql/essentials/udfs/common/datetime2/test_bigdates/cases/Update.sql new file mode 100644 index 00000000000..2c7e19865fe --- /dev/null +++ b/yql/essentials/udfs/common/datetime2/test_bigdates/cases/Update.sql @@ -0,0 +1,37 @@ +/* syntax version 1 */ +$check = ($arg) -> { +    return <| +        upyear:   CAST(DateTime::MakeTimestamp64(DateTime::Update($arg, 2025)) AS String), +        inyear:   CAST(DateTime::MakeTimestamp64(DateTime::Update($arg, 148108 as Year)) AS String), +        upmonth:  CAST(DateTime::MakeTimestamp64(DateTime::Update($arg, NULL, 2)) AS String), +        inmonth:  CAST(DateTime::MakeTimestamp64(DateTime::Update($arg, 13 as Month)) AS String), +        upday:    CAST(DateTime::MakeTimestamp64(DateTime::Update($arg, NULL, NULL, 17)) AS String), +        inday:    CAST(DateTime::MakeTimestamp64(DateTime::Update($arg, 32 as Day)) AS String), +        update:   CAST(DateTime::MakeTimestamp64(DateTime::Update($arg, 2025, 2, 17)) AS String), +        ipdate:   CAST(DateTime::MakeTimestamp64(DateTime::Update($arg, 2025, 2, 29)) AS String), +        uptime:   CAST(DateTime::MakeTimestamp64(DateTime::Update($arg, NULL, NULL, NULL, 19, 24, 9)) AS String), +        iptime:   CAST(DateTime::MakeTimestamp64(DateTime::Update($arg, NULL, NULL, NULL, 25, 60, 61)) AS String), +        unhour:   CAST(DateTime::MakeTimestamp64(DateTime::Update($arg, 19 as Hour)) AS String), +        inhour:   CAST(DateTime::MakeTimestamp64(DateTime::Update($arg, 24 as Hour)) AS String), +        unminute: CAST(DateTime::MakeTimestamp64(DateTime::Update($arg, 24 as Minute)) AS String), +        inminute: CAST(DateTime::MakeTimestamp64(DateTime::Update($arg, 60 as Minute)) AS String), +        unsecond: CAST(DateTime::MakeTimestamp64(DateTime::Update($arg, 9 as Second)) AS String), +        insecond: CAST(DateTime::MakeTimestamp64(DateTime::Update($arg, 60 as Second)) AS String), +        unmsec:   CAST(DateTime::MakeTimestamp64(DateTime::Update($arg, 123456 as Microsecond)) AS String), +        inmsec:   CAST(DateTime::MakeTimestamp64(DateTime::Update($arg, 1234567 as Microsecond)) AS String), +        untzid:   CAST(DateTime::MakeTimestamp64(DateTime::Update($arg, 1 as TimezoneId)) AS String), +        intzid:   CAST(DateTime::MakeTimestamp64(DateTime::Update($arg, 1000 as TimezoneId)) AS String), +    |> +}; + +$typeDispatcher = ($row) -> { +    $tm = $row.tm; +    return <| +        explicit: $check(DateTime::Split($tm)), +        implicit: $check($tm), +    |>; +}; + +$input = SELECT CAST(ftimestamp64 AS Timestamp64) as tm FROM Input; + +PROCESS $input USING $typeDispatcher(TableRow()); diff --git a/yql/essentials/udfs/common/datetime2/test_bigdates/cases/UpdateTz.sql b/yql/essentials/udfs/common/datetime2/test_bigdates/cases/UpdateTz.sql new file mode 100644 index 00000000000..2fa7c48c7e5 --- /dev/null +++ b/yql/essentials/udfs/common/datetime2/test_bigdates/cases/UpdateTz.sql @@ -0,0 +1,9 @@ +/* syntax version 1 */ +pragma warning("disable","4510"); +SELECT CAST(DateTime::MakeDatetime64(DateTime::Update( +    CAST("2025-02-17T00:00:00Z" AS Datetime64), Yql::TimezoneId("Europe/Moscow") as TimezoneId) +) AS String); + +SELECT CAST(DateTime::MakeDatetime64(DateTime::Update( +    CAST("2025-02-17T00:00:00Z" AS Datetime64), "Europe/Moscow" as Timezone) +) AS String);  | 
