¿Qué es AngelSQL?
AngelSQL es un servidor web y motor de base de datos ultraligero e integrado, diseñado específicamente para acelerar el desarrollo de aplicaciones web y la programación moderna asistida por Inteligencia Artificial (IA).
Combina la rapidez de una base de datos relacional (impulsada internamente por SQLite) con la flexibilidad de almacenamiento dinámico de objetos JSON, y un servidor web HTTP/HTTPS autohospedado en un único ejecutable binario de 15MB.
Despliega base de datos, API Rest y servidor de archivos estáticos corriendo un solo proceso en tu máquina local o servidor en la nube sin requerir instalar IIS, Nginx o dependencias SQL complejas.
Componentes del Servidor
El servidor unificado de AngelSQL opera mediante cuatro subsistemas internos que se ejecutan simultáneamente:
1. Servidor Web HTTP / HTTPS
Monta un servidor Kestrel de alto rendimiento que sirve archivos estáticos colocados en wwwroot/. Mapea rutas dinámicas automáticamente y expone la API del servidor en el endpoint /AngelPOST.
2. Motor de Scripting (C# & Python)
Ejecuta lógica en caliente. Los scripts de backend se programan en C# (.csx) o Python y se ejecutan directamente en cada petición HTTP sin necesidad de detener, compilar ni volver a desplegar el servidor.
3. AngelProxy (Túnel SSH Inverso)
Permite la exposición instantánea a internet de tu servidor local. Configurando use_proxy=yes, tu máquina local abre un canal de túnel SSH seguro hacia la nube, exponiendo tu app en un subdominio público (ej. angelsql.net/--tu_cuenta/).
4. Motor de Base de Datos AngelDB
Procesa y orquesta peticiones de almacenamiento físico relacional y no relacional distribuidas en particiones dinámicas.
¿Qué es AngelDB?
AngelDB es el motor de base de datos híbrido y embebido de AngelSQL. Combina la potencia y transaccionalidad ACID de SQLite con la simplicidad de almacenamiento de objetos JSON nativos.
Estructura Multi-inquilino (Multi-tenancy)
AngelDB jerarquiza el acceso a datos en tres niveles de seguridad:
- MASTER: Control global. Administra cuentas y proxies del servidor.
- ACCOUNT_MASTER: Propietario de la cuenta del tenant. Administra bases de datos y usuarios.
- DATABASE_USER: Accesos limitados de lectura y escritura a nivel de tablas.
Almacenamiento y Directorios
Cada cuenta de cliente almacena sus bases de datos físicamente separadas en el sistema de archivos:
Data / {NombreCuenta} / {NombreBaseDatos} / tables.db
Manual de Operación de AngelDB (DSL)
Lista y sintaxis de comandos para administrar y consultar la base de datos.
El analizador de AngelDB procesa de forma secuencial de izquierda a derecha. Los parámetros de cualquier comando deben escribirse en el orden exacto en el que están programados, de lo contrario fallarán.
Integración C# Scripting (.csx)
AngelSQL permite interactuar directamente con AngelDB desde tu lógica C# en el backend. Todas las operaciones devuelven y reciben estructuras JSON de forma nativa.
A) Scripts ejecutados dentro de AngelSQL Server
Al ejecutar archivos .csx a través de endpoints HTTP del servidor o comandos de script internos:
- Ignorado de Cabecera: Todo el bloque de código entre
// GLOBALSy// END GLOBALS(incluyendo el#load "../Globals.csx") es ignorado en ejecución. Solo sirve para habilitar autocompletado y validación de tipos local en tu IDE sin marcar errores. - Inyección de Contexto: El servidor inyecta automáticamente los objetos de base de datos ya conectados:
db(base de datos del usuario/tenant) yserver_db(base de datos maestra del servidor).
// GLOBALS
// These lines of code go in each script
#load "../Globals.csx"
// END GLOBALS
using System;
// 'db' ya está inyectado y conectado automáticamente por el servidor
string queryResult = db.Prompt("SELECT Id, Name, Price FROM Products WHERE Price > 100");
Console.WriteLine(queryResult);
B) Aplicaciones externas vinculando la DLL (DB.dll)
Si estás conectándote desde una aplicación de consola externa importando el archivo binario DB.dll de forma aislada, debes crear la instancia y abrir la sesión manualmente:
using System;
// 1. Instanciar la clase de base de datos
AngelDB.DB db = new AngelDB.DB();
// 2. Conectar (respetando orden de parámetros en AngelDB)
string loginResult = db.Prompt("DB USER db PASSWORD db ACCOUNT mybusiness DATABASE pos DATA DIRECTORY ./data;");
if (loginResult == "Ok.") {
// 3. Ejecutar consultas
string queryResult = db.Prompt("SELECT Id, Name, Price FROM Products WHERE Price > 100");
Console.WriteLine(queryResult);
}