From 1b2edc1679709e05b96b79c8f6dafc72ba1dfec0 Mon Sep 17 00:00:00 2001 From: Arnas Udovic Date: Fri, 23 Aug 2024 14:19:06 +0300 Subject: [PATCH] initial working version --- README.md | 2 +- go.mod | 7 +++ go.sum | 10 +++ main.go | 177 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 195 insertions(+), 1 deletion(-) create mode 100644 go.mod create mode 100644 go.sum create mode 100644 main.go diff --git a/README.md b/README.md index 8e75577..b5c8fa6 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ # zordfsdb-client -Client for zordfsdb database +Client for zordfsdb database. diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..f8651c3 --- /dev/null +++ b/go.mod @@ -0,0 +1,7 @@ +module g.arns.lt/zordsdavini/zordfsdb-client + +go 1.23.0 + +require g.arns.lt/zordsdavini/zordfsdb v1.0.1 + +require g.arns.lt/zordsdavini/abcex v1.0.1 // indirect diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..84542cc --- /dev/null +++ b/go.sum @@ -0,0 +1,10 @@ +g.arns.lt/zordsdavini/abcex v1.0.1 h1:ZN/xSDQb8CiR9+jXHYp+tUtGILMeRu9PvvqhypZDkyI= +g.arns.lt/zordsdavini/abcex v1.0.1/go.mod h1:YRcJgts3XZwI+LEkngpfUab3DkUAW387Irpr43hIym8= +g.arns.lt/zordsdavini/zordfsdb v1.0.1 h1:XM/5qR2PsGBFUwT9GrCbiPEUySoZHKP6yeRcRDCO3no= +g.arns.lt/zordsdavini/zordfsdb v1.0.1/go.mod h1:gq30YNjz3yIMdI4cA5e5mK90V4Yns5NAsbwi6s8Bf3Q= +github.com/otiai10/copy v1.14.0 h1:dCI/t1iTdYGtkvCuBG2BgR6KZa83PTclw4U5n2wAllU= +github.com/otiai10/copy v1.14.0/go.mod h1:ECfuL02W+/FkTWZWgQqXPWZgW9oeKCSQ5qVfSc4qc4w= +golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/main.go b/main.go new file mode 100644 index 0000000..c912f7a --- /dev/null +++ b/main.go @@ -0,0 +1,177 @@ +package main + +import ( + "bufio" + "flag" + "fmt" + "os" + "strings" + + "g.arns.lt/zordsdavini/zordfsdb" +) + +var ( + rootDir string + executeCommand string +) + +func main() { + flag.StringVar(&rootDir, "d", "./", "database root directory") + flag.StringVar(&executeCommand, "e", "", "execute command") + + flag.Parse() + + db, err := zordfsdb.InitDB(rootDir) + if err != nil { + panic(err) + } + + if len(executeCommand) > 0 { + ExecuteCommand(db, executeCommand) + } else { + reader := bufio.NewReader(os.Stdin) + fmt.Println("ZordFsDB Shell") + fmt.Println("---------------------") + + for { + fmt.Print("> ") + text, _ := reader.ReadString('\n') + // convert CRLF to LF + text = strings.Replace(text, "\n", "", -1) + + if strings.Compare("exit", strings.ToLower(text)) == 0 { + fmt.Println("BYE :)") + break + } + + ExecuteCommand(db, text) + } + } +} + +func ExecuteCommand(db zordfsdb.DB, commands string) error { + for _, command := range strings.Split(commands, ";") { + command = strings.Trim(command, " ") + parts := strings.Split(command, " ") + + switch strings.ToLower(parts[0]) { + case "keys": + if len(parts) == 1 || len(parts[1]) == 0 { + return fmt.Errorf("err format: KEYS [path]") + } + + fmt.Printf("{%s} KEYS: ", parts[1]) + fmt.Println(db.Keys(parts[1])) + break + + case "get": + if len(parts) == 1 || len(parts[1]) == 0 { + return fmt.Errorf("err format: GET [path]") + } + + value, ok := db.Get(parts[1]) + if !ok { + fmt.Println("No value found.") + } else { + fmt.Printf("{%s} VALUE: ", parts[1]) + fmt.Println(value) + } + break + + case "inc": + if len(parts) == 1 || len(parts[1]) == 0 { + return fmt.Errorf("err format: INC [path]") + } + + ok := db.Inc(parts[1]) + if !ok { + fmt.Println("No value found.") + } else { + fmt.Printf("{%s} INC OK\n", parts[1]) + } + break + + case "dec": + if len(parts) == 1 || len(parts[1]) == 0 { + return fmt.Errorf("err format: DEC [path]") + } + + ok := db.Dec(parts[1]) + if !ok { + fmt.Println("No value found.") + } else { + fmt.Printf("{%s} DEC OK\n", parts[1]) + } + break + + case "now": + if len(parts) == 1 || len(parts[1]) == 0 { + return fmt.Errorf("err format: NOW [path]") + } + + ok := db.Now(parts[1]) + if !ok { + fmt.Println("No value found.") + } else { + fmt.Printf("{%s} NOW OK\n", parts[1]) + } + break + + case "del": + if len(parts) == 1 || len(parts[1]) == 0 { + return fmt.Errorf("err format: DEL [path]") + } + + ok := db.Del(parts[1]) + if !ok { + fmt.Println("No value/object found.") + } else { + fmt.Printf("{%s} DELETED\n", parts[1]) + } + break + + case "save": + if len(parts) < 3 || len(parts[1]) == 0 { + return fmt.Errorf("err format: SAVE [path] [value|long value]") + } + + value := strings.Trim(strings.Join(parts[2:], " "), "\"") + + ok := db.Save(parts[1], value) + if !ok { + fmt.Println("No value found.") + } else { + fmt.Printf("{%s} SAVED\n", parts[1]) + } + break + + case "create": + if len(parts) == 1 || len(parts[1]) == 0 { + return fmt.Errorf("err format: CREATE [path]") + } + + ok := db.CreateNode(parts[1]) + if !ok { + fmt.Println("No path found.") + } else { + fmt.Printf("{%s} CREATED\n", parts[1]) + } + break + + case "add": + if len(parts) == 1 || len(parts[1]) == 0 { + return fmt.Errorf("err format: ADD [path]") + } + + id, err := db.AddObject(parts[1]) + if err != nil { + fmt.Println("No path found.") + } else { + fmt.Printf("{%s} ADDED with ID: %s\n", parts[1], id) + } + break + } + } + + return nil +}