Если вы впервые сталкиваетесь с данным плагином, рекомендую ознакомится с первой статьей.

Ввод

Всем привет!
Прошло целых 3 месяца с момента публикации первой статьи. Очень мало свободного времени было для дописывания всех тех фичей, которые я изначально запланировал в плагин. И вот, наконец-то, появилась возможность закончить, когда-то начатый путь, и привести этот плагин к какому-то логическому завершению. В этой статье я хочу поделится своими наработками, мыслями и дальнейшими планами, да и просто оставить это как заметку о работе над пет-проектом.

Что нового?

Изначально в идею плагина закладывались некоторые фичи, которые, предположительно, облегчили бы работу разрабам, но в ходе анализа и написания кода много раз сталкивался с ситуацией, что фича либо избыточна для данного инструмента, либо существуют уже более интересные реализации, например:

1. Изначально в планах было реализовать механизм, который решал бы проблему "распухания" history-таблиц, и выгружал устаревшие данные в отдельный файл формата json, csv и так далее. Но в ходе размышления пришел к выводу, что данный механизм избыточен для данного плагина, и в целом выходить за концепцию "удобного инструмента для разработчиков".
2. Поддержка СУБД Oracle - после небольшого наблюдения и поиска по статьям, кажется что в России постепенно уходят от Oracle и плавно переходят например к Postgres, отсюда нецелесообразность писать под это код.

Также были реализованы некоторые вещи, которые изначально закладывались, и, как мне показалось, имеют место быть в этом инструменте:

1. Функция логирования юзера, даты действия и типа действия. То есть буквально у пользователя появился выбор, добавить "системные" столбцы в history-таблицу, с помощью которых он может получить больше информации в дальнейшем (см. скриншот)

скриншот "дополнительные колонки"
скриншот "дополнительные колонки"

2. Обнаружил, что иногда скрипт становился настолько большим, что его "хвост" буквально терялся где то за видимыми полями. Добавил вертикальную и горизонтальную прокрутку. Такое же решение было принято к списку колонок. (см. скриншот)

скриншот "пример прокрутки готового скрипта"
скриншот "пример прокрутки готового скрипта"

3. Постарался добавить небольшие предупреждения, когда пользователь собирается создать history-таблицу и триггеры для уже существующей history-таблицы (см. скриншот)

скриншот "предупреждение о создании на существующую history-таблицу"
скриншот "предупреждение о создании на существующую history-таблицу"

4. Добавил локализацию на английский язык. Язык автоматически определяется исходя из языка вашего DBeaver.

5. Убрал возможность вызова плагина при клике правой кнопкой мыши на любой структуре (схеме и т.д.). Теперь плагин доступен только тогда, когда клик правой кнопкой мыши совершен на таблице. (см. скриншот)

скриншот "вызов плагина исключительно на таблице"
скриншот "вызов плагина исключительно на таблице"

6. Добавлен новый тип хранения записей. Если в первой версии плагина предполагалось, что в history-таблицу будет логироваться полное состояние записи (т.е. запись в history-таблице создавалась как "слепок" основной записи в момент когда в базу производился insert/update/delete). Но благодаря комментариям под прошлым постом я принял решение создать новый тип хранения. Механизм достаточно простой: теперь при выборе оптимизированного типа хранения, history-таблица будет содержать всего 1 запись для за��иси из основной таблицы, которая будет меняться в зависимости от произведенного действия. Т.е. когда произвели insert - запись в history-таблице создалась, когда произвели update - эта же запись обновила значения, когда сделали delete - запись сохранила состояние перед удалением. Буквально эта запись в history-таблице хранит предыдущее состояние записи.
Но я не нашел лучше механизма для реализации, чем создание pk в history-таблице (в отличие от обычного типа хранения) (см. скриншот)

скриншот "новое меню выбора типа хранения". Ниже приведен пример скрипта
скриншот "новое меню выбора типа хранения". Ниже приведен пример скрипта

7. Добавлена поддержка MySQL. Тут особо комментариев не добавлю, т.к. другие диалекты особо не рассматривал, но теперь плагин вызывается только исключительно для таблиц которые лежат в mySql или postgres. На остальных плагин просто не вызовется (см. скриншот)

скриншот "скрипт сгенерированный под mySql"
скриншот "скрипт сгенерированный под mySql"

Немного мыслей и выводов

Прошло достаточно много времени с момента публикации предыдущей статьи (3 месяца), но относительно крупных функций реализовано не было из-за большого количество задач на основной работе.
Я благодарен всем тем, кто поддерживал и комментировал предыдущую статью, и часть функций родились благодаря вашим сообщениям.
Доволен ли я на все 100% ? В рамках первого опыта в написании плагина для DBeaver - да. Можно ли было лучше? Я думаю, что всегда есть куда развиваться, но в данной ситуации я считаю, что плагин подошел к своему логическому концу. Раздувать его большим количеством тяжелых функций я не вижу смысла, потому что он будет выходить из "плагинов-инструментов" в полноценное приложение, и тогда не особо логично его писать на базе DBeaver.

Планы на будущее

Как я написал выше, ваши комментарии дали мне достаточно обратной связи и послужили топливом для некоторых интересных фичей, которые я решил не включать в этот плагин.
Но! Большая часть из нереализованных фичей тянут на вполне себе отд��льное приложение, которое, в моем представлении, при хорошей реализации, сможет быть полезным большему числу разработчиков, и будет нацелено на упрощение существующих процессов (ну и хотелось бы постараться реализовать его настолько хорошо, чтобы оно встроилось в текущие процессы разработки, а может быть и привнесло что-нибудь новое).

Если интересен плагин или вы хотите поддержать и поставить звезду, ссылка на репозиторий: GitHub - HistoryHelper.
Также ссылка на крайний релиз 1.3.0

Спасибо за Ваше внимание и поддержку.
Постараюсь вернутся к Вам в 2026 году с новым интересным приложением.

See you soon! :-)

Комментарии (0)