diff options
| -rw-r--r-- | go.mod | 5 | ||||
| -rw-r--r-- | go.sum | 2 | ||||
| -rw-r--r-- | main.go | 5 | ||||
| -rw-r--r-- | setup.go | 16 |
4 files changed, 24 insertions, 4 deletions
@@ -2,4 +2,7 @@ module davidschlachter.com/french-wiktionary-flashcards go 1.24.1 -require github.com/mattn/go-sqlite3 v1.14.33 +require ( + github.com/goccy/go-json v0.10.5 + github.com/mattn/go-sqlite3 v1.14.33 +) @@ -1,2 +1,4 @@ +github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4= +github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= github.com/mattn/go-sqlite3 v1.14.33 h1:A5blZ5ulQo2AtayQ9/limgHEkFreKj1Dv226a1K73s0= github.com/mattn/go-sqlite3 v1.14.33/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= @@ -24,6 +24,11 @@ func main() { log.Fatalf("creating table: %s", err) } + _, err = db.Exec("PRAGMA synchronous = OFF;") + if err != nil { + log.Fatalf("setting risky writes: %s", err) + } + row := db.QueryRow(`SELECT count(*) as count from words`) var count int err = row.Scan(&count) @@ -3,12 +3,13 @@ package main import ( "bufio" "database/sql" - "encoding/json" "fmt" "html/template" "log" "os" "strings" + + "github.com/goccy/go-json" ) type rawDictionaryEntry struct { @@ -65,10 +66,15 @@ func readDictionary(db *sql.DB) error { panic(err) } + tx, err := db.Begin() + if err != nil { + return fmt.Errorf("starting transaction: %w", err) + } + // Set up a prepared statement - stmt, err := db.Prepare("insert into words(word, definition) values(?, ?)") + stmt, err := tx.Prepare("insert into words(word, definition) values(?, ?)") if err != nil { - log.Fatal(err) + return fmt.Errorf("preparing statement: %w", err) } defer stmt.Close() @@ -141,6 +147,10 @@ func readDictionary(db *sql.DB) error { return fmt.Errorf("scanning: %w", err) } + if err := tx.Commit(); err != nil { + return fmt.Errorf("committing: %w", err) + } + log.Printf("prepared %d dictionary entries", wordsAdded) return nil |
