1 //go:build cgo && !nosqlite
2 // +build cgo,!nosqlite
11 "crawshaw.io/sqlite/sqlitex"
13 "github.com/anacrolix/torrent/metainfo"
16 type sqlitePieceCompletion struct {
21 var _ PieceCompletion = (*sqlitePieceCompletion)(nil)
23 func NewSqlitePieceCompletion(dir string) (ret *sqlitePieceCompletion, err error) {
24 p := filepath.Join(dir, ".torrent.db")
25 db, err := sqlite.OpenConn(p, 0)
29 err = sqlitex.ExecScript(db, `create table if not exists piece_completion(infohash, "index", complete, unique(infohash, "index"))`)
34 ret = &sqlitePieceCompletion{db: db}
38 func (me *sqlitePieceCompletion) Get(pk metainfo.PieceKey) (c Completion, err error) {
42 me.db, `select complete from piece_completion where infohash=? and "index"=?`,
43 func(stmt *sqlite.Stmt) error {
44 c.Complete = stmt.ColumnInt(0) != 0
48 pk.InfoHash.HexString(), pk.Index)
52 func (me *sqlitePieceCompletion) Set(pk metainfo.PieceKey, b bool) error {
57 `insert or replace into piece_completion(infohash, "index", complete) values(?, ?, ?)`,
59 pk.InfoHash.HexString(), pk.Index, b)
62 func (me *sqlitePieceCompletion) Close() (err error) {