Query Editor

The editor is Monaco with per-dialect language services wired to server-side execution. It is multi-tab, connection-scoped, and fully persisted per user, both the open tab set and unsaved buffer text survive reloads and IDE↔DevOps context switches.

Tabs & Connection Binding

Each tab is an independent document holding its own buffer, connection context, and last result set. New tab with Ctrl/Cmd+T or the tab-bar +; close with Ctrl/Cmd+W (the last tab is retained); cycle with Ctrl+Tab / Ctrl+Shift+Tab. Re-point a tab at a different connection via its connection dropdown, the language service re-targets to the new dialect immediately. A dirty indicator marks unsaved edits; the tab context menu offers Close / Close Others / Close All / Duplicate. Because tab state is persisted server-side per user, several parallel investigations can stay open indefinitely.

Language Intelligence

Highlighting and completion follow the active tab's connection dialect, not a generic SQL grammar, T-SQL constructs (TOP, OUTPUT, NOLOCK) versus Postgres constructs (ILIKE, RETURNING, ON CONFLICT) are tokenized correctly. Completion draws from live schema (tables/collections, columns resolved through FROM/JOIN context and in-query aliases) plus the connected engine's keyword and function set. Lightweight structural validation (unbalanced parens/quotes/commas) is inline; semantic validation is deferred to execution by design. Completion and validation are gated to engines with a SQL language service, non-SQL engines (MongoDB, Redis) run without completion.

Formatting

Ctrl/Cmd+Shift+F reformats the buffer dialect-aware, it pretty-prints per the connected engine's rules, indents to your configured tab width, and cases keywords per the Formatting setting (UPPER / lower / Preserve). Non-SQL engines are left untouched.

Execution Model

ActionShortcutSemantics
Execute bufferCtrl/Cmd+EnterSends the full buffer; semicolon-delimited multi-statement batches are executed in order.
Execute selectionCtrl/Cmd+Shift+EnterRuns only the highlighted region, one statement out of a larger buffer.
Preview (rolled-back)toolbarWraps an INSERT/UPDATE/DELETE in a transaction, reports the rows it would affect, then rolls back, blast-radius check with zero commit. Available on PostgreSQL, MySQL/MariaDB, and SQL Server.

Statements are forwarded through the proxy to the target engine over its pool; results stream back into the results panel. The optional client-side statement timeout stops the IDE from waiting past N seconds (the server-side statement may continue), and an optional row limit caps what is fetched into the grid, both under Query execution & safety in Settings, alongside the destructive-statement guard that hard-blocks DROP/TRUNCATE and unqualified DELETE/UPDATE.

Results

Row-returning statements render into a sortable, virtualized/paged grid, click a header to sort, drag borders to resize, click a truncated cell to expand its full value. NULLs render distinctly (configurable) so a real null never reads as an empty string; binary renders as hex. DML reports affected-row counts in Messages; DDL reports success or the full engine error. In a multi-statement batch, the grid shows the last row-returning result while each statement's messages accumulate. The footer reports wall-clock execution time, row count, and approximate bytes transferred.

EXPLAIN / Plan Analysis

On PostgreSQL, MySQL/MariaDB, SQL Server, Oracle, and SQLite, the Explain action (or an explicit EXPLAIN ANALYZE) renders the planner output node-by-node, scan/join/sort/aggregate operators with estimated-vs-actual rows, startup/total cost, actual time, and buffer accounting (shared hit/read/written) plus planning-vs-execution time where the engine reports them. Standard reads: sequential scans on large relations imply a missing index; wide estimate/actual divergence implies stale statistics; nested loops over large inputs argue for a join-column index; large sorts argue for an index aligned to the ORDER BY.

History & Saved Queries

Every execution is recorded, full SQL, target connection, timestamp, duration, row count, and success/failure, for re-execution, run-over-run timing comparison, or recovery of an unsaved statement. Ctrl/Cmd+S persists a named query. History and saved queries are held client-side and persist across sessions; tab state and buffers are persisted server-side per user.