WDO — Web Database Objects¶
WDO es la capa de acceso a datos de HIX. Su nombre completo es Wrapped Data Objects: envuelve los drivers de base de datos nativos (librerías C) y expone una API Harbour coherente, thread-safe y lista para producción.
Por qué existe WDO¶
En un servidor web multihilo como HIX, cada petición HTTP corre en su propio hilo. Sin WDO, la forma "natural" de conectarse a la base de datos sería abrir y cerrar una conexión TCP por petición. Esto funciona en desarrollo, pero bajo carga real colapsa en minutos:
- Cada
connect()deja el socket en estado TIME_WAIT durante 60–240 segundos. - El sistema operativo tiene un rango limitado de puertos efímeros (~16.000 en Windows).
- Tras unos miles de peticiones rápidas, el SO ya no puede asignar más puertos → error 10048 /
WSAEADDRINUSE.
WDO resuelve esto con un pool de conexiones: abre N sockets al arrancar la app, los mantiene vivos y los presta a los hilos que los necesitan. Cada "cierre" devuelve la conexión al pool, nunca al sistema operativo.
Este problema no es exclusivo de Harbour. PHP, Node.js, Python y Java todos usan pooling por exactamente la misma razón.
Drivers disponibles¶
| Driver | Estado | Clave JSON |
|---|---|---|
| MySQL / MariaDB | Production-ready | "driver": "mysql" o "driver": "mariadb" |
| PostgreSQL | Reservado | — |
| SQLite | Reservado | — |
| MSSQL | Reservado | — |
Estructura de ficheros fuente¶
src/wdo/
wdo_pool.prg Pool genérico thread-safe
wdo_config.prg Bootstrap declarativo desde config.json
wdo.prg Registro global y helpers U*
mysql/
wdo_mysql.prg Driver MySQL/MariaDB (New/Open/Query/Close)
wdo_mysql_pool.prg Factory del pool MySQL
wdo_mysql_stmt.prg Prepared statements — Alt B (texto)
wdo_mysql_stmt_bin.prg Prepared statements — Alt A (binario nativo)
include/
wdo_mysql_bind.ch Constantes de tipos para Alt A
Primeros pasos¶
Si es tu primera vez con WDO, empieza aquí:
- MySQL — Concepto y Pool — entiende el modelo antes de escribir código.
- Configuración — cómo declarar el pool en
config.json. - Uso del pool — cómo usar
WDO_Geten tus handlers.