timshannon / badgerhold

BadgerHold is an embeddable NoSQL store for querying Go types built on Badger
MIT License
519 stars 51 forks source link

Badgerhold queries don't work with both badgerhold.Key and In operator #66

Closed b-tarczynski closed 3 years ago

b-tarczynski commented 3 years ago

Running badgerhold Find or DeleteMatching query against badgerhold.Key with In operator causes error: unexpected EOF. Also it would be nice to include tests that use both badgerhold.Key and In operator.

Code that reproduces bug:

type TestStruct struct {
    Value int
}

func TestBadgerFind(t *testing.T) {
    options := bh.DefaultOptions
    options.InMemory = true
    store, err := bh.Open(options)
    require.NoError(t, err)
    defer func() {
        err = store.Close()
        require.NoError(t, err)
    }()

    for i := 0; i < 5; i++ {
        err = store.Insert(i, TestStruct{i})
        require.NoError(t, err)
    }

    results := make([]TestStruct, 0, 5)
    err = store.Find(
        &results,
        bh.Where(bh.Key).In(0, 1, 2, 3, 4),
    )
    // results in unexpected EOF
    require.NoError(t, err)
    require.Len(t, results, 5)
}

badgerhold version: 74e0215974cf go version: go1.16.5 darwin/arm64

timshannon commented 3 years ago

Thanks for reporting the issue. Should be fixed in master.