Skip to content

fix(sqlite): give every session its own handle; clearer data editing (#989) - #990

Merged
ZhuchkaTriplesix merged 1 commit into
devfrom
issue/989-sqlite-edit-sessions-and-ux
Sep 25, 2026
Merged

ZhuchkaTriplesix merged 1 commit into
devfrom
issue/989-sqlite-edit-sessions-and-ux

Conversation

@ZhuchkaTriplesix

Copy link
Copy Markdown
Member

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

Главная ошибка: SQLite-сессии делили один дескриптор файла

SqliteConnection.connect открывал файл с настройкой sqflite по умолчанию singleInstance: true. Повторное открытие того же пути возвращало тот же объект базы. Из-за этого сессии пула для одного файла (readOnly для просмотра, tableWrite для Save, readWrite для SQL-редактора) фактически были одной:

  • Save получал read-only дескриптор просмотра и падал с attempt to write a readonly database (code 8).
  • Закрытие любой сессии (через 4 с после Save, закрытие SQL-редактора, Disconnect) закрывало файл для всех, и база «переставала открываться».

Теперь singleInstance: false, у каждой сессии свой дескриптор.

Дополнительно Table Browser заново берёт сессию просмотра, если её закрыли (например после Disconnect в дереве), вместо Not connected.

Удобство редактирования

  • Одна панель правок. В шапке Table Browser (PostgreSQL / MySQL / SQLite) был дубль «N pending / Revert / Save», который к тому же выталкивал DDL, Refresh и Prev/Next за край. Он удалён. Тулбар над сеткой: действия со строками слева, справа закреплены счётчик, «Revert All» и «Save Changes» (обычные кнопки). В узком окне действия сворачиваются в иконки, а Save остаётся видимым.
  • Понятные ошибки сохранения. Вместо сырого исключения — объяснение и подсказка для типовых случаев SQLite / PostgreSQL / MySQL: read-only, база занята, уникальность, NOT NULL, внешний ключ, CHECK, неверный тип, строка изменилась, потеря соединения. Явно сказано, что ничего не применено и правки остались. Исходная ошибка под «Details», есть «Copy details». SQL-workspace используют тот же диалог вместо трёх копий.
  • Тост «1 change saved» / «N changes saved» вместо «1 change(s) saved».

Проверка

  • Воспроизвёл на реальном приложении (Demo Playground в profile-режиме, временный профиль): без исправления первое же Save падает с readonly database. С исправлением проходят Save, повторное открытие таблицы после закрытия сессии, Save после Disconnect в дереве, а SQL-редактор видит сохранённые правки.
  • Тесты:
    • sqlite_connection_test: 3 регрессионных, все падают без исправления;
    • save_error_description_test: разбор ошибок трёх СУБД, диалог, тост;
    • узкий тулбар в results_tab_test.
  • Прогнал test/features и test/core целиком (1788 тестов), проходят.

Не входит

PostgreSQL / MySQL этой ошибкой не затронуты (у них отдельные соединения). Проверял только SQLite.

Связанные Issue

Closes #989

…loses #989)

SqliteConnection opened files with sqflite's default singleInstance: true, so
the pool's read-only browse, table-write and SQL-editor sessions for one file
shared a single Database. A Save session reused the read-only browse handle
('attempt to write a readonly database'), and closing any session (idle close
after Save, the SQL editor, Disconnect) closed the file for every other view,
so the database stopped opening. Open with singleInstance: false.

Table Browser now re-acquires its browse session when it was closed under it
instead of showing 'Not connected'.

Editing UX:
- One set of edit controls: the header copy (badge / Revert / Save) is
  removed from the PostgreSQL, MySQL and SQLite table views, so DDL, Refresh
  and paging stay visible while editing. The grid toolbar keeps row actions on
  the left and pins the pending badge, Revert All and Save Changes on the
  right with standard buttons; narrow widths collapse to icons / 'Save'.
- Save errors are explained in plain language (read-only, busy, unique,
  NOT NULL, foreign key, CHECK, type, stale row, lost connection) with the raw
  error under Details and a copy button; the SQL workspaces use the same dialog.
- The saved toast says '1 change saved' / 'N changes saved'.
@github-actions github-actions Bot added bug Something isn't working sqlite SQLite database driver and workspace data-grid Interactive data grid, cell editor, filtering, groupings ux User experience, keyboard shortcuts and interactions labels Sep 25, 2026
@ZhuchkaTriplesix
ZhuchkaTriplesix merged commit da4c6f3 into dev Sep 25, 2026
3 checks passed
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 sqlite SQLite database driver and workspace ux User experience, keyboard shortcuts and interactions

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant