import (
"bytes"
"errors"
+ "fmt"
"io"
- "log"
"os"
"sync"
"time"
func initConn(conn conn) error {
return sqlitex.ExecScript(conn, `
-create table if not exists blobs(name, data, primary key (name));
+create table if not exists blobs(
+ name text,
+ last_used timestamp default (datetime('now')),
+ data blob,
+ primary key (name)
+);
`)
}
return nil
}, prefix+"%")
})
- log.Printf("readdir %q gave %q", i.location, names)
+ //log.Printf("readdir %q gave %q", i.location, names)
return
}
func (i instance) Get() (ret io.ReadCloser, err error) {
i.lockConn()
- blob, err := i.openBlob(i.p.conn, false)
+ blob, err := i.openBlob(i.p.conn, false, true)
if err != nil {
i.unlockConn()
return
}}, nil
}
-func (i instance) openBlob(conn conn, write bool) (*sqlite.Blob, error) {
+func (i instance) openBlob(conn conn, write, updateAccess bool) (*sqlite.Blob, error) {
rowid, err := i.getBlobRowid(conn)
if err != nil {
return nil, err
}
+ if updateAccess {
+ err = sqlitex.Exec(conn, "update blobs set last_used=datetime('now') where rowid=?", nil, rowid)
+ if err != nil {
+ err = fmt.Errorf("updating last_used: %w", err)
+ return nil, err
+ }
+ if conn.Changes() != 1 {
+ panic(conn.Changes())
+ }
+ }
return conn.OpenBlob("main", "blobs", "data", rowid, write)
}
func (i instance) Stat() (ret os.FileInfo, err error) {
i.withConn(func(conn conn) {
var blob *sqlite.Blob
- blob, err = i.openBlob(conn, false)
+ blob, err = i.openBlob(conn, false, false)
if err != nil {
return
}
func (i instance) ReadAt(p []byte, off int64) (n int, err error) {
i.withConn(func(conn conn) {
var blob *sqlite.Blob
- blob, err = i.openBlob(conn, false)
+ blob, err = i.openBlob(conn, false, true)
if err != nil {
return
}