Skip to main content

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

ArchivoDescripción
ValidateManifest.batPunto de entrada. Lanza el script PowerShell con ExecutionPolicy Bypass. Hace pausa si hay error.
ValidateManifest.ps1Lógica principal de validación y ejecución SQL.
database-changes-manifest.jsonLista 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ónQué verifica
Formato del pathDebe comenzar con /
ExtensiónDebe terminar en .sql
Nombre duplicadoNo debe contener dbo.dbo.
Existencia en discoEl archivo debe existir en DatabaseScripts/<path>
Ejecución SQLSin errores al ejecutar en la BD (timeout: 300 segundos por batch)

Cómo agregar un nuevo objeto al manifest

  1. Crear el archivo .sql en la carpeta DatabaseScripts/Procedures/ o DatabaseScripts/Functions/
  2. 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 (sin dbo.dbo.)


Errores frecuentes y soluciones

ErrorCausa probableSolución
Login failed for user '...'Contraseña incorrecta o usuario sin acceso a la BDVerificar credenciales en NHibernate.config
El archivo no existe en: C:\...\Procedures\dbo.xxx.sqlEl archivo SQL no está en discoHacer pull de la rama o verificar que el archivo esté commiteado
El nombre contiene 'dbo.dbo' duplicadoNombre mal formado en el manifestCorregir la entrada en database-changes-manifest.json
El path debe comenzar con '/'Path relativo mal formadoAgregar / al inicio del path
Error SQL de sintaxisEl script SQL tiene erroresRevisar y corregir el .sql correspondiente

Notas adicionales

  • Al hacer merge de una rama: ejecutar ValidateManifest.bat para 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.json antes 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 el Initial Catalog en 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 ALTER son idempotentes).