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

Method compile

src/jrd/optimizer/Optimizer.cpp:676–705  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

674//
675
676RecordSource* Optimizer::compile(RseNode* subRse, BoolExprNodeStack* parentStack)
677{
678 // dimitr: it makes no sense to optimize sub-RSE for first rows
679 // if we're going to sort/aggregate the resultset afterwards
680 const bool subFirstRows = firstRows && !rse->rse_sorted && !rse->rse_aggregate;
681
682 Optimizer subOpt(tdbb, csb, subRse, subFirstRows);
683 const auto rsb = subOpt.compile(parentStack);
684
685 if (parentStack && subOpt.isInnerJoin())
686 {
687 // If any parent conjunct was utilized, update our copy of its flags.
688 // Currently used for inner joins only, although could also be applied
689 // to conjuncts utilized for outer streams of outer joins.
690
691 for (auto subIter = subOpt.getParentConjuncts(); subIter.hasData(); ++subIter)
692 {
693 for (auto selfIter = getConjuncts(); selfIter.hasData(); ++selfIter)
694 {
695 if (*selfIter == *subIter)
696 {
697 selfIter |= subIter.getFlags();
698 break;
699 }
700 }
701 }
702 }
703
704 return rsb;
705}
706
707RecordSource* Optimizer::compile(BoolExprNodeStack* parentStack)
708{

Callers

nothing calls this directly

Calls 15

GdsClass · 0.85
composeFunction · 0.85
RiverClass · 0.85
CCH_expandFunction · 0.85
CrossJoinClass · 0.85
NestedLoopJoinClass · 0.85
PreFilteredStreamClass · 0.85
SkipRowsStreamClass · 0.85
FirstRowsStreamClass · 0.85
SingularStreamClass · 0.85
CMP_post_accessFunction · 0.85
LockedStreamClass · 0.85

Tested by

no test coverage detected