···11+# ocaml-sqlite TODO
22+33+## 1. Read any SQLite database
44+Generalise `open_` beyond the hardcoded `kv (key TEXT, value BLOB)` schema.
55+Parse `sqlite_master` to discover all tables and their column definitions,
66+then expose a generic row-level read API. This makes ocaml-sqlite a pure
77+OCaml SQLite reader — useful for inspecting `.db` files without C bindings.
88+99+## 2. Typed schema support
1010+Let users define tables with multiple typed columns (TEXT, INTEGER, REAL,
1111+BLOB, NULL). The `Btree.Record` module already handles all serial types —
1212+the missing piece is a schema definition API and column-level accessors.
1313+1414+## 3. Secondary indexes
1515+The `Btree.Index` module already exists. Wire it up so users can create
1616+indexes on non-key columns for efficient lookups and range scans.
1717+1818+## 4. Minimal SQL query layer
1919+A subset of SQL — `SELECT ... FROM ... WHERE ... ORDER BY` with simple
2020+predicates. Doesn't need a full parser; even a small OCaml DSL would work.
2121+This is the stretch goal that turns ocaml-sqlite into a genuine pure-OCaml
2222+SQLite replacement for read-heavy workloads.
2323+2424+## 5. Transactions / WAL
2525+ACID guarantees via write-ahead logging. Important for production use but
2626+less critical for the read-oriented use cases where a pure OCaml
2727+implementation shines most.