11 "github.com/anacrolix/torrent/metainfo"
12 "zombiezen.com/go/sqlite"
13 "zombiezen.com/go/sqlite/sqlitex"
16 type sqlitePieceCompletion struct {
22 var _ PieceCompletion = (*sqlitePieceCompletion)(nil)
24 func NewSqlitePieceCompletion(dir string) (ret *sqlitePieceCompletion, err error) {
25 p := filepath.Join(dir, ".torrent.db")
26 db, err := sqlite.OpenConn(p, 0)
30 err = sqlitex.ExecScript(db, `create table if not exists piece_completion(infohash, "index", complete, unique(infohash, "index"))`)
35 ret = &sqlitePieceCompletion{db: db}
39 func (me *sqlitePieceCompletion) Get(pk metainfo.PieceKey) (c Completion, err error) {
43 me.db, `select complete from piece_completion where infohash=? and "index"=?`,
44 func(stmt *sqlite.Stmt) error {
45 c.Complete = stmt.ColumnInt(0) != 0
49 pk.InfoHash.HexString(), pk.Index)
53 func (me *sqlitePieceCompletion) Set(pk metainfo.PieceKey, b bool) error {
57 return errors.New("closed")
61 `insert or replace into piece_completion(infohash, "index", complete) values(?, ?, ?)`,
63 pk.InfoHash.HexString(), pk.Index, b)
66 func (me *sqlitePieceCompletion) Close() (err error) {