Files
fn_registry/functions/infra/migration_up.md
T
egutierrez 9b0e1f836d 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.2 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_up function go infra 1.0.0 impure func MigrationUp(db *sql.DB, dir string) ([]Migration, error) Lee los archivos .sql del directorio, crea la tabla _migrations si no existe, y ejecuta las migraciones pendientes en orden de version. Cada migracion corre en su propia transaccion. Retorna la lista de migraciones aplicadas en esta llamada.
migration
database
sql
schema
sqlite
apply
up
migration_parse_go_infra
migration_go_infra
migration_go_infra
false error_go_core
database/sql
fmt
os
path/filepath
sort
strings
name desc
db conexion *sql.DB abierta a la base de datos SQLite donde aplicar las migraciones
name desc
dir path al directorio que contiene los archivos .sql de migracion (ej: apps/my_app/migrations)
slice de Migration con las migraciones que fueron aplicadas en esta llamada (puede estar vacio si todo ya estaba aplicado) true
base de datos vacia aplica todas las migraciones
migraciones ya aplicadas se omiten
migracion con SQL invalido retorna error y deja las anteriores aplicadas
directorio sin archivos sql no aplica nada
functions/infra/migration_up_test.go functions/infra/migration_up.go

Ejemplo

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

applied, err := MigrationUp(db, "apps/my_app/migrations")
if err != nil {
    log.Fatalf("migration failed: %v", err)
}
for _, m := range applied {
    fmt.Printf("Applied: %03d_%s\n", m.Version, m.Name)
}
// Applied: 001_create_users
// Applied: 002_add_roles

Notas

Crea _migrations con CREATE TABLE IF NOT EXISTS — es idempotente. Cada migracion se ejecuta en una transaccion independiente: si falla la migracion 3, las 1 y 2 ya aplicadas permanecen. El up_sql y down_sql se guardan en _migrations para que el rollback funcione aunque el archivo sea modificado o eliminado posteriormente. SQLite con el driver mattn/go-sqlite3 soporta multiples sentencias en un solo Exec.