* feat(mq): implement Apache Pulsar message queue admin
- Add complete MQ admin adapter layer with version detection
* Pulsar adapter with multi-version API support
* OAuth2 token caching and authentication
* JWT token signing for Pulsar clients
* Transport layer (SSH/Proxy) integration
- Implement comprehensive admin operations
* Tenant, namespace, topic management
* Subscription and consumer/producer monitoring
* Rate limits, backlog quotas, retention policies
* Permissions and role-based access control
* Raw admin API for advanced operations
- Add desktop UI components
* MQ admin console with tabbed interface
* Tenant, namespace, topic panels
* Subscription management and cursor operations
* Monitoring panel with stats visualization
* Policy configuration UI
- Add web routes for MQ admin operations
- Add secret store support for MQ auth credentials
- Add comprehensive test coverage
* fix: del local test files
* fix(mq): mark message queue as unsupported mcpMode in driver manifest
MQ admin connections do not use the MCP query bridge - they use a
separate REST admin API. Mark mcpMode as 'unsupported' to align with
the test expectations and reflect the actual architecture.
Fixes CI test: driver-manifest.test.ts
* fix(mq): fix TypeScript errors in MQ components
- Fix typo in SubscriptionsPanel.vue: messagformatError(e)Id -> message.messageId
- Use formatError() helper in RawApiPanel.vue instead of accessing e?.message
- Fix undefined 'tab' reference in ConnectionTree.vue: use config.db_type instead
Fixes frontend CI TypeScript check errors.
* fix(mcp): add 'mq' to MCP server connection type description
The MCP server's connection type description must include all database
types from the driver manifest. Add 'mq' to the list to fix the test:
'add connection database type description includes every manifest database type'
Fixes: packages/mcp-server/tests/driver-manifest.test.ts
* fix(mq): add missing ConnectionConfig fields for Rust compilation
- Add gbase_server and keepalive_interval_secs fields to all ConnectionConfig
test constructors in mq/config.rs, mq/service.rs, and storage.rs
- Import uses_bare_mysql_pool in connection.rs tests module
Fixes compilation errors from upstream ConnectionConfig changes.
* chore(ui): simplify Pulsar icon to logo-only version
Remove text from Pulsar icon (127x30 -> 35x30), keeping only
the wave logo symbol for a cleaner, more consistent appearance
with other database icons.
* fix(mq): return removed pools from drain_connection_pools
---------
Co-authored-by: t8y2 <1156263951@qq.com>
* docs: design query result run tabs
* feat(query): add result run model helpers
* feat(query): persist result run metadata
* feat(query): record switchable result runs
* feat(query): sync active result run state
* feat(query): cache result run payloads
* feat(query): render result run tabs
* docs: design query result archives
* feat(query): add result archive codec
* feat(query): restore result archives
* feat(query): add result archive actions
* fix(query): toggle execution summary view
* fix(query): avoid archive compression backpressure
* feat(query): remove result runs
* chore: remove local spec docs from pr
Thanks @SuLea-IT for the contribution! This significantly reduces memory usage (53% lower RSS peak) by avoiding per-row HashMap materialization and cloning. Appreciate the detailed memory audit docs as well.
* feat(elasticsearch): translate SELECT * WHERE to ES DSL in-process
`SELECT *` with clauses our hand-written parser doesn't cover (WHERE, IN, BETWEEN, LIKE, IS NULL, ...) is now parsed with sqlparser-rs and translated to a /_search body locally — we no longer hand it off to ES's _sql endpoint.
Why: _sql refuses several common shapes — LIKE on a text field with no .keyword sub-field (the typical filebeat / log-shipper mapping), and SELECT * over docs containing an array field like host.ip. Both translate cleanly to raw DSL. Going through _sql/translate doesn't help either — that lives in the same ES SQL engine and inherits the same restrictions.
Translation:
- field = 'v' → term
- field LIKE 'prefix%' → prefix (optimised)
- field LIKE '%x%' → wildcard, case_insensitive
- field IN ('a','b') → terms
- field BETWEEN a AND b → range gte/lte
- field >/<>=/<= → range
- field IS NULL / IS NOT NULL → bool.must_not.exists / exists
- A AND B AND C → flattened bool.must
- A OR B → bool.should, minimum_should_match: 1
- NOT A → bool.must_not
- ORDER BY f ASC|DESC → sort
- LIMIT N OFFSET M → size / from
SQL LIKE patterns: % → *, _ → ?, backslash escapes preserved, user-written * / ? in patterns escaped back to literals.
Input runs through the existing adapt_elasticsearch_sql_query first so hyphenated indices (filebeat-7.17.1-…) and @timestamp-style identifiers reach sqlparser as double-quoted identifiers.
Also: 0-hit _search bodies now surface as an empty grid (with an _id column placeholder) instead of falling back to the raw status/response JSON view — `.filter(|h| !h.is_empty())` was masking the empty-result case.
Adds docs/screenshot-es-sql-where.png demonstrating SELECT * with WHERE log.offset = N on a long field — would 400 through _sql, works through the in-process translator.
Follows up on #874.
* chore(test): fill ConnectionConfig::idle_timeout_secs in test fixtures
After the new pub idle_timeout_secs: u64 field was added to ConnectionConfig, 11 #[cfg(test)] / tests fixture constructors still built the struct without it, so `cargo test --workspace --locked` and `cargo clippy --all-targets` would fail with E0063 against the test profile. `cargo check` alone passed because the lib path doesn't compile tests.
Filled in with default_idle_timeout_secs() (matches the field's own #[serde(default = …)]) so future bumps to the default flow through automatically.
---------
Co-authored-by: t8y2 <1156263951@qq.com>
- Route SELECT * FROM <index> through /_search for simple browses; aggregates/projections stay on /_sql
- Drive completion columns from /_mapping (flattened dotted fields, multi-fields)
- Switch editor completion to SQL when the active statement starts with SELECT/WITH on ES
- Skip generic SQL semantic diagnostics for ES (hyphenated wildcard indices caused 500s)
- Wire ES into server-side pagination plan; derive completion context from line blocks
- Fix result-grid pagination exceeding in-memory result sets (allRowsLoaded)
Add per-page metadata, Open Graph / Twitter tags, canonical URLs,
hreflang, sitemap generation, robots.txt, and JSON-LD structured data
for the bilingual (en/cn) documentation site.