While refactoring the schema yesterday, I forgot to add primary keys
back to the sessions and projects tables. Databases existing before
commit 984d44775b are fine and new
databases should be initialised correctly, but databases created between
commit 984d44775b and this one require
either SQL migrations or deleting willow.sqlite (which will remove all
users, projects, login sessions, etc.).
For the migrations, open the database with `sqlite3 willow.sqlite` and
paste the SQL statements below.
```
ALTER TABLE sessions RENAME TO sessions_bak;
CREATE TABLE sessions
(
token TEXT NOT NULL PRIMARY KEY,
username TEXT NOT NULL,
expires TIMESTAMP NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO sessions (token, username, expires, created_at)
SELECT token, username, expires, created_at FROM sessions_bak;
ALTER TABLE projects RENAME TO projects_bak;
CREATE TABLE projects
(
url TEXT NOT NULL PRIMARY KEY,
name TEXT NOT NULL,
forge TEXT NOT NULL,
version TEXT NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO projects (url, name, forge, version, created_at)
SELECT url, name, forge, version, created_at FROM projects_bak;
```
Assuming the statements execute without error, Willow starts up
correctly, and you can log in, you can safely drop open the database
again and drop the projects_bak and sessions_bak tables with
```
DROP TABLE projects_bak;
DROP TABLE sessions_bak;
```
---
References: https://todo.sr.ht/~amolith/willow/14
- Redo schema to improve handling of lightweight tags
- Try to clean up empty directories when untracking a project
To resolve schema conflict, run `sqlite3 willow.sqlite` and paste the
following:
ALTER TABLE releases RENAME TO releases_bak;
CREATE TABLE releases
(
id TEXT NOT NULL PRIMARY KEY,
project_url TEXT NOT NULL,
release_url TEXT NOT NULL,
tag TEXT NOT NULL,
content TEXT NOT NULL,
date TIMESTAMP NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
If everything works as expected, you can `DROP TABLE releases_bak`.