Skip to content

Drill-XXXX: Refactor User Interface#3037

Draft
cgivre wants to merge 157 commits into
apache:masterfrom
cgivre:feature/sqllab-react-ui
Draft

Drill-XXXX: Refactor User Interface#3037
cgivre wants to merge 157 commits into
apache:masterfrom
cgivre:feature/sqllab-react-ui

Conversation

@cgivre

@cgivre cgivre commented Feb 6, 2026

Copy link
Copy Markdown
Contributor

DRILL-XXXX: Refactor User Interface

Description

This PR refactors Drill's UI and refactors the Query view, adds visualizations and dashboards and in general makes Drill much more user friendly.

Screenshot 2026-02-06 at 10 36 16 Screenshot 2026-02-06 at 10 36 23 Screenshot 2026-02-06 at 10 36 30 Screenshot 2026-02-06 at 10 36 40

Documentation

(Please describe user-visible changes similar to what should appear in the Drill documentation.)

Testing

(Please describe how this PR has been tested.)

@cgivre cgivre self-assigned this Feb 6, 2026
@cgivre cgivre changed the title User Interface Improvements Drill-XXXX: Refactor User Interface Feb 6, 2026
@cgivre cgivre added enhancement PRs that add a new functionality to Drill doc-impacting PRs that affect the documentation ui PRs relating to the User Interface major-update labels Feb 6, 2026
@cgivre cgivre force-pushed the feature/sqllab-react-ui branch from 080ba0b to 36af30f Compare March 9, 2026 13:45
Comment thread exec/java-exec/src/main/resources/webapp/src/hooks/usePyodide.ts Fixed
Comment thread exec/java-exec/src/main/resources/webapp/src/hooks/usePyodide.ts Fixed
Comment thread exec/java-exec/src/main/resources/webapp/src/hooks/usePyodide.ts Fixed
Comment thread exec/java-exec/src/main/resources/webapp/src/hooks/usePyodide.ts Fixed
Comment thread exec/java-exec/src/main/resources/webapp/src/hooks/usePyodide.ts Fixed
Comment thread exec/java-exec/src/main/resources/webapp/src/hooks/usePyodide.ts Fixed
Comment thread exec/java-exec/src/main/resources/webapp/src/hooks/usePyodide.ts Fixed
Comment thread exec/java-exec/src/main/resources/webapp/src/hooks/usePyodide.ts Fixed
@cgivre cgivre force-pushed the feature/sqllab-react-ui branch 2 times, most recently from 33fb68e to 34bfc23 Compare March 25, 2026 13:50
@cgivre cgivre force-pushed the feature/sqllab-react-ui branch from 1b68007 to bc4e985 Compare June 16, 2026 14:20
@cgivre cgivre force-pushed the feature/sqllab-react-ui branch from facc35c to ff3d719 Compare June 24, 2026 03:47
cgivre and others added 23 commits June 25, 2026 13:38
…visualization

- Number Format control: Default, Comma separator, Compact (1K, 2.5M), Percentage
- Custom Label field: Add text label after metric (e.g., 'Users', 'Revenue')
- Sparkline Data Points limit: Reduce number of points shown for performance

The number formatter supports:
  - Default: Shows raw number
  - Comma: 1,234,567 format
  - Compact: 1.2M, 3.4K, etc.
  - Percentage: Converts to percentage format (45.3%)

When showing many data points, sparkline can be limited to sample data evenly,
improving rendering performance with large datasets.
…into expandable groups

- Added Currency option with 10 common currency symbols (USD, EUR, GBP, JPY, etc.)
- Reorganized metric visualization settings into three expandable Collapse groups:
  * 📊 Number Display: Format, Currency, Custom Label
  * 📈 Sparkline & Trend: Show options and data point limit
  * 🔤 Sorting: Sort direction (only shown when Order By is configured)

This makes the metric visualization configuration cleaner and more organized,
especially useful as more options are added in the future.
The Sort Direction control for metric visualization now appears in the main
configuration section right after the Order By field, making it easier to
discover and configure sorting together with the order by column selection.
Allow AI Q&A panels to see visualization data from all dashboard tabs, not just the current tab. Previously, when allPanels was filtered to visiblePanels (tab-filtered), AI panels could only access data from their own tab.
Add the SQL query and increase sample rows in dashboard data context. This allows the AI to understand the data structure and provide better answers by seeing the actual queries driving each visualization.
Add instruction to AI to provide concise 1-2 sentence answers focused on directly answering the question, appropriate for dashboard context.
…e queries

Clarify that AI should analyze the provided dashboard data directly and not suggest writing new queries or exploring the database. This prevents the AI from defaulting to generic query suggestions.
Backend changes:
- Strengthen dashboard Q&A system prompt to explicitly prohibit tool use and require direct answers using only provided data

Frontend changes:
- Make frontend instruction even more explicit
- Add clear button to chat history (appears when messages exist)
Schedules previously had no owner field and no ownership checks, so any
authenticated user could list, read, update, delete, run, and view
snapshots for every other user's scheduled queries. Scheduled queries
also ran as a hard-coded "anonymous" user, ignoring the owner's identity
under impersonation.

- Add an owner field to QueryScheduleModel, stamped on create and
  preserved across updates.
- Gate every per-id endpoint with an admin-or-owner check; filter the
  list endpoint to the caller's own schedules unless the caller is
  admin. Legacy schedules with a null owner are treated as admin-only.
- Run scheduled query execution (both the background loop and the
  manual "Run Now" trigger) under the schedule owner's identity by
  threading the owner through executeQueryWithTimeout and
  executePersistentQuery, and building the WebUserConnection with the
  owner's username. Falls back to "anonymous" only for legacy
  null-owner schedules.
The Spotlight rewrite widened the palette to search projects, saved queries,
visualizations, and dashboards — and updated the placeholder text accordingly.
The test still expected the old 'Search projects...' placeholder and didn't
mock the three new API modules, so the calls to getSavedQueries /
getVisualizations / getDashboards triggered real network requests in jsdom.

Updated the placeholder assertion to match the new copy (regex-based for
robustness to typographic punctuation) and added vi.mock entries for the
three additional API modules.
- Format button on the viz inline SQL editor (uses sqlglot via /api/v1/transpile/format)
- Add-to-dashboard modal on viz detail (existing or new dashboard)
- Warning glyph on dashboard panels whose query no longer returns columns the chart config references; reuses utils/vizColumnDeps
The schema tree was hidden as a tab next to Prospector in the right rail.
This wires up a generic LeftRail surface (collapsible, resizable, persisted
width) and registers a global Browse Data drawer that opens on ⌘B / from
the toolbar when a page hasn't claimed the left rail.

- AppChromeContext: new leftRail registration field + collapsed state
- LeftRail component mirrors RightInspector but anchored to the opposite edge,
  single-slot (no tabs)
- BrowseDataDrawer: ⌘B-reachable schema browser for non-SQL-Lab pages
- AppShell: ⌘B contextually toggles whichever surface fits
- Toolbar: new "Browse data" button next to the Inspector toggle
- Auto-collapse below 1100px; mobile-friendly overlay below 768px
SchemaExplorer gains an onOpenInNewTab callback. Double-clicking a table-,
file-, dir- or sheet-level node now generates a SELECT-statement (with the
columns enumerated when cached, * otherwise) and opens it in a fresh
editor tab named after the table.

- SQL Lab feeds the callback into the existing pendingQueryRef pattern so
  the new tab gets seeded as soon as it's active
- The global Browse Data drawer hands off via React Router state on /query;
  SqlLabPage picks it up on mount and clears the state so back/refresh
  doesn't replay
- Single-click and drag-to-insert behavior preserved
@cgivre cgivre force-pushed the feature/sqllab-react-ui branch from ff3d719 to dc96869 Compare June 25, 2026 17:38
cgivre and others added 6 commits June 25, 2026 16:48
This commit implements comprehensive support for internal/enterprise AI models
in corporate networks, enabling:

* Custom/proprietary API formats (EnterpriseProvider)
* Advanced authentication (custom headers, mTLS client certificates)
* Network configuration (HTTP proxy, custom CA certificates, configurable timeouts)
* Static request parameters sent with every API call
* Enhanced configuration management

Backend Changes (Java):
- LlmConfig: Extended with 25 new optional fields for enterprise configuration
  (network, SSL/TLS, authentication, custom API format)
- HttpClientFactory: Centralized HTTP client builder with support for:
  - Custom timeouts
  - HTTP/HTTPS proxy with authentication
  - SSL/TLS configuration (truststore for CA certificates, keystore for mTLS)
  - Custom header injection via interceptor
  - Debug logging with sensitive header redaction
- CustomHeadersInterceptor: OkHttp interceptor for custom headers
- SensitiveHeaderRedactor: Debug logging interceptor that redacts auth headers
- EnterpriseProvider: New provider for custom/proprietary API formats
  - Request templates with variable substitution
  - Response mapping using JSONPath
  - Full support for tool calls
- LlmProviderRegistry: Registered EnterpriseProvider
- OpenAiCompatibleProvider: Updated to use HttpClientFactory and inject
  additionalParameters into request body
- AnthropicProvider: Updated to use HttpClientFactory and inject
  additionalParameters into request body
- AiConfigResources: Extended REST API to handle new configuration fields
  - ConfigResponse now includes all fields (passwords redacted as boolean flags)
  - UpdateConfigRequest supports all new fields with partial updates
  - Enhanced testConfig to validate certificates and timeouts

Frontend Changes (TypeScript/React):
- types/ai.ts: Extended AiConfig and AiConfigUpdate interfaces with new fields
- ProspectorSettingsModal.tsx: Added collapsible configuration sections:
  - Additional Request Parameters (JSON)
  - Network Configuration (proxy, timeouts)
  - SSL/TLS Configuration (truststore, keystore, verification toggle)
  - Custom HTTP Headers (JSON)
  - Custom API Format (request template, response mapping - enterprise only)

Documentation:
- docs/dev/ai/ENTERPRISE_PROVIDERS.md: Comprehensive guide covering:
  - Quick start for different deployment scenarios
  - Detailed configuration options with examples
  - Network proxy setup with authentication
  - SSL/TLS configuration (custom CA, mTLS)
  - Custom API format templates and response mapping
  - Troubleshooting and security best practices
  - Real-world configuration examples

Security Features:
- Passwords never returned in GET responses (boolean flags only)
- Sensitive headers (Authorization, X-API-Key, etc.) redacted in debug logs
- Admin-only REST API endpoints
- SSL certificate verification enabled by default (with warning if disabled)
- Support for secure credential storage via PersistentStore encryption
- File path validation to prevent directory traversal

Backward Compatibility:
- All new fields are optional with sensible defaults
- Existing OpenAI/Anthropic configurations work without modification
- Default timeouts match previously hardcoded values (30s/120s/30s)
- Default SSL verification is enabled (true)

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
…ehensive unit tests

Phase 2 completes the network and SSL/TLS infrastructure for enterprise AI provider support:

Changes:
- Fix HttpClientFactory Proxy import (java.net.Proxy instead of okhttp3)
- Remove duplicate InetSocketAddress import
- Add MockWebServer test dependency to pom.xml
- Create comprehensive unit tests for HTTP client factory:
  * HttpClientFactoryTest.java: 20 tests covering timeouts, proxy config, SSL/TLS
  * CustomHeadersInterceptorTest.java: 9 tests for custom header injection
  * SensitiveHeaderRedactorTest.java: 10 tests for header redaction in logs
- Fix ProspectorSettingsModal.tsx TypeScript compilation errors:
  * Simplify JSON help text to avoid escape quote issues
  * Remove unused icon imports
- Fix test code InetSocketAddress casting for proxy address access
- Fix checkstyle violations: remove star imports, remove duplicate imports

All 39 unit tests pass. Build and checkstyle compliance verified.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
- Add enterprise configuration section to AI_FEATURES.md referencing ENTERPRISE_PROVIDERS.md
- Add See Also section to AI_FEATURES.md linking to related documentation
- Update CLAUDE.md to include ENTERPRISE_PROVIDERS.md in main documentation index
- Update docs/dev/DevDocs.md to reference enterprise providers guide

These updates direct users to the comprehensive enterprise provider documentation
for configuring internal/corporate AI models with proxy, SSL/TLS, custom headers,
and static request parameters.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Added assertTrue static import to both CustomHeadersInterceptorTest and
HttpClientFactoryTest that was accidentally removed during checkstyle fixes.

All 39 unit tests pass.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

doc-impacting PRs that affect the documentation enhancement PRs that add a new functionality to Drill major-update ui PRs relating to the User Interface

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants