FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [View Raw Code]   [Original HTTPS Page]

Querya-Desktop/docs/tz-block-d-external-plugin.md at 0.4.11-a · QueryaHub/Querya-Desktop · GitHub

Latest commit

 

History

History
55 lines (41 loc) · 4.01 KB

File metadata and controls

55 lines (41 loc) · 4.01 KB

ТЗ Блок D: External Plugin Process (Внешний Плагин)

1. Введение и Зона Ответственности

External Plugin Process (Блок D) — это независимый исполняемый бинарный файл (или скрипт, обернутый в стартер). Он пишется разработчиком расширения и не зависит от фреймворка Flutter. В контексте баз данных этот процесс играет роль "Прокси-Драйвера".

Основные задачи:

  1. Поднятие сервера JSON-RPC поверх стандартных потоков (stdin/stdout).
  2. Реализация сетевого протокола конкретной БД (TCP, HTTP, gRPC).
  3. Маппинг данных (преобразование сырых ответов БД в стандартный формат Querya).
  4. Отдача UI-схем (SDUI) по запросу.

2. Архитектура Плагина-Драйвера (На примере Dart)

Плагин, написанный на Dart, использует ту же библиотеку json_rpc_2, но выступает в роли Сервера (json_rpc_2.Server), а не Клиента.

Жизненный цикл обработки запроса:

  1. Чтение команды с stdin (например, {"jsonrpc": "2.0", "method": "db.executeSql", "params": {"query": "SELECT * FROM users"}, "id": 1}).
  2. Выполнение запроса через родной драйвер БД (например, пакет clickhouse_client или mongo_dart).
  3. Запись стандартизованного ответа в stdout. Обязательно исключать любой "мусорный" вывод в stdout (вроде логов print), так как он сломает парсер JSON-RPC на стороне хоста. Все логи (Debug info) должны отправляться либо в stderr, либо специальными RPC-событиями (window/logMessage).

3. Стандартизация Данных (Data Mapping)

Поскольку Querya Desktop (Блок A) ничего не знает о специфичных типах данных баз (например, DateTime64 из ClickHouse или ObjectId из MongoDB), плагин обязан приводить все типы к общему знаменателю (Standard JSON Types).

Требования к возвращаемому результату для таблиц:

{
  "columns": [
    { "name": "id", "type": "integer", "is_primary": true },
    { "name": "created_at", "type": "datetime" },
    { "name": "metadata", "type": "json" }
  ],
  "rows": [
    [ 1, "2026-06-18T05:30:00Z", "{\"key\": \"value\"}" ],
    [ 2, "2026-06-18T05:31:00Z", null ]
  ]
}
  • Даты: Должны отдаваться в стандарте ISO 8601 (строки).
  • Сложные типы (Arrays, Tuples): Сериализуются в массивы или JSON-строки, чтобы Flutter мог безопасно их отрендерить в ячейках таблицы.
  • Бинарные данные (BLOB): Отдаются в формате Base64 строки.

4. Предоставление Extension Points (Схемы UI)

Плагин обязан отвечать на запросы ядра о своих интерфейсах.

  • Метод extension.getConnectionForm: Возвращает JSON с описанием полей (host, port, user, etc.).
  • Метод extension.getTreeSchema: Возвращает первичную структуру бокового меню (например, корневые папки "Databases" и "Users").

Разделение логики: Ядро занимается пикселями и дизайном, Плагин — логикой и структурами данных.


Back | FazBrowse Home | New Git URL