FindBy + tests

This commit is contained in:
Ilja Neumann
2020-10-14 18:03:52 +02:00
parent 36f8931621
commit a8f7d5d5f7
4 changed files with 71 additions and 28 deletions
+22 -26
View File
@@ -64,54 +64,50 @@ func (i Indexer) AddNonUniqueIndex(t interface{}, indexBy, pkName, entityDirName
// Add a new entry to the indexer // Add a new entry to the indexer
func (i Indexer) Add(t interface{}) error { func (i Indexer) Add(t interface{}) error {
typeName := getTypeFQN(t) typeName := getTypeFQN(t)
if fields, ok := i.indices[typeName]; ok {
fields, ok := i.indices[typeName]
if ok {
for _, indices := range fields.indicesByField { for _, indices := range fields.indicesByField {
for _, idx := range indices { for _, idx := range indices {
pkVal := valueOf(t, fields.pKFieldName) pkVal := valueOf(t, fields.pKFieldName)
idxByVal := valueOf(t, idx.IndexBy()) idxByVal := valueOf(t, idx.IndexBy())
_, err := idx.Add(pkVal, idxByVal) if _, err := idx.Add(pkVal, idxByVal); err != nil {
if err != nil {
return err return err
} }
} }
} }
} }
return nil return nil
} }
/* func (i Indexer) FindBy(t interface{}, field string, val string) ([]string, error) {
// Find a entry by type,field and value. typeName := getTypeFQN(t)
// // Find a User type by email resultPaths := make([]string, 0)
// man.Find("User", "Email", "foo@example.com") if fields, ok := i.indices[typeName]; ok {
func (i Indexer) Find(typeName, key, value string) (pk string, err error) { for _, idx := range fields.indicesByField[field] {
var res = []string{} res, err := idx.Lookup(val)
if indices, ok := i.indices[typeName][key]; ok { if err != nil {
for _, idx := range indices { if IsNotFoundErr(err) {
if res, err = idx.Lookup(value); IsNotFoundErr(err) { continue
continue }
if err != nil {
return nil, err
}
} }
if err != nil { resultPaths = append(resultPaths, res...)
return
}
} }
} }
if len(res) == 0 { result := make([]string, 0, len(resultPaths))
return "", err for _, v := range resultPaths {
result = append(result, path.Base(v))
} }
return path.Base(res[0]), err return result, nil
} }
*/
func (i Indexer) Delete(typeName, pk string) error { func (i Indexer) Delete(typeName, pk string) error {
return nil return nil
} }
+46 -1
View File
@@ -6,7 +6,7 @@ import (
"testing" "testing"
) )
func TestIndexer_Add(t *testing.T) { func TestIndexer_AddWithUniqueIndex(t *testing.T) {
dataDir := writeIndexTestData(t, testData, "Id") dataDir := writeIndexTestData(t, testData, "Id")
indexer := NewIndex(&Config{ indexer := NewIndex(&Config{
DataDir: dataDir, DataDir: dataDir,
@@ -22,6 +22,51 @@ func TestIndexer_Add(t *testing.T) {
} }
func TestIndexer_FindByWithUniqueIndex(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")
u := &User{Id: "abcdefg-123", UserName: "mikey", Email: "mikey@example.com"}
err := indexer.Add(u)
assert.NoError(t, err)
res, err := indexer.FindBy(User{}, "UserName", "mikey")
assert.NoError(t, err)
t.Log(res)
}
func TestIndexer_AddWithNonUniqueIndex(t *testing.T) {
dataDir := writeIndexTestData(t, testData, "Id")
indexer := NewIndex(&Config{
DataDir: dataDir,
IndexRootDirName: "index.disk",
Log: zerolog.Logger{},
})
indexer.AddNonUniqueIndex(&TestPet{}, "Kind", "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)
res, err := indexer.FindBy(TestPet{}, "Kind", "Hog")
assert.NoError(t, err)
t.Log(res)
}
/* /*
func TestManagerQueryMultipleIndices(t *testing.T) { func TestManagerQueryMultipleIndices(t *testing.T) {
dataDir := writeIndexTestData(t, testData, "Id") dataDir := writeIndexTestData(t, testData, "Id")
+1 -1
View File
@@ -19,7 +19,7 @@ func (m indexMap) addIndex(typeName string, pkName string, idx IndexType) {
m[typeName] = typeMapping{ m[typeName] = typeMapping{
pKFieldName: pkName, pKFieldName: pkName,
indicesByField: map[string][]IndexType{ indicesByField: map[string][]IndexType{
pkName: {idx}, idx.IndexBy(): {idx},
}, },
} }
} }
+2
View File
@@ -81,6 +81,8 @@ func (idx Unique) Remove(id string, v string) (err error) {
return os.Remove(searchPath) return os.Remove(searchPath)
} }
// unique.github.com.owncloud.ocis.accounts.pkg.indexer.User.UserName
// unique.github.com.owncloud.ocis.accounts.pkg.indexer.User.UserName/UserName
func (idx Unique) Lookup(v string) (resultPath []string, err error) { func (idx Unique) Lookup(v string) (resultPath []string, err error) {
searchPath := path.Join(idx.indexRootDir, v) searchPath := path.Join(idx.indexRootDir, v)
if err = isValidSymlink(searchPath); err != nil { if err = isValidSymlink(searchPath); err != nil {