Skip to content

fix(sql): SQL-grid Save parity with Table Browser (schema error, rowid, columnMeta) (#868) - #978

Merged
ZhuchkaTriplesix merged 1 commit into
devfrom
issue/868-sql-grid-save-parity
Sep 25, 2026
Merged

ZhuchkaTriplesix merged 1 commit into
devfrom
issue/868-sql-grid-save-parity

Conversation

@ZhuchkaTriplesix

Copy link
Copy Markdown
Member

Описание изменений

Результат SQL-запроса (SQL workspace) по-прежнему отставал от Table Browser в трёх местах. Общий код вынесен в SqlResultGridSchema (sql_result_grid_schema.dart), строится из уже существующего loadTableViewSchema, и подключён в PostgreSQL, MySQL и SQLite workspace.

  1. Ошибка схемы. Раньше getTableSchema в catch (_) превращалась в «нет PK»: Save тихо выключался, а статус выглядел как у здорового грида. Теперь к статусной строке добавляется Cannot edit: schema unavailable. <ошибка>. Run the query again to retry.
  2. SQLite без объявленного PK. Таблица без PRIMARY KEY получает ключ rowid (как в Table Browser, sqliteTableBrowserPrimaryKeys). SQL-запрос не переписывается: Save включается, если в SELECT явно есть rowid (SELECT rowid, * FROM t); без него в статусе подсказка To edit rows, include rowid in the SELECT…. Для view rowid не подставляется (тип определяется по sqlite_master). Это второй вариант из issue («документировать необходимость rowid в SELECT»), а не автоматическая подстановка в SQL.
  3. columnMeta. Метаданные колонок сохраняются в сессии (resultGridColumnMeta) и передаются в generateMutationPlan, так что пустые generated / default / nullable колонки в INSERT пропускаются, как в Table Browser.

Тесты

sql_result_grid_schema_test (10 новых): перенос PK, типов и meta, отчёт об ошибке вместо «нет PK», rowid-fallback и подсказка, приоритет объявленного PK, и на реальной SQLite: SELECT rowid, * сохраняется и меняет ровно одну из двух одинаковых строк, SELECT * остаётся read-only с подсказкой, meta позволяет INSERT пропустить пустой id. Прогнал test/features/workspace (весь каталог), test/features/sql_workspaces и test/core/database, проходят.

Не входит

  • Execute, теряющий грязные правки (отдельный issue, уже закрыт fix(sql): do not discard dirty result-grid edits on Execute #932).
  • Автоматическая подстановка rowid в пользовательский SQL.
  • Виджет-тесты самих workspace: они создают живые пулы соединений, поэтому логика покрыта на уровне хелпера и реальной SQLite. Для PostgreSQL и MySQL интеграцию через workspace не проверял (нет сервера).

Связанные Issue

Closes #868

…d, columnMeta) (Closes #868)

The SQL result grid still lagged Table Browser in three ways:

- getTableSchema failures were swallowed into 'no primary key': Save silently
  stayed off and the status looked like a healthy grid.
- SQLite tables without a declared primary key could not be saved from a SELECT.
- generateMutationPlan received column types but not column meta, so blank
  generated / default INSERT columns were not omitted.

Add SqlResultGridSchema (built from loadTableViewSchema) and use it in the
PostgreSQL, MySQL and SQLite SQL workspaces: a schema failure is appended to the
status line, SQLite falls back to implicit rowid when the SELECT includes rowid
(views are excluded) with a hint when it does not, and column meta is stored on
the session and passed into the mutation plan.
@github-actions github-actions Bot added bug Something isn't working error-handling Theme parser epic label: error-handling sqlite SQLite database driver and workspace data-grid Interactive data grid, cell editor, filtering, groupings labels Sep 25, 2026
@github-actions github-actions Bot added this to the 0.4.18 milestone Sep 25, 2026
@ZhuchkaTriplesix
ZhuchkaTriplesix merged commit 7256085 into dev Sep 25, 2026
3 checks passed
@ZhuchkaTriplesix
ZhuchkaTriplesix deleted the issue/868-sql-grid-save-parity branch September 28, 2026 08:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working data-grid Interactive data grid, cell editor, filtering, groupings error-handling Theme parser epic label: error-handling sqlite SQLite database driver and workspace

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant