Skip to content

Commit

Permalink
fixed bitmap iterator description on empty result sets
Browse files Browse the repository at this point in the history
  • Loading branch information
glookka committed May 26, 2023
1 parent e447ec8 commit 3c0b089
Showing 1 changed file with 10 additions and 19 deletions.
29 changes: 10 additions & 19 deletions secondary/blockreader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -177,12 +177,12 @@ template <typename BITMAP, bool ROWID_RANGE>
class BitmapIterator_T : public BitmapIterator_i
{
public:
BitmapIterator_T ( uint32_t uNumValues, const RowidRange_t * pBounds=nullptr );
BitmapIterator_T ( const std::string & sAttr, uint32_t uNumValues, const RowidRange_t * pBounds=nullptr );

bool HintRowID ( uint32_t tRowID ) override;
bool GetNextRowIdBlock ( Span_T<uint32_t> & dRowIdBlock ) override;
int64_t GetNumProcessed() const override { return m_iNumProcessed; }
void AddDesc ( std::vector<IteratorDesc_t> & dDesc ) const override;
void AddDesc ( std::vector<IteratorDesc_t> & dDesc ) const override { dDesc.push_back ( { m_sAttr, "SecondaryIndex" } ); }

void SetCutoff ( int iCutoff ) override { m_iRowsLeft = iCutoff; }
bool WasCutoffHit() const override { return !m_iRowsLeft; }
Expand All @@ -192,7 +192,7 @@ class BitmapIterator_T : public BitmapIterator_i
private:
static const int RESULT_BLOCK_SIZE = 1024;
BITMAP m_tBitmap;
std::vector<IteratorDesc_t> m_dDesc;
std::string m_sAttr;
int64_t m_iNumProcessed = 0;
int m_iIndex = 0;
int m_iRowsLeft = INT_MAX;
Expand All @@ -201,30 +201,21 @@ class BitmapIterator_T : public BitmapIterator_i
};

template <typename BITMAP, bool ROWID_RANGE>
BitmapIterator_T<BITMAP,ROWID_RANGE>::BitmapIterator_T ( uint32_t uNumValues, const RowidRange_t * pBounds )
: m_tBitmap(uNumValues)
BitmapIterator_T<BITMAP,ROWID_RANGE>::BitmapIterator_T ( const std::string & sAttr, uint32_t uNumValues, const RowidRange_t * pBounds )
: m_tBitmap ( uNumValues )
, m_sAttr ( sAttr )
{
if ( pBounds )
m_tBounds = *pBounds;

m_dRows.resize(RESULT_BLOCK_SIZE);
}

template <typename BITMAP, bool ROWID_RANGE>
void BitmapIterator_T<BITMAP,ROWID_RANGE>::AddDesc ( std::vector<IteratorDesc_t> & dDesc ) const
{
for ( const auto & i : m_dDesc )
dDesc.push_back(i);
}

template <typename BITMAP, bool ROWID_RANGE>
void BitmapIterator_T<BITMAP,ROWID_RANGE>::Add ( BlockIterator_i * pIterator )
{
assert(pIterator);

if ( m_dDesc.empty() )
pIterator->AddDesc(m_dDesc);

Span_T<uint32_t> dRowIdBlock;
while ( pIterator->GetNextRowIdBlock(dRowIdBlock) && m_iRowsLeft>0 )
{
Expand Down Expand Up @@ -405,15 +396,15 @@ BitmapIterator_i * ReaderTraits_c::SpawnBitmapIterator ( const RowidRange_t * pB
if ( m_tRsetInfo.m_uRowsCount>SMALL_INDEX_THRESH && float(m_tRsetInfo.m_iRsetSize)/m_tRsetInfo.m_uRowsCount<=LARGE_BITMAP_RATIO )
{
if ( pBounds )
return new BitmapIterator_T<SplitBitmap_c, true> ( m_tRsetInfo.m_uRowsCount, pBounds );
return new BitmapIterator_T<SplitBitmap_c, true> ( m_sAttr, m_tRsetInfo.m_uRowsCount, pBounds );
else
return new BitmapIterator_T<SplitBitmap_c, false> ( m_tRsetInfo.m_uRowsCount );
return new BitmapIterator_T<SplitBitmap_c, false> ( m_sAttr, m_tRsetInfo.m_uRowsCount );
}

if ( pBounds )
return new BitmapIterator_T<BitVec_T<uint64_t>, true> ( m_tRsetInfo.m_uRowsCount, pBounds );
return new BitmapIterator_T<BitVec_T<uint64_t>, true> ( m_sAttr, m_tRsetInfo.m_uRowsCount, pBounds );
else
return new BitmapIterator_T<BitVec_T<uint64_t>, false> ( m_tRsetInfo.m_uRowsCount );
return new BitmapIterator_T<BitVec_T<uint64_t>, false> ( m_sAttr, m_tRsetInfo.m_uRowsCount );
}


Expand Down

0 comments on commit 3c0b089

Please sign in to comment.