Repository navigation
Expand file tree
/
Copy patherror.cpp
More file actions
96 lines (94 loc) · 2.78 KB
/
Copy patherror.cpp
File metadata and controls
96 lines (94 loc) · 2.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include <teaql/runtime/error.hpp>
namespace teaql {
RuntimeError RuntimeError::audit_after_commit(Memory r, const RuntimeError& source) {
RuntimeError result(r, Kind::AuditAfterCommit, String(r));
result.data_.emplace<detail::ScopedBox<RuntimeError>>(
detail::make_box<RuntimeError>(r, source));
return result;
}
String RuntimeError::to_string(Memory r) const {
String out(r);
switch (kind_) {
case Kind::AuditAfterCommit:
return String(
"AUDIT_DELIVERY_AFTER_COMMIT: transaction committed but audit delivery failed; do not retry the mutation blindly",
r);
case Kind::DynamicField:
return dynamic_field_error().to_string(r);
case Kind::RequestIntent:
return request_intent_error().to_string(r);
case Kind::MissingEntity:
out = "missing entity descriptor: ";
out += message();
return out;
case Kind::Behavior:
out = "entity data service behavior error: ";
out += message();
return out;
case Kind::Event:
out = "entity event error: ";
out += message();
return out;
case Kind::Policy:
out = "request policy error: ";
out += message();
return out;
case Kind::Graph:
out = "graph write error: ";
out += message();
return out;
case Kind::IdGeneration:
out = "id generation error: ";
out += message();
return out;
case Kind::Language:
out = "language error: ";
out += message();
return out;
case Kind::UnsupportedLocale:
out = "unsupported locale: ";
out += message();
return out;
case Kind::Schema:
out = "schema provider error: ";
out += message();
return out;
case Kind::Transaction:
out = "transaction error: ";
out += message();
return out;
case Kind::SqlCompile:
return sql_compile_error().to_string(r);
case Kind::Check: {
out = "check failed: ";
bool first = true;
for (const auto& error : check_results()) {
if (!first) {
out += "; ";
}
out += error.to_string(r);
first = false;
}
return out;
}
case Kind::MissingRelation: {
const auto& e = missing_relation_error();
out = "missing relation ";
out += e.relation;
out += " on entity ";
out += e.entity;
return out;
}
case Kind::OptimisticLockConflict: {
const auto& e = optimistic_lock_conflict_error();
out = "optimistic lock conflict on ";
out += e.entity;
out += '(';
out += e.id;
out += ')';
return out;
}
}
throw std::logic_error("Invalid runtime error kind");
}
}