diff options
| -rw-r--r-- | initialize.sql | 5 | ||||
| -rw-r--r-- | main.go | 15 | 
2 files changed, 10 insertions, 10 deletions
diff --git a/initialize.sql b/initialize.sql index 4e2c56e..31f4b13 100644 --- a/initialize.sql +++ b/initialize.sql @@ -65,9 +65,8 @@ CREATE TABLE IF NOT EXISTS tag_space(  CREATE UNIQUE INDEX IF NOT EXISTS tag_space__name ON tag_space(name);  -- To avoid having to deal with NULLs, always create this special tag space. -INSERT INTO tag_space(id, name, description) -VALUES(0, '', 'User-defined tags') -ON CONFLICT DO NOTHING; +INSERT OR IGNORE INTO tag_space(id, name, description) +VALUES(0, '', 'User-defined tags');  CREATE TABLE IF NOT EXISTS tag(  	id       INTEGER NOT NULL, @@ -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  }  | 
