Skip to content

enhancement(ui): add universal data export (CSV, JSON, Markdown, SQL dump) to ResultsTab #326

Description

@ZhuchkaTriplesix

Part of Epic #322

Описание задачи

Таблица вывода результатов выполнения запросов ResultsTab (lib/features/main_screen/results_tab.dart) используется всеми драйверами (PostgreSQL, MySQL, SQLite, MongoDB, Redis, а также внешними расширениями через ExtensionTableView / ExtensionSqlWorkspace).

Для обеспечения полноценного опыта работы с данными (согласно Единому UI-стандарту) необходимо добавить в ResultsTab универсальные инструменты экспорта данных из текущей выборки в буфер обмена или в файл на диске.

Зачем

  • Аналитики и разработчики часто копируют выборки из базы в Excel, Google Sheets, документацию (Markdown) или в тестовые скрипты (INSERT INTO ...).
  • Стандартизация экспорта на уровне единого компонента ResultsTab мгновенно даёт эту возможность всем базам данных без дублирования кода в каждом драйвере.

Предлагаемое UX

  1. Контекстное меню (по правому клику на строки таблицы) и/или Иконка экспорта (download_rounded) в шапке/футере ResultsTab:
    • Copy as CSV / Export to .csv file (с настраиваемым разделителем — запятая или точка с запятой).
    • Copy as JSON / Export to .json file (массив объектов [{"col1": "val1", ...}]).
    • Copy as Markdown Table (форматированная таблица | col1 | col2 |\n|---|---| для вставки в Obsidian / GitHub PR).
    • Copy as SQL INSERT Dump (генерация выражений INSERT INTO table_name (c1, c2) VALUES ('v1', 'v2');).
  2. При копировании более 10 000 строк показывать фоновый прогресс или предупреждение.

Технические требования

  • Добавить утилитарный класс/сервис DataExportService в lib/core/ или lib/shared/ с чистыми функциями форматирования (CSV, JSON, Markdown, SQL Dump).
  • Интегрировать меню экспорта в ResultsTab (lib/features/main_screen/results_tab.dart).
  • Подключить file_selector (saveFile) для сохранения на диск и Clipboard.setData() для буфера обмена.
  • Написать юнит-тесты на корректное экранирование спецсимволов (", \n, ') при форматировании в CSV и SQL.

Место в коде (ориентир)

  • lib/features/main_screen/results_tab.dart
  • lib/shared/services/data_export_service.dart (новый)
  • test/shared/data_export_service_test.dart (новый)

Acceptance Criteria

  • В ResultsTab доступно меню экспорта текущей выборки.
  • Экспорт в CSV, JSON, Markdown Table и SQL Dump корректно обрабатывает экранирование строк, NULL-значения и числа.
  • Копирование в буфер обмена и сохранение в файл работают без зависания UI.
  • Покрыто юнит-тестами.

Scope

  • Scope: desktop
  • Component: UI / ResultsTab / Export
  • Kind: enhancement

Metadata

Metadata

Labels

editorCode/SQL editorenhancementNew feature or requestuiUser interface components and widgets

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions