diff --git a/ydb/library/yql/udfs/common/roaring/roaring.cpp b/ydb/library/yql/udfs/common/roaring/roaring.cpp index f3a4ded26ad7..03b5772d969a 100644 --- a/ydb/library/yql/udfs/common/roaring/roaring.cpp +++ b/ydb/library/yql/udfs/common/roaring/roaring.cpp @@ -201,7 +201,9 @@ namespace { class TRoaringDeserialize: public TBoxedValue { public: - TRoaringDeserialize() { + TRoaringDeserialize(TSourcePosition pos) + : Pos_(pos) + { } static TStringRef Name() { @@ -212,8 +214,13 @@ namespace { TUnboxedValue Run(const IValueBuilder* valueBuilder, const TUnboxedValuePod* args) const override { Y_UNUSED(valueBuilder); - return TUnboxedValuePod(new TRoaringWrapper(args[0].AsStringRef())); + try { + return TUnboxedValuePod(new TRoaringWrapper(args[0].AsStringRef())); + } catch (const std::exception& e) { + UdfTerminate((TStringBuilder() << Pos_ << " " << e.what()).data()); + } } + TSourcePosition Pos_; }; class TRoaringSerialize: public TBoxedValue { @@ -303,7 +310,7 @@ namespace { builder.Returns>().Args()->Add>(); if (!typesOnly) { - builder.Implementation(new TRoaringDeserialize()); + builder.Implementation(new TRoaringDeserialize(builder.GetSourcePosition())); } } else if (TRoaringSerialize::Name() == name) { builder.Returns(builder.SimpleType())