Skip to content

Commit

Permalink
core: add iterator to TagIndex (#1705)
Browse files Browse the repository at this point in the history
Add iterator method for traversing all entries in the
index without needing to materialize the result set.
Mostly intended for debugging use-cases.
  • Loading branch information
brharrington authored Oct 14, 2024
1 parent ad943f3 commit 3df773f
Show file tree
Hide file tree
Showing 7 changed files with 21 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -143,5 +143,7 @@ class BatchUpdateTagIndex[T <: TaggedItem: ClassTag](

def findItems(query: TagQuery): List[T] = currentIndex.get.findItems(query)

override def iterator: Iterator[T] = currentIndex.get.iterator

def size: Int = currentIndex.get.size
}
Original file line number Diff line number Diff line change
Expand Up @@ -57,5 +57,7 @@ class CachingTagIndex[T <: TaggedItem](delegate: TagIndex[T]) extends TagIndex[T
findItemsCache.get(query)
}

override def iterator: Iterator[T] = delegate.iterator

def size: Int = delegate.size
}
Original file line number Diff line number Diff line change
Expand Up @@ -495,6 +495,8 @@ class RoaringTagIndex[T <: TaggedItem](items: Array[T], stats: IndexStats) exten
result.result()
}

override def iterator: Iterator[T] = items.iterator

val size: Int = items.length
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,8 @@ class SimpleTagIndex[T <: TaggedItem: ClassTag](items: Array[T]) extends TagInde
sorted.take(query.limit)
}

override def iterator: Iterator[T] = items.iterator

val size: Int = items.length

def update(additions: List[T], deletions: List[ItemId]): TagIndex[T] = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ trait TagIndex[T <: TaggedItem] {

def findItems(query: TagQuery): List[T]

def iterator: Iterator[T]

def size: Int
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -347,4 +347,10 @@ abstract class TagIndexSuite extends FunSuite {
}
assertEquals(result.size, 4640)
}

test("iterator") {
val expected = index.findItems(TagQuery(Some(Query.True))).map(_.tags.toString).sorted
val actual = index.iterator.map(_.tags.toString).toList.sorted
assertEquals(actual, expected)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,11 @@ class PostgresTagIndex(postgres: PostgresService) extends TagIndex[TaggedItem] {
}

override def findItems(query: TagQuery): List[TaggedItem] = {
throw new UnsupportedOperationException("")
throw new UnsupportedOperationException("findItems")
}

override def iterator: Iterator[TaggedItem] = {
throw new UnsupportedOperationException("iterator")
}

override def size: Int = 0
Expand Down

0 comments on commit 3df773f

Please sign in to comment.