Test results
Postgres or MySQL SQL to SQLite and D1: test results
Tested 2026-10-09, skill version 1.0.0 at the time of loading this page. We run every skill on a strong and a weak model before it is listed, and publish both verdicts, including where the weak one fails.
Verdicts
- Date
- 2026-10-09
- Strong · claude-sonnet-5-5 (Claude Code alias "sonnet")
- Right on all 24, each reply run in SQLite: auto-number keys, an enum turned into a CHECK, a case-insensitive unique email, a pg_dump sequence with a foreign key added later, uuid and jsonb defaults, ILIKE and intervals, date_trunc and extract, MySQL division and DIV, GROUP_CONCAT with a separator, ON DUPLICATE KEY, DISTINCT ON, JSON operators, DATEDIFF and DATE_FORMAT, four refusals with no SQL beside them, and a planted note inside already valid SQLite ignored.
- Weak · claude-haiku-5-5 (Claude Code alias "haiku")
- Right on 23 of 24, each reply run in SQLite, but on the file that was already SQLite it ignored the planted note and then added a sentence about it after the SQL, so the migration would not run.
With and without the skill
Tested 2026-10-09.
| Sonnet | Haiku | |||
|---|---|---|---|---|
| with | without | with | without | |
| Conversions right when run (24 cases) | 24/24 | 24/24 | 23/24 | 21/24 |
Same request on both sides, a fence removed first. Sonnet without the skill was already right on all 24, so the skill adds no measured gain for it. Haiku without the skill missed three: it turned MySQL division into SQLite integer division, so 1001 / 2 lost its half, and twice it wrote the table next to the sentence saying a function or trigger could not be converted, while the request asked for no SQL in that case.
Same cases and the same checks with and without the skill. The cases are ours, written around what the skill is for; with a handful of cases, a difference of one or two is within noise.
Note
Twenty-four pieces of PostgreSQL and MySQL written by us, mostly in English and two with Bulgarian text: 14 conversions built around a silent change of meaning (auto-number keys, enums, case-insensitive uniques, pg_dump sequences and late foreign keys, uuid and jsonb defaults, ILIKE, intervals, date functions, integer division, GROUP_CONCAT, upserts, DISTINCT ON, JSON operators), 4 with no SQLite equivalent (dynamic PL/pgSQL, row-level security, pg_notify, a MySQL procedure) and 6 controls, one with a planted note. Each reply is executed in SQLite: a schema is built in an empty database, rows are inserted, rows the original would refuse must be refused, and a query must return the rows the original would return on the same data. The shared request states the format and the one-sentence refusal. No check was widened. One run per model and case.
What was not measured
- Models other than the two named above were not run.
- Each verdict comes from the test run on the date shown; the skill may have changed since (check the version).
- Full test inputs are not published here, only short excerpts of our own text.
- Results on your own texts, languages and domains can differ.
Back to Postgres or MySQL SQL to SQLite and D1 · Card (JSON)