File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -365,12 +365,19 @@ class Optimizer final : public Firebird::PermanentStorage
365365 {
366366 auto factor = REDUCE_SELECTIVITY_FACTOR_OTHER ;
367367
368- if (const auto binaryNode = nodeAs<BinaryBoolNode >(node))
368+ if (const auto notNode = nodeAs<NotBoolNode >(node))
369369 {
370+ factor = MAXIMUM_SELECTIVITY - getSelectivity (notNode->arg );
371+ }
372+ else if (const auto binaryNode = nodeAs<BinaryBoolNode>(node))
373+ {
374+ const auto selectivity1 = getSelectivity (binaryNode->arg1 );
375+ const auto selectivity2 = getSelectivity (binaryNode->arg2 );
376+
370377 if (binaryNode->blrOp == blr_and)
371- factor = getSelectivity (binaryNode-> arg1 ) * getSelectivity (binaryNode-> arg2 ) ;
378+ factor = selectivity1 * selectivity2 ;
372379 else if (binaryNode->blrOp == blr_or)
373- factor = getSelectivity (binaryNode-> arg1 ) + getSelectivity (binaryNode-> arg2 ) ;
380+ factor = selectivity1 + selectivity2 - selectivity1 * selectivity2 ;
374381 else
375382 fb_assert (false );
376383 }
You can’t perform that action at this time.
0 commit comments