Fork me on GitHub
#clojure-russia
<
2017-10-04
>
andmed04:10:39

эт наверное все видели http://clojured.de/call-for-proposals/

a.dan08:10:59

Как организовать работу с базой данных в clojure. Я наверно сильно избалован ORM. JDBC выглядит слишком низкоуровневой. Korma интересна, но терзают сомнения (игрушкой пахнет). Возможно кто то может подсказать вариант QueryBuilder позволяющий компоновать запрос из готовых кирпичиков?

rustam.gilaztdinov08:10:07

а корма не то( у ханискл хорошо то, что ты работаешь со структурами данных, а в корме — макросы

rustam.gilaztdinov08:10:33

орм — бяка rich

kuzmin_m08:10:43

@U1U5ZNS9Z я эксперимент провожу https://github.com/darkleaf/publicator/blob/master/src/publicator/interactors/user/register.clj#L26-L31 пример крохотный, может быть не очень понятный. можно еще тесты посмотреть. тут идея в том, что бы сделать UnitOfWork и IdentityMap паттерны. но это "неортодоксально" и вообще ересь)) если интересно, могу рассказать подробнее

a.dan08:10:43

Ну почему же кака. Описал Entity. Описал как её заполнить и сохранить. И всё готово.

kuzmin_m08:10:13

это все от задачи зависит и размера проекта когда людям рассказываешь, то размер проекта как-то не учитывается вот и спорим про квадратное и мягкое 😃

kuzmin_m08:10:31

если ты занком с этим подходом, то круто

a.dan08:10:00

@U1LR4AN75 Спасибо за пример и предложение. Изучу по подробней.

kuzmin_m08:10:11

пиши в личку)

ilevd08:10:18

Еще https://github.com/krisajenkins/yesql есть, правда что-то я не очень им доволен

kuzmin_m08:10:32

там есть hugsql

kuzmin_m08:10:34

или как-то так

kuzmin_m08:10:42

оно пофункциональнее

ilevd08:10:48

Ага, вот его хочу посмотреть

a.dan08:10:35

honeysql вроде интересен. hugsql на первый взгляд не понятен.

a.dan08:10:47

В чём его интерес?

kuzmin_m08:10:45

тут нужно смотреть бывают случаи, когда лучше sql текстом написать в постгресе есть куча расширений, как их в dsl перевести? может быть и можно

kuzmin_m08:10:56

т.е. sql не мапится 1в1 на edn

kuzmin_m08:10:16

а вот html мапится 1в1 на edn

kuzmin_m08:10:25

это про hiccup

a.dan08:10:48

Ну в простых случаях это выглядит скорее так https://github.com/jkk/honeysql#extensibility

kuzmin_m08:10:08

ну можно расширить но тебе нужно постоянно переводить с одного языка на другой это как coffee script, т.е. ты думаешь на js, но тебе еще нужно новый синтаксис, и постоянно переводом заниматься

kuzmin_m08:10:35

для маленьких проектов все подойдет

kuzmin_m08:10:50

для больших - может быть какой-то кусок написать на sql

kuzmin_m08:10:00

какие нибудь монстровые запросы

kuzmin_m08:10:11

никто же не мешает их совместить 😃

a.dan08:10:19

Ну так модно дойти до отказа от любой абстракц😀ии

kuzmin_m08:10:33

модно?

kuzmin_m08:10:55

или можно?

a.dan08:10:59

* можно

kuzmin_m08:10:43

можно сделать разделение на команды и на запросы это уже абстракция команды реализовывать через dsl а запросы на sql

a.dan08:10:58

Да и sql это хороший dsl. Просто хотелось бы типовые конструкции вынести за скобки

a.dan08:10:00

Не хотелось бы писать типовые select и join для какой то сущности в 10 запросах различающихся только блоком where.

kuzmin_m08:10:44

наверное, нужно почитать доки к этим библиотекам 😃

a.dan08:10:41

Это я к вопросу о написании простых запросов на чистом sql.

kuzmin_m08:10:14

простые запросы - да стремно на sql писать 😃

kuzmin_m08:10:18

но есть еще view

kuzmin_m08:10:34

и это может немного помочь

ilevd09:10:07

Еще функции сгенерированные из sql не резолвятся

a.dan09:10:14

@U1CTNDLKX а по подробнее?

ilevd09:10:05

Неопознанные символы в IDE)

a.dan09:10:48

Я про "функции сгенерированные из sql"

a.dan09:10:11

А на IDE я не заработал )

ilevd09:10:28

Ну да, то есть Cursive их не понимает, что, откуда они. Опечаться можно. У курсива бесплатная лицензия есть)

ilevd09:10:45

Плюс часто еще надо результаты модифировать, подчеркивания в - перевести, например, обертки иногда приходится писаться, получается как-то размазано, часть кода в sql, часть в clj

a.dan09:10:51

@U1CTNDLKX что ты подразумевал под функциями сгенерированными из sql?

ilevd09:10:29

Ну вот в yesql у меня

(defqueries "sql/queries.sql")

ilevd09:10:49

И в неймспасе появляются ф-ции после компиляции

ilevd09:10:30

Отображающие этот файл с запросами

a.dan09:10:51

О сколько нам открытий чудных....

a.dan09:10:52

yesql vs hugsql ?

a.dan09:10:11

@U1LR4AN75, не раскроете свою мысль о преимуществах hugsql?

kuzmin_m10:10:17

если нужно написать сложный запрос. например с несколькими джоинами, нестандартными jon lateral, с полнотекстом, с json, массивами, прочими расширениями постгреса

kuzmin_m10:10:27

я не знаю их синтаксис

kuzmin_m10:10:43

я хочу открыть доку и скопировать кусочек sql и адаптировать

kuzmin_m10:10:14

я не хочу настраивать dsl,я хочу простой sql

kuzmin_m10:10:23

но если запросы простые и однотипные

kuzmin_m10:10:32

то тут уже сложнее с простым sql

kuzmin_m10:10:45

хотя hugsql умеет шаблоны

kuzmin_m10:10:03

для одних случаев удобнее одно, для других другое

a.dan10:10:20

Спасибо, уже сижу читаю. 😀 Интересный вариант

a.dan10:10:10

Я так понимаю hugsql это пересмотренный yesql.

ilevd11:10:37

Надо леин-плагином чтоб генерилось из sql файла в clj файл)

ilevd11:10:36

css плагином генерится, cljs генерится, чем sql хуже)

ilevd11:10:19

И функции будут резолвится и можно было бы нутро смотреть

rustam.gilaztdinov08:10:48

Кто чем пользуется — leiningen vs boot-clj ?

kuzmin_m08:10:16

я разбирался с boot и ушел опять в lein

kuzmin_m08:10:47

у boot хорошая идея, но не все ее придерживаются там жопа с cljs, в lein все в разы проще

rustam.gilaztdinov08:10:45

да, leiningen простой, но boot-clj более композируемый, кложа-вей и у lein’а плагины, так что еще плюсик ему, хотя может и у бута есть

kuzmin_m08:10:20

у boot идея правильная а реализация никакая (это мое мнение, может быть излишне категоричное)

kuzmin_m08:10:40

для clj оба норм

kuzmin_m08:10:59

а в cljs начинаются приколы с boot как-то так)

delaguardo08:10:32

а что не так было? у меня прямо противоположные впечатления

kuzmin_m08:10:55

boot-cljs он пишет результирующий js в папку с проектом, а не во временную директорию

kuzmin_m08:10:20

какая-то засада была с реплом

kuzmin_m08:10:37

еще оно с докером не подружилось нормально

delaguardo08:10:14

с докером вроде везде проблемы, это не от сборщика зависит

kuzmin_m08:10:22

я уже не помню всех деталей но условно 2 недели заняло, что бы разобраться в boot-cljs и дня 2 чтобы figwheel поставить

kuzmin_m08:10:49

ну и медленный он

kuzmin_m08:10:03

lein быстрее cljs собирает

kuzmin_m08:10:07

прям разительно

delaguardo08:10:11

к этой “фиче” я до сих пор не привык)

kuzmin_m08:10:28

т.е. boot собирал секунд 40-60

kuzmin_m08:10:38

это про cljs

delaguardo08:10:46

это первый старт?

kuzmin_m08:10:02

и все в докере macos с медленным синком файлов

kuzmin_m08:10:26

еще я как-то пробовал собрать jar в boot

kuzmin_m08:10:32

я не дождался

kuzmin_m08:10:44

может докер виноват

kuzmin_m08:10:55

в lein не пробовал тот же проект собирать

kuzmin_m08:10:10

может на ssd и нормально будет 😃

delaguardo08:10:43

выдели побольще памяти докеру и не придется ждать)

delaguardo08:10:20

по дефолту докер дает всего два гига из 8-ми доступных на моей машине и этого буту маловато

maxp08:10:54

по поводу 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"})))

maxp09:10:32

там есть один неочевидный момент с файлом main.cljs.edn

dbushenko14:10:08

новости про fby(by): в первом приближении к нам уже согласились приехать Никита Прокопов (Rum, DataScript) и Самир Рахмани (re-frame). Ждите еще новостей, следующие спикеры будут не менее интересными! 🙂

dbushenko14:10:44

Ну эээ... мы ж с тобой вроде бы тему твоего доклада обсуждаем уже? 😉

tonsky14:10:02

Неплохо бы это сначала со спикерами это подтвердить

dbushenko14:10:26

я и написал -- в первом приближении

dbushenko14:10:15

ну хочешь -- уберу запись, если ты еще не уверен