Skip to content

Commit 86b3af3

Browse files
committed
add exclude filters to CalcCount
1 parent b64d9ea commit 86b3af3

File tree

2 files changed

+11
-4
lines changed

2 files changed

+11
-4
lines changed

secondary/secondary.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ class SecondaryIndex_c : public Index_i
6969
bool Setup ( const std::string & sFile, std::string & sError );
7070

7171
bool CreateIterators ( std::vector<BlockIterator_i *> & dIterators, const Filter_t & tFilter, const RowidRange_t * pBounds, uint32_t uMaxValues, int64_t iRsetSize, int iCutoff, std::string & sError ) const override;
72-
bool CalcCount ( uint32_t & uCount, const common::Filter_t & tFilter, std::string & sError ) const override;
72+
bool CalcCount ( uint32_t & uCount, const common::Filter_t & tFilter, uint32_t uMaxValues, std::string & sError ) const override;
7373
uint32_t GetNumIterators ( const common::Filter_t & tFilter ) const override;
7474
bool IsEnabled ( const std::string & sName ) const override;
7575
int64_t GetCountDistinct ( const std::string & sName ) const override;
@@ -485,7 +485,7 @@ bool SecondaryIndex_c::CreateIterators ( std::vector<BlockIterator_i *> & dItera
485485
}
486486

487487

488-
bool SecondaryIndex_c::CalcCount ( uint32_t & uCount, const common::Filter_t & tFilter, std::string & sError ) const
488+
bool SecondaryIndex_c::CalcCount ( uint32_t & uCount, const common::Filter_t & tFilter, uint32_t uMaxValues, std::string & sError ) const
489489
{
490490
uCount = 0;
491491

@@ -500,15 +500,22 @@ bool SecondaryIndex_c::CalcCount ( uint32_t & uCount, const common::Filter_t & t
500500
if ( !FixupFilter ( tFixedFilter, tFilter, *pCol ) )
501501
return false;
502502

503+
bool bExclude = tFixedFilter.m_bExclude;
504+
tFixedFilter.m_bExclude = false;
505+
503506
switch ( tFixedFilter.m_eType )
504507
{
505508
case FilterType_e::VALUES:
506509
uCount = CalcValsRows ( tFixedFilter );
510+
if ( bExclude )
511+
uCount = uMaxValues - uCount;
507512
return true;
508513

509514
case FilterType_e::RANGE:
510515
case FilterType_e::FLOATRANGE:
511516
uCount = CalcRangeRows ( tFixedFilter );
517+
if ( bExclude )
518+
uCount = uMaxValues - uCount;
512519
return true;
513520

514521
default:

secondary/secondary.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ namespace common
3838
namespace SI
3939
{
4040

41-
static const int LIB_VERSION = 8;
41+
static const int LIB_VERSION = 9;
4242
static const uint32_t STORAGE_VERSION = 7;
4343

4444
struct ColumnInfo_t
@@ -69,7 +69,7 @@ class Index_i
6969
virtual ~Index_i() = default;
7070

7171
virtual bool CreateIterators ( std::vector<common::BlockIterator_i *> & dIterators, const common::Filter_t & tFilter, const common::RowidRange_t * pBounds, uint32_t uMaxValues, int64_t iRsetSize, int iCutoff, std::string & sError ) const = 0;
72-
virtual bool CalcCount ( uint32_t & uCount, const common::Filter_t & tFilter, std::string & sError ) const = 0;
72+
virtual bool CalcCount ( uint32_t & uCount, const common::Filter_t & tFilter, uint32_t uMaxValues, std::string & sError ) const = 0;
7373
virtual uint32_t GetNumIterators ( const common::Filter_t & tFilter ) const = 0;
7474
virtual bool IsEnabled ( const std::string & sName ) const = 0;
7575
virtual int64_t GetCountDistinct ( const std::string & sName ) const = 0;

0 commit comments

Comments
 (0)