All rules Rule SL020 · TY
SQLite · alpha
note
TY · Type choices
free in the CLI — --engine=sqlite

CREATE TABLE without STRICT

Note — this works, but it is a documented trap or a cost the author may not have meant.

What it catches

Without STRICT, SQLite's column types are suggestions: a TEXT value goes into an INTEGER column, a blob into a date, and nothing complains until the application reads it back. STRICT (3.37+) makes the declared type an actual constraint, and it only exists as a CREATE TABLE option — it cannot be added later without a rebuild.

Fires on

CREATE TABLE orders (id INTEGER PRIMARY KEY, qty INTEGER, note TEXT);

Do this instead

Add STRICT to every new table. Column types are then limited to INT, INTEGER, REAL, TEXT, BLOB and ANY, and a value of the wrong type is rejected at insert time instead of surfacing later.

CREATE TABLE orders (id INTEGER PRIMARY KEY, qty INTEGER, note TEXT) STRICT;
Catch this before it ships

SQLite support is in alpha: this rule runs locally in the free CLI, static only, and not in the hosted service yet: npx bolvrk check migration.sql --engine=sqlite