4
4
#include < ydb/core/formats/arrow/reader/result_builder.h>
5
5
#include < ydb/core/tx/columnshard/engines/scheme/versions/abstract_scheme.h>
6
6
#include < ydb/library/conclusion/status.h>
7
+ #include < ydb/public/api/protos/ydb_status_codes.pb.h>
7
8
8
9
namespace NKikimr ::NOlap {
9
10
10
11
class IMerger {
12
+ public:
13
+ using TYdbConclusionStatus = TConclusionSpecialStatus<Ydb::StatusIds::StatusCode, Ydb::StatusIds::SUCCESS, Ydb::StatusIds::BAD_REQUEST>;
11
14
private:
12
15
NArrow::NMerger::TRWSortableBatchPosition IncomingPosition;
13
16
14
- virtual TConclusionStatus OnEqualKeys (const NArrow::NMerger::TSortableBatchPosition& exists, const NArrow::NMerger::TSortableBatchPosition& incoming) = 0;
15
- virtual TConclusionStatus OnIncomingOnly (const NArrow::NMerger::TSortableBatchPosition& incoming) = 0;
17
+ virtual TYdbConclusionStatus OnEqualKeys (const NArrow::NMerger::TSortableBatchPosition& exists, const NArrow::NMerger::TSortableBatchPosition& incoming) = 0;
18
+ virtual TYdbConclusionStatus OnIncomingOnly (const NArrow::NMerger::TSortableBatchPosition& incoming) = 0;
16
19
protected:
17
20
std::shared_ptr<ISnapshotSchema> Schema;
18
21
NArrow::TContainerWithIndexes<arrow::RecordBatch> IncomingData;
@@ -29,19 +32,19 @@ class IMerger {
29
32
30
33
virtual NArrow::TContainerWithIndexes<arrow::RecordBatch> BuildResultBatch () = 0;
31
34
32
- TConclusionStatus Finish ();
35
+ TYdbConclusionStatus Finish ();
33
36
34
- TConclusionStatus AddExistsDataOrdered (const std::shared_ptr<arrow::Table>& data);
37
+ TYdbConclusionStatus AddExistsDataOrdered (const std::shared_ptr<arrow::Table>& data);
35
38
};
36
39
37
40
class TInsertMerger : public IMerger {
38
41
private:
39
42
using TBase = IMerger;
40
- virtual TConclusionStatus OnEqualKeys (const NArrow::NMerger::TSortableBatchPosition& exists, const NArrow::NMerger::TSortableBatchPosition& /* incoming*/ ) override {
41
- return TConclusionStatus ::Fail (" Conflict with existing key. " + exists.GetSorting ()->DebugJson (exists.GetPosition ()).GetStringRobust ());
43
+ virtual TYdbConclusionStatus OnEqualKeys (const NArrow::NMerger::TSortableBatchPosition& exists, const NArrow::NMerger::TSortableBatchPosition& /* incoming*/ ) override {
44
+ return TYdbConclusionStatus ::Fail (Ydb::StatusIds::PRECONDITION_FAILED, " Conflict with existing key. " + exists.GetSorting ()->DebugJson (exists.GetPosition ()).GetStringRobust ());
42
45
}
43
- virtual TConclusionStatus OnIncomingOnly (const NArrow::NMerger::TSortableBatchPosition& /* incoming*/ ) override {
44
- return TConclusionStatus ::Success ();
46
+ virtual TYdbConclusionStatus OnIncomingOnly (const NArrow::NMerger::TSortableBatchPosition& /* incoming*/ ) override {
47
+ return TYdbConclusionStatus ::Success ();
45
48
}
46
49
public:
47
50
using TBase::TBase;
@@ -54,13 +57,13 @@ class TReplaceMerger: public IMerger {
54
57
private:
55
58
using TBase = IMerger;
56
59
NArrow::TColumnFilter Filter = NArrow::TColumnFilter::BuildDenyFilter();
57
- virtual TConclusionStatus OnEqualKeys (const NArrow::NMerger::TSortableBatchPosition& /* exists*/ , const NArrow::NMerger::TSortableBatchPosition& /* incoming*/ ) override {
60
+ virtual TYdbConclusionStatus OnEqualKeys (const NArrow::NMerger::TSortableBatchPosition& /* exists*/ , const NArrow::NMerger::TSortableBatchPosition& /* incoming*/ ) override {
58
61
Filter.Add (true );
59
- return TConclusionStatus ::Success ();
62
+ return TYdbConclusionStatus ::Success ();
60
63
}
61
- virtual TConclusionStatus OnIncomingOnly (const NArrow::NMerger::TSortableBatchPosition& /* incoming*/ ) override {
64
+ virtual TYdbConclusionStatus OnIncomingOnly (const NArrow::NMerger::TSortableBatchPosition& /* incoming*/ ) override {
62
65
Filter.Add (false );
63
- return TConclusionStatus ::Success ();
66
+ return TYdbConclusionStatus ::Success ();
64
67
}
65
68
public:
66
69
using TBase::TBase;
@@ -80,13 +83,13 @@ class TUpdateMerger: public IMerger {
80
83
std::vector<std::shared_ptr<arrow::BooleanArray>> HasIncomingDataFlags;
81
84
const std::optional<NArrow::NMerger::TSortableBatchPosition> DefaultExists;
82
85
const TString InsertDenyReason;
83
- virtual TConclusionStatus OnEqualKeys (const NArrow::NMerger::TSortableBatchPosition& exists, const NArrow::NMerger::TSortableBatchPosition& incoming) override ;
84
- virtual TConclusionStatus OnIncomingOnly (const NArrow::NMerger::TSortableBatchPosition& incoming) override {
86
+ virtual TYdbConclusionStatus OnEqualKeys (const NArrow::NMerger::TSortableBatchPosition& exists, const NArrow::NMerger::TSortableBatchPosition& incoming) override ;
87
+ virtual TYdbConclusionStatus OnIncomingOnly (const NArrow::NMerger::TSortableBatchPosition& incoming) override {
85
88
if (!!InsertDenyReason) {
86
- return TConclusionStatus ::Fail (" insertion is impossible: " + InsertDenyReason);
89
+ return TYdbConclusionStatus ::Fail (" insertion is impossible: " + InsertDenyReason);
87
90
}
88
91
if (!DefaultExists) {
89
- return TConclusionStatus ::Success ();
92
+ return TYdbConclusionStatus ::Success ();
90
93
} else {
91
94
return OnEqualKeys (*DefaultExists, incoming);
92
95
}
0 commit comments