9 "crawshaw.io/sqlite/sqlitex"
11 "github.com/anacrolix/torrent/metainfo"
14 type sqlitePieceCompletion struct {
18 var _ PieceCompletion = (*sqlitePieceCompletion)(nil)
20 func NewSqlitePieceCompletion(dir string) (ret *sqlitePieceCompletion, err error) {
21 p := filepath.Join(dir, ".torrent.db")
22 db, err := sqlite.OpenConn(p, 0)
26 err = sqlitex.ExecScript(db, `create table if not exists piece_completion(infohash, "index", complete, unique(infohash, "index"))`)
31 ret = &sqlitePieceCompletion{db}
35 func (me *sqlitePieceCompletion) Get(pk metainfo.PieceKey) (c Completion, err error) {
37 me.db, `select complete from piece_completion where infohash=? and "index"=?`,
38 func(stmt *sqlite.Stmt) error {
39 c.Complete = stmt.ColumnInt(0) != 0
43 pk.InfoHash.HexString(), pk.Index)
47 func (me *sqlitePieceCompletion) Set(pk metainfo.PieceKey, b bool) error {
50 `insert or replace into piece_completion(infohash, "index", complete) values(?, ?, ?)`,
52 pk.InfoHash.HexString(), pk.Index, b)
55 func (me *sqlitePieceCompletion) Close() error {