mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-01-29 16:31:20 -05:00
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.
|
||||
type Indexer struct {
|
||||
newConfig *config.Config
|
||||
config *Config
|
||||
indices typeMap
|
||||
repoConfig *config.Config
|
||||
config *Config
|
||||
indices typeMap
|
||||
}
|
||||
|
||||
type Config struct {
|
||||
@@ -34,8 +34,8 @@ func NewIndexer(cfg *Config) *Indexer {
|
||||
|
||||
func CreateIndexer(cfg *config.Config) *Indexer {
|
||||
return &Indexer{
|
||||
newConfig: cfg,
|
||||
indices: typeMap{},
|
||||
repoConfig: cfg,
|
||||
indices: typeMap{},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,28 +47,28 @@ func getRegistryStrategy(cfg *config.Config) string {
|
||||
return "cs3"
|
||||
}
|
||||
|
||||
func (i Indexer) AddUniqueIndex(t interface{}, indexBy, pkName, entityDirName string) error {
|
||||
strategy := getRegistryStrategy(i.newConfig)
|
||||
f := registry.IndexConstructorRegistry[strategy]["unique"]
|
||||
func (i Indexer) AddIndex(t interface{}, indexBy, pkName, entityDirName, indexType string) error {
|
||||
strategy := getRegistryStrategy(i.repoConfig)
|
||||
f := registry.IndexConstructorRegistry[strategy][indexType]
|
||||
var idx index.Index
|
||||
|
||||
if strategy == "disk" {
|
||||
idx = f(
|
||||
option.WithTypeName(getTypeFQN(t)),
|
||||
option.WithIndexBy(indexBy),
|
||||
option.WithFilesDir(path.Join(i.newConfig.Repo.Disk.Path, entityDirName)),
|
||||
option.WithDataDir(i.newConfig.Repo.Disk.Path),
|
||||
option.WithFilesDir(path.Join(i.repoConfig.Repo.Disk.Path, entityDirName)),
|
||||
option.WithDataDir(i.repoConfig.Repo.Disk.Path),
|
||||
)
|
||||
} else if strategy == "cs3" {
|
||||
idx = f(
|
||||
option.WithTypeName(getTypeFQN(t)),
|
||||
option.WithIndexBy(indexBy),
|
||||
option.WithFilesDir(path.Join(i.newConfig.Repo.Disk.Path, entityDirName)),
|
||||
option.WithDataDir(i.newConfig.Repo.Disk.Path),
|
||||
option.WithDataURL(i.newConfig.Repo.CS3.DataURL),
|
||||
option.WithDataPrefix(i.newConfig.Repo.CS3.DataPrefix),
|
||||
option.WithJWTSecret(i.newConfig.Repo.CS3.JWTSecret),
|
||||
option.WithProviderAddr(i.newConfig.Repo.CS3.ProviderAddr),
|
||||
option.WithFilesDir(path.Join(i.repoConfig.Repo.Disk.Path, entityDirName)),
|
||||
option.WithDataDir(i.repoConfig.Repo.Disk.Path),
|
||||
option.WithDataURL(i.repoConfig.Repo.CS3.DataURL),
|
||||
option.WithDataPrefix(i.repoConfig.Repo.CS3.DataPrefix),
|
||||
option.WithJWTSecret(i.repoConfig.Repo.CS3.JWTSecret),
|
||||
option.WithProviderAddr(i.repoConfig.Repo.CS3.ProviderAddr),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -76,28 +76,28 @@ func (i Indexer) AddUniqueIndex(t interface{}, indexBy, pkName, entityDirName st
|
||||
return idx.Init()
|
||||
}
|
||||
|
||||
func (i Indexer) AddNonUniqueIndex(t interface{}, indexBy, pkName, entityDirName string) error {
|
||||
strategy := getRegistryStrategy(i.newConfig)
|
||||
f := registry.IndexConstructorRegistry[strategy]["non_unique"]
|
||||
func (i Indexer) AddNonUniqueIndex(t interface{}, indexBy, pkName, entityDirName, indexType string) error {
|
||||
strategy := getRegistryStrategy(i.repoConfig)
|
||||
f := registry.IndexConstructorRegistry[strategy][indexType]
|
||||
var idx index.Index
|
||||
|
||||
if strategy == "disk" {
|
||||
idx = f(
|
||||
option.WithTypeName(getTypeFQN(t)),
|
||||
option.WithIndexBy(indexBy),
|
||||
option.WithFilesDir(path.Join(i.newConfig.Repo.Disk.Path, entityDirName)),
|
||||
option.WithDataDir(i.newConfig.Repo.Disk.Path),
|
||||
option.WithFilesDir(path.Join(i.repoConfig.Repo.Disk.Path, entityDirName)),
|
||||
option.WithDataDir(i.repoConfig.Repo.Disk.Path),
|
||||
)
|
||||
} else if strategy == "cs3" {
|
||||
idx = f(
|
||||
option.WithTypeName(getTypeFQN(t)),
|
||||
option.WithIndexBy(indexBy),
|
||||
option.WithFilesDir(path.Join(i.newConfig.Repo.Disk.Path, entityDirName)),
|
||||
option.WithDataDir(i.newConfig.Repo.Disk.Path),
|
||||
option.WithDataURL(i.newConfig.Repo.CS3.DataURL),
|
||||
option.WithDataPrefix(i.newConfig.Repo.CS3.DataPrefix),
|
||||
option.WithJWTSecret(i.newConfig.Repo.CS3.JWTSecret),
|
||||
option.WithProviderAddr(i.newConfig.Repo.CS3.ProviderAddr),
|
||||
option.WithFilesDir(path.Join(i.repoConfig.Repo.Disk.Path, entityDirName)),
|
||||
option.WithDataDir(i.repoConfig.Repo.Disk.Path),
|
||||
option.WithDataURL(i.repoConfig.Repo.CS3.DataURL),
|
||||
option.WithDataPrefix(i.repoConfig.Repo.CS3.DataPrefix),
|
||||
option.WithJWTSecret(i.repoConfig.Repo.CS3.JWTSecret),
|
||||
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"}
|
||||
err := indexer.Add(u)
|
||||
err = indexer.Add(u)
|
||||
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"}
|
||||
err := indexer.Add(u)
|
||||
err = indexer.Add(u)
|
||||
assert.NoError(t, err)
|
||||
|
||||
_ = 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)
|
||||
|
||||
u := &User{Id: "abcdefg-123", UserName: "mikey", Email: "mikey@example.com"}
|
||||
@@ -81,10 +83,11 @@ func TestIndexer_FindByWithUniqueIndex(t *testing.T) {
|
||||
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"}
|
||||
err := indexer.Add(u)
|
||||
err = indexer.Add(u)
|
||||
assert.NoError(t, err)
|
||||
|
||||
res, err := indexer.FindBy(User{}, "UserName", "mikey")
|
||||
@@ -100,12 +103,13 @@ func TestIndexer_AddWithNonUniqueIndex(t *testing.T) {
|
||||
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"}
|
||||
pet2 := TestPet{Id: "xadaf-189", Kind: "Hog", Color: "Green", Name: "Ricky"}
|
||||
|
||||
err := indexer.Add(pet1)
|
||||
err = indexer.Add(pet1)
|
||||
assert.NoError(t, err)
|
||||
|
||||
err = indexer.Add(pet2)
|
||||
@@ -125,12 +129,13 @@ func TestIndexer_DeleteWithNonUniqueIndex(t *testing.T) {
|
||||
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"}
|
||||
pet2 := TestPet{Id: "xadaf-189", Kind: "Hog", Color: "Green", Name: "Ricky"}
|
||||
|
||||
err := indexer.Add(pet1)
|
||||
err = indexer.Add(pet1)
|
||||
assert.NoError(t, err)
|
||||
|
||||
err = indexer.Add(pet2)
|
||||
@@ -148,12 +153,13 @@ func TestIndexer_SearchWithNonUniqueIndex(t *testing.T) {
|
||||
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"}
|
||||
pet2 := TestPet{Id: "xadaf-189", Kind: "Hog", Color: "Green", Name: "Ricky"}
|
||||
|
||||
err := indexer.Add(pet1)
|
||||
err = indexer.Add(pet1)
|
||||
assert.NoError(t, err)
|
||||
|
||||
err = indexer.Add(pet2)
|
||||
@@ -173,10 +179,10 @@ func TestIndexer_UpdateWithUniqueIndex(t *testing.T) {
|
||||
Log: zerolog.Logger{},
|
||||
})
|
||||
|
||||
err := indexer.AddUniqueIndex(&User{}, "UserName", "Id", "users")
|
||||
err := indexer.AddIndex(&User{}, "UserName", "Id", "users", "unique")
|
||||
assert.NoError(t, err)
|
||||
|
||||
err = indexer.AddUniqueIndex(&User{}, "Email", "Id", "users")
|
||||
err = indexer.AddIndex(&User{}, "Email", "Id", "users", "unique")
|
||||
assert.NoError(t, err)
|
||||
|
||||
user1 := &User{Id: "abcdefg-123", UserName: "mikey", Email: "mikey@example.com"}
|
||||
@@ -227,12 +233,13 @@ func TestIndexer_UpdateWithNonUniqueIndex(t *testing.T) {
|
||||
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"}
|
||||
pet2 := TestPet{Id: "xadaf-189", Kind: "Hog", Color: "Green", Name: "Ricky"}
|
||||
|
||||
err := indexer.Add(pet1)
|
||||
err = indexer.Add(pet1)
|
||||
assert.NoError(t, err)
|
||||
|
||||
err = indexer.Add(pet2)
|
||||
@@ -248,16 +255,16 @@ func TestManagerQueryMultipleIndices(t *testing.T) {
|
||||
Log: zerolog.Logger{},
|
||||
})
|
||||
|
||||
err := man.AddUniqueIndex("User", "Email", "users")
|
||||
err := man.AddIndex("User", "Email", "users")
|
||||
assert.NoError(t, err)
|
||||
|
||||
err = man.AddUniqueIndex("User", "UserName", "users")
|
||||
err = man.AddIndex("User", "UserName", "users")
|
||||
assert.NoError(t, err)
|
||||
|
||||
err = man.AddNormalIndex("TestPet", "Color", "pets")
|
||||
assert.NoError(t, err)
|
||||
|
||||
err = man.AddUniqueIndex("TestPet", "Name", "pets")
|
||||
err = man.AddIndex("TestPet", "Name", "pets")
|
||||
assert.NoError(t, err)
|
||||
|
||||
for path := range testData {
|
||||
@@ -302,13 +309,13 @@ func TestManagerDelete(t *testing.T) {
|
||||
Log: zerolog.Logger{},
|
||||
})
|
||||
|
||||
err := man.AddUniqueIndex("User", "Email", "users")
|
||||
err := man.AddIndex("User", "Email", "users")
|
||||
assert.NoError(t, err)
|
||||
|
||||
err = man.AddUniqueIndex("User", "UserName", "users")
|
||||
err = man.AddIndex("User", "UserName", "users")
|
||||
assert.NoError(t, err)
|
||||
|
||||
err = man.AddUniqueIndex("TestPet", "Name", "pets")
|
||||
err = man.AddIndex("TestPet", "Name", "pets")
|
||||
assert.NoError(t, err)
|
||||
|
||||
for path := range testData {
|
||||
|
||||
Reference in New Issue
Block a user