Size: a a a

Clojure — русскоговорящее сообщество

2020 October 19

A

Andr in Clojure — русскоговорящее сообщество
4
источник

A

Andr in Clojure — русскоговорящее сообщество
9
источник
2020 October 20

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
Mike Bohdan
Я просто сильно ленив чтоб помимо SQL ещё и DSL библиотеки учить) + зачастую все эти либы очень долго добавляют поддержку каких-то bleeding-edge штук (запросы по json/jsonb полям в своё время в постгре как пример) да и поддержка от редактора для sql лучше чем для любой либы.
разве hugsql - не DSL?
источник

MB

Mike Bohdan in Clojure — русскоговорящее сообщество
Тоже дсл, но попроще, больше как темплейты. Но все-равно он в разы проще. Пример, абсолютно стандартная ситуация:
- формулируешь задачу вида: в одну кверю записать в базу информацию про адрес проживания человека, не создавая лишней записи в таблице с адресами
- лезешь в доку бд пишешь что-то типа with maybe_addr as (insert into address (street, building) values (:street, :building) on conflict do nothing returning *), addr as (select id from maybe_address union select id from address where street = :street and building = :building) insert into human (name, address_id) values (:name, (select id from addr));
- если у тебя не что-то типа hugsql, а любая либа, которая генерит SQL сама (на основе мапок или на основе моделей, если это орм, это не важно) лезешь ещё и в доку этой либы и пытаешь перекинуть свой запрос на «ее язык», потом ещё и смотришь чтоб выхлоп соответствовал твоим ожиданиям.

Вот этот дополнительный шаг не нужен и излишен, как по мне. Он не добавляет удобства (не позволяет полностью забыть о sql) и привносит свои заморочки в виде ещё одной абстракции богу абстракций.
источник

MB

Mike Bohdan in Clojure — русскоговорящее сообщество
Как по мне – можно просто юзать документоориентированные бд и не морочить голову с этими всеми sql, удобней в разработке в разы.
источник

MB

Mike Bohdan in Clojure — русскоговорящее сообщество
Рест апишечка как интерфейс и погнал. За одно и избавляет от иллюзий что бд это что-то внутреннее, а не third party, как остальные сервисы
источник

VK

Vadim Komarov in Clojure — русскоговорящее сообщество
Mike Bohdan
Как по мне – можно просто юзать документоориентированные бд и не морочить голову с этими всеми sql, удобней в разработке в разы.
Имхо, проблема c SQL в том, что обычно он представлен строкой. Нужно чуть изменить запрос в рантайме — велкам парсить sql. В то же время всякие honeysql позволяют представлять запрос в виде обычной структуры данных, и таких сложностей не возникает
источник

MB

Mike Bohdan in Clojure — русскоговорящее сообщество
Vadim Komarov
Имхо, проблема c SQL в том, что обычно он представлен строкой. Нужно чуть изменить запрос в рантайме — велкам парсить sql. В то же время всякие honeysql позволяют представлять запрос в виде обычной структуры данных, и таких сложностей не возникает
Опять же это уже вопрос дизайна кода, я против изменения кверей в рантайме, сделать их набор ограниченым, и чтоб каждая была максимально обобщенная, чтоб при надобности можно было выкинуть часть кверей и заменить на запросы к сервису или другой базе, а код не менялся (https://github.com/duct-framework/duct/wiki/Boundaries)
источник

VK

Vadim Komarov in Clojure — русскоговорящее сообщество
Часто пользователь непосредственно влияет на текст запроса, т.е. не всегда можно заранее ограничить их состав. Я про всякие параметры сортировки, фильтры и тп. Но да, это вопрос дизайна
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
Mike Bohdan
Опять же это уже вопрос дизайна кода, я против изменения кверей в рантайме, сделать их набор ограниченым, и чтоб каждая была максимально обобщенная, чтоб при надобности можно было выкинуть часть кверей и заменить на запросы к сервису или другой базе, а код не менялся (https://github.com/duct-framework/duct/wiki/Boundaries)
Boundary это не про запросы.
источник

MB

Mike Bohdan in Clojure — русскоговорящее сообщество
Oleg Roshchupkin
Boundary это не про запросы.
Да, я знаю
источник

MB

Mike Bohdan in Clojure — русскоговорящее сообщество
Это было к тому, что это очень хороший инструмент для взаимодействий с внешним миром, в том числе и запросы
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
Mike Bohdan
Тоже дсл, но попроще, больше как темплейты. Но все-равно он в разы проще. Пример, абсолютно стандартная ситуация:
- формулируешь задачу вида: в одну кверю записать в базу информацию про адрес проживания человека, не создавая лишней записи в таблице с адресами
- лезешь в доку бд пишешь что-то типа with maybe_addr as (insert into address (street, building) values (:street, :building) on conflict do nothing returning *), addr as (select id from maybe_address union select id from address where street = :street and building = :building) insert into human (name, address_id) values (:name, (select id from addr));
- если у тебя не что-то типа hugsql, а любая либа, которая генерит SQL сама (на основе мапок или на основе моделей, если это орм, это не важно) лезешь ещё и в доку этой либы и пытаешь перекинуть свой запрос на «ее язык», потом ещё и смотришь чтоб выхлоп соответствовал твоим ожиданиям.

Вот этот дополнительный шаг не нужен и излишен, как по мне. Он не добавляет удобства (не позволяет полностью забыть о sql) и привносит свои заморочки в виде ещё одной абстракции богу абстракций.
имхо hugsql это хорошо и удобно до тех пор пока ты используешь его исключительно как SQL, как только появляются кложурные вставки - всё, у тебя два ортогональных синтаксиса в одном файле
источник

(

(λv.vandr0iy) in Clojure — русскоговорящее сообщество
кто-нибудь на емаксе/сидере сидит?
источник

KR

Kostyantin Randomnam... in Clojure — русскоговорящее сообщество
нет, все на идее
источник

(

(λv.vandr0iy) in Clojure — русскоговорящее сообщество
ну, на всякий случай спрошу: как трейсить вар-ы в лет-ах?
источник

(

(λv.vandr0iy) in Clojure — русскоговорящее сообщество
есть cider-toggle-trace-ns, и есть cider-toggle-trace-var, но var в let-ах  не берет
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
(λv.vandr0iy)
есть cider-toggle-trace-ns, и есть cider-toggle-trace-var, но var в let-ах  не берет
потому что в let-ах не var-ы, но вообще конретно этого сидр не умеет (по многим причинам), так что только менять код внутри let-а
источник

(

(λv.vandr0iy) in Clojure — русскоговорящее сообщество
Dmytro Lispyvnyi '(🌲 🍺)
потому что в let-ах не var-ы, но вообще конретно этого сидр не умеет (по многим причинам), так что только менять код внутри let-а
спасибо. Есть какая нибудь литература? там, блогпост, либо комменты в коде на гитхабе? мне интересно
источник

(

(λv.vandr0iy) in Clojure — русскоговорящее сообщество
В смысле - у меня есть мой велосипед для таких вот случаев
источник