diff options
author | vvvv <[email protected]> | 2025-10-06 13:26:25 +0300 |
---|---|---|
committer | vvvv <[email protected]> | 2025-10-06 14:06:25 +0300 |
commit | eca8ce9cb1613d5c983185c4e43c20651a9638aa (patch) | |
tree | 61ee5ae779948e61af9a7691d19eaa2c09869121 /yql/essentials/udfs/common/json2/as_json_node.h | |
parent | 4adf7eecae16a9b228b28cc5f64c27ef69ad5ec2 (diff) |
YQL-20086 udfs
init
commit_hash:f9684778bf1ea956965f2360b80b91edb7d4ffbe
Diffstat (limited to 'yql/essentials/udfs/common/json2/as_json_node.h')
-rw-r--r-- | yql/essentials/udfs/common/json2/as_json_node.h | 171 |
1 files changed, 85 insertions, 86 deletions
diff --git a/yql/essentials/udfs/common/json2/as_json_node.h b/yql/essentials/udfs/common/json2/as_json_node.h index 6060f03bea8..82c51802433 100644 --- a/yql/essentials/udfs/common/json2/as_json_node.h +++ b/yql/essentials/udfs/common/json2/as_json_node.h @@ -8,108 +8,107 @@ #include <yql/essentials/minikql/dom/json.h> namespace NJson2Udf { - using namespace NKikimr; - using namespace NUdf; - using namespace NYql; - using namespace NDom; - - template <typename TSource> - class TAsJsonNode: public TBoxedValue { - public: - TAsJsonNode(TSourcePosition pos) - : Pos_(pos) - { +using namespace NKikimr; +using namespace NUdf; +using namespace NYql; +using namespace NDom; + +template <typename TSource> +class TAsJsonNode: public TBoxedValue { +public: + TAsJsonNode(TSourcePosition pos) + : Pos_(pos) + { + } + + static TStringRef Name(); + + static bool DeclareSignature( + const TStringRef& name, + TType* userType, + IFunctionTypeInfoBuilder& builder, + bool typesOnly) { + Y_UNUSED(userType); + if (name != Name()) { + return false; } - static TStringRef Name(); + auto optionalSourceType = builder.Optional()->Item<TSource>().Build(); + auto resourceType = builder.Resource(JSON_NODE_RESOURCE_NAME); + builder.Args() + ->Add(optionalSourceType) + .Done() + .Returns(resourceType); - static bool DeclareSignature( - const TStringRef& name, - TType* userType, - IFunctionTypeInfoBuilder& builder, - bool typesOnly) { - Y_UNUSED(userType); - if (name != Name()) { - return false; - } + if (!typesOnly) { + builder.Implementation(new TAsJsonNode<TSource>(builder.GetSourcePosition())); + } - auto optionalSourceType = builder.Optional()->Item<TSource>().Build(); - auto resourceType = builder.Resource(JSON_NODE_RESOURCE_NAME); - builder.Args() - ->Add(optionalSourceType) - .Done() - .Returns(resourceType); + builder.IsStrict(); + return true; + } - if (!typesOnly) { - builder.Implementation(new TAsJsonNode<TSource>(builder.GetSourcePosition())); - } +private: + const size_t MaxParseErrors_ = 10; - builder.IsStrict(); - return true; - } + static TUnboxedValue Interpret(const TUnboxedValue& sourceValue, const IValueBuilder* valueBuilder); - private: - const size_t MaxParseErrors_ = 10; - - static TUnboxedValue Interpret(const TUnboxedValue& sourceValue, const IValueBuilder* valueBuilder); - - TUnboxedValue Run( - const IValueBuilder* valueBuilder, - const TUnboxedValuePod* args) const final { - Y_UNUSED(valueBuilder); - try { - if (!args[0].HasValue()) { - return MakeEntity(); - } - return Interpret(args[0], valueBuilder); - } catch (const std::exception& e) { - UdfTerminate((TStringBuilder() << Pos_ << " " << e.what()).c_str()); + TUnboxedValue Run( + const IValueBuilder* valueBuilder, + const TUnboxedValuePod* args) const final { + Y_UNUSED(valueBuilder); + try { + if (!args[0].HasValue()) { + return MakeEntity(); } + return Interpret(args[0], valueBuilder); + } catch (const std::exception& e) { + UdfTerminate((TStringBuilder() << Pos_ << " " << e.what()).c_str()); } - - TSourcePosition Pos_; - }; - - template <> - TStringRef TAsJsonNode<TUtf8>::Name() { - return TStringRef::Of("Utf8AsJsonNode"); } - template <> - TUnboxedValue TAsJsonNode<TUtf8>::Interpret(const TUnboxedValue& sourceValue, const IValueBuilder* valueBuilder) { - return MakeString(sourceValue.AsStringRef(), valueBuilder); - } + TSourcePosition Pos_; +}; - template <> - TStringRef TAsJsonNode<double>::Name() { - return TStringRef::Of("DoubleAsJsonNode"); - } +template <> +TStringRef TAsJsonNode<TUtf8>::Name() { + return TStringRef::Of("Utf8AsJsonNode"); +} - template <> - TUnboxedValue TAsJsonNode<double>::Interpret(const TUnboxedValue& sourceValue, const IValueBuilder* valueBuilder) { - Y_UNUSED(valueBuilder); - return MakeDouble(sourceValue.Get<double>()); - } +template <> +TUnboxedValue TAsJsonNode<TUtf8>::Interpret(const TUnboxedValue& sourceValue, const IValueBuilder* valueBuilder) { + return MakeString(sourceValue.AsStringRef(), valueBuilder); +} - template <> - TStringRef TAsJsonNode<bool>::Name() { - return TStringRef::Of("BoolAsJsonNode"); - } +template <> +TStringRef TAsJsonNode<double>::Name() { + return TStringRef::Of("DoubleAsJsonNode"); +} - template <> - TUnboxedValue TAsJsonNode<bool>::Interpret(const TUnboxedValue& sourceValue, const IValueBuilder* valueBuilder) { - Y_UNUSED(valueBuilder); - return MakeBool(sourceValue.Get<bool>()); - } +template <> +TUnboxedValue TAsJsonNode<double>::Interpret(const TUnboxedValue& sourceValue, const IValueBuilder* valueBuilder) { + Y_UNUSED(valueBuilder); + return MakeDouble(sourceValue.Get<double>()); +} - template <> - TStringRef TAsJsonNode<TJson>::Name() { - return TStringRef::Of("JsonAsJsonNode"); - } +template <> +TStringRef TAsJsonNode<bool>::Name() { + return TStringRef::Of("BoolAsJsonNode"); +} - template <> - TUnboxedValue TAsJsonNode<TJson>::Interpret(const TUnboxedValue& sourceValue, const IValueBuilder* valueBuilder) { - return TryParseJsonDom(sourceValue.AsStringRef(), valueBuilder); - } +template <> +TUnboxedValue TAsJsonNode<bool>::Interpret(const TUnboxedValue& sourceValue, const IValueBuilder* valueBuilder) { + Y_UNUSED(valueBuilder); + return MakeBool(sourceValue.Get<bool>()); } +template <> +TStringRef TAsJsonNode<TJson>::Name() { + return TStringRef::Of("JsonAsJsonNode"); +} + +template <> +TUnboxedValue TAsJsonNode<TJson>::Interpret(const TUnboxedValue& sourceValue, const IValueBuilder* valueBuilder) { + return TryParseJsonDom(sourceValue.AsStringRef(), valueBuilder); +} +} // namespace NJson2Udf |