Writing SQL isn't so bad if the file is separated or the editor is smart enough to edit. However it's usually none of the case so I always need to suffer especially writing it in double quote. Now, Emacs is de-facto editor for all programmers (vim? why are you talking about jeans here? V.I.M.) and it's by default very good with editing s-expression. So if you can write SQL in s-expression then the world would be happier than before.
Now, there are bunch of projects that have the same idea I've got, CLSQL, SxQL, S-SQL for example (I think Clojure also has something similar but I'm not so familiar). The problem of them are very simple. It's using keyword which is not in R6RS/R7RS. Moreover, those use either reader macro or CLOS so not pure s-expression. What I want is light weight but easy to edit. (well, it is actually ok for me, Sagittarius has all of them anyway.)
So I'm thinking something like following;
(define ssql '(select ((p id) (as (p first_name) name) (a street)) (from (as person p)) (inner-join (as address a) (on (= (p id) (a id_person)))) (where (= (a country) "Nederlands")))) (ssql->sql ssql) ;; "select p.id, p.first_name as name, a.street ;; from person as p ;; inner join address as a on p.id = a.id_person ;; where a.count = 'Netherlands'"Hmmm, it looks parentheses are a bit too many so the readability is a bit lowered. Basically it doesn't have to be fancy but readable and easy to remember. So one-by-one mapping is ok. (if I want OR-mapper, then I just need to construct it on top of it.)
If there is something similar in Scheme or better idea, I would like to know.
No comments:
Post a Comment