Commit fca738dd authored by Vivek Naik's avatar Vivek Naik
Browse files

added function in fdb

added function to get bucket by bucket id
added function to fetch multiple resources
parent d735e643
Branches
Tags
2 merge requests!210Staging mepdeployment05072020,!209Added function in fdb
Showing with 81 additions and 0 deletions
......@@ -186,6 +186,12 @@ func (f *FDB) GetFDBIndex(indexID string) (*index.Index, bool) {
return index, ok
}
// GetFDBBucketStore - returns bucket
func (f *FDB) GetFDBBucketStore(bucketID string) (bucket.Store, bool) {
store, ok := f.buckets[bucketID]
return store, ok
}
func SaveDataInFDB(dbName string, indexID string, data *gjson.Result) error {
fdb, err := GetFDBInstance(dbName)
if err != nil {
......@@ -286,6 +292,38 @@ func SaveDataInFDB(dbName string, indexID string, data *gjson.Result) error {
return nil
}
func GetFilePaths(dbName, indexID string, queries []string) ([]string, error) {
filePaths := make([]string, 0)
fdb, err := GetFDBInstance(dbName)
if err != nil {
loggermdl.LogError("fdb instance not found: ", dbName)
return filePaths, errormdl.Wrap("fdb instance not found " + dbName)
}
// get index Id from index map
index, ok := fdb.GetFDBIndex(indexID)
if !ok {
loggermdl.LogError("INDEX not found: " + indexID)
return filePaths, errormdl.Wrap("INDEX not found: " + indexID)
}
indexKeyValueMap, err := index.GetEntriesByQueries(queries)
if err != nil {
loggermdl.LogError(err)
return filePaths, err
}
if len(indexKeyValueMap) == 0 {
return filePaths, nil
}
for filePath := range indexKeyValueMap {
filePath, err = filepath.Abs(filepath.Join(fdb.DBPath, filePath))
if err != nil {
loggermdl.LogError(err)
return filePaths, err
}
filePaths = append(filePaths, filePath)
}
return filePaths, nil
}
func ReadDataFromFDB(dbName, indexID string, data *gjson.Result, queries []string, infileIndexQueries []string) (*gjson.Result, error) {
fdb, err := GetFDBInstance(dbName)
if err != nil {
......
......@@ -578,6 +578,49 @@ func (p *PackFile) ReadMedia(recordID string) ([]byte, *gjson.Result, error) {
return dataByte, &metaDataObj, nil
}
func (p *PackFile) ReadMediaByQuery(inFileIndexQueries []string) (map[string][]byte, map[string]gjson.Result, error) {
f := p.Fp
indexData, err := getInFileIndexData(f)
if err != nil {
loggermdl.LogError("index data not found: ", f.Name(), err)
return nil, nil, err
}
indexRows := indexData
// indexRows := indexData.Get(`#[fileType==` + requestedFileType + `]#`)
for i := 0; i < len(inFileIndexQueries); i++ {
indexRows = indexRows.Get(inFileIndexQueries[i] + "#")
}
if indexRows.String() == "" {
loggermdl.LogError("data not found")
return nil, nil, errormdl.Wrap("data not found")
}
dataMap := make(map[string][]byte, 0)
metaDataMap := make(map[string]gjson.Result, 0)
for _, indexRow := range indexRows.Array() {
startOffSet := indexRow.Get("startOffset").Int()
dataSize := indexRow.Get("dataSize").Int()
if startOffSet == 0 || dataSize == 0 {
return nil, nil, errormdl.Wrap("data not found")
}
dataByte, err := getFileDataFromPack(f, startOffSet, dataSize, nil, nil)
if err != nil {
loggermdl.LogError(err)
return nil, nil, err
}
recordID := indexRow.Get("recordID").String()
if recordID == "" {
return nil, nil, errormdl.Wrap("record id not found")
}
data, _ := sjson.Set("", "requiredData", indexRow.Get("requiredData").String())
// data, _ = sjson.Set(data, "infileIndex", indexData.String())
metaDataObj := gjson.Parse(data)
dataMap[recordID] = dataByte
metaDataMap[recordID] = metaDataObj
}
return dataMap, metaDataMap, nil
}
func (p *PackFile) RemoveMedia(recordID string) error {
queries := []string{`#[recordID=` + recordID + `]`}
_, err := p.Remove(queries)
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment