Skip to content

refactor(workspace): unify SQL workspaces into GenericSqlWorkspace #1032

Description

@ZhuchkaTriplesix

Summary

Выделить единый обобщенный компонент GenericSqlWorkspace для устранения массового дублирования (~2800 строк) между PostgresSqlWorkspace, MysqlSqlWorkspace, SqliteSqlWorkspace и ExtensionSqlWorkspace.

Context

Все 4 реализации SQL-редакторов имеют на 80% идентичный код:

  • Управление сессиями и вкладками (SqlQueryTabSession, переключение вкладок, проверка несохраненных изменений UnsavedWorkGuard).
  • Разделитель экрана (VerticalSplitPane), селектор лимитов (SqlLimitSelector), таймаут запросов (SqlStatementTimeoutDropdown).
  • Шорткаты (Ctrl+Enter), форматирование SQL, сохранение и открытие .sql файлов.
  • Запись в историю запросов (LocalDb.instance.recordSqlQueryHistory) и диалог деструктивных операций (DestructiveQueryDialog).

Implementation Details

  1. Создать интерфейс стратегии выполнения:
abstract interface class SqlExecutionDelegate {
  Future<QueryResult> executeQuery(String sql, {int? limit, Duration? timeout});
  Future<String> explainQuery(String sql);
  Future<void> cancelQuery();
  bool get supportsTransactions;
}
  1. Реализовать GenericSqlWorkspace<TConnection> в lib/features/workspace/generic_sql_workspace.dart.
  2. Перевести PostgresSqlWorkspace, MysqlSqlWorkspace, SqliteSqlWorkspace и ExtensionSqlWorkspace на использование нового базового воркспейса.

Acceptance Criteria

  • Все 4 СУБД используют GenericSqlWorkspace без потери функционала.
  • Сокращено более 2000 строк дублирующегося кода.
  • Все существующие тесты на SQL-воркспейсы проходят успешно.

Activity

  1. added
    enhancementNew feature or request
    editorCode/SQL editor
    coreCore library logic and services
    P2Medium priority / Parity & Refactoring
    on Oct 4, 2026
  2. added a commit that references this issue on Oct 5, 2026
  3. ZhuchkaTriplesix commented on Oct 7, 2026

    @ZhuchkaTriplesix
    MemberAuthor

    Merged in #1080

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Medium priority / Parity & RefactoringcoreCore library logic and serviceseditorCode/SQL editorenhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions