App: Code for SQLite3
Developer: ZeeZide GmbH
Genres: Developer Tools

“Code for SQLite3” is a little macOS application that accepts either SQLite3 database files or SQL source code, and generates Swift source code for them.

This is done for two main use cases: 1) To bundle and access resource data that is available as a SQLite database. 2) To generate highly efficient database access code, e.g. for caching offline-first data.

The app generates a Swift structure for the database and for each SQL table and view, plus accompanying, highly optimised, code. It can work either with the “Lighter” package or generate dependency free SQLite code.

- Produces very efficient low-level SQLite code that directly binds to SQLite w/o any runtime mapping.
- Can generate dependency free API wrappers that directly use SQLite3 and nothing else.
- Can generates API that uses “Lighter”, a tiny library adding more features.
- Completely type safe, down to the SQLite3 schema! I.e. tables or columns that do not exist in the database, can't be used.
- Rows can be filtered using Swift closures that directly run within SQLite.
- Generates extensive DocC documentation, which includes information on how to use the generated wrappers, the SQL that created an associated table, and more.
- Supports both: SQL tables and views. Views can be used to pre-create named queries (e.g. complex joins or sum selects).
- Can load from both: plain SQL source code and actual binary SQLite3 databases.
- Generates accessors that can follow relationships formed by foreign keys.
- Can synthesize primary (and foreign) keys, even if they are not properly declared in the SQLite database.
- Can generate Codable, Identifiable and Hashable models.
- Can generate Swift 5.5 async/await APIs when used w/ the “Lighter”" library.

Release notes:
This version fixes a bug when opening SQLite database that have an associated WAL file. Databases in WAL mode should work fine now.

It also integrates a set of Lighter fixes:
- Only generates module accessor when Foundation is allowed (requires `Bundle`).
- Only generate `.module` for SPM packages (not available in Xcode).
- Avoid incorrect quoting of `self`.
- Fixes SQL bug in `user_version` (was triggering a SQL syntax error).
- Supports single column tables/views.
- Uses `execute` in delete/insert/update (was not properly requesting write access to the database).
- Fixes various BLOB UUID issues.
- Fixes an incorrect DocC comment wrt default values.
- Generate default `UUID` for UUID primary keys records.
- Use `Int.min` as a default for integer primary keys records.
- Decouple INTEGER/INT, different meaning in primary key contexts (i.e. only spelled out `INTEGER` is DB generated).
- Avoid naming conflicts in raw API.