fix joins; modifiers
This commit is contained in:
parent
b61435e1e4
commit
5c2e25abd7
1 changed files with 19 additions and 20 deletions
|
|
@ -118,7 +118,7 @@
|
||||||
clojure.lang.IPersistentMap
|
clojure.lang.IPersistentMap
|
||||||
(-to-sql [x] (let [clause-ops (filter #(contains? x %) clause-order)]
|
(-to-sql [x] (let [clause-ops (filter #(contains? x %) clause-order)]
|
||||||
(paren-wrap
|
(paren-wrap
|
||||||
(space-join (map (comp format-clause #(find x %))
|
(space-join (map (comp #(format-clause % x) #(find x %))
|
||||||
clause-ops)))))
|
clause-ops)))))
|
||||||
nil
|
nil
|
||||||
(-to-sql [x] "NULL"))
|
(-to-sql [x] "NULL"))
|
||||||
|
|
@ -150,37 +150,37 @@
|
||||||
|
|
||||||
(defmulti format-clause
|
(defmulti format-clause
|
||||||
"Takes a map entry representing a clause and returns an SQL string"
|
"Takes a map entry representing a clause and returns an SQL string"
|
||||||
key)
|
(fn [clause _] (key clause)))
|
||||||
|
|
||||||
(defmethod format-clause :select [[_ fields]]
|
(defmethod format-clause :select [[_ fields] sql-map]
|
||||||
(str "SELECT " (comma-join (map to-sql fields))))
|
(str "SELECT "
|
||||||
|
(space-join (map (comp string/upper-case name)
|
||||||
|
(:modifiers sql-map)))
|
||||||
|
" "
|
||||||
|
(comma-join (map to-sql fields))))
|
||||||
|
|
||||||
(defmethod format-clause :from [[_ tables]]
|
(defmethod format-clause :from [[_ tables] _]
|
||||||
(str "FROM " (comma-join (map to-sql tables))))
|
(str "FROM " (comma-join (map to-sql tables))))
|
||||||
|
|
||||||
(defmethod format-clause :where [[_ pred]]
|
(defmethod format-clause :where [[_ pred] _]
|
||||||
(str "WHERE " (format-predicate pred)))
|
(str "WHERE " (format-predicate pred)))
|
||||||
|
|
||||||
(defn format-join
|
(defn format-join [table pred & [type]]
|
||||||
[table pred & [type]]
|
|
||||||
(str (when type
|
(str (when type
|
||||||
(str (string/upper-case (name type)) " "))
|
(str (string/upper-case (name type)) " "))
|
||||||
"JOIN " (to-sql table)
|
"JOIN " (to-sql table)
|
||||||
" ON " (format-predicate pred)))
|
" ON " (format-predicate pred)))
|
||||||
|
|
||||||
(defmethod format-clause :join [[_ [table pred type]]]
|
(defmethod format-clause :join [[_ join-groups] _]
|
||||||
(format-join table pred type))
|
(space-join (map #(apply format-join %) join-groups)))
|
||||||
|
|
||||||
(defmethod format-clause :joins [[_ join-groups]]
|
(defmethod format-clause :group-by [[_ fields] _]
|
||||||
(space-join (map format-clause join-groups)))
|
|
||||||
|
|
||||||
(defmethod format-clause :group-by [[_ fields]]
|
|
||||||
(str "GROUP BY " (comma-join (map to-sql fields))))
|
(str "GROUP BY " (comma-join (map to-sql fields))))
|
||||||
|
|
||||||
(defmethod format-clause :having [[_ pred]]
|
(defmethod format-clause :having [[_ pred] _]
|
||||||
(str "HAVING " (format-predicate pred)))
|
(str "HAVING " (format-predicate pred)))
|
||||||
|
|
||||||
(defmethod format-clause :order-by [[_ fields]]
|
(defmethod format-clause :order-by [[_ fields] _]
|
||||||
(str "ORDER BY "
|
(str "ORDER BY "
|
||||||
(comma-join (for [field fields]
|
(comma-join (for [field fields]
|
||||||
(if (sequential? field)
|
(if (sequential? field)
|
||||||
|
|
@ -189,9 +189,8 @@
|
||||||
"DESC" "ASC")))
|
"DESC" "ASC")))
|
||||||
(to-sql field))))))
|
(to-sql field))))))
|
||||||
|
|
||||||
(defmethod format-clause :limit [[_ limit]]
|
(defmethod format-clause :limit [[_ limit] _]
|
||||||
(str "LIMIT " (to-sql limit)))
|
(str "LIMIT " (to-sql limit)))
|
||||||
|
|
||||||
(defmethod format-clause :offset [[_ offset]]
|
(defmethod format-clause :offset [[_ offset] _]
|
||||||
(str "OFFSET " (to-sql offset)))
|
(str "OFFSET " (to-sql offset)))
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue