Files
fn_registry/functions/infra/migration_down.md
T
egutierrez 35a49174ca feat: funciones impuras migration_create, migration_up, migration_down, migration_status
Fase 2 del issue 0015. MigrationCreate (crea archivo .sql template con version
auto-calculada), MigrationUp (aplica migraciones pendientes en transacciones
individuales), MigrationDown (revierte ultimas N via down_sql de _migrations),
MigrationGetStatus (cruza disco con BD, detecta orphaned). Tests de integracion:
ciclo completo create->up->status->down->status. 26 tests, todos pasan.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-13 02:01:40 +02:00

2.1 KiB

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports params output tested tests test_file_path file_path
migration_down function go infra 1.0.0 impure func MigrationDown(db *sql.DB, n int) ([]Migration, error) Revierte las ultimas n migraciones aplicadas ejecutando su down_sql guardado en la tabla _migrations. Las reversiones ocurren en orden inverso de version (la mas alta primero). Cada reversion corre en su propia transaccion. Retorna las migraciones revertidas.
migration
database
sql
schema
sqlite
rollback
down
migration_go_infra
migration_go_infra
false error_go_core
database/sql
fmt
time
name desc
db conexion *sql.DB abierta a la base de datos SQLite con la tabla _migrations
name desc
n numero de migraciones a revertir (las ultimas n en orden descendente de version). Si n <= 0 no hace nada.
slice de Migration con las migraciones que fueron revertidas (en orden descendente de version) true
revertir ultima migracion elimina registro y ejecuta down_sql
revertir n migraciones revierte en orden descendente
n cero no revierte nada
base de datos sin migraciones retorna slice vacio
functions/infra/migration_down_test.go functions/infra/migration_down.go

Ejemplo

db, _ := SQLiteOpen("", "apps/my_app/operations.db")
defer db.Close()

// Revertir la ultima migracion aplicada
reverted, err := MigrationDown(db, 1)
if err != nil {
    log.Fatalf("rollback failed: %v", err)
}
for _, m := range reverted {
    fmt.Printf("Reverted: %03d_%s\n", m.Version, m.Name)
}
// Reverted: 003_add_audit_log

Notas

Usa el down_sql almacenado en _migrations, no el archivo en disco. Esto garantiza que el rollback funciona aunque el archivo haya sido modificado o eliminado. Si down_sql esta vacio, solo se elimina el registro de _migrations sin ejecutar SQL. ATENCION: MigrationDown es destructiva — un DROP TABLE en el down elimina datos. Diseñada para desarrollo y no para revertir en produccion con datos vivos.