SQL Query Runner Page
Create an Angular page that provides an interactive SQL query interface using the existing SqlEngine.
Backend Endpoints Needed
POST /admin/sql/query — Execute a SQL query and return results
Body: { "sql": "SELECT * FROM default" }
Response: { "columns": [...], "data": [...], "affected": N }
POST /admin/sql/explain — Explain query plan (without executing)
Body: { "sql": "SELECT * FROM default" }
POST /admin/sql/validate — Validate SQL syntax (without executing)
UI Requirements
Query Editor
- Code Editor: Multi-line textarea with SQL syntax highlighting (CodeMirror or Monaco)
- Execute Button: Run query with keyboard shortcut (Ctrl+Enter)
- Explain Button: Show query plan without executing
- History: Dropdown of recent queries
- Templates: Quick insert templates (SELECT, INSERT, DELETE, etc.)
Results Display
- Table: Column headers + data rows
- Pagination: If many results, paginated view
- Export: Download results as CSV/JSON
- Row Count: Display total rows returned
- Execution Time: Display query duration
Error Display
- Error Message: Clear, formatted SQL error
- Line Highlight: Highlight error location if available
- Suggestions: Common fixes for known errors
Supported SQL Statements
SELECT * FROM <cf> — Scan all keys
SELECT * FROM <cf> WHERE key = '<k>' — Get specific key
INSERT INTO <cf> (key, value) VALUES ('k', 'v') — Insert/update
DELETE FROM <cf> WHERE key = '<k>' — Delete key
SELECT COUNT(*) FROM <cf> — Count keys
Component Structure
app/
pages/
sql-runner/
sql-runner.component.ts
sql-runner.component.html
sql-runner.component.scss
Acceptance Criteria
Parent Epic
#290
SQL Query Runner Page
Create an Angular page that provides an interactive SQL query interface using the existing
SqlEngine.Backend Endpoints Needed
UI Requirements
Query Editor
Results Display
Error Display
Supported SQL Statements
SELECT * FROM <cf>— Scan all keysSELECT * FROM <cf> WHERE key = '<k>'— Get specific keyINSERT INTO <cf> (key, value) VALUES ('k', 'v')— Insert/updateDELETE FROM <cf> WHERE key = '<k>'— Delete keySELECT COUNT(*) FROM <cf>— Count keysComponent Structure
Acceptance Criteria
Parent Epic
#290