Vista de alto nivel del motor, su flujo interno y las responsabilidades por módulo.


🧭 Visión general

gabysql está dividido en capas simples y explícitas:

🔄 Flujo principal

graph LR
    CLI["gabysql / gabysql-server"] --> PARSER["Parser SQL"]
    PARSER --> ENGINE["Engine"]
    ENGINE --> CATALOG["Catalog"]
    ENGINE --> TREE["Indice persistente"]
    CATALOG --> PAGER["Pager"]
    TREE --> PAGER
    PAGER --> WAL["WAL"]
    PAGER --> DB["Archivo .db"]
    WEB["phpgabyadmin"] --> API["HTTP JSON"]
    API --> ENGINE

🖥️ Flujo por CLI

  1. gabysql exec abre el Pager
  2. inicia transacción
  3. parse() divide y valida sentencias
  4. Engine ejecuta cada Statement
  5. si todo sale bien, commit() escribe WAL y aplica páginas
  6. si algo falla, hace rollback

🌐 Flujo por HTTP

  1. gabysql-server acepta la request
  2. valida token si existe
  3. abre la DB correspondiente
  4. protege escritura con mutex cuando corresponde
  5. ejecuta SQL o consulta catálogo/filas
  6. serializa JSON y responde

🧩 Componentes

src/storage.rs

Responsable de:

src/bptree.rs

B+Tree real con dos tipos de página:

Responsable de:

src/catalog.rs

Responsable de:

src/index.rs

Responsable de los índices secundarios:

src/sql.rs

Responsable de:

src/server.rs

Responsable de:

web/phpgabyadmin/index.php

Responsable de:


🧠 Decisiones actuales


⚖️ Trade-offs conscientes


📈 Camino de evolución

Las mejoras naturales siguientes son: