zcatsql/docs/CGO_PARITY_ANALYSIS.md
reugenio 532cf827f8 v0.3: Fase 2A+2B complete - Major feature additions
New features:
- Backup API: Backup struct with step(), progress(), remaining(), pageCount()
- Convenience functions: backupToFile(), loadFromFile(), backupDatabase()
- ATTACH/DETACH: attach(), attachMemory(), detach(), listDatabases()
- User-Defined Functions: createScalarFunction(), FunctionContext, FunctionValue
- Custom Collations: createCollation(), CollationFn, removeCollation()
- Named parameters: bindTextNamed(), bindIntNamed(), etc. (:name, @name, $name)
- Savepoints: savepoint(), release(), rollbackTo()
- Configuration: setBusyTimeout(), setJournalMode(), setSynchronous(), enableWalMode()
- Statement metadata: sql(), isReadOnly(), parameterCount(), parameterIndex()
- Transaction: beginExclusive()
- Utilities: errorCode(), extendedErrorCode(), interrupt(), isReadOnly(), filename()
- Additional bind/column: bindBool(), bindZeroblob(), columnBool(), columnBytes(), columnDeclType()

Documentation:
- Created docs/API.md - Complete API reference
- Created docs/ARCHITECTURE.md - Technical architecture
- Created docs/CGO_PARITY_ANALYSIS.md - Feature parity tracking with go-sqlite3
- Updated CLAUDE.md with all new features

All 20 tests passing.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-08 17:54:50 +01:00

9.4 KiB

Analisis de Paridad con CGo go-sqlite3

Fecha: 2025-12-08 Objetivo: Identificar todas las funcionalidades de go-sqlite3 para replicarlas en zsqlite

Resumen

go-sqlite3 (https://github.com/mattn/go-sqlite3) es el wrapper SQLite mas maduro para Go. Este documento analiza todas sus funcionalidades para asegurar paridad en zsqlite.


Estado de Implementacion

Leyenda

  • Implementado en zsqlite
  • Pendiente de implementar
  • 🔄 Parcialmente implementado
  • No aplicable a Zig

1. Conexion a Base de Datos

Funcionalidad go-sqlite3 zsqlite Notas
Open basico sqlite.open()
Open con flags Database.openWithFlags()
Close db.close()
URI connection string Parsear file:path?mode=ro&cache=shared
DSN parameters Configuracion via string
Connection pooling (via database/sql) Pool propio

2. Configuracion de Pragmas

Pragma go-sqlite3 zsqlite Prioridad
auto_vacuum Media
busy_timeout db.setBusyTimeout()
cache_size Media
case_sensitive_like Baja
defer_foreign_keys Media
foreign_keys db.setForeignKeys()
journal_mode db.setJournalMode()
locking_mode Media
query_only Baja
recursive_triggers Baja
secure_delete Baja
synchronous db.setSynchronous()

3. Prepared Statements

Funcionalidad go-sqlite3 zsqlite Notas
Prepare db.prepare()
Exec (sin resultados) db.exec()
Query (con resultados) stmt.step() loop
Bind posicional (?) stmt.bindInt(1, val)
Bind named (:name) stmt.bindIntNamed(":name", val)
Bind named (@name) stmt.bindIntNamed("@name", val)
Bind named ($name) stmt.bindIntNamed("$name", val)
Readonly check stmt.isReadOnly()
SQL text stmt.sql()
Expanded SQL sqlite3_expanded_sql()

4. Bind de Parametros

Tipo go-sqlite3 zsqlite Notas
NULL stmt.bindNull()
int64 stmt.bindInt()
float64 stmt.bindFloat()
string/text stmt.bindText()
[]byte/blob stmt.bindBlob()
bool stmt.bindBool()
time.Time Formatear como string ISO8601
Zeroblob stmt.bindZeroblob()

5. Lectura de Columnas

Tipo go-sqlite3 zsqlite Notas
Column count stmt.columnCount()
Column name stmt.columnName()
Column type stmt.columnType()
int64 stmt.columnInt()
float64 stmt.columnFloat()
text stmt.columnText()
blob stmt.columnBlob()
NULL check stmt.columnIsNull()
Column bytes stmt.columnBytes()
Declared type stmt.columnDeclType()
Database name sqlite3_column_database_name()
Table name sqlite3_column_table_name()
Origin name sqlite3_column_origin_name()

6. Transacciones

Funcionalidad go-sqlite3 zsqlite Notas
BEGIN db.begin()
BEGIN IMMEDIATE db.beginImmediate()
BEGIN EXCLUSIVE db.beginExclusive()
BEGIN DEFERRED db.begin() (default)
COMMIT db.commit()
ROLLBACK db.rollback()
SAVEPOINT db.savepoint(alloc, "name")
RELEASE db.release(alloc, "name")
ROLLBACK TO db.rollbackTo(alloc, "name")

7. Metadatos y Utilidades

Funcionalidad go-sqlite3 zsqlite Notas
LastInsertRowId db.lastInsertRowId()
Changes db.changes()
TotalChanges db.totalChanges()
Error message db.errorMessage()
Error code db.errorCode()
Extended error code db.extendedErrorCode()
SQLite version sqlite.version()
Version number sqlite.versionNumber()
Database filename db.filename()
Is readonly db.isReadOnly()

8. Limites y Control

Funcionalidad go-sqlite3 zsqlite Prioridad
GetLimit Baja
SetLimit Baja
SetFileControlInt Baja
Interrupt db.interrupt()

9. Callbacks y Hooks

Funcionalidad go-sqlite3 zsqlite Prioridad
Commit hook Media
Rollback hook Media
Update hook Media
Pre-update hook Baja
Authorizer Baja
Progress handler Baja
Busy handler Media
Busy timeout db.setBusyTimeout()

10. Funciones Personalizadas

Funcionalidad go-sqlite3 zsqlite Prioridad
RegisterFunc (scalar) db.createScalarFunction()
RegisterAggregator Media
RegisterCollation db.createCollation()
User-defined window func Baja

11. Backup API

Funcionalidad go-sqlite3 zsqlite Prioridad
Backup init Backup.init()
Backup step backup.step()
Backup finish backup.finish()
Backup remaining backup.remaining()
Backup pagecount backup.pageCount()

12. Blob I/O

Funcionalidad go-sqlite3 zsqlite Prioridad
Blob open Media
Blob close Media
Blob read Media
Blob write Media
Blob bytes Media
Blob reopen Baja

13. Extensiones

Funcionalidad go-sqlite3 zsqlite Notas
Load extension Deshabilitado por seguridad
Enable load ext

Plan de Implementacion

Fase 2A - Prioridad Alta COMPLETADA

  1. Busy timeout/handler - db.setBusyTimeout()
  2. WAL mode (journal_mode pragma) - db.setJournalMode(), db.enableWalMode()
  3. Named parameters - stmt.bindTextNamed(), etc.
  4. SAVEPOINT/RELEASE/ROLLBACK TO - db.savepoint(), etc.
  5. BEGIN EXCLUSIVE - db.beginExclusive()

Fase 2B - Prioridad Alta COMPLETADA

  1. Backup API completo - Backup struct, backupToFile(), loadFromFile()
  2. User-defined functions (scalar) - db.createScalarFunction()
  3. Collations personalizadas - db.createCollation()
  4. ATTACH/DETACH - db.attach(), db.detach(), db.listDatabases()

Fase 3A - Prioridad Media (Siguiente)

  1. Blob I/O streaming
  2. Hooks (commit, rollback, update)
  3. Aggregator functions
  4. Mas pragmas

Fase 3B - Prioridad Baja

  1. Authorizer
  2. Progress handler
  3. Pre-update hook
  4. Window functions
  5. Limits API

Funciones SQLite C Relevantes (Referencia)

// Conexion
sqlite3_open_v2()
sqlite3_close_v2()

// Statements
sqlite3_prepare_v2()
sqlite3_finalize()
sqlite3_reset()
sqlite3_clear_bindings()
sqlite3_step()
sqlite3_sql()
sqlite3_expanded_sql()
sqlite3_stmt_readonly()

// Bind
sqlite3_bind_parameter_index()
sqlite3_bind_parameter_name()
sqlite3_bind_null()
sqlite3_bind_int64()
sqlite3_bind_double()
sqlite3_bind_text()
sqlite3_bind_blob()
sqlite3_bind_zeroblob()

// Column
sqlite3_column_count()
sqlite3_column_name()
sqlite3_column_type()
sqlite3_column_int64()
sqlite3_column_double()
sqlite3_column_text()
sqlite3_column_blob()
sqlite3_column_bytes()
sqlite3_column_decltype()
sqlite3_column_database_name()
sqlite3_column_table_name()
sqlite3_column_origin_name()

// Utilidades
sqlite3_last_insert_rowid()
sqlite3_changes()
sqlite3_total_changes()
sqlite3_errmsg()
sqlite3_errcode()
sqlite3_extended_errcode()
sqlite3_libversion()
sqlite3_libversion_number()
sqlite3_db_filename()
sqlite3_db_readonly()

// Busy
sqlite3_busy_timeout()
sqlite3_busy_handler()

// Hooks
sqlite3_commit_hook()
sqlite3_rollback_hook()
sqlite3_update_hook()
sqlite3_preupdate_hook()

// Funciones
sqlite3_create_function_v2()
sqlite3_create_collation_v2()
sqlite3_create_window_function()

// Backup
sqlite3_backup_init()
sqlite3_backup_step()
sqlite3_backup_finish()
sqlite3_backup_remaining()
sqlite3_backup_pagecount()

// Blob
sqlite3_blob_open()
sqlite3_blob_close()
sqlite3_blob_read()
sqlite3_blob_write()
sqlite3_blob_bytes()
sqlite3_blob_reopen()

// Control
sqlite3_interrupt()
sqlite3_limit()
sqlite3_progress_handler()
sqlite3_set_authorizer()

© zsqlite - CGo Parity Analysis 2025-12-08