эт наверное все видели http://clojured.de/call-for-proposals/
Как организовать работу с базой данных в clojure. Я наверно сильно избалован ORM. JDBC выглядит слишком низкоуровневой. Korma интересна, но терзают сомнения (игрушкой пахнет). Возможно кто то может подсказать вариант QueryBuilder позволяющий компоновать запрос из готовых кирпичиков?
honey-sql https://github.com/jkk/honeysql
а корма не то( у ханискл хорошо то, что ты работаешь со структурами данных, а в корме — макросы
орм — бяка :rich:
@a.dan я эксперимент провожу https://github.com/darkleaf/publicator/blob/master/src/publicator/interactors/user/register.clj#L26-L31 пример крохотный, может быть не очень понятный. можно еще тесты посмотреть. тут идея в том, что бы сделать UnitOfWork и IdentityMap паттерны. но это "неортодоксально" и вообще ересь)) если интересно, могу рассказать подробнее
Ну почему же кака. Описал Entity. Описал как её заполнить и сохранить. И всё готово.
это все от задачи зависит и размера проекта когда людям рассказываешь, то размер проекта как-то не учитывается вот и спорим про квадратное и мягкое 😃
если ты занком с этим подходом, то круто
Кто чем пользуется — :leiningen: vs :boot-clj: ?
я разбирался с boot и ушел опять в lein
у boot хорошая идея, но не все ее придерживаются там жопа с cljs, в lein все в разы проще
@kuzmin_m Спасибо за пример и предложение. Изучу по подробней.
пиши в личку)
Еще https://github.com/krisajenkins/yesql есть, правда что-то я не очень им доволен
там есть hugsql
или как-то так
оно пофункциональнее
Ага, вот его хочу посмотреть
да, :leiningen: простой, но :boot-clj: более композируемый, кложа-вей и у lein’а плагины, так что еще плюсик ему, хотя может и у бута есть
у boot идея правильная а реализация никакая (это мое мнение, может быть излишне категоричное)
для clj оба норм
а в cljs начинаются приколы с boot как-то так)
а что не так было? у меня прямо противоположные впечатления
boot-cljs он пишет результирующий js в папку с проектом, а не во временную директорию
какая-то засада была с реплом
еще оно с докером не подружилось нормально
с докером вроде везде проблемы, это не от сборщика зависит
я уже не помню всех деталей но условно 2 недели заняло, что бы разобраться в boot-cljs и дня 2 чтобы figwheel поставить
ну и медленный он
эт да
lein быстрее cljs собирает
прям разительно
к этой “фиче” я до сих пор не привык)
т.е. boot собирал секунд 40-60
а lein 10
honeysql вроде интересен. hugsql на первый взгляд не понятен.
это про cljs
это первый старт?
В чём его интерес?
и все в докере macos с медленным синком файлов
да
еще я как-то пробовал собрать jar в boot
я не дождался
может докер виноват
в lein не пробовал тот же проект собирать
может на ssd и нормально будет 😃
выдели побольще памяти докеру и не придется ждать)
по дефолту докер дает всего два гига из 8-ми доступных на моей машине и этого буту маловато
https://github.com/adzerk-oss/boot-cljs-repl/issues/32 это про файлы
тут нужно смотреть бывают случаи, когда лучше sql текстом написать в постгресе есть куча расширений, как их в dsl перевести? может быть и можно
т.е. sql не мапится 1в1 на edn
а вот html мапится 1в1 на edn
это про hiccup
Ну в простых случаях это выглядит скорее так https://github.com/jkk/honeysql#extensibility
ну можно расширить но тебе нужно постоянно переводить с одного языка на другой это как coffee script, т.е. ты думаешь на js, но тебе еще нужно новый синтаксис, и постоянно переводом заниматься
для маленьких проектов все подойдет
для больших - может быть какой-то кусок написать на sql
какие нибудь монстровые запросы
никто же не мешает их совместить 😃
Ну так модно дойти до отказа от любой абстракц😀ии
модно?
?
или можно?
* можно
можно сделать разделение на команды и на запросы это уже абстракция команды реализовывать через dsl а запросы на sql
Да и sql это хороший dsl. Просто хотелось бы типовые конструкции вынести за скобки
Не хотелось бы писать типовые select и join для какой то сущности в 10 запросах различающихся только блоком where.
наверное, нужно почитать доки к этим библиотекам 😃
Это я к вопросу о написании простых запросов на чистом sql.
простые запросы - да стремно на sql писать 😃
но есть еще view
и это может немного помочь
по поводу boot-cljs у меня как-то так сделано
(deftask cljs-build []
(comp
(cljs :source-map false
:optimizations :advanced)
(sift :invert true :include #{#"\.out/.*"})
(sift :move {#"incs/js/main.js$" "public/incs/js/main.js"})))
там есть один неочевидный момент с файлом main.cljs.edn
Еще функции сгенерированные из sql не резолвятся
@ilevd а по подробнее?
Неопознанные символы в IDE)
Я про "функции сгенерированные из sql"
А на IDE я не заработал )
Ну да, то есть Cursive их не понимает, что, откуда они. Опечаться можно. У курсива бесплатная лицензия есть)
Плюс часто еще надо результаты модифировать, подчеркивания в - перевести, например, обертки иногда приходится писаться, получается как-то размазано, часть кода в sql, часть в clj
@ilevd что ты подразумевал под функциями сгенерированными из sql?
Ну вот в yesql у меня
(defqueries "sql/queries.sql")
И в неймспасе появляются ф-ции после компиляции
Отображающие этот файл с запросами
О сколько нам открытий чудных....
yesql vs hugsql ?
@kuzmin_m, не раскроете свою мысль о преимуществах hugsql?
если нужно написать сложный запрос. например с несколькими джоинами, нестандартными jon lateral, с полнотекстом, с json, массивами, прочими расширениями постгреса
я не знаю их синтаксис
я хочу открыть доку и скопировать кусочек sql и адаптировать
я не хочу настраивать dsl,я хочу простой sql
но если запросы простые и однотипные
то тут уже сложнее с простым sql
хотя hugsql умеет шаблоны
для одних случаев удобнее одно, для других другое
Спасибо, уже сижу читаю. 😀 Интересный вариант
Я так понимаю hugsql это пересмотренный yesql.
Надо леин-плагином чтоб генерилось из sql файла в clj файл)
css плагином генерится, cljs генерится, чем sql хуже)
И функции будут резолвится и можно было бы нутро смотреть
Эээ
Ну эээ... мы ж с тобой вроде бы тему твоего доклада обсуждаем уже? 😉
Неплохо бы это сначала со спикерами это подтвердить
я и написал -- в первом приближении
ну хочешь -- уберу запись, если ты еще не уверен