1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
package main
import (
"os"
"fmt"
"log"
"flag"
"strings"
"bufio"
db "sanine.net/git/phlox/db"
)
var p *db.Phlox
type Params struct {
DbFilename string
}
var params Params
type Command struct {
Set bool
Value int
Flag string
Usage string
Invoke func()
}
func RegisterCommand(val int, cmd *Command) {
cmd.Value = val
flag.BoolVar(&(*cmd).Set, cmd.Flag, false, cmd.Usage)
}
func OpenDb() {
err := p.Open(params.DbFilename)
if err != nil { log.Fatal(err) }
}
func ReadLine(prompt string) string {
reader := bufio.NewReader(os.Stdin)
fmt.Print(prompt)
line, err := reader.ReadString('\n')
if err != nil {
log.Fatal(err)
}
return strings.TrimSpace(line)
}
func main() {
p = &db.Phlox{}
cmds := map[int]*Command{
1: Create(),
2: SchemaVersion(),
3: CreateUser(),
4: DeleteUser(),
5: UpdatePassword(),
6: ListUsers(),
7: CreateEndpoint(),
8: DeleteEndpoint(),
9: SetPath(),
10: SetAddress(),
11: ListEndpoints(),
}
for val, cmd := range cmds {
RegisterCommand(val, cmd)
}
flag.StringVar(¶ms.DbFilename, "db", "phlox.conf", "select the db file to operate on")
flag.Parse()
for _, cmd := range cmds {
if cmd.Set { cmd.Invoke(); os.Exit(0); }
}
log.Fatal("no command specified!")
}
func Create() *Command {
return &Command{
Flag: "create",
Usage: "create a new database",
Invoke: func() {
err := p.Create(params.DbFilename)
if err != nil {
log.Fatal(err)
}
fmt.Printf("created database %v\n", params.DbFilename)
},
}
}
func SchemaVersion() *Command {
return &Command{
Flag: "schema-version",
Usage: "get the schema version",
Invoke: func() {
err := p.Open(params.DbFilename)
if err != nil { log.Fatal(err) }
version, err := p.GetSchemaVersion()
if err != nil { log.Fatal(err) }
fmt.Printf("schema version: %v\n", version)
},
}
}
|