// Copyright (C) 2019 Marius Schellenberger package db import "git.giftfish.de/ston1th/docstore/pkg/core" const ( // schema: // key: id/ // value: idPrefix = "id/" // schema: // key: path/ // value: pathPrefix = "path/" ) func (db *DB) GetPaths(res core.Results) { db.store.Tx(false, func(tx store.KVStore) error { for i, v := range res { err := tx.Get(pathPrefix+v.ID, &res[i].Path) if err != nil { res[i].Path = err.Error() } } }) } func (db *DB) GetIndexed(p core.Paths) { db.store.Tx(false, func(tx store.KVStore) error { for i, v := range p { p[i].Flag = db.IsIndexed(tx, v.Abs) p[i].Tags, _ = db.GetTag(tx, v.Abs) } }) } func (db *DB) IsIndexed(tx store.KVStore, path string) bool { f := func(tx store.KVStore) error { return tx.Get(idPrefix+path, nil) } if tx != nil { return f(tx) == nil } return f(db.store) == nil } func (db *DB) GetPath(tx store.KVStore, id string) (path string, err error) { f := func(tx store.KVStore) error { return tx.Get(pathPrefix+id, &path) } if tx != nil { err = f(tx) return } err = f(db.store) return } func (db *DB) GetID(tx store.KVStore, path string) (id string, err error) { f := func(tx store.KVStore) error { return tx.Get(idPrefix+path, &id) } if tx != nil { err = f(tx) return } err = f(db.store) return } func (db *DB) DeletePath(tx store.KVStore, id string) error { f := func(tx store.KVStore) error { return tx.Delete(pathPrefix + id) } if tx != nil { return f(tx) } return f(db.store) } func (db *DB) DeleteID(tx store.KVStore, path string) error { f := func(tx store.KVStore) error { return tx.Delete(idPrefix + path) } if tx != nil { return f(tx) } return f(db.store) } func (db *DB) NewFile(tx store.KVStore, id, path string, tag []string) (err error) { f := func(tx store.KVStore) error { err = tx.Set(idPrefix+path, id) if err != nil { return } err = tx.Set(pathPrefix+id, path) if err != nil { return } return tx.Set(tagPrefix+path, tag) } if tx != nil { return f(tx) } return db.store.Tx(true, f) } func (db *DB) MoveFile(op, np string) (err error) { return db.store.Tx(true, func(tx store.KVStore) error { id, tag, err := db.DeleteFile(tx, op) if err != nil { return } return db.NewFile(tx, id, np, tag) }) } func (db *DB) DeleteFile(tx store.KVStore, path string) (id string, tags []string, err error) { f := func(tx store.KVStore) error { err = tx.Get(idPrefix+path, &id) if err != nil { return } err = tx.Delete(idPrefix + path) if err != nil { return } err = tx.Get(tagPrefix+path, &tags) if err != nil { return } err = tx.Delete(tagPrefix + path) if err != nil { return } return tx.Delete(pathPrefix + id) } if tx != nil { err = f(tx) return } err = db.store.Tx(true, f) return }