Compare commits
No commits in common. "master" and "v1.0.4" have entirely different histories.
4 changed files with 0 additions and 140 deletions
15
CHANGELOG
15
CHANGELOG
|
@ -1,18 +1,3 @@
|
||||||
v1.0.7, released 2025-03-16
|
|
||||||
* bugfixes
|
|
||||||
- GetRandomNode public command
|
|
||||||
|
|
||||||
v1.0.6, released 2025-03-16
|
|
||||||
* features
|
|
||||||
- Node.Get - get object property value
|
|
||||||
|
|
||||||
v1.0.5, released 2025-03-16
|
|
||||||
* bugfixes
|
|
||||||
- FixType - run recursevily into child nodes to get correct value
|
|
||||||
* features
|
|
||||||
- Length - get length of list
|
|
||||||
- GetRandomNode - get random node from list
|
|
||||||
|
|
||||||
v1.0.4, released 2025-01-07
|
v1.0.4, released 2025-01-07
|
||||||
* abcex to v4
|
* abcex to v4
|
||||||
|
|
||||||
|
|
|
@ -25,14 +25,6 @@ Commands can be split into value layer when you know the structure and node laye
|
||||||
* GetNode - to get node. It can be object, list or value object. Returns false if not exist
|
* GetNode - to get node. It can be object, list or value object. Returns false if not exist
|
||||||
* CreatNode - create list (director) to add many same objects (structure should be controlled by user) or single object. Parent Node should exist
|
* CreatNode - create list (director) to add many same objects (structure should be controlled by user) or single object. Parent Node should exist
|
||||||
* AddObject - add object to given list. Should assign abcex id
|
* AddObject - add object to given list. Should assign abcex id
|
||||||
* Length - get length of list
|
|
||||||
* GetRandomNode - get random object from list
|
|
||||||
|
|
||||||
### Node as Object commands
|
|
||||||
|
|
||||||
* Node.Get - get object property value
|
|
||||||
* Node.GetNodes - get object properties
|
|
||||||
* Node.FixType - checks and sets object/list type
|
|
||||||
|
|
||||||
### helper commands
|
### helper commands
|
||||||
|
|
||||||
|
|
44
zordfsdb.go
44
zordfsdb.go
|
@ -2,7 +2,6 @@ package zordfsdb
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"math/rand"
|
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
"strings"
|
"strings"
|
||||||
|
@ -36,14 +35,6 @@ func (node *Node) GetNodes() map[string]Node {
|
||||||
return node.Nodes
|
return node.Nodes
|
||||||
}
|
}
|
||||||
|
|
||||||
func (node *Node) Get(key string) (string, error) {
|
|
||||||
if _, ok := node.Nodes[key]; ok {
|
|
||||||
return node.Nodes[key].Value, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return "", fmt.Errorf("Key not found")
|
|
||||||
}
|
|
||||||
|
|
||||||
func InitDB(root string) (DB, error) {
|
func InitDB(root string) (DB, error) {
|
||||||
db := DB{Root: root}
|
db := DB{Root: root}
|
||||||
err := db.Refresh()
|
err := db.Refresh()
|
||||||
|
@ -120,8 +111,6 @@ func (node *Node) FixType() {
|
||||||
node.List = false
|
node.List = false
|
||||||
node.Object = false
|
node.Object = false
|
||||||
for _, child := range node.Nodes {
|
for _, child := range node.Nodes {
|
||||||
child.FixType()
|
|
||||||
|
|
||||||
if child.Object {
|
if child.Object {
|
||||||
node.List = true
|
node.List = true
|
||||||
break
|
break
|
||||||
|
@ -324,36 +313,3 @@ func (db *DB) AddObject(vpath string) (string, error) {
|
||||||
|
|
||||||
return abcex.Encode(maxId, abcex.BASE62), nil
|
return abcex.Encode(maxId, abcex.BASE62), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *DB) Length(vpath string) (int64, error) {
|
|
||||||
node, found := db.GetNode(vpath)
|
|
||||||
if !found {
|
|
||||||
return 0, fmt.Errorf("Node not found")
|
|
||||||
}
|
|
||||||
|
|
||||||
if !node.List {
|
|
||||||
return 0, fmt.Errorf("Node is not a list")
|
|
||||||
}
|
|
||||||
|
|
||||||
return int64(len(node.Nodes)), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (db *DB) GetRandomNode(vpath string) (Node, error) {
|
|
||||||
node, found := db.GetNode(vpath)
|
|
||||||
if !found {
|
|
||||||
return Node{}, fmt.Errorf("Node not found")
|
|
||||||
}
|
|
||||||
|
|
||||||
if !node.List {
|
|
||||||
return Node{}, fmt.Errorf("Not a list")
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(node.Nodes) == 0 {
|
|
||||||
return Node{}, fmt.Errorf("List is empty")
|
|
||||||
}
|
|
||||||
|
|
||||||
keys := db.Keys(vpath)
|
|
||||||
randomKey := keys[rand.Intn(len(keys))]
|
|
||||||
|
|
||||||
return node.Nodes[randomKey], nil
|
|
||||||
}
|
|
||||||
|
|
|
@ -199,76 +199,3 @@ func TestCreateList(t *testing.T) {
|
||||||
t.Fatal("object.list2.0.newKey4 value wrong")
|
t.Fatal("object.list2.0.newKey4 value wrong")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestListLength(t *testing.T) {
|
|
||||||
copy(t)
|
|
||||||
|
|
||||||
db, err := InitDB("./testdata2")
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
success := db.CreateNode("object.list3")
|
|
||||||
if !success {
|
|
||||||
t.Fatal("object.list3 node was not created")
|
|
||||||
}
|
|
||||||
|
|
||||||
id, _ := db.AddObject("object.list3")
|
|
||||||
db.Save("object.list3."+id+".key", "value")
|
|
||||||
id, _ = db.AddObject("object.list3")
|
|
||||||
db.Save("object.list3."+id+".key", "value")
|
|
||||||
id, _ = db.AddObject("object.list3")
|
|
||||||
db.Save("object.list3."+id+".key", "value")
|
|
||||||
id, _ = db.AddObject("object.list3")
|
|
||||||
db.Save("object.list3."+id+".key", "value")
|
|
||||||
|
|
||||||
node, _ := db.GetNode("object.list3")
|
|
||||||
node.FixType()
|
|
||||||
|
|
||||||
fmt.Println(db.GetNode("object.list3"))
|
|
||||||
|
|
||||||
length, err := db.Length("object.list3")
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
if length != 4 {
|
|
||||||
t.Fatal("object.list3 length wrong")
|
|
||||||
}
|
|
||||||
|
|
||||||
length, err = db.Length("object")
|
|
||||||
if err == nil {
|
|
||||||
t.Fatal("Error expected")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestListRandomNode(t *testing.T) {
|
|
||||||
copy(t)
|
|
||||||
|
|
||||||
db, err := InitDB("./testdata2")
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
success := db.CreateNode("object.list3")
|
|
||||||
if !success {
|
|
||||||
t.Fatal("object.list3 node was not created")
|
|
||||||
}
|
|
||||||
|
|
||||||
id, _ := db.AddObject("object.list3")
|
|
||||||
db.Save("object.list3."+id+".key", "value")
|
|
||||||
id, _ = db.AddObject("object.list3")
|
|
||||||
db.Save("object.list3."+id+".key", "value")
|
|
||||||
id, _ = db.AddObject("object.list3")
|
|
||||||
db.Save("object.list3."+id+".key", "value")
|
|
||||||
id, _ = db.AddObject("object.list3")
|
|
||||||
db.Save("object.list3."+id+".key", "value")
|
|
||||||
|
|
||||||
node, _ := db.GetNode("object.list3")
|
|
||||||
node.FixType()
|
|
||||||
|
|
||||||
node, _ = db.GetRandomNode("object.list3")
|
|
||||||
if node.Nodes["key"].Value != "value" {
|
|
||||||
fmt.Println(node)
|
|
||||||
t.Fatal("Random node value wrong")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue