Add Update + tests to indexer

This commit is contained in:
Ilja Neumann
2020-10-01 16:24:40 +02:00
parent 930f446824
commit 2a77e2b691
4 changed files with 71 additions and 5 deletions

View File

@@ -154,3 +154,17 @@ func (i Indexer) FindByPartial(t interface{}, field string, pattern string) ([]s
return result, nil
}
func (i Indexer) Update(t interface{}, field, oldVal, newVal string) error {
typeName := getTypeFQN(t)
if fields, ok := i.indices[typeName]; ok {
for _, idx := range fields.indicesByField[field] {
pkVal := valueOf(t, fields.pKFieldName)
if err := idx.Update(pkVal, oldVal, newVal); err != nil {
return err
}
}
}
return nil
}

View File

@@ -114,6 +114,58 @@ func TestIndexer_SearchWithNonUniqueIndex(t *testing.T) {
t.Log(res)
}
func TestIndexer_UpdateWithUniqueIndex(t *testing.T) {
dataDir := writeIndexTestData(t, testData, "Id")
indexer := NewIndex(&Config{
DataDir: dataDir,
IndexRootDirName: "index.disk",
Log: zerolog.Logger{},
})
indexer.AddUniqueIndex(&User{}, "UserName", "Id", "users")
user1 := &User{Id: "abcdefg-123", UserName: "mikey", Email: "mikey@example.com"}
user2 := &User{Id: "hijklmn-456", UserName: "frank", Email: "frank@example.com"}
err := indexer.Add(user1)
assert.NoError(t, err)
err = indexer.Add(user2)
assert.NoError(t, err)
// Update to non existing value
err = indexer.Update(user2, "UserName", "frank", "jane")
assert.NoError(t, err)
// Update to non existing value
err = indexer.Update(user2, "UserName", "mikey", "jane")
assert.Error(t, err)
assert.IsType(t, &alreadyExistsErr{}, err)
}
func TestIndexer_UpdateWithNonUniqueIndex(t *testing.T) {
dataDir := writeIndexTestData(t, testData, "Id")
indexer := NewIndex(&Config{
DataDir: dataDir,
IndexRootDirName: "index.disk",
Log: zerolog.Logger{},
})
indexer.AddNonUniqueIndex(&TestPet{}, "Name", "Id", "pets")
pet1 := TestPet{Id: "goefe-789", Kind: "Hog", Color: "Green", Name: "Dicky"}
pet2 := TestPet{Id: "xadaf-189", Kind: "Hog", Color: "Green", Name: "Ricky"}
err := indexer.Add(pet1)
assert.NoError(t, err)
err = indexer.Add(pet2)
assert.NoError(t, err)
err = indexer.Update(pet2, "Name", "Ricky", "Jonny")
assert.NoError(t, err)
}
/*
func TestManagerQueryMultipleIndices(t *testing.T) {
dataDir := writeIndexTestData(t, testData, "Id")

View File

@@ -29,10 +29,10 @@ func TestNonUniqueIndexAdd(t *testing.T) {
func TestNonUniqueIndexUpdate(t *testing.T) {
sut, dataPath := getNonUniqueIdxSut(t)
err := sut.Update("goefe-789", "Green", "Black")
err := sut.Update("goefe-789", "", "Black")
assert.NoError(t, err)
err = sut.Update("xadaf-189", "Green", "Black")
err = sut.Update("xadaf-189", "", "Black")
assert.NoError(t, err)
assert.DirExists(t, path.Join(dataPath, "index.disk/PetByColor/Black"))

View File

@@ -54,16 +54,16 @@ func TestUniqueUpdate(t *testing.T) {
uniq, dataDir := getUniqueIdxSut(t)
t.Log("successful update")
err := uniq.Update("", "mikey@example.com", "mikey2@example.com")
err := uniq.Update("", "", "mikey2@example.com")
assert.NoError(t, err)
t.Log("failed update because already exists")
err = uniq.Update("", "frank@example.com", "mikey2@example.com")
err = uniq.Update("", "", "mikey2@example.com")
assert.Error(t, err)
assert.IsType(t, &alreadyExistsErr{}, err)
t.Log("failed update because not found")
err = uniq.Update("", "notexist@example.com", "something2@example.com")
err = uniq.Update("", "", "something2@example.com")
assert.Error(t, err)
assert.IsType(t, &notFoundErr{}, err)