TODO: soft-deletion - enable soft-deletion if table has `is_deleted` and `deleted_at` fields - if soft delete is enabled, DeleteXyz should do update (not delete) and set is_deleted and deleted_at - ...and DeleteXyz should have pointer receiver for soft-delete - GetXyzByID should include `ErrItemIsDeleted` if item is soft-deleted TODO: migration-structs - Right now, migrations are strings. Could be a struct with "name", "up" and "down" fields - Adding a "down" operation enables handling newer DB versions with "down instead of error-out" for development (perhaps a flag) IDEA: migrations-table - Store migrations in a table. This makes the schema more self-documenting. - Possible schema: name, sql_up, sql_down, hash (computed from those fields plus previous migration hash) - or just rowid instead of hash? Migration sequence should be immutable after publishing, so there should never be "conflicts" TODO: language-server-for-TODO.txt TODO: auto-migration-checker - Use `pkg/schema` to test whether a base schema plus a migration equals a new schema TODO: codegen SaveXyz update path doesn't check foreign keys - Insert path has FK error handling, but the update path wraps everything in Must - An update that violates an FK constraint will panic instead of returning an error TODO: codegen `without rowid` tables properly TODO: generated test file inclues global test DB setup, which is wrong TODO: join-tables - handle codegen for without rowid tables properly - add "get all X for Y" TODO: create a Getter function for each unique index TODO: consider CreateDB and CreateMemoryDB TODO: generate tests for the remaining CRUD, try to hit ~100% default test coverage