Database Manifest Validator
¿Qué es lo que hace?
Las herramientas ValidateManifest.bat / ValidateManifest.ps1 sirven para verificar y re-ejecutar todos los stored procedures y funciones SQL listados en database-changes-manifest.json contra la base de datos configurada en NHibernate.config.
Se usan principalmente al momento de un merge o despliegue de rama, para asegurarse de que todos los objetos SQL del proyecto estén actualizados en la base de datos de destino.
Archivos involucrados
| Archivo | Descripción |
|---|---|
ValidateManifest.bat | Punto de entrada. Lanza el script PowerShell con ExecutionPolicy Bypass. Hace pausa si hay error. |
ValidateManifest.ps1 | Lógica principal de validación y ejecución SQL. |
database-changes-manifest.json | Lista de rutas relativas a los archivos .sql que deben ejecutarse. |
Cómo se usa
Opción 1 — Doble clic (más simple)
Hacer doble clic sobre ValidateManifest.bat desde el Explorador de Windows.
Opción 2 — Desde PowerShell
cd "..\Aasi.Net.Api\DatabaseScripts\Version"
powershell.exe -ExecutionPolicy Bypass -File ".\ValidateManifest.ps1"
Cómo funciona internamente (ValidateManifest.ps1)
1. Lee database-changes-manifest.json
2. Extrae el connection string desde NHibernate.config (xpath con namespace urn:nhibernate-configuration-2.2)
3. Añade TrustServerCertificate=True si no está presente
4. Por cada item del manifest:
a. Valida el formato del path (debe empezar con '/', extensión .sql, sin 'dbo.dbo' duplicado)
b. Verifica que el archivo .sql exista en disco
c. Ejecuta el archivo SQL contra la base de datos (respeta sentencias GO)
5. Muestra resumen: [OK] / [ERROR] por cada objeto
6. Retorna exit code 0 (éxito) o 1 (hay errores)
Importante: el script ejecuta los archivos SQL en el orden en que aparecen en el manifest. Si hay dependencias entre objetos, ese orden importa.
Salida esperada
================================
DATABASE MANIFEST VALIDATOR
================================
Manifest: C:\...\database-changes-manifest.json
NHibernate Config: C:\...\NHibernate.config
Database Scripts Root: C:\...\DatabaseScripts
[OK] Connection string obtenida desde NHibernate.config
[OK] /Functions/dbo.aasi_i18n_all_resource_group_by_regioncode.sql
[OK] /Procedures/dbo.aasi_fixed_asset_accounting.sql
...
===========================================
[OK] VALIDACION COMPLETADA EXITOSAMENTE
Total validado: 51 items
En caso de error:
[ERROR] ERRORES EN: /Procedures/dbo.aasi_fixed_asset_accounting.sql
- Error SQL al ejecutar: Invalid column name 'xyz'.
Validaciones que realiza el script
| Validación | Qué verifica |
|---|---|
| Formato del path | Debe comenzar con / |
| Extensión | Debe terminar en .sql |
| Nombre duplicado | No debe contener dbo.dbo. |
| Existencia en disco | El archivo debe existir en DatabaseScripts/<path> |
| Ejecución SQL | Sin errores al ejecutar en la BD (timeout: 300 segundos por batch) |
Cómo agregar un nuevo objeto al manifest
- Crear el archivo
.sqlen la carpetaDatabaseScripts/Procedures/oDatabaseScripts/Functions/ - Agregar una entrada al final de
database-changes-manifest.json:
{
"path": "/Procedures/dbo.mi_nuevo_procedure.sql"
}
Convención de nombres:
dbo.<nombre_del_objeto>.sql(sindbo.dbo.)
Errores frecuentes y soluciones
| Error | Causa probable | Solución |
|---|---|---|
Login failed for user '...' | Contraseña incorrecta o usuario sin acceso a la BD | Verificar credenciales en NHibernate.config |
El archivo no existe en: C:\...\Procedures\dbo.xxx.sql | El archivo SQL no está en disco | Hacer pull de la rama o verificar que el archivo esté commiteado |
El nombre contiene 'dbo.dbo' duplicado | Nombre mal formado en el manifest | Corregir la entrada en database-changes-manifest.json |
El path debe comenzar con '/' | Path relativo mal formado | Agregar / al inicio del path |
Error SQL de sintaxis | El script SQL tiene errores | Revisar y corregir el .sql correspondiente |
Notas adicionales
- Al hacer merge de una rama: ejecutar
ValidateManifest.batpara asegurarse de que todos los objetos SQL en el manifest están actualizados en la base de datos local. - Al agregar un nuevo SP o función: agregar la entrada al
database-changes-manifest.jsonantes de hacer el commit. - El orden en el manifest importa: si un SP depende de otro, el SP base debe aparecer primero en el archivo.
- La fuente de la conexión es siempre
NHibernate.config: no hay configuración hardcodeada en el script. Si cambias de base de datos de desarrollo, solo actualiza elInitial Catalogen ese archivo. - El script no hace rollback: si falla a mitad de la lista, los objetos anteriores ya fueron ejecutados. Corregir el error y volver a ejecutar (los
CREATE OR ALTERson idempotentes).