Skip to content

Commit eb44a7e

Browse files
committed
Fix #8290: 'Unique scan' is incorrectly reported in the explained plan for unique index and IS NULL predicate
1 parent 5293f23 commit eb44a7e

File tree

1 file changed

+8
-1
lines changed

1 file changed

+8
-1
lines changed

src/jrd/recsrc/RecordSource.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ void RecordSource::printInversion(thread_db* tdbb, const InversionNode* inversio
150150
plan += "Bitmap" + printIndent(++level);
151151

152152
const index_desc& idx = retrieval->irb_desc;
153+
const bool primaryIdx = (idx.idx_flags & idx_primary);
153154
const bool uniqueIdx = (idx.idx_flags & idx_unique);
154155
const USHORT segCount = idx.idx_count;
155156

@@ -161,7 +162,13 @@ void RecordSource::printInversion(thread_db* tdbb, const InversionNode* inversio
161162

162163
const bool fullscan = (maxSegs == 0);
163164
const bool list = (retrieval->irb_list != nullptr);
164-
const bool unique = !list && uniqueIdx && equality && (minSegs == segCount);
165+
166+
bool unique = false;
167+
if (!list && equality && minSegs == segCount)
168+
{
169+
unique = (retrieval->irb_generic & irb_ignore_null_value_key) ?
170+
uniqueIdx : primaryIdx;
171+
}
165172

166173
string bounds;
167174
if (!unique && !fullscan)

0 commit comments

Comments
 (0)