Jojo může to tak vypadat, ale jak jsem psal, toto je ten nejvíce low-level přístup. Existují minimálně tři knihovny, které nad Clojure dělají DSL pro práci s databázemi - podle mě to není vždy to nejlepší řešení, protože dotazy s milionem joinů tam vypadají dost hrozně (to vlastně i v SQL :-). Já se o tom zkusím zmínit přespříště, aspoň by to mohlo být zajímavé z hlediska DSL jako takových.
Ještě mě napadlo - jak by to mohlo pracovat s DB jako se seznamem? Pro INSERT/UPDATE/DELETE si to dokážu představit, ale pro SELECTy? Jako že by se ručně dělaly operace filter, zipmap atd.? To by dávalo smysl, ale co jsem zkoušel, tak to je docela nepřehledné - ale možná je to tím, že jsem se snažil napodobit existující schémata relačních databází, ne například něco jako MongoDB (tam to naopak jde krásně).
(car (join '(table1 table2) by id_key)) Nebo další možnost interface pro relační databáze kdysi existoval, tuším jmenovalo se to REDAP a bylo to zpracování relačních databází pomocí řádkových příkazů tak, že výsledek z předchozího řádku zpracoval příkaz na následujícím řádku.