Labels: data-grid, backend, sql-editor
Epic: A
Depends on: none
Goal
Создать сервис DataGridDmlGenerator, который на основе изменений в DataGridStagingBuffer и метаданных таблицы (название таблицы, первичные ключи / уникальные колонки) генерирует безопасные параметризованные или экранированные SQL-выражения UPDATE, INSERT и DELETE.
Context
DataGridStagingBuffer уже хранит _modifiedCells, _insertedRows и _deletedRowIndices. Однако в проекте отсутствует модуль, преобразующий эти дельты в конкретные SQL-запросы под диалекты PostgreSQL, MySQL и SQLite.
Implementation
- Создать lib/features/main_screen/data_grid_dml_generator.dart:
- Модель DmlStatement (тип операции insert/update/delete, SQL-текст, исходная строка).
- Метод generateDml({required String tableName, required List<String> columns, required List<String> primaryKeys, required DataGridStagingBuffer buffer, required SqlDialect dialect}).
- Для UPDATE: генерировать UPDATE <table> SET col1 = 'val1', col2 = 'val2' WHERE pk1 = 'old_pk1' AND ....
- Для INSERT: генерировать INSERT INTO <table> (col1, col2) VALUES ('val1', 'val2').
- Для DELETE: генерировать DELETE FROM <table> WHERE pk1 = 'pk1'.
- Корректное экранирование спецсимволов и кавычек под целевой диалект (Postgres $1 / кавычки, MySQL backticks, SQLite).
- Написать модульные тесты в test/features/main_screen/data_grid_dml_generator_test.dart.
Acceptance Criteria
- Генерируются точные SQL-запросы для единичных и множественных правок ячеек.
- Если в строке изменены 3 ячейки, генерируется один UPDATE со всеми 3 колонками в SET.
- Если primary key отсутствует, используется сопоставление по всем исходным колонкам строки (WHERE col1 = 'old1' AND col2 = 'old2' ...).
- Тесты покрывают диалекты PostgreSQL, MySQL и SQLite.
Reactions are currently unavailable
Labels: data-grid, backend, sql-editor
Epic: A
Depends on: none
Goal
Создать сервис DataGridDmlGenerator, который на основе изменений в DataGridStagingBuffer и метаданных таблицы (название таблицы, первичные ключи / уникальные колонки) генерирует безопасные параметризованные или экранированные SQL-выражения UPDATE, INSERT и DELETE.
Context
DataGridStagingBuffer уже хранит _modifiedCells, _insertedRows и _deletedRowIndices. Однако в проекте отсутствует модуль, преобразующий эти дельты в конкретные SQL-запросы под диалекты PostgreSQL, MySQL и SQLite.
Implementation
Acceptance Criteria