From 286b43d1733e00c49e6246669896cde0340f990b Mon Sep 17 00:00:00 2001 From: Přemysl Eric Janouch Date: Tue, 12 Dec 2023 07:54:44 +0100 Subject: More database thinking --- main.go | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'main.go') diff --git a/main.go b/main.go index 71c3759..ba7d6f9 100644 --- a/main.go +++ b/main.go @@ -434,10 +434,8 @@ func (i *importer) Import(path string) error { return err } - // A concurrent transaction could be aborted, yet still result in - // creating directoryManager's cache entry, therefore this scope. - // TODO: Educate self about isolation levels and reconsider. - // Perhaps get rid of the cache. + // We can't multiplex transactions on a single connection, + // and the directoryManager isn't thread-safe. i.dmMutex.Lock() defer i.dmMutex.Unlock() @@ -452,6 +450,8 @@ func (i *importer) Import(path string) error { return err } + // XXX: The directoryManager's cache is questionable here, + // if only because it keeps entries even when transactions fail. dbDirname, dbBasename := filepath.Split(path) dbParent, err := i.dm.IDForDirectoryPath(tx, dbDirname) if err != nil { @@ -459,9 +459,10 @@ func (i *importer) Import(path string) error { } // FIXME: This disallows any entries directly in the root. - // TODO: Turn this into an upsert statement. _, err = tx.Exec(`INSERT INTO entry(parent, name, mtime, sha1) - VALUES (?, ?, ?, ?)`, dbParent, dbBasename, s.ModTime().Unix(), hexSHA1) + VALUES (?, ?, ?, ?) ON CONFLICT DO UPDATE SET mtime = ?, sha1 = ?`, + dbParent, dbBasename, s.ModTime().Unix(), hexSHA1, + s.ModTime().Unix(), hexSHA1) if err != nil { return err } @@ -532,7 +533,7 @@ func cmdSync(args []string) error { return err } - // TODO + // TODO: Should this run in a transaction? return nil } -- cgit v1.2.3-70-g09d2