Commit Graph
13 Commits
Author SHA1 Message Date
Lizandro GuarnizoandClaude Opus 5 93f5fdec7a fix(query-runner): "conx_db_id inválido" al correr un .sql, y el parser que se comía el script
Dos bugs encadenados. El segundo es mucho peor que el que se veía.

1. EL ERROR VISIBLE. RunBatchQuery leía conx_db_id del formulario y lo guardaba
   bien, y después lo pisaba con cero. El struct del body solo tenía etiquetas
   json, pero en multipart Fiber mapea por la etiqueta form: no encontraba
   conx_db_id, dejaba el campo en cero — y BodyParser NO devuelve error cuando
   no mapea nada, así que la rama se ejecutaba igual y sobreescribía el valor
   bueno. De ahí el "conx_db_id inválido" con la conexión bien elegida en
   pantalla. Reproducido con un test antes de tocar nada.

2. EL QUE NO SE VEÍA. El script se partía con split(';') y se descartaba todo
   trozo que empezara con "--". En un script documentado, donde cada sentencia
   va debajo de su encabezado en comentarios, eso se saltaba casi todo el
   archivo en silencio. Con el .sql que lo destapó: de 10 sentencias reales
   pasaban 3 — y una de esas tres era un fragmento corrupto, porque un punto y
   coma dentro de un comentario había partido una sentencia al medio. Se
   perdían los dos INSERT de alta y el ALTER TABLE, que era el único cambio
   estructural del script.

   Es decir: arreglar solo el bug 1 habría sido peor que dejarlo. El usuario
   habría leído "3 consultas ejecutadas" y se habría ido tranquilo con la
   migración a medio aplicar.

DividirSentenciasSQL parte respetando dónde el punto y coma no separa nada:
comentarios de línea (-- y #), de bloque, y cadenas con ' " ` incluyendo
escapes con barra y comillas duplicadas. Y en vez de descartar lo que empieza
con "--", pregunta si al trozo le queda SQL después de sacarle los comentarios
— un "--" adentro de una cadena ya no oculta la sentencia.

Mismo criterio en los dos lados: el front arma las sentencias y el backend
divide los archivos subidos, y las dos implementaciones dan las mismas 10 sobre
el archivo real.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-25 19:44:41 -05:00
Lizandro GD 21d8cd5260 Agrega diagrama de relaciones (FK) al Query Runner
- GetSchemaRelations: trae todas las llaves foráneas de la base con
  consulta específica por motor (Postgres/MySQL/MSSQL/SQLite). No
  aplica a Redis/Mongo (schemaless).
- Endpoint GET /query-runner/relations, con el mismo chequeo de
  autorización por conexión que ya usa RunQuery — de paso se lo
  agrego también a GetDatabases/GetTables, que no lo tenían.
- UI: botón "Ver relaciones" (diagrama completo) y un ícono por tabla
  en el árbol lateral (relaciones solo de esa tabla), renderizado con
  Mermaid.js servido localmente (public/js/mermaid.min.js, sin CDN).
2026-08-08 23:11:48 +00:00
Lizandro Guarnizo 1d7bfd3596 feat: multi-query/upload .sql en query runner + selector BD por rol 2026-07-30 09:19:24 -05:00
Lizandro Guarnizo c5603c51f8 up 2026-06-02 13:27:45 -05:00
Lizandro Guarnizo 28d0eae715 up 2026-06-02 13:13:29 -05:00
Lizandro Guarnizo ba76754331 up 2026-06-02 10:35:37 -05:00
Lizandro GuarnizoandCopilot 63d124215b feat(query-runner): soporte completo Redis
Backend:
- Agrega github.com/redis/go-redis/v9 como dependencia
- isRedisDriver() detecta 'redis' y 'valkey' en nombre del tipo de BD
- redisConnect(): abre cliente Redis con auth, host, port, db index
- redisTestConnection(): PING para probar conexión
- redisListDatabases(): lee CONFIG GET databases → devuelve db0..dbN
- redisListKeys(): SCAN iterativo, hasta 200 keys del db seleccionado
- redisExecuteCommand(): parsea comandos línea a línea, multi-comando
  devuelve tabla command/result/error; comando único devuelve QueryResult
  tipado (string, int64, []any para KEYS/SMEMBERS/LRANGE, HGETALL como
  field/value table)
- redisParseArgs(): tokenizador respetando comillas simples y dobles
- Todos los comandos se guardan en query_history

Frontend:
- isRedis: false estado y reset en onConxChange()
- Detecta redis/valkey en tipo_db.nombre
- Editor cambia label 'Redis CLI', placeholder con ejemplos Redis
- Sidebar: 'Keys' en lugar de 'Tablas' para Redis
- insertTable(): TYPE + TTL + GET para inspeccionar una key de Redis
- Panel de chips rojos: KEYS *, DBSIZE, INFO, CONFIG GET, CLIENT LIST, SLOWLOG
- Generador Redis: select de 24 comandos + formulario contextual
  (key, value, ttl, field según el comando elegido)
- generateRedisCmd(): genera el comando en el editor
- Badge MySQL no aparece cuando es Redis

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-20 21:07:33 -05:00
Lizandro GuarnizoandCopilot c126c15ead fix(query-runner): dialecto SQL correcto por tipo de BD en helpers DBA
- Detecta isPostgres desde tipo_db.nombre al cambiar conexión
- sqlHelpers: getter dinámico — chips distintos para PostgreSQL vs MySQL
  PostgreSQL: pg_database, information_schema, pg_stat_activity, pg_indexes
  MySQL: SHOW DATABASES/TABLES/USERS/PROCESSLIST/CREATE TABLE
- generateDbHelper: genera SQL correcto por dialecto
  PostgreSQL: sin backticks, sin charset, sin @host, DO$$ para CREATE USER IF NOT EXISTS,
              GRANT ALL ON DATABASE + SCHEMA + DEFAULT PRIVILEGES
  MySQL: backticks, utf8mb4, 'user'@'host', FLUSH PRIVILEGES
- Badge PostgreSQL/MySQL en header del generador DBA
- Campo Host oculto en conexiones PostgreSQL

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-20 20:30:20 -05:00
Lizandro GuarnizoandCopilot 34f2c3e582 feat(query-runner): helpers DBA para conexiones SQL
- Chips rápidos: SHOW DATABASES, SHOW TABLES, SHOW USERS, SHOW GRANTS,
  SHOW PROCESSLIST, SHOW CREATE TABLE, DESCRIBE, info_schema engine/charset
- Generador DBA (collapsible): form con BD, usuario, host y contraseña
  Operaciones: Setup completo | CREATE DATABASE | CREATE USER | GRANT ALL |
  REVOKE | SHOW GRANTS | DROP USER | DROP DATABASE
- Setup completo genera las 3 sentencias en bloque con comentarios
- Visible só

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-20 11:14:11 -05:00
Lizandro Guarnizo c29166f24e Update query_runner.html 2026-05-02 08:18:20 -05:00
Lizandro Guarnizo 560359173b up 2026-05-01 22:55:51 -05:00
Lizandro Guarnizo 52c3d7ebe2 Update query_runner.html 2026-05-01 17:13:25 -05:00
Lizandro Guarnizo 1731855df8 feat: Query Runner — editor SQL con historial, exportar CSV/JSON, árbol de tablas 2026-05-01 11:14:09 -05:00