8
0
mirror of https://github.com/FirebirdSQL/firebird.git synced 2025-01-22 18:03:03 +01:00

Fixed regression in outer joins

This commit is contained in:
Dmitry Yemanov 2022-04-02 13:14:19 +03:00
parent 747d2ed2c2
commit 4e813e0e37
2 changed files with 7 additions and 5 deletions

View File

@ -596,14 +596,16 @@ Optimizer::~Optimizer()
// Compile and optimize a record selection expression into a set of record source blocks
//
RecordSource* Optimizer::compile(RseNode* rse, BoolExprNodeStack* parentStack)
RecordSource* Optimizer::compile(RseNode* subRse, BoolExprNodeStack* parentStack)
{
Optimizer subOpt(tdbb, csb, rse);
Optimizer subOpt(tdbb, csb, subRse);
const auto rsb = subOpt.compile(parentStack);
if (parentStack)
if (parentStack && subOpt.isInnerJoin())
{
// If any parent conjunct was utilized, update our copy of its flags
// If any parent conjunct was utilized, update our copy of its flags.
// Currently used for inner joins only, although could also be applied
// to conjuncts utilized for outer streams of outer joins.
for (auto subIter = subOpt.getParentConjuncts(); subIter.hasData(); ++subIter)
{

View File

@ -372,7 +372,7 @@ public:
~Optimizer();
RecordSource* compile(RseNode* rse, BoolExprNodeStack* parentStack);
RecordSource* compile(RseNode* subRse, BoolExprNodeStack* parentStack);
void compileRelation(StreamType stream);
void generateAggregateDistincts(MapNode* map);
RecordSource* generateRetrieval(StreamType stream,