MCPcopy Create free account
hub / github.com/FirebirdSQL/firebird / calculateStreamInfo

Method calculateStreamInfo

src/jrd/optimizer/InnerJoin.cpp:86–168  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

84//
85
86void InnerJoin::calculateStreamInfo()
87{
88 StreamList streams;
89
90 // First get the base cost without any relation to any other inner join stream
91
92#ifdef OPT_DEBUG_RETRIEVAL
93 optimizer->printf("Base stream info:\n");
94#endif
95
96 const auto sort = sortPtr ? *sortPtr : nullptr;
97
98 for (auto innerStream : innerStreams)
99 {
100 streams.add(innerStream->number);
101 csb->csb_rpt[innerStream->number].activate();
102
103 Retrieval retrieval(tdbb, optimizer, innerStream->number, false, false, sort, true);
104 const auto candidate = retrieval.getInversion();
105
106 innerStream->baseCost = candidate->cost;
107 innerStream->baseSelectivity = candidate->selectivity;
108 innerStream->baseIndexes = candidate->indexes;
109 innerStream->baseUnique = candidate->unique;
110 innerStream->baseNavigated = candidate->navigated;
111 innerStream->baseMatches = candidate->matches;
112 innerStream->baseDependentFromStreams = candidate->dependentFromStreams;
113
114 csb->csb_rpt[innerStream->number].deactivate();
115 }
116
117 // Collect dependencies between every pair of streams
118
119 for (const auto baseStream : streams)
120 {
121 csb->csb_rpt[baseStream].activate();
122
123 for (const auto innerStream : innerStreams)
124 {
125 const StreamType testStream = innerStream->number;
126
127 if (baseStream != testStream)
128 {
129 csb->csb_rpt[testStream].activate();
130 getIndexedRelationships(innerStream);
131 csb->csb_rpt[testStream].deactivate();
132 }
133 }
134
135 csb->csb_rpt[baseStream].deactivate();
136 }
137
138 // Collect more complex inter-dependencies (involving three and more streams), if any
139
140 if (streams.getCount() > 2)
141 {
142 StreamStateHolder stateHolder(csb, streams);
143 stateHolder.activate();

Callers

nothing calls this directly

Calls 7

getInversionMethod · 0.80
printfMethod · 0.45
addMethod · 0.45
activateMethod · 0.45
deactivateMethod · 0.45
getCountMethod · 0.45
insertMethod · 0.45

Tested by

no test coverage detected