@@ -20,6 +20,7 @@ import (
2020
2121var (
2222 port uint
23+ dbParams string
2324 allowHTTP2 bool
2425 verbose bool
2526
3536
3637func main () {
3738 flag .UintVar (& port , "p" , 8080 , "Server port" )
39+ flag .StringVar (& dbParams , "db-params" , "_journal=WAL&_sync=NORMAL&_timeout=5000&_txlock=immediate" , "Database connection params" )
3840 flag .BoolVar (& verbose , "v" , false , "Enable verbose mode" )
3941 flag .BoolVar (& allowHTTP2 , "h2" , false , "Allow HTTP2" )
4042 flag .UintVar (& ttl , "ttl" , 0 , "Time to Live in seconds (0 is infinite time)" )
@@ -45,36 +47,57 @@ func main() {
4547 flag .BoolVar (& readOnly , "ro" , false , "Read Only mode. Do not store new HTTP responses" )
4648 flag .Parse ()
4749
48- if len (flag .Args ()) != 1 {
49- log .Fatalf ("Usage: %s <flags> [DSN] \n \n Example:\n \t %s file: example.db\n " , os .Args [0 ], os .Args [0 ])
50+ if len (flag .Args ()) == 0 {
51+ log .Fatalf ("Usage: %s <flags> [DatabasePath1] [DatabasePathN \n \n Example:\n \t %s example.db example2.db example3 .db\n " , os .Args [0 ], os .Args [0 ])
5052 }
51- dsn := flag .Args ()[0 ]
5253
53- sqlDB , err := sql .Open ("sqlite3" , dsn )
54- if err != nil {
55- log .Fatalf ("open db error: %v" , err )
56- }
57- defer sqlDB .Close ()
54+ dbs := make ([]* sql.DB , 0 )
55+ var (
56+ repository db.Repository
57+ tableList []string
58+ err error
59+ )
60+ for _ , file := range flag .Args () {
61+ var dsn string
62+ if file == ":memory:" {
63+ dsn = file + "?cache=shared"
64+ } else {
65+ dsn = fmt .Sprintf ("file:%s?%s" , file , dbParams )
66+ }
5867
59- var tableList []string
60- if responseTables == "" {
61- tableList , err = db .ResponseTables (sqlDB )
68+ sqlDB , err := sql .Open ("sqlite3" , dsn )
6269 if err != nil {
63- log .Fatalf ("discovery response tables : %v" , err )
70+ log .Fatalf ("open db error : %v" , err )
6471 }
65- } else {
66- tableList = strings .Split (responseTables , "," )
67- if forceCreateTables {
68- err := db .CreateResponseTables (sqlDB , tableList ... )
72+ defer sqlDB .Close ()
73+
74+ dbs = append (dbs , sqlDB )
75+
76+ if responseTables == "" {
77+ tableList , err = db .ResponseTables (sqlDB )
6978 if err != nil {
70- log .Fatalf ("force create tables: %v" , err )
79+ log .Fatalf ("discovery response tables: %v" , err )
80+ }
81+ } else {
82+ tableList = strings .Split (responseTables , "," )
83+ if forceCreateTables {
84+ err := db .CreateResponseTables (sqlDB , tableList ... )
85+ if err != nil {
86+ log .Fatalf ("force create tables: %v" , err )
87+ }
7188 }
7289 }
7390 }
74-
75- repository , err := db .NewRepository (sqlDB , tableList ... )
76- if err != nil {
77- log .Fatalf ("new repository: %v" , err )
91+ if len (dbs ) == 1 {
92+ repository , err = db .NewRepository (dbs [0 ], tableList ... )
93+ if err != nil {
94+ log .Fatalf ("new repository: %v" , err )
95+ }
96+ } else {
97+ repository , err = db .NewMultiDatabaseRepository (dbs )
98+ if err != nil {
99+ log .Fatalf ("new multi database repository: %v" , err )
100+ }
78101 }
79102 defer repository .Close ()
80103
0 commit comments