index — walletdrain @ master

Little app to track my spendings, for the time being only for music

sql.go (view raw)

 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
package main

import (
	"database/sql"
	"fmt"
	"log"

	_ "github.com/mattn/go-sqlite3"
)

func openDB(DBName string) (*sql.DB, error) {
	db, err := sql.Open("sqlite3", DBName+".db")
	if err != nil {
		panic("couldn't open db")
	}

	return db, nil
}

func createTables(db *sql.DB, tableName string) (err error) {
	switch tableName {
	case "music":
		_, err = db.Exec(`CREATE TABLE IF NOT EXISTS music (
                                    id INTEGER PRIMARY KEY AUTOINCREMENT,
                                    external_ids TEXT,
                                    name TEXT NOT NULL,
                                    artist TEXT NOT NULL,
                                    price FLOAT,
                                    seller TEXT,
                                    note TEXT,
                                    purchase_date TEXT);`)
		if err != nil {
			panic(err)
			return err
		}
		return nil
	default:
		panic("wrong table name")
	}
}

func loadCategory(category string) []musicItem {
	db, err := openDB("walletdrain")
	if err != nil {
		panic("couldn't open db")
	}
	defer db.Close()

	createTables(db, "music")

	query := fmt.Sprintf("SELECT * FROM %s", category)

	rows, err := db.Query(query)
	if err != nil {
		panic(err)
	}
	defer rows.Close()

	var results []musicItem
	for rows.Next() {
		var result musicItem
		err := rows.Scan(
			&result.id,
			&result.external_ids,
			&result.name,
			&result.artist,
			&result.price,
			&result.seller,
			&result.note,
			&result.purchase_date)
		if err != nil {
			log.Print(err)
		}
		results = append(results, result)
	}
	return results
}

func insertMusicEntry(entry musicItem) int {
	db, err := openDB("walletdrain")
	result, err := db.Exec(`INSERT INTO music 
							(name, artist, price, seller, purchase_date, note) 
							VALUES (?, ?, ?, ?, ?, ?);`,
		entry.name, entry.artist, entry.price, entry.seller, entry.purchase_date, entry.note)

	if err != nil {
		log.Fatal(err)
	}

	lastID, err := result.LastInsertId()

	if err != nil {
		log.Fatal(err)
	}

	log.Printf("Inserted music item with id: %d", lastID)

	return 0
}