7 "github.com/anacrolix/torrent/metainfo"
10 type dbPieceCompletion struct {
14 func newDBPieceCompletion(dir string) (ret *dbPieceCompletion, err error) {
15 p := filepath.Join(dir, ".torrent.db")
16 db, err := sql.Open("sqlite3", p)
20 _, err = db.Exec(`create table if not exists completed(infohash, "index", unique(infohash, "index") on conflict ignore)`)
25 ret = &dbPieceCompletion{db}
29 func (me *dbPieceCompletion) Get(p metainfo.Piece) (ret bool, err error) {
30 row := me.db.QueryRow(`select exists(select * from completed where infohash=? and "index"=?)`, p.Info.Hash().HexString(), p.Index())
35 func (me *dbPieceCompletion) Set(p metainfo.Piece, b bool) (err error) {
37 _, err = me.db.Exec(`insert into completed (infohash, "index") values (?, ?)`, p.Info.Hash().HexString(), p.Index())
39 _, err = me.db.Exec(`delete from completed where infohash=? and "index"=?`, p.Info.Hash().HexString(), p.Index())
44 func (me *dbPieceCompletion) Close() {