Actualizado el 2026-10-29. Esta página expone la dirección hacia la que MAD está diseñado para
crecer. Nada de la maquinaria de composición o migración descrita aquí está construido
todavía; el diseño que fundamenta el modelo de objeto de datos es
docs/project/MAD_DATA_OBJECT.md,
el registro de trabajo es
docs/project/MAD_FUTURE.md,
y la lista de deseos del producto es
docs/project/TODO.md.
Un documento .mad es la definición de un informe: la instantánea del esquema, el grafo de
consultas (tablas, joins, agrupaciones, filtros) y el árbol de diseño por bandas. Al
actualizarse, el motor compila el grafo a SQL, lee las filas una vez y
las materializa en una caché SQLite complementaria (.maddb + .mdcache). Los datos de fila
quedan fuera del documento a propósito; la definición se mantiene por debajo de 100 KB.
Una consecuencia es fácil de pasar por alto: un informe es una función de fuentes de datos
a una tabla. Cada driver devuelve un esquema y filas en forma de tabla, y la salida de un
informe es un esquema (MADDataColumn) y filas en forma de tabla
(MADDataTableFast). El motor ya trata ambos de forma idéntica.
Cerrar el circuito entre la definición de un informe y su salida materializada habilita cuatro capacidades:
.mad como tabla ad hoc de base de datosEn una base de datos, se hace SELECT sobre tablas base como employee o sales_data. Un
informe enlaza varias tablas y su salida es una tabla SQLite ad hoc y
materializada. Hoy nada puede apuntar una consulta a la salida de otro informe: la caché de
resultados existe, pero se indexa por un hash de nombre de archivo en lugar de por una
identidad direccionable. Hacer direccionable esa salida significa:
El resultado de un informe se convierte en una tabla de base de datos sobre la que otros informes y consultas pueden hacer
SELECTyJOIN.
Un informe construido sobre un informe es un DAG de tablas derivadas: una capa semántica portátil en la que diseñar un informe es también diseñar una fuente de datos reutilizable.
Cada driver (MADMySQL, MADPostgres, MADTdsClient, MADSqlite3)
materializa su conjunto de resultados en la misma representación local de tabla SQLite.
Una vez que un documento puede contener varias definiciones de consulta y direccionar cada salida como
una tabla, un informe puede unir una tabla de PostgreSQL con una tabla de SQL Server y una
tabla de MySQL, federadas localmente en SQLite sin un servidor de federación en
medio. Las instantáneas son la federación.
La paginación por bandas (Report Header, Page Header, Groupings, Detail, Footers) se
inventó para imprimir en papel. Como el diseño de un .mad son datos paramétricos y
la caché de filas .maddb es SQLite local en el dispositivo, las páginas de papel son solo una
forma de presentar un informe. Cuando el usuario no está imprimiendo, la misma definición
y la caché local pueden renderizarse como vistas nativas interactivas de UIKit y exploradores
de datos sin procesar: diseñar una vez, ver como papel o como interfaz nativa.
.rpt) en archivos .mad abiertosCrystal Reports (.rpt) y otros archivos de informes heredados similares siguen arraigados
en miles de empresas porque ningún motor abierto y portátil comparte su modelo de
secciones por bandas y grafo de consultas relacionales. Como MAD se construye sobre ese
mismo paradigma estructural —almacenando sus definiciones en un formato abierto y
documentado de SQLite dentro de tar—, convertir documentos .rpt heredados en
archivos .mad da a las organizaciones una ruta de migración directa desde las pilas
de generación de informes propietarias y heredadas.
Las partes costosas están construidas: definiciones portátiles, generación y análisis deterministas de SQL, un formato de materialización portátil (SQLite), cuatro drivers de base de datos y un motor que se ejecuta de forma nativa en iOS/macOS y sin interfaz gráfica en Linux.
Una promesa. Esta página registra la dirección; el diseño y la cola de tareas
viven en docs/project/, y nada de lo aquí descrito se distribuye hasta que está
diseñado, probado y documentado como todo lo demás del repositorio.
Esta página es una traducción al español del original en inglés; en caso de discrepancia, prevalece la versión original en inglés.