merge AddUniqueIndex and AddNonUniqueIndex into AddIndex to the Indexer
This commit is contained in:
@@ -14,9 +14,9 @@ import (
|
|||||||
|
|
||||||
// Indexer is a facade to configure and query over multiple indices.
|
// Indexer is a facade to configure and query over multiple indices.
|
||||||
type Indexer struct {
|
type Indexer struct {
|
||||||
newConfig *config.Config
|
repoConfig *config.Config
|
||||||
config *Config
|
config *Config
|
||||||
indices typeMap
|
indices typeMap
|
||||||
}
|
}
|
||||||
|
|
||||||
type Config struct {
|
type Config struct {
|
||||||
@@ -34,8 +34,8 @@ func NewIndexer(cfg *Config) *Indexer {
|
|||||||
|
|
||||||
func CreateIndexer(cfg *config.Config) *Indexer {
|
func CreateIndexer(cfg *config.Config) *Indexer {
|
||||||
return &Indexer{
|
return &Indexer{
|
||||||
newConfig: cfg,
|
repoConfig: cfg,
|
||||||
indices: typeMap{},
|
indices: typeMap{},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -47,28 +47,28 @@ func getRegistryStrategy(cfg *config.Config) string {
|
|||||||
return "cs3"
|
return "cs3"
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i Indexer) AddUniqueIndex(t interface{}, indexBy, pkName, entityDirName string) error {
|
func (i Indexer) AddIndex(t interface{}, indexBy, pkName, entityDirName, indexType string) error {
|
||||||
strategy := getRegistryStrategy(i.newConfig)
|
strategy := getRegistryStrategy(i.repoConfig)
|
||||||
f := registry.IndexConstructorRegistry[strategy]["unique"]
|
f := registry.IndexConstructorRegistry[strategy][indexType]
|
||||||
var idx index.Index
|
var idx index.Index
|
||||||
|
|
||||||
if strategy == "disk" {
|
if strategy == "disk" {
|
||||||
idx = f(
|
idx = f(
|
||||||
option.WithTypeName(getTypeFQN(t)),
|
option.WithTypeName(getTypeFQN(t)),
|
||||||
option.WithIndexBy(indexBy),
|
option.WithIndexBy(indexBy),
|
||||||
option.WithFilesDir(path.Join(i.newConfig.Repo.Disk.Path, entityDirName)),
|
option.WithFilesDir(path.Join(i.repoConfig.Repo.Disk.Path, entityDirName)),
|
||||||
option.WithDataDir(i.newConfig.Repo.Disk.Path),
|
option.WithDataDir(i.repoConfig.Repo.Disk.Path),
|
||||||
)
|
)
|
||||||
} else if strategy == "cs3" {
|
} else if strategy == "cs3" {
|
||||||
idx = f(
|
idx = f(
|
||||||
option.WithTypeName(getTypeFQN(t)),
|
option.WithTypeName(getTypeFQN(t)),
|
||||||
option.WithIndexBy(indexBy),
|
option.WithIndexBy(indexBy),
|
||||||
option.WithFilesDir(path.Join(i.newConfig.Repo.Disk.Path, entityDirName)),
|
option.WithFilesDir(path.Join(i.repoConfig.Repo.Disk.Path, entityDirName)),
|
||||||
option.WithDataDir(i.newConfig.Repo.Disk.Path),
|
option.WithDataDir(i.repoConfig.Repo.Disk.Path),
|
||||||
option.WithDataURL(i.newConfig.Repo.CS3.DataURL),
|
option.WithDataURL(i.repoConfig.Repo.CS3.DataURL),
|
||||||
option.WithDataPrefix(i.newConfig.Repo.CS3.DataPrefix),
|
option.WithDataPrefix(i.repoConfig.Repo.CS3.DataPrefix),
|
||||||
option.WithJWTSecret(i.newConfig.Repo.CS3.JWTSecret),
|
option.WithJWTSecret(i.repoConfig.Repo.CS3.JWTSecret),
|
||||||
option.WithProviderAddr(i.newConfig.Repo.CS3.ProviderAddr),
|
option.WithProviderAddr(i.repoConfig.Repo.CS3.ProviderAddr),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -76,28 +76,28 @@ func (i Indexer) AddUniqueIndex(t interface{}, indexBy, pkName, entityDirName st
|
|||||||
return idx.Init()
|
return idx.Init()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i Indexer) AddNonUniqueIndex(t interface{}, indexBy, pkName, entityDirName string) error {
|
func (i Indexer) AddNonUniqueIndex(t interface{}, indexBy, pkName, entityDirName, indexType string) error {
|
||||||
strategy := getRegistryStrategy(i.newConfig)
|
strategy := getRegistryStrategy(i.repoConfig)
|
||||||
f := registry.IndexConstructorRegistry[strategy]["non_unique"]
|
f := registry.IndexConstructorRegistry[strategy][indexType]
|
||||||
var idx index.Index
|
var idx index.Index
|
||||||
|
|
||||||
if strategy == "disk" {
|
if strategy == "disk" {
|
||||||
idx = f(
|
idx = f(
|
||||||
option.WithTypeName(getTypeFQN(t)),
|
option.WithTypeName(getTypeFQN(t)),
|
||||||
option.WithIndexBy(indexBy),
|
option.WithIndexBy(indexBy),
|
||||||
option.WithFilesDir(path.Join(i.newConfig.Repo.Disk.Path, entityDirName)),
|
option.WithFilesDir(path.Join(i.repoConfig.Repo.Disk.Path, entityDirName)),
|
||||||
option.WithDataDir(i.newConfig.Repo.Disk.Path),
|
option.WithDataDir(i.repoConfig.Repo.Disk.Path),
|
||||||
)
|
)
|
||||||
} else if strategy == "cs3" {
|
} else if strategy == "cs3" {
|
||||||
idx = f(
|
idx = f(
|
||||||
option.WithTypeName(getTypeFQN(t)),
|
option.WithTypeName(getTypeFQN(t)),
|
||||||
option.WithIndexBy(indexBy),
|
option.WithIndexBy(indexBy),
|
||||||
option.WithFilesDir(path.Join(i.newConfig.Repo.Disk.Path, entityDirName)),
|
option.WithFilesDir(path.Join(i.repoConfig.Repo.Disk.Path, entityDirName)),
|
||||||
option.WithDataDir(i.newConfig.Repo.Disk.Path),
|
option.WithDataDir(i.repoConfig.Repo.Disk.Path),
|
||||||
option.WithDataURL(i.newConfig.Repo.CS3.DataURL),
|
option.WithDataURL(i.repoConfig.Repo.CS3.DataURL),
|
||||||
option.WithDataPrefix(i.newConfig.Repo.CS3.DataPrefix),
|
option.WithDataPrefix(i.repoConfig.Repo.CS3.DataPrefix),
|
||||||
option.WithJWTSecret(i.newConfig.Repo.CS3.JWTSecret),
|
option.WithJWTSecret(i.repoConfig.Repo.CS3.JWTSecret),
|
||||||
option.WithProviderAddr(i.newConfig.Repo.CS3.ProviderAddr),
|
option.WithProviderAddr(i.repoConfig.Repo.CS3.ProviderAddr),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,10 +21,11 @@ func TestIndexer_AddWithUniqueIndex(t *testing.T) {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
indexer.AddUniqueIndex(&User{}, "UserName", "Id", "users")
|
err := indexer.AddIndex(&User{}, "UserName", "Id", "users", "unique")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
u := &User{Id: "abcdefg-123", UserName: "mikey", Email: "mikey@example.com"}
|
u := &User{Id: "abcdefg-123", UserName: "mikey", Email: "mikey@example.com"}
|
||||||
err := indexer.Add(u)
|
err = indexer.Add(u)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -41,10 +42,11 @@ func TestIndexer_AddWithUniqueIndexCS3(t *testing.T) {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
indexer.AddUniqueIndex(&User{}, "UserName", "Id", "users")
|
err := indexer.AddIndex(&User{}, "UserName", "Id", "users", "unique")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
u := &User{Id: "abcdefg-123", UserName: "mikey", Email: "mikey@example.com"}
|
u := &User{Id: "abcdefg-123", UserName: "mikey", Email: "mikey@example.com"}
|
||||||
err := indexer.Add(u)
|
err = indexer.Add(u)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
_ = os.RemoveAll(dataDir)
|
_ = os.RemoveAll(dataDir)
|
||||||
@@ -63,7 +65,7 @@ func TestIndexer_AddWithNonUniqueIndexCS3(t *testing.T) {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
err := indexer.AddNonUniqueIndex(&User{}, "UserName", "Id", "users")
|
err := indexer.AddIndex(&User{}, "UserName", "Id", "users", "non_unique")
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
u := &User{Id: "abcdefg-123", UserName: "mikey", Email: "mikey@example.com"}
|
u := &User{Id: "abcdefg-123", UserName: "mikey", Email: "mikey@example.com"}
|
||||||
@@ -81,10 +83,11 @@ func TestIndexer_FindByWithUniqueIndex(t *testing.T) {
|
|||||||
Log: zerolog.Logger{},
|
Log: zerolog.Logger{},
|
||||||
})
|
})
|
||||||
|
|
||||||
indexer.AddUniqueIndex(&User{}, "UserName", "Id", "users")
|
err := indexer.AddIndex(&User{}, "UserName", "Id", "users", "unique")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
u := &User{Id: "abcdefg-123", UserName: "mikey", Email: "mikey@example.com"}
|
u := &User{Id: "abcdefg-123", UserName: "mikey", Email: "mikey@example.com"}
|
||||||
err := indexer.Add(u)
|
err = indexer.Add(u)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
res, err := indexer.FindBy(User{}, "UserName", "mikey")
|
res, err := indexer.FindBy(User{}, "UserName", "mikey")
|
||||||
@@ -100,12 +103,13 @@ func TestIndexer_AddWithNonUniqueIndex(t *testing.T) {
|
|||||||
Log: zerolog.Logger{},
|
Log: zerolog.Logger{},
|
||||||
})
|
})
|
||||||
|
|
||||||
indexer.AddNonUniqueIndex(&TestPet{}, "Kind", "Id", "pets")
|
err := indexer.AddIndex(&TestPet{}, "Kind", "Id", "pets", "non_unique")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
pet1 := TestPet{Id: "goefe-789", Kind: "Hog", Color: "Green", Name: "Dicky"}
|
pet1 := TestPet{Id: "goefe-789", Kind: "Hog", Color: "Green", Name: "Dicky"}
|
||||||
pet2 := TestPet{Id: "xadaf-189", Kind: "Hog", Color: "Green", Name: "Ricky"}
|
pet2 := TestPet{Id: "xadaf-189", Kind: "Hog", Color: "Green", Name: "Ricky"}
|
||||||
|
|
||||||
err := indexer.Add(pet1)
|
err = indexer.Add(pet1)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
err = indexer.Add(pet2)
|
err = indexer.Add(pet2)
|
||||||
@@ -125,12 +129,13 @@ func TestIndexer_DeleteWithNonUniqueIndex(t *testing.T) {
|
|||||||
Log: zerolog.Logger{},
|
Log: zerolog.Logger{},
|
||||||
})
|
})
|
||||||
|
|
||||||
indexer.AddNonUniqueIndex(&TestPet{}, "Kind", "Id", "pets")
|
err := indexer.AddIndex(&TestPet{}, "Kind", "Id", "pets", "non_unique")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
pet1 := TestPet{Id: "goefe-789", Kind: "Hog", Color: "Green", Name: "Dicky"}
|
pet1 := TestPet{Id: "goefe-789", Kind: "Hog", Color: "Green", Name: "Dicky"}
|
||||||
pet2 := TestPet{Id: "xadaf-189", Kind: "Hog", Color: "Green", Name: "Ricky"}
|
pet2 := TestPet{Id: "xadaf-189", Kind: "Hog", Color: "Green", Name: "Ricky"}
|
||||||
|
|
||||||
err := indexer.Add(pet1)
|
err = indexer.Add(pet1)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
err = indexer.Add(pet2)
|
err = indexer.Add(pet2)
|
||||||
@@ -148,12 +153,13 @@ func TestIndexer_SearchWithNonUniqueIndex(t *testing.T) {
|
|||||||
Log: zerolog.Logger{},
|
Log: zerolog.Logger{},
|
||||||
})
|
})
|
||||||
|
|
||||||
indexer.AddNonUniqueIndex(&TestPet{}, "Name", "Id", "pets")
|
err := indexer.AddIndex(&TestPet{}, "Name", "Id", "pets", "non_unique")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
pet1 := TestPet{Id: "goefe-789", Kind: "Hog", Color: "Green", Name: "Dicky"}
|
pet1 := TestPet{Id: "goefe-789", Kind: "Hog", Color: "Green", Name: "Dicky"}
|
||||||
pet2 := TestPet{Id: "xadaf-189", Kind: "Hog", Color: "Green", Name: "Ricky"}
|
pet2 := TestPet{Id: "xadaf-189", Kind: "Hog", Color: "Green", Name: "Ricky"}
|
||||||
|
|
||||||
err := indexer.Add(pet1)
|
err = indexer.Add(pet1)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
err = indexer.Add(pet2)
|
err = indexer.Add(pet2)
|
||||||
@@ -173,10 +179,10 @@ func TestIndexer_UpdateWithUniqueIndex(t *testing.T) {
|
|||||||
Log: zerolog.Logger{},
|
Log: zerolog.Logger{},
|
||||||
})
|
})
|
||||||
|
|
||||||
err := indexer.AddUniqueIndex(&User{}, "UserName", "Id", "users")
|
err := indexer.AddIndex(&User{}, "UserName", "Id", "users", "unique")
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
err = indexer.AddUniqueIndex(&User{}, "Email", "Id", "users")
|
err = indexer.AddIndex(&User{}, "Email", "Id", "users", "unique")
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
user1 := &User{Id: "abcdefg-123", UserName: "mikey", Email: "mikey@example.com"}
|
user1 := &User{Id: "abcdefg-123", UserName: "mikey", Email: "mikey@example.com"}
|
||||||
@@ -227,12 +233,13 @@ func TestIndexer_UpdateWithNonUniqueIndex(t *testing.T) {
|
|||||||
Log: zerolog.Logger{},
|
Log: zerolog.Logger{},
|
||||||
})
|
})
|
||||||
|
|
||||||
indexer.AddNonUniqueIndex(&TestPet{}, "Name", "Id", "pets")
|
err := indexer.AddIndex(&TestPet{}, "Name", "Id", "pets", "non_unique")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
pet1 := TestPet{Id: "goefe-789", Kind: "Hog", Color: "Green", Name: "Dicky"}
|
pet1 := TestPet{Id: "goefe-789", Kind: "Hog", Color: "Green", Name: "Dicky"}
|
||||||
pet2 := TestPet{Id: "xadaf-189", Kind: "Hog", Color: "Green", Name: "Ricky"}
|
pet2 := TestPet{Id: "xadaf-189", Kind: "Hog", Color: "Green", Name: "Ricky"}
|
||||||
|
|
||||||
err := indexer.Add(pet1)
|
err = indexer.Add(pet1)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
err = indexer.Add(pet2)
|
err = indexer.Add(pet2)
|
||||||
@@ -248,16 +255,16 @@ func TestManagerQueryMultipleIndices(t *testing.T) {
|
|||||||
Log: zerolog.Logger{},
|
Log: zerolog.Logger{},
|
||||||
})
|
})
|
||||||
|
|
||||||
err := man.AddUniqueIndex("User", "Email", "users")
|
err := man.AddIndex("User", "Email", "users")
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
err = man.AddUniqueIndex("User", "UserName", "users")
|
err = man.AddIndex("User", "UserName", "users")
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
err = man.AddNormalIndex("TestPet", "Color", "pets")
|
err = man.AddNormalIndex("TestPet", "Color", "pets")
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
err = man.AddUniqueIndex("TestPet", "Name", "pets")
|
err = man.AddIndex("TestPet", "Name", "pets")
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
for path := range testData {
|
for path := range testData {
|
||||||
@@ -302,13 +309,13 @@ func TestManagerDelete(t *testing.T) {
|
|||||||
Log: zerolog.Logger{},
|
Log: zerolog.Logger{},
|
||||||
})
|
})
|
||||||
|
|
||||||
err := man.AddUniqueIndex("User", "Email", "users")
|
err := man.AddIndex("User", "Email", "users")
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
err = man.AddUniqueIndex("User", "UserName", "users")
|
err = man.AddIndex("User", "UserName", "users")
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
err = man.AddUniqueIndex("TestPet", "Name", "pets")
|
err = man.AddIndex("TestPet", "Name", "pets")
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
for path := range testData {
|
for path := range testData {
|
||||||
|
|||||||
Reference in New Issue
Block a user