Skip to content

Commit 90ba8f6

Browse files
authored
init (#1348)
1 parent bc843db commit 90ba8f6

File tree

3 files changed

+23
-0
lines changed

3 files changed

+23
-0
lines changed

ydb/library/yql/minikql/mkql_terminator.cpp

+14
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#include "defs.h"
22
#include "mkql_terminator.h"
33

4+
#include <util/string/builder.h>
5+
46
namespace NKikimr {
57

68
namespace NMiniKQL {
@@ -18,6 +20,18 @@ TBindTerminator::~TBindTerminator()
1820
Terminator = PreviousTerminator;
1921
}
2022

23+
TThrowingBindTerminator::TThrowingBindTerminator()
24+
: TBindTerminator(this)
25+
{
26+
}
27+
28+
void TThrowingBindTerminator::Terminate(const char* message) const {
29+
TStringBuf reason = (message ? TStringBuf(message) : TStringBuf("(unknown)"));
30+
TString fullMessage = TStringBuilder() <<
31+
"Terminate was called, reason(" << reason.size() << "): " << reason << Endl;
32+
ythrow yexception() << fullMessage;
33+
}
34+
2135
[[noreturn]] void MKQLTerminate(const char* message) {
2236
if (const auto t = TBindTerminator::Terminator)
2337
t->Terminate(message);

ydb/library/yql/minikql/mkql_terminator.h

+5
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@ struct TBindTerminator : private TNonCopyable {
2626
ITerminator* PreviousTerminator;
2727
};
2828

29+
struct TThrowingBindTerminator : public TBindTerminator, public ITerminator {
30+
TThrowingBindTerminator();
31+
void Terminate(const char* message) const final;
32+
};
33+
2934
[[noreturn]] void MKQLTerminate(const char* message);
3035

3136
}

ydb/library/yql/providers/dq/actors/proto_builder.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ bool TProtoBuilder::CanBuildResultSet() const {
6060
}
6161

6262
TString TProtoBuilder::BuildYson(TVector<NYql::NDq::TDqSerializedBatch>&& rows, ui64 maxBytesLimit) {
63+
TThrowingBindTerminator t;
6364
ui64 size = 0;
6465
TStringStream out;
6566
NYson::TYsonWriter writer((IOutputStream*)&out);
@@ -82,13 +83,15 @@ TString TProtoBuilder::BuildYson(TVector<NYql::NDq::TDqSerializedBatch>&& rows,
8283
}
8384

8485
bool TProtoBuilder::WriteYsonData(NYql::NDq::TDqSerializedBatch&& data, const std::function<bool(const TString& rawYson)>& func) {
86+
TThrowingBindTerminator t;
8587
return WriteData(std::move(data), [&](const NYql::NUdf::TUnboxedValuePod& value) {
8688
auto rowYson = NCommon::WriteYsonValue(value, ResultType, ColumnOrder.empty() ? nullptr : &ColumnOrder);
8789
return func(rowYson);
8890
});
8991
}
9092

9193
bool TProtoBuilder::WriteData(NYql::NDq::TDqSerializedBatch&& data, const std::function<bool(const NYql::NUdf::TUnboxedValuePod& value)>& func) {
94+
TThrowingBindTerminator t;
9295
TGuard<TScopedAlloc> allocGuard(Alloc);
9396

9497
TMemoryUsageInfo memInfo("ProtoBuilder");
@@ -106,6 +109,7 @@ bool TProtoBuilder::WriteData(NYql::NDq::TDqSerializedBatch&& data, const std::f
106109
}
107110

108111
bool TProtoBuilder::WriteData(TVector<NYql::NDq::TDqSerializedBatch>&& rows, const std::function<bool(const NYql::NUdf::TUnboxedValuePod& value)>& func) {
112+
TThrowingBindTerminator t;
109113
TGuard<TScopedAlloc> allocGuard(Alloc);
110114

111115
TMemoryUsageInfo memInfo("ProtoBuilder");

0 commit comments

Comments
 (0)