diff --git a/dalmdl/corefdb/corefdb.go b/dalmdl/corefdb/corefdb.go index cbd01d318a5ddd03bd678f99af154de170757af5..eca4468b96942f9e023d88f2b5524a747e59c169 100644 --- a/dalmdl/corefdb/corefdb.go +++ b/dalmdl/corefdb/corefdb.go @@ -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 { diff --git a/dalmdl/corefdb/filetype/pack.go b/dalmdl/corefdb/filetype/pack.go index 36efd81ef7dc24e4073465332356d49c93922363..119e0041f824372f167827bdf9d4b514657fbf0b 100644 --- a/dalmdl/corefdb/filetype/pack.go +++ b/dalmdl/corefdb/filetype/pack.go @@ -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)