Add Update + tests to indexer
This commit is contained in:
@@ -154,3 +154,17 @@ func (i Indexer) FindByPartial(t interface{}, field string, pattern string) ([]s
|
|||||||
return result, nil
|
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
|
||||||
|
}
|
||||||
|
|||||||
@@ -114,6 +114,58 @@ func TestIndexer_SearchWithNonUniqueIndex(t *testing.T) {
|
|||||||
t.Log(res)
|
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) {
|
func TestManagerQueryMultipleIndices(t *testing.T) {
|
||||||
dataDir := writeIndexTestData(t, testData, "Id")
|
dataDir := writeIndexTestData(t, testData, "Id")
|
||||||
|
|||||||
@@ -29,10 +29,10 @@ func TestNonUniqueIndexAdd(t *testing.T) {
|
|||||||
func TestNonUniqueIndexUpdate(t *testing.T) {
|
func TestNonUniqueIndexUpdate(t *testing.T) {
|
||||||
sut, dataPath := getNonUniqueIdxSut(t)
|
sut, dataPath := getNonUniqueIdxSut(t)
|
||||||
|
|
||||||
err := sut.Update("goefe-789", "Green", "Black")
|
err := sut.Update("goefe-789", "", "Black")
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
err = sut.Update("xadaf-189", "Green", "Black")
|
err = sut.Update("xadaf-189", "", "Black")
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
assert.DirExists(t, path.Join(dataPath, "index.disk/PetByColor/Black"))
|
assert.DirExists(t, path.Join(dataPath, "index.disk/PetByColor/Black"))
|
||||||
|
|||||||
@@ -54,16 +54,16 @@ func TestUniqueUpdate(t *testing.T) {
|
|||||||
uniq, dataDir := getUniqueIdxSut(t)
|
uniq, dataDir := getUniqueIdxSut(t)
|
||||||
|
|
||||||
t.Log("successful update")
|
t.Log("successful update")
|
||||||
err := uniq.Update("", "mikey@example.com", "mikey2@example.com")
|
err := uniq.Update("", "", "mikey2@example.com")
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
t.Log("failed update because already exists")
|
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.Error(t, err)
|
||||||
assert.IsType(t, &alreadyExistsErr{}, err)
|
assert.IsType(t, &alreadyExistsErr{}, err)
|
||||||
|
|
||||||
t.Log("failed update because not found")
|
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.Error(t, err)
|
||||||
assert.IsType(t, ¬FoundErr{}, err)
|
assert.IsType(t, ¬FoundErr{}, err)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user