diff --git a/dbshard.go b/dbshard.go index 6fc057200..ae69c8867 100644 --- a/dbshard.go +++ b/dbshard.go @@ -303,6 +303,10 @@ func newShardSet() *shardSet { func (per *DBPerShard) HasData(which int) (hasData bool, err error) { // has to aggregate across all available DBShard for each index and shard. + if per.types[which] == roaringTxn { + return per.RoaringHasData() + } + for _, v := range per.Flatmap { hasData, err = v.W[which].HasData() if err != nil { @@ -315,6 +319,21 @@ func (per *DBPerShard) HasData(which int) (hasData bool, err error) { return } +func (per *DBPerShard) RoaringHasData() (bool, error) { + idxs := per.holder.Indexes() + const requireData = true + for _, idx := range idxs { + shards, err := per.TypedDBPerShardGetShardsForIndex(roaringTxn, idx, "", requireData) + if err != nil { + return false, err + } + if len(shards) > 0 { + return true, nil + } + } + return false, nil +} + func (per *DBPerShard) ListOpenString() (r string) { for _, v := range per.Flatmap { r += v.HolderPath + " -> " + v.W[per.useOpenList].OpenListString() + "\n"