55 "fmt"
66 "io"
77 "log"
8- "math"
98 "os"
109 "path/filepath"
1110 "time"
@@ -32,15 +31,16 @@ var (
3231func main () {
3332 flag .Parse ()
3433
34+ // Name of tool, logger
35+ name := filepath .Base (flag .CommandLine .Name ())
36+ log := logger (name + " " )
37+
3538 // Check number of arguments
3639 if flag .NArg () < 2 {
37- fmt .Fprintln (os .Stderr , "Usage: importer <sqlite-database> <url>..." )
40+ fmt .Fprintf (os .Stderr , "Usage: %v <sqlite-database> <url>...\n " , name )
3841 os .Exit (1 )
3942 }
4043
41- // Create log
42- log := logger (filepath .Base (flag .CommandLine .Name ()) + " " )
43-
4444 // Open database
4545 db , err := sqlite3 .OpenPathEx (flag .Arg (0 ), sqlite3 .SQLITE_OPEN_CREATE , "" )
4646 if err != nil {
@@ -49,7 +49,8 @@ func main() {
4949 }
5050 defer db .Close ()
5151
52- log .Println ("database:" , db .Filename ())
52+ // Report on the database
53+ log .Println ("database:" , db .Filename (sqlite3 .DefaultSchema ))
5354
5455 // Create a configuration
5556 config := SQImportConfig {
@@ -74,34 +75,52 @@ func main() {
7475 // Read files
7576 for _ , url := range flag .Args ()[1 :] {
7677 // Create an importer
77- importer , err := importer .NewImporter (config , url , writer )
78+ importer , err := importer .NewImporter (config , url )
79+ if err != nil {
80+ fmt .Fprintln (os .Stderr , importer .URL (), ": " , err )
81+ continue
82+ }
83+
84+ // Create the decoder
85+ decoder , err := importer .Decoder ("" )
7886 if err != nil {
7987 fmt .Fprintln (os .Stderr , importer .URL (), ": " , err )
8088 continue
8189 }
90+ defer decoder .Close ()
8291
8392 // Reset the counter
84- log .Println ("import:" , importer .URL ())
85- mark , start := time .Now (), time .Now ()
93+ log .Println (" import:" , importer .URL ())
94+ log .Println (" ...decoder" , decoder )
95+
96+ // Call Begin for writer to get writing function
97+ fn , err := writer .Begin (importer .Name (), sqlite3 .DefaultSchema , []string {"continent" })
98+ if err != nil {
99+ fmt .Fprintln (os .Stderr , importer .URL (), ": " , err )
100+ continue
101+ }
86102
87103 // Read and write rows
104+ start , mark := time .Now (), time .Now ()
88105 for {
89- if err := importer .ReadWrite (); err == io .EOF {
106+ if err := importer .ReadWrite (decoder , fn ); err == io .EOF {
107+ writer .End (true ) // commit
90108 break
91109 } else if err != nil {
110+ writer .End (false ) // rollback
92111 fmt .Fprintln (os .Stderr , importer .URL (), ": " , err )
93112 break
94113 }
95114 if time .Since (mark ) > 5 * time .Second {
96- log .Printf (" ...written %d rows" , writer . Count () )
115+ log .Printf (" ...written %d rows" , 0 )
97116 mark = time .Now ()
98117 }
99118 }
100119
101120 // Report
102121 since := time .Since (start )
103- ops_per_sec := math .Round (float64 (writer .Count ()) * 1000 / float64 (since .Milliseconds ()))
104- log .Printf (" ...written %d rows in %v (%.0f ops/s)" , writer . Count () , since .Truncate (time .Millisecond ), ops_per_sec )
122+ // ops_per_sec := math.Round(float64(writer.Count()) * 1000 / float64(since.Milliseconds()))
123+ log .Printf (" ...written %d rows in %v (%.0f ops/s)" , 0 , since .Truncate (time .Millisecond ), 0 )
105124 }
106125}
107126
0 commit comments