# zsqlite > SQLite wrapper idiomático para Zig 0.15.2+ ## Estado **v1.0 - Completo** | 7,563 líneas | 15 módulos | 63 tests ## Arquitectura ``` src/ ├── root.zig # Exports públicos y tests ├── database.zig # Conexión, transacciones, pragmas, snapshots ├── statement.zig # Prepared statements, binding, row mapping ├── session.zig # Change tracking (Session extension) ├── serialize.zig # Serialize/Deserialize API ├── functions.zig # UDFs, callbacks, hooks ├── backup.zig # Backup API, Blob I/O ├── pool.zig # Connection pool ├── fts5.zig # Full-text search ├── json.zig # JSON1 helpers ├── rtree.zig # R-Tree spatial index ├── vtable.zig # Virtual tables API ├── types.zig # Tipos comunes ├── errors.zig # Mapeo de errores └── c.zig # C bindings ``` ## Comandos ```bash # Build zig build # Tests zig build test # Ejemplo zig build basic && ./zig-out/bin/basic ``` ## SQLite Flags ``` -DSQLITE_THREADSAFE=0 # Single-threaded -DSQLITE_ENABLE_FTS5 # Full-text search -DSQLITE_ENABLE_JSON1 # JSON functions -DSQLITE_ENABLE_RTREE # R-Tree -DSQLITE_ENABLE_SESSION # Change tracking -DSQLITE_ENABLE_SNAPSHOT # Snapshots -DSQLITE_ENABLE_COLUMN_METADATA -DSQLITE_ENABLE_PREUPDATE_HOOK ``` ## Notas Técnicas - Zig 0.15: usar `std.ArrayListUnmanaged` (no `ArrayList.init`) - Strings: `std.fmt.allocPrint` + null terminator manual - Callbacks C: requieren `callconv(.c)` - SQLITE_TRANSIENT: necesario para strings que Zig puede mover - Named params: incluir prefijo (`:name`, no `name`) ## Git ``` origin: git@git.reugenio.com:reugenio/zsqlite.git branch: main ```