Последняя и самая лучшая для баз данных SQL, похоже, HoneySQL и Yesql .
HoneySQL - довольно элегантный DSL для генерации SQL-запросов. Ходят слухи, что он может даже изменить операторы, чтобы быть высоко оптимизированными, см. Ветку clojure-group " Текущие лучшие в своем классе библиотеки JDBC? " от 24 февраля 2015 года.
Нильс ван Клаверен говорит в вышеупомянутой теме:
"По сути, он [HoneySQL] генерирует сценарии SQL для связывания ссылок на внешние ключи для очистки дубликатов в базе данных. Он принимает запрос выбора honeysql с (как минимум) таблицей from
, group-by
и order-by
предложение в качестве базового определения того, что следует считать двойным, и в каком порядке следует сохранять записи порядка. В сочетании с метаданными JDBC этот запрос эффективно переписывается для генерации:
- Таблица временной замены
- Запросы на объединение уникальных индексов для предотвращения конфликтов при обновлении ссылок на внешние ключи
- Запросы на обновление всех ссылок на внешние ключи
- Удалить операторы, чтобы удалить все дубликаты
Чтобы создать наиболее эффективный, но все же независимый от базы данных SQL, мне пришлось расширить honeysql дополнительными предложениями, такими как OVER
и PARTITION BY
. Я бы не сказал, что это бриз, но, похоже, он работал очень хорошо.
...
Это сокращает объем SQL до (иногда) ГБ сценария примерно до нескольких сотен строк SQL, а в одном случае - от 19 часов до 1,5 минут. "
Yesql , с другой стороны, стремиться к полной простоте. Он определяет некоторые функции для загрузки параметризованных .sql
-файлов.
На этой веб-странице упоминаются следующие «USP»:
- Никаких синтаксических сюрпризов. Ваша база данных не соответствует стандарту SQL - ни один из них не делает - но Yesql не волнует. Вы никогда не будете тратить время на охоту за «эквивалентным синтаксисом sexp». Вам никогда не придется возвращаться к функции
(raw-sql "some('funky'::SYNTAX)")
.
- Лучшая поддержка редактора. Ваш редактор, вероятно, уже имеет отличную поддержку SQL. Сохраняя SQL как SQL, вы можете использовать его.
- Командная совместимость. Ваши администраторы базы данных могут читать и писать SQL, который вы используете в своем проекте Clojure.
- Более простая настройка производительности. Нужно объяснить этот план запроса? Гораздо проще, когда ваш запрос - обычный SQL.
- Повторное использование запроса. Перетащите те же файлы SQL в другие проекты, потому что они просто старые SQL. Поделитесь ими как подмодулем.