Skip to content

Commit 1530c71

Browse files
authored
Merge pull request #5 from flrnd/add-database-init
Add database init command and bump version to 1.0
2 parents fc084d6 + e5017dd commit 1530c71

File tree

4 files changed

+79
-57
lines changed

4 files changed

+79
-57
lines changed

cmd/init.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package cmd
2+
3+
import (
4+
"os"
5+
6+
"github.com/flrnd/parrot/db"
7+
"github.com/flrnd/parrot/util"
8+
"github.com/spf13/cobra"
9+
)
10+
11+
func init() {
12+
rootCmd.AddCommand(initCmd)
13+
}
14+
15+
var initCmd = &cobra.Command{
16+
Use: "init my_diceware_word_list.asc",
17+
Short: "Initialize the diceware databse",
18+
Long: "Initialize the diceware database. Download a file list from https://theworld.com/~reinhold/diceware.html or create your own.",
19+
Args: cobra.MinimumNArgs(1),
20+
Run: func(cmd *cobra.Command, args []string) {
21+
f, err := os.Open(args[0])
22+
23+
util.Check(err)
24+
25+
db.Init(f)
26+
},
27+
}

cmd/version.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
)
88

99
var appName = "parrot"
10-
var appVersion = "v0.0.3"
10+
var appVersion = "v1.0.0"
1111

1212
func init() {
1313
rootCmd.AddCommand(versionCmd)

db/database.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
package db
22

33
import (
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+
1869
func Find(id int, db *sql.DB) string {
1970
rows, err := db.Query("select id, word from words where id = ?", id)
2071
util.Check(err)

db/initDB/main.go

Lines changed: 0 additions & 56 deletions
This file was deleted.

0 commit comments

Comments
 (0)