aboutsummaryrefslogtreecommitdiff
path: root/db.go
diff options
context:
space:
mode:
authorFelix Hanley <felix@userspace.com.au>2017-06-17 08:21:57 +0000
committerFelix Hanley <felix@userspace.com.au>2017-06-17 08:21:57 +0000
commit1aa391b256288a264592f9bef03c9f06640937d1 (patch)
treecd0f3aca5ffcccad759c0b6758fd4b9ef916d5a0 /db.go
parent6bd6035f8356e8c374385ea8ec02e042ec46cda5 (diff)
downloaddhtsearch-1aa391b256288a264592f9bef03c9f06640937d1.tar.gz
dhtsearch-1aa391b256288a264592f9bef03c9f06640937d1.tar.bz2
Bundle basic HTTP frontend and add stats
Also start using sqlx package for simpler struct scanning
Diffstat (limited to 'db.go')
-rw-r--r--db.go82
1 files changed, 13 insertions, 69 deletions
diff --git a/db.go b/db.go
index 29098cf..6089185 100644
--- a/db.go
+++ b/db.go
@@ -1,24 +1,18 @@
package main
import (
- //"database/sql"
"fmt"
- //_ "github.com/lib/pq"
- "github.com/jackc/pgx"
+ _ "github.com/jackc/pgx/stdlib"
+ "github.com/jmoiron/sqlx"
)
-type db struct {
- *pgx.ConnPool
+type database struct {
+ *sqlx.DB
debug bool
}
-func newDB(dsn string) (*db, error) {
- pgxConfig, err := pgx.ParseConnectionString(dsn)
- if err != nil {
- fmt.Printf("Error creating DB config %q\n", err)
- return nil, err
- }
- d, err := pgx.NewConnPool(pgx.ConnPoolConfig{pgxConfig, 3, nil, 0})
+func newDB(dsn string) (*database, error) {
+ d, err := sqlx.Connect("pgx", dsn)
if err != nil {
fmt.Printf("Error creating DB %q\n", err)
return nil, err
@@ -29,76 +23,26 @@ func newDB(dsn string) (*db, error) {
return nil, err
}
fmt.Printf("Found %d existing torrents\n", count)
- return &db{d, false}, nil
-}
-
-func (d *db) saveTorrent(t Torrent) error {
- tx, err := d.Begin()
- if err != nil {
- fmt.Printf("Transaction err %q\n", err)
- }
- defer tx.Commit()
-
- var lastId int
-
- err = tx.QueryRow(`insert into torrents (name, infohash, size, seen) values($1, $2, $3, now()) on conflict (infohash) do update set seen = now() returning id`, t.Name, fmt.Sprintf("%s", t.InfoHash), t.Length).Scan(&lastId)
- if err != nil {
- tx.Rollback()
- return err
- }
-
- // Write tags
- for _, tag := range t.Tags {
- tagId, err := d.createTag(tag)
- if err != nil {
- tx.Rollback()
- return err
- }
- _, err = tx.Exec("insert into tags_torrents (tag_id, torrent_id) values ($1, $2) on conflict do nothing", tagId, lastId)
- if err != nil {
- tx.Rollback()
- return err
- }
- }
-
- // Write files
- for _, f := range t.Files {
- _, err := tx.Exec(`insert into files (torrent_id, path, size) values($1, $2, $3)`, lastId, f.Path, f.Length)
- if err != nil {
- tx.Rollback()
- return err
- }
- }
- return nil
-}
-
-func (d *db) torrentExists(ih string) bool {
- rows, err := d.Query("select seen from torrents where infohash = $1", fmt.Sprintf("%s", ih))
- defer rows.Close()
- if err != nil {
- fmt.Printf("Failed to exec SQL: %q\n", err)
- return false
- }
- return rows.Next()
+ return &database{d, false}, nil
}
-func (d *db) createTag(tag string) (tagId int, err error) {
- if d.debug {
+func createTag(tag string) (tagId int, err error) {
+ if DB.debug {
fmt.Printf("Writing tag %s\n", tag)
}
- err = d.QueryRow("select id from tags where name = $1", tag).Scan(&tagId)
+ err = DB.QueryRow("select id from tags where name = $1", tag).Scan(&tagId)
if err == nil {
- if d.debug {
+ if DB.debug {
fmt.Printf("Found existing tag %s\n", tag)
}
} else {
- err = d.QueryRow("insert into tags (name) values ($1) returning id", tag).Scan(&tagId)
+ err = DB.QueryRow("insert into tags (name) values ($1) returning id", tag).Scan(&tagId)
if err != nil {
fmt.Println(err)
return -1, err
}
- if d.debug {
+ if DB.debug {
fmt.Printf("Created new tag %s\n", tag)
}
}