DDL completo
CREATE TABLE con PK, NOT NULL, UNIQUE, DEFAULT, REFERENCES con ON DELETE RESTRICT/CASCADE. ALTER TABLE ADD COLUMN. CREATE [UNIQUE] INDEX. TRUNCATE.
Motor SQL clásico escrito desde cero en Rust. WAL + B+Tree real + CRC32 por página.
Single-file portable (.db + .wal). Sin C en el core,
sin servidor obligatorio, sin dependencias runtime. SAVEPOINT,
cross-request tx HTTP, planner cost-based con stats persistidas,
y 500M+ queries random de fuzz limpio sobre el parser.
iwr https://raw.githubusercontent.com/vladimiracunadev-create/gabysql/main/scripts/install.ps1 | iex
PowerShell · sin admin · agrega al PATH del usuario · verifica SHA256.
-- Bloques cerrados: E/F/T/J/G/H/I/K/L/V/W/X/Y/Z/P + R/M (sesiones 06-15)
CREATE TABLE ventas (
id INT PRIMARY KEY,
region TEXT NOT NULL,
monto INT,
fecha DATE
);
OK
BEGIN;
INSERT INTO ventas (id, region, monto, fecha) VALUES
(1, 'norte', 100, '2026-01-15'),
(2, 'sur', 250, '2026-01-20'),
(3, 'sur', 180, '2026-02-03')
ON CONFLICT (id) DO UPDATE SET monto = 0
RETURNING id, region;
OK (3 filas insertadas)
┌────┬────────┐
│ id │ region │
├────┼────────┤
│ 1 │ norte │
│ 2 │ sur │
│ 3 │ sur │
└────┴────────┘
SAVEPOINT antes_de_ajuste;
UPDATE ventas SET monto = monto + 50 WHERE region = 'sur';
OK (2 filas actualizadas)
ROLLBACK TO SAVEPOINT antes_de_ajuste; -- M12 (ANSI SQL:2003)
OK
SELECT region, SUM(monto) AS total
FROM ventas
WHERE monto IS NOT NULL AND region LIKE '%r%'
GROUP BY region
HAVING SUM(monto) > 100;
┌────────┬───────┐
│ region │ total │
├────────┼───────┤
│ sur │ 430 │
└────────┴───────┘
COMMIT;
OK
Superficie SQL relacional clásica completa. Pensada para OLTP, scripts y embebidos — no para OLAP ni analytics distribuido.
CREATE TABLE con PK, NOT NULL, UNIQUE, DEFAULT, REFERENCES con ON DELETE RESTRICT/CASCADE. ALTER TABLE ADD COLUMN. CREATE [UNIQUE] INDEX. TRUNCATE.
Multi-row INSERT, INSERT...SELECT, UPSERT (ON CONFLICT DO NOTHING/UPDATE), REPLACE INTO, RETURNING *. UPDATE/DELETE con WHERE completo, multi-fila, por subquery.
Todos los operadores: =, <, >, <=, >=, <>, BETWEEN, LIKE con escape, IS NULL, IN, EXISTS. Combinaciones con AND/OR/NOT + paréntesis. 3VL ANSI.
INNER, LEFT, RIGHT, FULL, CROSS, USING, NATURAL, multi-tabla, self-join. Index-loop optimization transparente para INNER/LEFT contra PK/índice del right.
COUNT(*), COUNT(DISTINCT col), SUM, AVG, MIN, MAX. GROUP BY multi-columna, HAVING con agregados directos o por alias, SELECT DISTINCT. Reporting básico cubierto.
BEGIN / COMMIT / ROLLBACK explícitos + SAVEPOINT / ROLLBACK TO SAVEPOINT / RELEASE (ANSI). WAL con CRC32 por página + replay completo en cada arranque. Backup/restore/verify con checksum end-to-end via CLI. Sessions cross-request en server HTTP — ORMs pueden hacer BEGIN/INSERT/INSERT/COMMIT a través de N requests.
Stats persistidas en catálogo (ANALYZE TABLE): row count, NDV vía HyperLogLog, MCV top-K, histograma equi-depth. Cost-based skip-index calibrado contra bench real (10% break-even). EXPLAIN anota algoritmo de JOIN (index-loop / hash / nested) y EXPLAIN ANALYZE compara estimación vs realidad con clasificación de bias.
DECIMAL(p,s) exacto i128, BLOB, UUID, TIME, DATETIME, VARCHAR(n) con enforcement, INT widths (TINYINT/SMALLINT/BIGINT) y UNSIGNED. Aritmética exacta sobre DECIMAL.
WITH / WITH RECURSIVE (fixpoint hasta 10K iters), ROW_NUMBER / RANK / DENSE_RANK / LAG / LEAD / FIRST_VALUE / LAST_VALUE + SUM/AVG/MIN/MAX/COUNT OVER (PARTITION BY ... ORDER BY ...) en O(n) por partition.
CREATE TRIGGER BEFORE/AFTER INSERT/UPDATE/DELETE con bodies multi-statement. CREATE PROCEDURE + CALL. CREATE FUNCTION escalar invocable en SELECT/WHERE. PL/pgSQL completo: IF/CASE/WHILE/FOR/LOOP/DECLARE/RAISE/EXCEPTION/RETURN.
CREATE USER con PBKDF2/scrypt/Blake2b, GRANT/REVOKE, SET SESSION AUTHORIZATION. Row-Level Security: CREATE POLICY con USING + WITH CHECK. RETURNING filtrado contra policies SELECT. Audit log con razón semántica.
gabysql exec mi.db "SELECT ...;"gabysql-server -db mi.db -addr :8080use gabysql::{sql, storage};docker compose up -dgabymodeler.msi · doble-click un .gby
Empaquetado con Tauri 1.6 + WebView2 + gabysql-server como sidecar local.
Bundle 10-15 MB. Cero setup: sin Docker, sin PHP, sin Python externo.
Doble-click un archivo .gby y la app abre el modelo.
Entidades + FK Bezier · tipos extendidos (DECIMAL/BLOB/UUID/VARCHAR/INT widths/UNSIGNED) · CHECK inline · composite PK/UNIQUE/INDEX · Views · RLS Policies (USING+CHECK) · Triggers · Procedures · Functions · Users · Roles · Grants. 1:1 con motor VERSION 33.
Zoom-to-cursor (Ctrl+Wheel) · pan middle-click/Alt · fit-all · minimap navegable · multi-selección con lasso · drag-to-create FK (arrastrá del flag FK al PK target) · atajos +/-/0/F.
History stack 50 entries. Ctrl+Z, Ctrl+Y, Ctrl+A (select all), Ctrl+D (duplicate), Delete, Ctrl+F (búsqueda global tipo VSCode command palette).
Formato wrapper {format, version, state} persistente. Export SVG standalone (editable en Figma) + Export PNG 2x para retina. Asociación .gby registrada por el instalador.
Comparás el modelo actual contra un snapshot anterior (.gby o pegado) y obtenés los CREATE/ALTER/DROP exactos para llegar de uno al otro. Granular por column/check/view/policy/grant/routine.
Algoritmo Fruchterman-Reingold acomoda N tablas con sus FK automáticamente. Reverse engineering: apuntás a un gabysql-server y trae todo el catálogo (tablas + views + policies + triggers + procs + funcs + users + roles + grants).
⬇ Descargar gabymodeler 0.1.0 para Windows
· sin admin · sin signing aún (SmartScreen pide confirmación 1 vez) · workspace en %APPDATA%.
GROUP BY + agregados, JOINs, window functions, CTEs.DECIMAL(p,s) exacto (i128, sin lossy float).UPDATE ... FROM, EXCLUDED.col en UPSERT, multi-col ORDER BY.Gramática EBNF + railroad diagrams + ejemplos por cláusula. La fuente de verdad de qué entiende el motor.
Catálogo [GBY-NNNN] con causa y remediación. Cada error que el motor puede emitir, documentado.
Inventario exhaustivo de lo que falta del SQL clásico, con prioridades P0–P3 y secuencia de bloques.
Diseño interno: storage, B+Tree, catálogo, executor. Para quien quiera modificar o entender el motor.
Formato en disco (VERSION 33), subset SQL soportado exacto, características operacionales.
Historia de cambios por release. Cada bloque cerrado con fecha, alcance y limitaciones residuales.