@@ -2,31 +2,19 @@ package main
2
2
3
3
import (
4
4
"context"
5
- "database/sql"
6
5
"flag"
7
6
"fmt"
8
7
"log"
9
- "net/url"
10
8
"os"
11
9
"time"
12
10
13
11
"github.com/GeoNet/delta"
14
- "github.com/GeoNet/delta/meta/sqlite"
15
- "github.com/GeoNet/delta/resp"
16
-
17
- _ "modernc.org/sqlite"
18
12
)
19
13
20
14
type Settings struct {
21
- debug bool // output more operational info
22
-
23
15
base string // base directory of delta files on disk
24
16
resp string // base directory of resp files on disk
25
-
26
- db string // name of the database file
27
- response string // name of the database response table
28
-
29
- init bool // should the database be updated
17
+ path string // name of the database file
30
18
}
31
19
32
20
func main () {
@@ -35,7 +23,7 @@ func main() {
35
23
36
24
flag .Usage = func () {
37
25
fmt .Fprintf (os .Stderr , "\n " )
38
- fmt .Fprintf (os .Stderr , "Build a DELTA Sqlite DB file \n " )
26
+ fmt .Fprintf (os .Stderr , "Build and initialise a DELTA Sqlite database \n " )
39
27
fmt .Fprintf (os .Stderr , "\n " )
40
28
fmt .Fprintf (os .Stderr , "Usage:\n " )
41
29
fmt .Fprintf (os .Stderr , "\n " )
@@ -47,12 +35,9 @@ func main() {
47
35
fmt .Fprintf (os .Stderr , "\n " )
48
36
}
49
37
50
- flag .BoolVar (& settings .debug , "debug" , false , "add extra operational info" )
51
- flag .BoolVar (& settings .init , "init" , false , "initialise the database if a file on disk" )
52
- flag .StringVar (& settings .base , "base" , "" , "base directory of delta files on disk" )
53
- flag .StringVar (& settings .resp , "resp" , "" , "base directory of resp files on disk" )
54
- flag .StringVar (& settings .db , "db" , "" , "name of the database file on disk" )
55
- flag .StringVar (& settings .response , "response" , "Response" , "optional database response table name to use" )
38
+ flag .StringVar (& settings .base , "base" , "" , "base directory of delta files on disk, default uses embedded files" )
39
+ flag .StringVar (& settings .resp , "resp" , "" , "base directory of resp files on disk, default uses embedded files" )
40
+ flag .StringVar (& settings .path , "path" , "" , "name of the database file on disk, default is to use memory only" )
56
41
57
42
flag .Parse ()
58
43
@@ -64,49 +49,30 @@ func main() {
64
49
log .Fatal (err )
65
50
}
66
51
67
- // resp recovers the response files
68
- files , err := resp . ListBase (settings .resp )
52
+ // recover any response files
53
+ files , err := delta . NewResp (settings .resp )
69
54
if err != nil {
70
55
log .Fatal (err )
71
56
}
72
57
73
- values := make (map [string ]string )
74
- for _ , f := range files {
75
- lookup , err := resp .LookupBase (settings .resp , f )
76
- if err != nil {
77
- log .Fatal (err )
78
- }
79
- values [f ] = string (lookup )
80
- }
81
-
82
- path := ":memory:"
83
- if settings .db != "" {
84
- path = settings .db
85
- }
86
-
87
- opts := url.Values {}
88
- opts .Set ("_time_format" , "sqlite" )
89
- opts .Set ("_foreign_keys" , "on" )
90
- if settings .db != "" && ! settings .init {
91
- opts .Set ("mode" , "ro" )
92
- }
93
-
94
- db , err := sql .Open ("sqlite" , fmt .Sprintf ("file:%s?%s" , path , url .QueryEscape (opts .Encode ())))
58
+ // open the database file handle
59
+ db , err := delta .NewDB (settings .path )
95
60
if err != nil {
96
- log .Fatalf ("unable to open database %s : %v" , path , err )
61
+ log .Fatalf ("unable to open database %q : %v" , settings . path , err )
97
62
}
98
63
defer db .Close ()
99
64
100
- if settings . db == "" || settings . init {
65
+ start := time . Now ()
101
66
102
- // insert extra response files
103
- extra := set .KeyValue (settings .response , "Response" , "XML" , values )
67
+ // initialise the database
68
+ if err := db .Init (ctx , set , files ... ); err != nil {
69
+ log .Fatalf ("unable to init database: %v" , err )
70
+ }
104
71
105
- log .Println ("initialise database" )
106
- start := time .Now ()
107
- if err := sqlite .New (db ).Init (ctx , set .TableList (extra )); err != nil {
108
- log .Fatalf ("unable to run database exec: %v" , err )
109
- }
110
- log .Printf ("database initialised in %s" , time .Since (start ).String ())
72
+ switch {
73
+ case settings .path != "" :
74
+ log .Printf ("successfully initialised %q in %s" , settings .path , time .Since (start ).Truncate (time .Millisecond ).String ())
75
+ default :
76
+ log .Printf ("successfully initialised memory in %s" , time .Since (start ).Truncate (time .Millisecond ).String ())
111
77
}
112
78
}
0 commit comments