Part of Epic #322
Описание задачи
В рамках приведения всех драйверов и плагинов к Единому UI-стандарту (Universal UI Standard) необходимо расширить JSON-RPC протокол взаимодействия хоста с внешними расширениями (database_driver).
Сейчас ExtensionDriverSession (lib/core/extensions/extension_driver_session.dart) поддерживает только базовые методы (db.connect, db.disconnect, db.query, db.getSchemaTree, db.expandTreeNode). Из-за этого расширения не могут отображать живую статистику сервера, отдавать DDL структуры таблиц/функций и прерывать зависшие запросы.
Зачем
- Отображение вкладки Overview / Server Stats для внешних БД (ClickHouse, DuckDB, Snowflake).
- Поддержка кнопок DDL / Structure во вьюере таблиц и открытие процедур в
RoutineView.
- Возможность отмены (
Cancel / Stop) тяжёлых аналитических запросов из UI.
- Определение транзакционных возможностей драйвера (чтобы показывать или скрывать кнопки
Begin/Commit/Rollback).
Предлагаемые новые RPC-методы (Block D)
db.getCapabilities → возвращает флаги возможностей движка:
{
"supportsTransactions": false,
"supportsCancel": true,
"supportsDDLInspection": true,
"supportsPrivileges": false,
"hasServerStats": true
}
db.getServerStats → возвращает стандартизированный набор метрик (версия, аптайм, активные сессии, метрики памяти/диска) для рендеринга в ExtensionStatsView.
db.getObjectDDL (или db.getObjectMetadata) → принимает {"connectionId": 123, "nodeId": "...", "nodeType": "table"|"routine"|"view"} и возвращает DDL-скрипт (CREATE TABLE/VIEW/FUNCTION ...) и список колонок/параметров.
db.cancelQuery → принимает {"connectionId": 123, "queryId": "..."} для немедленного прерывания выполняемого запроса (аналог PostgresService.interrupt).
Технические требования
Место в коде (ориентир)
lib/core/extensions/extension_driver_session.dart
lib/core/extensions/rpc/plugin_rpc_bridge.dart
- Документация протокола:
docs/architecture.md / obsidian/Querya/Querya/04 — Расширения/Блок D — External Plugin.md
Acceptance Criteria
Scope
- Scope:
desktop / plugin
- Component:
Extensions / RPC Bridge / Marketplace
- Kind:
enhancement
Описание задачи
В рамках приведения всех драйверов и плагинов к Единому UI-стандарту (Universal UI Standard) необходимо расширить JSON-RPC протокол взаимодействия хоста с внешними расширениями (
database_driver).Сейчас
ExtensionDriverSession(lib/core/extensions/extension_driver_session.dart) поддерживает только базовые методы (db.connect,db.disconnect,db.query,db.getSchemaTree,db.expandTreeNode). Из-за этого расширения не могут отображать живую статистику сервера, отдавать DDL структуры таблиц/функций и прерывать зависшие запросы.Зачем
RoutineView.Cancel / Stop) тяжёлых аналитических запросов из UI.Begin/Commit/Rollback).Предлагаемые новые RPC-методы (Block D)
db.getCapabilities→ возвращает флаги возможностей движка:{ "supportsTransactions": false, "supportsCancel": true, "supportsDDLInspection": true, "supportsPrivileges": false, "hasServerStats": true }db.getServerStats→ возвращает стандартизированный набор метрик (версия, аптайм, активные сессии, метрики памяти/диска) для рендеринга вExtensionStatsView.db.getObjectDDL(илиdb.getObjectMetadata) → принимает{"connectionId": 123, "nodeId": "...", "nodeType": "table"|"routine"|"view"}и возвращает DDL-скрипт (CREATE TABLE/VIEW/FUNCTION ...) и список колонок/параметров.db.cancelQuery→ принимает{"connectionId": 123, "queryId": "..."}для немедленного прерывания выполняемого запроса (аналогPostgresService.interrupt).Технические требования
ExtensionDriverSession(getCapabilities,getServerStats,getObjectDDL,cancelQuery).lib/core/extensions/models/.PluginRpcBridgeдля проверки вызовов новых методов.Место в коде (ориентир)
lib/core/extensions/extension_driver_session.dartlib/core/extensions/rpc/plugin_rpc_bridge.dartdocs/architecture.md/obsidian/Querya/Querya/04 — Расширения/Блок D — External Plugin.mdAcceptance Criteria
ExtensionDriverSessionкорректно отправляет запросыdb.getCapabilities,db.getServerStats,db.getObjectDDL,db.cancelQueryчерезPluginRpcBridge.Scope
desktop/pluginExtensions / RPC Bridge / Marketplaceenhancement