Added support for :aggregate and :over clauses
Supports COUNT(*) OVER (PARTITION BY a ORDER BY b) clauses
This commit is contained in:
parent
49538bfa10
commit
bdeb95d956
2 changed files with 33 additions and 4 deletions
|
|
@ -157,8 +157,8 @@
|
|||
(def clause-order
|
||||
"Determines the order that clauses will be placed within generated SQL"
|
||||
[:select :insert-into :update :delete :delete-from :columns :set :from :join
|
||||
:left-join :right-join :where :group-by :having :order-by :limit :offset
|
||||
:values :query-values])
|
||||
:left-join :right-join :where :aggregate :over :partition-by :group-by :having
|
||||
:order-by :limit :offset :values :query-values])
|
||||
|
||||
(def known-clauses (set clause-order))
|
||||
|
||||
|
|
@ -389,3 +389,13 @@
|
|||
|
||||
(defmethod format-clause :delete [[_ table] _]
|
||||
(str "DELETE " (to-sql table)))
|
||||
|
||||
(defmethod format-clause :over [[_ part-clause] _]
|
||||
(str "OVER " (to-sql part-clause)))
|
||||
|
||||
(defmethod format-clause :aggregate [[_ [aggregate-fn _]] _]
|
||||
(str (to-sql aggregate-fn)))
|
||||
|
||||
(defmethod format-clause :partition-by [[_ fields] _]
|
||||
(str "PARTITION BY "
|
||||
(comma-join (map to-sql fields))))
|
||||
|
|
@ -216,3 +216,22 @@
|
|||
(defn delete
|
||||
([table] (delete nil table))
|
||||
([m table] (build-clause :delete m table)))
|
||||
|
||||
(defmethod build-clause :over [_ m table]
|
||||
(assoc m :over table))
|
||||
|
||||
(defn over
|
||||
([part-clause] (over nil part-clause))
|
||||
([m part-clause] (build-clause :over m part-clause)))
|
||||
|
||||
(defhelper merge-over [m fields]
|
||||
(update-in m [:over] (partial apply merge) (collify fields)))
|
||||
|
||||
(defhelper aggregate [m aggregate-fn]
|
||||
(assoc m :aggregate aggregate-fn))
|
||||
|
||||
(defhelper spartition-by [m fields]
|
||||
(assoc m :partition-by (collify fields)))
|
||||
|
||||
(defhelper merge-partition-by [m fields]
|
||||
(update-in m [:partition-by] concat (collify fields)))
|
||||
Loading…
Reference in a new issue