diff options
| author | Felix Hanley <felix@userspace.com.au> | 2017-06-17 08:21:57 +0000 |
|---|---|---|
| committer | Felix Hanley <felix@userspace.com.au> | 2017-06-17 08:21:57 +0000 |
| commit | 1aa391b256288a264592f9bef03c9f06640937d1 (patch) | |
| tree | cd0f3aca5ffcccad759c0b6758fd4b9ef916d5a0 /db.go | |
| parent | 6bd6035f8356e8c374385ea8ec02e042ec46cda5 (diff) | |
| download | dhtsearch-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.go | 82 |
1 files changed, 13 insertions, 69 deletions
@@ -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) } } |
