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