Fix composite by turning it into special syntax

This commit is contained in:
Sean Corfield 2020-10-12 11:42:47 -07:00
parent ccd5447a09
commit 796f11c3f4
2 changed files with 10 additions and 5 deletions

View file

@ -18,7 +18,7 @@
"The (default) order for known clauses. Can have items added and removed."
[:nest :with :with-recursive :intersect :union :union-all :except :except-all
:select :select-distinct :insert-into :update :delete :delete-from :truncate
:columns :composite :set :from
:columns :set :from
:join :left-join :right-join :inner-join :outer-join :full-join
:cross-join
:where :group-by :having :order-by :limit :offset :for :values
@ -382,7 +382,6 @@
:delete-from #'format-selector
:truncate #'format-selector
:columns #'format-columns
:composite #'format-columns
:set #'format-set-exprs
:from #'format-selects
:join #'format-join
@ -424,7 +423,6 @@
;:delete-from 80
;:truncate 85
;:columns 90
;:composite 95
;; no longer needed/supported :set0 100 ; low-priority set clause
;:from 110
;:join 120
@ -528,6 +526,10 @@
(-> [(str "CAST(" sql " AS " sql' ")")]
(into params)
(into params'))))
:composite
(fn [_ [& args]]
(let [[sqls params] (format-expr-list args)]
(into [(str "(" (str/join ", " sqls) ")")] params)))
:default
(fn [_ []]
["DEFAULT"])

View file

@ -54,7 +54,6 @@
(defn delete-from [& args] (generic :delete-from args))
(defn truncate [& args] (generic :truncate args))
(defn columns [& args] (generic :columns args))
(defn composite [& args] (generic :composite args))
(defn set [& args] (generic-1 :set args))
(defn from [& args] (generic :from args))
(defn join [& args] (generic :join args))
@ -78,6 +77,10 @@
(defn do-update-set [& args] (generic :do-update-set args))
(defn returning [& args] (generic :returning args))
;; helpers that produce non-clause expressions -- must be listed below:
(defn composite [& args] (into [:composite] args))
#?(:clj
(assert (= (clojure.core/set @@#'h/base-clause-order)
(assert (= (clojure.core/set (conj @@#'h/base-clause-order
:composite))
(clojure.core/set (map keyword (keys (ns-publics *ns*)))))))