Skip to content

Commit 137077a

Browse files
authored
Added TYQLConclusionStatusImpl with NYql::TIssues as error (#12452)
1 parent 9adb0ef commit 137077a

File tree

7 files changed

+185
-103
lines changed

7 files changed

+185
-103
lines changed
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
#pragma once
2+
3+
#include <util/generic/singleton.h>
4+
#include <util/system/yassert.h>
5+
6+
#include <optional>
7+
8+
namespace NKikimr {
9+
10+
template <class TDerived, class TErrorDescription, class TStatus, TStatus StatusOk, TStatus DefaultError>
11+
class TConclusionStatusGenericImpl {
12+
protected:
13+
std::optional<TErrorDescription> ErrorDescription;
14+
TStatus Status = StatusOk;
15+
16+
TConclusionStatusGenericImpl() = default;
17+
18+
TConclusionStatusGenericImpl(const TErrorDescription& error, TStatus status = DefaultError)
19+
: ErrorDescription(error)
20+
, Status(status) {
21+
Y_ABORT_UNLESS(!!ErrorDescription);
22+
}
23+
24+
TConclusionStatusGenericImpl(TErrorDescription&& error, TStatus status = DefaultError)
25+
: ErrorDescription(std::move(error))
26+
, Status(status) {
27+
Y_ABORT_UNLESS(!!ErrorDescription);
28+
}
29+
30+
public:
31+
virtual ~TConclusionStatusGenericImpl() = default;
32+
33+
public:
34+
[[nodiscard]] const TErrorDescription& GetErrorDescription() const {
35+
return ErrorDescription ? *ErrorDescription : Default<TErrorDescription>();
36+
}
37+
38+
[[nodiscard]] TStatus GetStatus() const {
39+
return Status;
40+
}
41+
42+
template <class TErrorMessage>
43+
[[nodiscard]] static TDerived Fail(const TErrorMessage& errorMessage) {
44+
return TDerived(errorMessage);
45+
}
46+
47+
template <class TErrorMessage>
48+
[[nodiscard]] static TDerived Fail(const TStatus& status, const TErrorMessage& errorMessage) {
49+
Y_ABORT_UNLESS(DefaultError == StatusOk || status != StatusOk);
50+
return TDerived(errorMessage, status);
51+
}
52+
53+
[[nodiscard]] bool IsFail() const {
54+
return !Ok();
55+
}
56+
57+
[[nodiscard]] bool IsSuccess() const {
58+
return Ok();
59+
}
60+
61+
[[nodiscard]] bool Ok() const {
62+
return !ErrorDescription;
63+
}
64+
65+
[[nodiscard]] bool operator!() const {
66+
return !!ErrorDescription;
67+
}
68+
69+
[[nodiscard]] static TDerived Success() {
70+
return TDerived();
71+
}
72+
};
73+
74+
} // namespace NKikimr

ydb/library/conclusion/generic/result.h

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#pragma once
22
#include <util/generic/singleton.h>
3+
#include <util/generic/string.h>
34
#include <util/system/yassert.h>
45

56
#include <optional>
@@ -55,13 +56,13 @@ class TConclusionImpl {
5556

5657
const TResult& GetResult() const {
5758
auto result = std::get_if<TResult>(&Result);
58-
Y_ABORT_UNLESS(result, "incorrect object for result request");
59+
Y_ABORT_UNLESS(result, "incorrect object for result request: %s", GetErrorMessage().data());
5960
return *result;
6061
}
6162

6263
TResult& MutableResult() {
6364
auto result = std::get_if<TResult>(&Result);
64-
Y_ABORT_UNLESS(result, "incorrect object for result request");
65+
Y_ABORT_UNLESS(result, "incorrect object for result request: %s", GetErrorMessage().data());
6566
return *result;
6667
}
6768

@@ -91,13 +92,10 @@ class TConclusionImpl {
9192
return GetError();
9293
}
9394

94-
const TString& GetErrorMessage() const {
95+
TString GetErrorMessage() const {
9596
auto* status = std::get_if<TStatus>(&Result);
96-
if (!status) {
97-
return Default<TString>();
98-
} else {
99-
return status->GetErrorMessage();
100-
}
97+
Y_ABORT_UNLESS(status, "incorrect object for extracting error message");
98+
return status->GetErrorMessage();
10199
}
102100

103101
auto GetStatus() const {

ydb/library/conclusion/generic/status.h

Lines changed: 0 additions & 94 deletions
This file was deleted.
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#pragma once
2+
3+
#include "generic_status.h"
4+
5+
#include <util/generic/string.h>
6+
7+
namespace NKikimr {
8+
9+
template <class TStatus, TStatus StatusOk, TStatus DefaultError>
10+
class TConclusionStatusImpl : public TConclusionStatusGenericImpl<TConclusionStatusImpl<TStatus, StatusOk, DefaultError>, TString, TStatus, StatusOk, DefaultError> {
11+
protected:
12+
using TSelf = TConclusionStatusImpl<TStatus, StatusOk, DefaultError>;
13+
using TBase = TConclusionStatusGenericImpl<TSelf, TString, TStatus, StatusOk, DefaultError>;
14+
using TBase::TBase;
15+
16+
friend class TConclusionStatusGenericImpl<TSelf, TString, TStatus, StatusOk, DefaultError>;
17+
18+
TConclusionStatusImpl() = default;
19+
20+
TConclusionStatusImpl(const char* errorMessage, TStatus status = DefaultError)
21+
: TBase(TString(errorMessage), status) {
22+
}
23+
24+
TConclusionStatusImpl(const std::string& errorMessage, TStatus status = DefaultError)
25+
: TBase(TString(errorMessage), status) {
26+
}
27+
28+
public:
29+
void Validate(const TString& processInfo = Default<TString>()) const {
30+
if (processInfo) {
31+
Y_ABORT_UNLESS(TBase::Ok(), "error=%s, processInfo=%s", GetErrorMessage().c_str(), processInfo.c_str());
32+
} else {
33+
Y_ABORT_UNLESS(TBase::Ok(), "error=%s", GetErrorMessage().c_str());
34+
}
35+
}
36+
37+
[[nodiscard]] TString GetErrorMessage() const {
38+
return TBase::GetErrorDescription();
39+
}
40+
};
41+
42+
} // namespace NKikimr

ydb/library/conclusion/generic/ya.make

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ SRCS()
44

55
PEERDIR(
66
util
7+
8+
yql/essentials/public/issue
79
)
810

911
END()
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
#pragma once
2+
3+
#include "generic_status.h"
4+
5+
#include <yql/essentials/public/issue/yql_issue.h>
6+
7+
namespace NKikimr {
8+
9+
template <class TStatus, TStatus StatusOk, TStatus DefaultError>
10+
class TYQLConclusionStatusImpl : public TConclusionStatusGenericImpl<TYQLConclusionStatusImpl<TStatus, StatusOk, DefaultError>, NYql::TIssues, TStatus, StatusOk, DefaultError> {
11+
protected:
12+
using TSelf = TYQLConclusionStatusImpl<TStatus, StatusOk, DefaultError>;
13+
using TBase = TConclusionStatusGenericImpl<TSelf, NYql::TIssues, TStatus, StatusOk, DefaultError>;
14+
using TBase::TBase;
15+
16+
friend class TConclusionStatusGenericImpl<TSelf, NYql::TIssues, TStatus, StatusOk, DefaultError>;
17+
18+
TYQLConclusionStatusImpl() = default;
19+
20+
TYQLConclusionStatusImpl(const TString& errorMessage, TStatus status = DefaultError)
21+
: TBase({NYql::TIssue(errorMessage)}, status) {
22+
}
23+
24+
public:
25+
TYQLConclusionStatusImpl& AddParentIssue(NYql::TIssue issue) {
26+
Y_ABORT_UNLESS(!!TBase::ErrorMessage);
27+
for (const auto& childIssue : *TBase::ErrorMessage) {
28+
issue.AddSubIssue(MakeIntrusive<NYql::TIssue>(childIssue));
29+
}
30+
TBase::ErrorMessage = {std::move(issue)};
31+
return *this;
32+
}
33+
34+
TYQLConclusionStatusImpl& AddParentIssue(const TString& message) {
35+
AddParentIssue(NYql::TIssue(message));
36+
return *this;
37+
}
38+
39+
TYQLConclusionStatusImpl& AddIssue(NYql::TIssue issue) {
40+
Y_ABORT_UNLESS(!!TBase::ErrorMessage);
41+
TBase::ErrorMessage->AddIssue(std::move(issue));
42+
return *this;
43+
}
44+
45+
TYQLConclusionStatusImpl& AddIssue(const TString& message) {
46+
AddIssue(NYql::TIssue(message));
47+
return *this;
48+
}
49+
50+
[[nodiscard]] TString GetErrorMessage() const {
51+
return TBase::GetErrorDescription().ToOneLineString();
52+
}
53+
};
54+
55+
} // namespace NKikimr

ydb/library/conclusion/status.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#pragma once
2-
#include <ydb/library/conclusion/generic/status.h>
2+
3+
#include <ydb/library/conclusion/generic/string_status.h>
4+
#include <ydb/library/conclusion/generic/yql_status.h>
35

46
namespace NKikimr {
57

@@ -8,4 +10,7 @@ using TConclusionStatus = TConclusionStatusImpl<::TNull, ::TNull{}, ::TNull{}>;
810
template <class TStatus, TStatus StatusOk, TStatus DefaultError>
911
using TConclusionSpecialStatus = TConclusionStatusImpl<TStatus, StatusOk, DefaultError>;
1012

13+
template <class TStatus, TStatus StatusOk, TStatus DefaultError>
14+
using TYQLConclusionSpecialStatus = TYQLConclusionStatusImpl<TStatus, StatusOk, DefaultError>;
15+
1116
}

0 commit comments

Comments
 (0)