MCPcopy Create free account
hub / github.com/Restream/reindexer / DumpSingleJoinQuery

Method DumpSingleJoinQuery

cpp_src/core/query/sql/sqlencoder.cc:62–104  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

60
61template <typename Formatter>
62void SQLEncoder<Formatter>::DumpSingleJoinQuery(size_t idx, bool stripArgs) const {
63 WrSerializer& ser = formatter_.Serializer();
64 if (idx >= query_.GetJoinQueries().size()) [[unlikely]] {
65 throw Error(errParams, "Error during parsing query join entries: idx({}) >= query_.GetJoinQueries().size()({})", idx,
66 query_.GetJoinQueries().size());
67 }
68
69 const auto& jq = query_.GetJoinQueries()[idx];
70 ser << kJoinNames[jq.joinType];
71 if (jq.Entries().Empty() && !jq.HasLimit() && jq.GetSortingEntries().empty()) {
72 ser << jq.NsName() << ' ';
73 } else {
74 {
75 const auto parenthesisGuard = formatter_.OpenParenthesis();
76 SQLEncoder(jq, formatter_).DumpSQL(stripArgs);
77 }
78 formatter_.Next();
79 }
80 ser << "ON ";
81 {
82 const auto onGuard = formatter_.ConditionallyOpenParenthesis(jq.joinEntries_.size() != 1);
83 bool needEncloseOR = false;
84 for (size_t i = 1; i < jq.joinEntries_.size(); ++i) {
85 if (jq.joinEntries_[i].Operation() != OpOr) {
86 needEncloseOR = true;
87 break;
88 }
89 }
90 auto conditionsFormatter = formatter_.StartConditions(needEncloseOR);
91 for (size_t i = 0; i < jq.joinEntries_.size(); ++i) {
92 const auto& e = jq.joinEntries_[i];
93 const bool isNextOr = i + 1 < jq.joinEntries_.size() && jq.joinEntries_[i + 1].Operation() == OpOr;
94 conditionsFormatter.AddCondition(e.Operation(), isNextOr);
95 if (e.ReverseNamespacesOrder()) {
96 ser << jq.NsName() << '.' << e.RightFieldName() << ' ' << joins::InvertJoinCondition(e.Condition()) << ' '
97 << query_.NsName() << '.' << e.LeftFieldName();
98 } else {
99 ser << query_.NsName() << '.' << e.LeftFieldName() << ' ' << e.Condition() << ' ' << jq.NsName() << '.'
100 << e.RightFieldName();
101 }
102 }
103 }
104}
105
106template <typename Formatter>
107void SQLEncoder<Formatter>::dumpJoined(bool stripArgs) const {

Callers 1

dumpWhereEntriesMethod · 0.80

Calls 15

SQLEncoderClass · 0.85
InvertJoinConditionFunction · 0.85
SerializerMethod · 0.80
GetJoinQueriesMethod · 0.80
OpenParenthesisMethod · 0.80
DumpSQLMethod · 0.80
OperationMethod · 0.80
AddConditionMethod · 0.80
ErrorClass · 0.50
sizeMethod · 0.45

Tested by

no test coverage detected