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

Filosofía Core: "Todo en Uno"

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.

¡REGLA CRÍTICA DE ORDEN DE PARÁMETROS!

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 // GLOBALS y // 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) y server_db (base de datos maestra del servidor).
C# (.csx) - Script Interno
// 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:

C# - Aplicación Externa
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);
}