zcatsql/CLAUDE.md
reugenio a290859182 Initial commit: zsqlite - SQLite wrapper for Zig
- SQLite 3.47.2 amalgamation compiled directly into binary
- Idiomatic Zig API (Database, Statement, errors)
- Full test suite passing
- Basic example with CRUD operations
- Zero runtime dependencies

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-08 16:45:28 +01:00

4.5 KiB

zsqlite - SQLite Wrapper para Zig

Fecha creación: 2025-12-08 Versión Zig: 0.15.2 Estado: En desarrollo inicial

Descripción del Proyecto

Wrapper idiomático de SQLite para Zig. Compila SQLite amalgamation directamente en el binario, resultando en un ejecutable único sin dependencias externas.

Filosofía:

  • Zero dependencias runtime
  • API idiomática Zig (errores, allocators, iteradores)
  • Binario único y portable
  • Compatible con bases de datos SQLite existentes

Arquitectura

zsqlite/
├── CLAUDE.md           # Este archivo
├── build.zig           # Sistema de build
├── src/
│   ├── root.zig        # Exports públicos
│   ├── sqlite.zig      # Wrapper principal
│   ├── statement.zig   # Prepared statements
│   ├── row.zig         # Iterador de filas
│   └── errors.zig      # Mapeo de errores SQLite
├── vendor/
│   ├── sqlite3.c       # SQLite amalgamation
│   └── sqlite3.h       # Headers SQLite
└── examples/
    └── basic.zig       # Ejemplo básico

API Objetivo

const std = @import("std");
const sqlite = @import("zsqlite");

pub fn main() !void {
    var db = try sqlite.open("test.db");
    defer db.close();

    // Ejecutar SQL directo
    try db.exec("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)");

    // Prepared statement con parámetros
    var stmt = try db.prepare("INSERT INTO users (name) VALUES (?)");
    defer stmt.deinit();

    try stmt.bind(.{ "Alice" });
    try stmt.exec();

    stmt.reset();
    try stmt.bind(.{ "Bob" });
    try stmt.exec();

    // Query con iterador
    var query = try db.prepare("SELECT id, name FROM users");
    defer query.deinit();

    while (try query.step()) |row| {
        const id = row.int(0);
        const name = row.text(1);
        std.debug.print("User {}: {s}\n", .{ id, name });
    }
}

Funcionalidades Planificadas

Fase 1 - Core (Actual)

  • Estructura proyecto
  • Compilar SQLite amalgamation
  • Abrir/cerrar bases de datos
  • Ejecutar SQL simple (exec)
  • Prepared statements básicos
  • Bind de parámetros (int, text, blob, null)
  • Iterador de resultados

Fase 2 - Transacciones y Errores

  • BEGIN/COMMIT/ROLLBACK helpers
  • Mapeo completo errores SQLite
  • SAVEPOINT support

Fase 3 - Avanzado

  • Blob streaming (para archivos grandes)
  • User-defined functions
  • Collations personalizadas
  • Backup API

SQLite Amalgamation

Usamos SQLite amalgamation (sqlite3.c + sqlite3.h) que es la forma recomendada de embeber SQLite. Es un único archivo .c con todo el código de SQLite.

Versión objetivo: SQLite 3.45+ (última estable)

Flags de compilación recomendados:

-DSQLITE_DQS=0                    # Disable double-quoted strings
-DSQLITE_THREADSAFE=0             # Single-threaded (más rápido)
-DSQLITE_DEFAULT_MEMSTATUS=0      # Disable memory tracking
-DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1
-DSQLITE_LIKE_DOESNT_MATCH_BLOBS
-DSQLITE_OMIT_DEPRECATED
-DSQLITE_OMIT_SHARED_CACHE
-DSQLITE_USE_ALLOCA
-DSQLITE_ENABLE_FTS5              # Full-text search
-DSQLITE_ENABLE_JSON1             # JSON functions

Compilación

# Descargar SQLite amalgamation (una sola vez)
cd vendor
curl -O https://sqlite.org/2024/sqlite-amalgamation-3450000.zip
unzip sqlite-amalgamation-3450000.zip
mv sqlite-amalgamation-3450000/* .
rm -rf sqlite-amalgamation-3450000*

# Compilar
zig build

# Ejecutar tests
zig build test

# Ejecutar ejemplo
zig build example

Diferencias con otros wrappers

Característica zsqlite zig-sqlite zqlite.zig
Compila SQLite No (linkea)
API idiomática Parcial
Zero alloc option Planificado No No
Zig 0.15 ? ?

Uso en simifactu-zig (futuro)

Este wrapper está diseñado para ser drop-in replacement del uso de SQLite en simifactu-fyne, soportando:

  • Foreign keys
  • Transactions
  • Prepared statements
  • BLOB storage
  • JSON functions

Equipo y Metodología

Normas de Trabajo

IMPORTANTE: Todas las normas de trabajo están en:

/mnt/cello2/arno/re/recode/TEAM_STANDARDS/

Control de Versiones

# Remote
git remote: git@git.reugenio.com:reugenio/zsqlite.git

# Branches
main        # Código estable
develop     # Desarrollo activo

Zig Path

ZIG=/mnt/cello2/arno/re/recode/zig/zig-0.15.2/zig-x86_64-linux-0.15.2/zig

Notas de Desarrollo

Se irán añadiendo conforme avance el proyecto