11package db
22
33import (
4+ "bufio"
45 "database/sql"
6+ "fmt"
57 "os"
8+ "strconv"
9+ "strings"
610
711 "github.com/flrnd/parrot/util"
812 _ "github.com/mattn/go-sqlite3"
@@ -15,6 +19,53 @@ func Path() string {
1519 return homeDir + dbPath
1620}
1721
22+ func Init (f * os.File ) {
23+ homeDir , _ := os .UserHomeDir ()
24+ databasePath := Path ()
25+
26+ if _ , err := os .Stat (databasePath ); os .IsNotExist (err ) {
27+ os .MkdirAll (homeDir + "/.config/parrot" , 0755 )
28+ file , err := os .Create (databasePath )
29+ util .Check (err )
30+
31+ file .Close ()
32+ }
33+
34+ // Open the database
35+ parrotDB , err := sql .Open ("sqlite3" , databasePath )
36+ util .Check (err )
37+ defer parrotDB .Close ()
38+
39+ scanner := bufio .NewScanner (f )
40+ wordsDatabase , err := sql .Open ("sqlite3" , databasePath )
41+
42+ util .Check (err )
43+
44+ defer wordsDatabase .Close ()
45+
46+ createWordsTable := `create table words(id integer not null primary key, word text) without rowid;`
47+
48+ if createTable , err := wordsDatabase .Prepare (createWordsTable ); err != nil {
49+ util .Check (err )
50+ } else {
51+ createTable .Exec ()
52+ }
53+
54+ stmt , err := wordsDatabase .Prepare ("INSERT INTO words(id, word) values(?,?)" )
55+ util .Check (err )
56+
57+ fmt .Printf ("Initializing the database with %s\n " , f .Name ())
58+
59+ for scanner .Scan () {
60+ word := scanner .Text ()
61+ tuple := strings .Split (word , " " )
62+ id , err := strconv .Atoi (tuple [0 ])
63+ util .Check (err )
64+
65+ stmt .Exec (id , tuple [1 ])
66+ }
67+ }
68+
1869func Find (id int , db * sql.DB ) string {
1970 rows , err := db .Query ("select id, word from words where id = ?" , id )
2071 util .Check (err )
0 commit comments