[Я пиарюсь] sqlite-gui: еще один редактор SQLite для Windows

Автор Сообщение
news_bot ®

Стаж: 6 лет 9 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
16-Июн-2021 12:34

Всё начиналось как простое средство для выполнения запросов к SQLite базе с сохраняемой историей запросов и кода в редакторе, написанное по старинке на WinAPI. Потихоньку оно обросло функционалом, и, если бы я с самого начала знал во что это выльется, то не взялся бы.

Что есть

Подсветка синтаксиса и автодополнение

SPL
Реализовано достаточно наивно, без участия лексического парсера, но в большинстве случаев работает как надо. Для редактора запросов используется Richedit-компонент (msftedit.dll), который в Windows 10 имеет некоторые проблемы. По этой причине в дистрибутив включена версия от Windows 7. Отмечу, что для больших запросов подсветка в DB4S работает значительно быстрее за счет работы только с видимой частью запроса.

Раскраска ячеек результата по их типам, как в SQLiteSpy

SPL
Раскраска позволяет визуально понять тип данных, используемый для хранения значения, чтобы отличить NULL-ячейку от пустой строки или, к примеру, текст 123 от числа.

Одновременное редактирование нескольких таблиц

SPL
Возможно открыть две и более таблицы на редактирование данных на одном экране. При этом редактор запросов остается доступен и можно переключаться между ним и таблицами.

История успешно завершенных и пользовательских запросов

SPL
Запросы в редакторе после успешного выполнения/сохранения помещаются в таблицы history и gists в базе настроек prefs.sqlite и доступны потом через интерфейс.

Экспорт и импорт данных

SPL
Помимо стандартных экспорта и импорта в .csv и .sql есть возможность переноса данных из/в внешних источников через ODBC, таких как Access, Excel или Postgres, при наличии установленных в системе 32-битных драйверов. Реализовано при помощи odbc-расширения. Поддерживаются только базовые типы.

Диаграмма базы данных с поиском

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

Сравнение текущей базы с другой по структуре и по данным

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

Поиск по всей базе

SPL
Если заранее не известно, где может быть искомое, то можно воспользоваться поиском по всей базе. Поскольку поиск выполняется обычным col1 like .. or col2 like ... по всем столбцам, то для больших баз поиск будет медленным. Подсмотрен в Heidi.

Быстрый просмотр связанных данных

SPL
Получив в результатах запроса некоторый id, иногда приходится выполнять дополнительный запрос, чтобы узнать что скрывается за этим id. sqlite-gui позволяет избежать этого: достаточно кликнуть по id с зажатым Alt. Связь с таблицей источником формируется по внешним ключам базы, а в случае, если эти ключи не используются, может быть добавлена отдельно в таблице refs базы настроек prefs.sqlite.

Режим консоли

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

Графики

SPL
Как и в DB4S, в sqlite-gui можно просмотреть результат запроса в виде графика. На данный момент поддерживается пять типов: линии, точки, области (на рисунке ниже), гистограмма и горизонтальные полоски.

Параметризованные запросы

SPL
В запросе из кода реального приложения, то могут быть плейсхолдеры, напр. select * from orders where id = ?1. Если запрос большой, то их можно пропустить и выполнить запрос в менеджере как есть, в результате чего некоторые менеджеры считают что передан NULL (SQLite считает такой запрос валидным) и возвращают пустой ответ.

Генерация данных для таблиц

SPL
Генерируемое значение может быть: последовательностью (напр. для id), числом или датой из интервала, ссылкой на значение из другой таблицы или одним из заранее подготовленного списка, хранящегося в таблице generators базы настроек prefs.sqlite.

Включение и отключение триггеров и индексов

SPL
Иногда для ускорения импорта данных требуется отключить триггеры и индексы на таблице. Отмечу, что SQLite позволяет отключить/включить все триггеры в базе, вызовом sqlite3_db_config(db, SQLITE_DBCONFIG_ENABLE_TRIGGER, 0/1), но вот для индексов такого нет. sqlite-gui при отключении индекса или триггера производит его удаление из базы с сохранением DDL в таблице deleted базы настроек prefs.sqlite. Индексы, определенные в DDL таблицы отключить нельзя.

Набор расширений

SPL
В дистрибутив включено несколько расширений: часть из них стандартные, как напр. series и uuid, часть самописных, напр. XML и ora, и одно стороннее icu. Описание всех расширений и их функций есть в Wiki.

Поддержка зашифрованных баз данных

SPL
Работает через vfs-расширение SQLite3 Multiple Ciphers. Поддерживаются практически все распространенные способы шифрования SQLite. Минус только в том, что SQLite требуется собирать уже из исходников этого проекта, а не с сайта SQLite. Если доступ к зашифрованным базам не требуется, то можно использовать дистрибутив sqlite-gui-x.y.z-no-ciphers.zip.

Поддержка триггеров instead-of, позволяющая редактировать данные представления

SPL
Если представление имеет триггеры intead-of update/insert/delete, то данные такого представления можно редактировать как обычную таблицу. Было сделано по просьбе одного из пользователей.

Параллельное выполнение запросов

SPL
Некоторые менеджеры SQLite используют только одно подключение к базе и поэтому, при выполнении долгого запроса, остальные дожидаются его выполнения. Это особенно неприятно, поскольку может вызывать зависание интерфейса, который для своей работы также формирует запросы. sqlite-gui для каждой вкладки редактора использует отдельное подключение и одно для работы интерфейса, что позволяет отчасти избежать такой проблемы. Минус этой схемы в том, что каждое соединение использует свою TEMP-схему для временных таблицы, которая недоступна другим. Поэтому вместо TEMP предлагается использовать автоподключаемую in-memory базу SHARED.

Другое

SPL
Описание всяких мелочей, таких как открыть базу только на чтение или в памяти, доступно в главном меню программы ? > Tips.

Чего нет

Редактирование структуры таблицы

SPL
В SQLite нет возможности изменить порядок столбцов или тип столбца. Для имитации этого другие менеджеры парсят DDL таблицы и на этой основе создают новую таблицу, в которую переливают данные из исходной. Помимо особенностей парсинга DDL, также следует учитывать наличия триггеров и индексов на таблице и её вхождение в представления. Сделать надежно достаточно сложно, потому и нет.

Просмотр BLOB-полей как Hex или изображения

SPL
Возможно в будущем.

Автоматическое форматирование запросов

SPL
С одной стороны это востребованная функция для тех кто работает с большими запросами, а с другой — большие запросы на SQLite редкость. Возможно будет добавлено в будущем.

Построитель запросов

SPL
Написать построитель просто. Гораздо сложнее написать разбор имеющегося запроса в диаграмму построителя. В виду этого и сомнительной полезности данной возможности, построителя нет.

Пользовательские сопоставления (collation)

SPL
Очень редко надо.

Пользовательские функции

SPL
В SQLiteStudio можно писать свои функции на SQL/QtScript/Tcl. Проблема таже, что и с пользовательскими скриптами (см. ниже), и поэтому функции предлагается добавлять через расширения.

Поддержка скриптов

SPL
В SQLiteManager есть возможность писать скрипты для загрузки данных на Lua. Однако пользователи скорее предпочтут стандартный Python. Не избежал этой ошибки и я, предлагая в ранних версиях свой визуальный редактор для ETL.

Печать

SPL
Непонятно для чего может быть надо.

Редактор форм, как в Valentina Studio

SPL
Как и в случае с печатью, не очень понятно зачем это может быть надо.

Мультиязычный интерфейс

SPL
Считаю излишним.

Поддержка Linux, iOS и других

SPL
Для этого потребовалось бы использовать фреймворк для кроссплатформенной разработки. Скорее всего это был бы QT, который используют большинство менеджеров (еще встречается Java).

Выбор темы оформления

SPL
У стандартных компонент WinAPI, используемых в sqlite-gui, нет возможности изменения темы, кроме самостоятельной отрисовки, что требует дополнительного кодинга.

Восстановление базы и удаленных строк

SPL
Формат SQLite иногда позволяет исправить поврежденную базу (SQLite CLI, команда .restore) или восстановить удаленные строки (напр. undark). Поскольку для этого нет API и требуется изучение самого формата, то этого нет.

Редактор прагм

SPL
Несмотря на то, что DB4S имеет отдельную вкладку для этого, обычно считается, что пользователям не требуется иметь подобный инструмент.

Недостатки

По умолчанию результат запроса имеет ограничение в 10000 строк

SPL
Стандартный компонент ListView, используемый для отображения табличных данных, не рассчитан на большое количество строк. Для обхода этого требуется использовать виртуальный режим, что достаточно муторно. Как и другой способ, используемый в DB4S, — подгружать только видимую часть данных.

Невозможно из редактора задать значение в виде пустой строки (только NULL)

SPL
С моей точки зрения, пустая строка используется редко, и потому, чтобы избежать загромождения интерфейса, в нем нет возможности для текстового поля задать что именно подразумевалось под пустым пользовательским вводом — NULL или пустая строка.

Только 32-битная версия

SPL
Изначально проект использовал Code::Blocks 17 с mingw32 5.1 (имеет небольшой размер). Потом из-за проблемы с VirusTotal компилятор был обновлен до 9-ой версии. И уже после был обнаружен mingw64, который позволяет собирать 32 и 64-битные версии. С другой стороны 64-битная версия, для которой требуются правки, не будет иметь каких то значимых преимуществ, кроме, пожалуй, более свежих ODBC драйверов.

Страница проекта — github.com/little-brother/sqlite-gui
Скачать последнюю версию — github.com/little-brother/sqlite-gui/releases/latest
===========
Источник:
habr.com
===========

Похожие новости: Теги для поиска: #_ja_piarjus (Я пиарюсь), #_sql, #_sqlite, #_ja_piarjus (
Я пиарюсь
)
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 25-Ноя 15:00
Часовой пояс: UTC + 5