Skip to content

Commit b2d03a0

Browse files
committed
More correct plan output for subqueries generated during NOT IN transformation
1 parent b4e2ea4 commit b2d03a0

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

src/dsql/BoolNodes.cpp

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2176,16 +2176,20 @@ BoolExprNode* RseBoolNode::convertNeqAllToNotAny(thread_db* tdbb, CompilerScratc
21762176

21772177
andNode->arg1 = missNode;
21782178

2179+
RseNode* newInnerRse1 = innerRse->clone(csb->csb_pool);
2180+
newInnerRse1->flags |= RseNode::FLAG_SUB_QUERY;
2181+
21792182
RseBoolNode* rseBoolNode = FB_NEW_POOL(csb->csb_pool) RseBoolNode(csb->csb_pool, blr_any);
2180-
rseBoolNode->rse = innerRse;
2183+
rseBoolNode->rse = newInnerRse1;
21812184
rseBoolNode->ownSavepoint = this->ownSavepoint;
21822185

21832186
andNode->arg2 = rseBoolNode;
21842187

2185-
RseNode* newInnerRse = innerRse->clone(csb->csb_pool);
2188+
RseNode* newInnerRse2 = innerRse->clone(csb->csb_pool);
2189+
newInnerRse2->flags |= RseNode::FLAG_SUB_QUERY;
21862190

21872191
rseBoolNode = FB_NEW_POOL(csb->csb_pool) RseBoolNode(csb->csb_pool, blr_any);
2188-
rseBoolNode->rse = newInnerRse;
2192+
rseBoolNode->rse = newInnerRse2;
21892193
rseBoolNode->ownSavepoint = this->ownSavepoint;
21902194

21912195
orNode->arg2 = rseBoolNode;
@@ -2201,16 +2205,16 @@ BoolExprNode* RseBoolNode::convertNeqAllToNotAny(thread_db* tdbb, CompilerScratc
22012205
outerRseNeq->blrOp = blr_eql;
22022206

22032207
// If there was a boolean on the stream, append (AND) the new one
2204-
if (newInnerRse->rse_boolean)
2208+
if (newInnerRse2->rse_boolean)
22052209
{
22062210
andNode = FB_NEW_POOL(csb->csb_pool) BinaryBoolNode(csb->csb_pool, blr_and);
22072211

2208-
andNode->arg1 = newInnerRse->rse_boolean;
2212+
andNode->arg1 = newInnerRse2->rse_boolean;
22092213
andNode->arg2 = boolean;
22102214
boolean = andNode;
22112215
}
22122216

2213-
newInnerRse->rse_boolean = boolean;
2217+
newInnerRse2->rse_boolean = boolean;
22142218

22152219
SubExprNodeCopier copier(csb->csb_pool, csb);
22162220
return copier.copy(tdbb, static_cast<BoolExprNode*>(newNode));

0 commit comments

Comments
 (0)