stub namespaces now that i realize file trees arent namespaces
parent
9cda5ad071
commit
f647664b54
1
db.go
1
db.go
|
|
@ -17,6 +17,7 @@ type DB interface {
|
||||||
Set(string, []byte, ...string) error
|
Set(string, []byte, ...string) error
|
||||||
List([]string, ...string) ([]string, error)
|
List([]string, ...string) ([]string, error)
|
||||||
Close() error
|
Close() error
|
||||||
|
//Namespaces() ([][]string, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(key Type, params ...string) (db DB, err error) {
|
func New(key Type, params ...string) (db DB, err error) {
|
||||||
|
|
|
||||||
5
files.go
5
files.go
|
|
@ -2,6 +2,7 @@ package storage
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"errors"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"local/storage/resolve"
|
"local/storage/resolve"
|
||||||
|
|
@ -34,6 +35,10 @@ func NewFiles(root string) (*Files, error) {
|
||||||
}, os.MkdirAll(root, os.ModePerm)
|
}, os.MkdirAll(root, os.ModePerm)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (b *Files) Namespaces() ([][]string, error) {
|
||||||
|
return nil, errors.New("not impl")
|
||||||
|
}
|
||||||
|
|
||||||
func (b *Files) List(ns []string, limits ...string) ([]string, error) {
|
func (b *Files) List(ns []string, limits ...string) ([]string, error) {
|
||||||
namespace := resolve.Namespace(ns)
|
namespace := resolve.Namespace(ns)
|
||||||
limits = resolve.Limits(limits)
|
limits = resolve.Limits(limits)
|
||||||
|
|
|
||||||
8
map.go
8
map.go
|
|
@ -38,6 +38,14 @@ func (m *Map) Close() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *Map) Namespaces() ([][]string, error) {
|
||||||
|
keys := [][]string{}
|
||||||
|
for key := range m.m {
|
||||||
|
keys = append(keys, resolve.UnNamespace(key))
|
||||||
|
}
|
||||||
|
return keys, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (m *Map) List(ns []string, limits ...string) ([]string, error) {
|
func (m *Map) List(ns []string, limits ...string) ([]string, error) {
|
||||||
m.lock.RLock()
|
m.lock.RLock()
|
||||||
defer m.lock.RUnlock()
|
defer m.lock.RUnlock()
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ package rclone
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"errors"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"local/storage/resolve"
|
"local/storage/resolve"
|
||||||
|
|
@ -110,6 +111,10 @@ func (rc *RClone) Close() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (rc *RClone) Namespaces() ([][]string, error) {
|
||||||
|
return nil, errors.New("not impl")
|
||||||
|
}
|
||||||
|
|
||||||
func (rc *RClone) List(ns []string, limits ...string) ([]string, error) {
|
func (rc *RClone) List(ns []string, limits ...string) ([]string, error) {
|
||||||
namespace := rc.ns
|
namespace := rc.ns
|
||||||
if len(ns) > 0 {
|
if len(ns) > 0 {
|
||||||
|
|
|
||||||
55
redis.go
55
redis.go
|
|
@ -33,6 +33,31 @@ func (m *Redis) Close() error {
|
||||||
return m.client.Close()
|
return m.client.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *Redis) Namespaces() ([][]string, error) {
|
||||||
|
resp, err := m.client.Do("KEYS", "*")
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
keys := map[string][]string{}
|
||||||
|
results, ok := resp.([]interface{})
|
||||||
|
if !ok {
|
||||||
|
return nil, ErrNotFound
|
||||||
|
}
|
||||||
|
for _, key := range results {
|
||||||
|
pieces := resolve.UnNamespace(fmt.Sprintf("%s", key))
|
||||||
|
if len(pieces) < 2 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
pieces = pieces[:len(pieces)-1]
|
||||||
|
keys[fmt.Sprint(pieces)] = pieces
|
||||||
|
}
|
||||||
|
result := make([][]string, 0, len(keys))
|
||||||
|
for _, v := range keys {
|
||||||
|
result = append(result, v)
|
||||||
|
}
|
||||||
|
return result, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (m *Redis) List(ns []string, limits ...string) ([]string, error) {
|
func (m *Redis) List(ns []string, limits ...string) ([]string, error) {
|
||||||
limits = resolve.Limits(limits)
|
limits = resolve.Limits(limits)
|
||||||
limits[0] = resolve.Namespace(append(ns, limits[0]))
|
limits[0] = resolve.Namespace(append(ns, limits[0]))
|
||||||
|
|
@ -44,23 +69,23 @@ func (m *Redis) List(ns []string, limits ...string) ([]string, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
keys := []string{}
|
keys := []string{}
|
||||||
if results, ok := resp.([]interface{}); !ok {
|
results, ok := resp.([]interface{})
|
||||||
|
if !ok {
|
||||||
return nil, ErrNotFound
|
return nil, ErrNotFound
|
||||||
} else {
|
}
|
||||||
for i := range results {
|
for i := range results {
|
||||||
_, ok := results[i].([]uint8)
|
_, ok := results[i].([]uint8)
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, errors.New("not a []byte key")
|
return nil, errors.New("not a []byte key")
|
||||||
}
|
|
||||||
k := fmt.Sprintf("%s", results[i])
|
|
||||||
if k < limits[0] {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if k > limits[1] {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
keys = append(keys, k)
|
|
||||||
}
|
}
|
||||||
|
k := fmt.Sprintf("%s", results[i])
|
||||||
|
if k < limits[0] {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if k > limits[1] {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
keys = append(keys, k)
|
||||||
}
|
}
|
||||||
return keys, nil
|
return keys, nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,10 @@ import (
|
||||||
|
|
||||||
var DefaultNamespace = "namespace"
|
var DefaultNamespace = "namespace"
|
||||||
|
|
||||||
|
func UnNamespace(ns string) []string {
|
||||||
|
return strings.Split(ns, ".")
|
||||||
|
}
|
||||||
|
|
||||||
func Namespace(ns []string) string {
|
func Namespace(ns []string) string {
|
||||||
namespace := DefaultNamespace
|
namespace := DefaultNamespace
|
||||||
if len(ns) > 0 {
|
if len(ns) > 0 {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue