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).