@@ -236,17 +236,24 @@ class TDqGatewaySession: public std::enable_shared_from_this<TDqGatewaySession>
236
236
rows.emplace_back (std::move (batch));
237
237
}
238
238
239
- NYql::NDqs::TProtoBuilder protoBuilder (resultFormatSettings.ResultType , resultFormatSettings.Columns );
239
+ result.AddIssues (issues);
240
+ try {
241
+ NYql::NDqs::TProtoBuilder protoBuilder (resultFormatSettings.ResultType , resultFormatSettings.Columns );
240
242
241
- bool ysonTruncated = false ;
242
- result.Data = protoBuilder.BuildYson (std::move (rows),
243
- result.Truncated ? resultFormatSettings.SizeLimit .GetOrElse (Max<ui64>()) : Max<ui64>(),
244
- result.Truncated ? resultFormatSettings.RowsLimit .GetOrElse (Max<ui64>()) : Max<ui64>(),
245
- &ysonTruncated);
243
+ bool ysonTruncated = false ;
244
+ result.Data = protoBuilder.BuildYson (std::move (rows),
245
+ result.Truncated ? resultFormatSettings.SizeLimit .GetOrElse (Max<ui64>()) : Max<ui64>(),
246
+ result.Truncated ? resultFormatSettings.RowsLimit .GetOrElse (Max<ui64>()) : Max<ui64>(),
247
+ &ysonTruncated);
246
248
247
- result.Truncated = result.Truncated || ysonTruncated;
248
- result.AddIssues (issues);
249
- result.SetSuccess ();
249
+ result.Truncated = result.Truncated || ysonTruncated;
250
+ result.SetSuccess ();
251
+ } catch (...) {
252
+ YQL_CLOG (ERROR, ProviderDq) << " Failed to build yson result: " << CurrentExceptionMessage ();
253
+ error = true ;
254
+ auto issue = TIssue (" Failed to build query result (probably due to malformed UDF)" );
255
+ result.AddIssue (issue.SetCode (TIssuesIds::DQ_GATEWAY_ERROR, TSeverityIds::S_ERROR));
256
+ }
250
257
} else {
251
258
YQL_CLOG (ERROR, ProviderDq) << " Issue " << issues.ToString ();
252
259
result.AddIssues (issues);
0 commit comments