8
0
mirror of https://github.com/FirebirdSQL/firebird.git synced 2025-02-02 10:00:38 +01:00

Fixed cardinality mistake for invariant booleans

This commit is contained in:
Dmitry Yemanov 2024-11-12 19:26:52 +03:00
parent e54bebf8af
commit 35f5693330
2 changed files with 9 additions and 5 deletions

View File

@ -50,9 +50,13 @@ FilteredStream::FilteredStream(CompilerScratch* csb, RecordSource* next,
m_impure = csb->allocImpure<Impure>();
const auto cardinality = next->getCardinality();
Optimizer::adjustSelectivity(selectivity, MAXIMUM_SELECTIVITY, cardinality);
m_cardinality = cardinality * selectivity;
auto cardinality = next->getCardinality();
if (selectivity)
{
Optimizer::adjustSelectivity(selectivity, MAXIMUM_SELECTIVITY, cardinality);
cardinality *= selectivity;
}
m_cardinality = cardinality;
}
void FilteredStream::internalOpen(thread_db* tdbb) const

View File

@ -546,7 +546,7 @@ namespace Jrd
{
public:
FilteredStream(CompilerScratch* csb, RecordSource* next,
BoolExprNode* boolean, double selectivity);
BoolExprNode* boolean, double selectivity = 0);
void close(thread_db* tdbb) const override;
@ -596,7 +596,7 @@ namespace Jrd
public:
PreFilteredStream(CompilerScratch* csb, RecordSource* next,
BoolExprNode* boolean)
: FilteredStream(csb, next, boolean, next->getCardinality())
: FilteredStream(csb, next, boolean)
{
m_invariant = true;
}