Толочь воду в ступе

Apr 15, 2011 00:43

Пост навеян свежим ПФП. Статья про circumflex, вот этим вот:

// Выбрать все города Швейцарии, вернуть Seq[City]:
SELECT (ci.*) FROM (ci JOIN co) WHERE (co.code LIKE ”ch”)
ORDER_BY (ci.name ASC) listСтоило ли огород городить, если на выходе всё равно получается нечто, что ( Read more... )

article, typing, orm, common lisp, macros, sql, dsl, lisp, metaprogramming, pfp

Leave a comment

Comments 64

ext_296586 April 15 2011, 06:35:30 UTC
> Итак, как делать правильно.
Правильно или (1) со статической типизацией, но при этом объявления таблиц сверяются на соответствие со схемой БД при запуске приложения; или (2) вот так - http://scala.playframework.org/documentation/scala-0.9/anorm

Reply

swizard April 15 2011, 11:16:43 UTC
Ну так постулат-то там такой же, как и у меня в посте:

A type safe DSL to generate SQL is a mistake

Some argue that a type safe DSL is better since all your queries are checked by the compiler. Unfortunately the compiler check your queries based on a MetaModel definition that you often write yourself by ‘mapping’ your data structure to the database schema.

And there are no guarantees at all that this MetaModel is correct. Even if the compiler says that you code and your queries are correctly typed, it can still miserably fail at runtime because of a mismatch in your actual database definition.

Только там по ссылке предлагается на это забить, а я предлагаю гарантировать консистентность с помощью метапрограммирования.

Reply

rigidus April 15 2011, 13:16:26 UTC
И это правильно. Спасибо, отличный понятный пост

Reply

ext_222356 April 16 2011, 12:22:15 UTC
Кстати, в F# LINQ одновременно используется типизация и метапрограммирование для запросов SQL. Чудо зовется "quotations".

Reply


ext_218033 April 15 2011, 12:40:04 UTC
Если в проекте только один язык - Лисп, то зачем вообще с классическим SQL заморачиваться? И даже если не один язык, но рулится всё лиспом через DSL, то этот самый DSL может генерировать и код для других языков.

Reply

swizard April 16 2011, 22:36:19 UTC
Ну так я и предлагаю генерировать SQL через DSL :)

Reply


ext_208668 April 16 2011, 09:09:55 UTC
Интересный момент. Схожий подход изначально использовался и в BKNR.DATASTORE. Но в итоге Hans признался, что система стала невменяемой, трудно отлаживаемой и т.п. и переписал всё на базе MOP.

Reply

swizard April 16 2011, 22:33:06 UTC
Ну это как изначально спроектируешь. MOP, кстати, тоже нифига не панацея: вон в postmodern пришлось хаки использовать для DAO.

Reply


Leave a comment

Up