fix(cursor): call NextObject instead of Next on recursive cache cursor boundary - #22
Merged
kael-reviewer[bot] merged 1 commit intoApr 16, 2026
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixed a bug in
Cursor.NextObjectwhere the method incorrectly calledc.Next()instead ofc.NextObject(object)when the current inner cache cursor was exhausted and additional cache cursors remained. This caused theobjectparameter to be discarded at cache cursor boundaries, resulting in rawmap[string]interface{}values being returned instead of properly unmarshaled struct instances.Changes
doclite/cursor.go: Changed the recursive call inNextObjectfromc.Next()toc.NextObject(object)so the struct pointer is propagated through all cache cursor boundaries.nextobject_test.go(new): Added two tests that insert 40 documents (spanning multiple cache cursors sinceMinKeys = 32) and iterate withNextObject, verifying that the object parameter is correctly propagated across boundaries.How to verify
go build ./...go test -v -run TestNextObjectTestNextObjectAcrossCacheCursorsandTestNextObjectStructsAtBoundaryshould pass.Acceptance criteria mapping
NextObjectrecurses intoNextObject(object)rather thanNext()when the current cache cursor is exhausted.Note
Each cache cursor pre-loads one
map[string]interface{}result fromcheckRootMatched(a separate pre-existing behavior). This fix ensures that beyond that initial map, all results within each cache cursor are properly typed structs. The pre-existingTestFilefailure in thedoclite/doclitesub-package is unrelated to this change.