Beginnings of generic create #301 #306

This commit is contained in:
Sean Corfield 2021-03-07 22:13:25 -08:00
parent e70985e93b
commit efcee05e0a

View file

@ -575,14 +575,29 @@
(str " " (str/join ", " (map #'format-simple-clause clauses)))))] (str " " (str/join ", " (map #'format-simple-clause clauses)))))]
[(str (sql-kw k) " " (format-entity x))])) [(str (sql-kw k) " " (format-entity x))]))
(defn- format-create-table [k table] (defn- destructure-create-item [table]
(let [[table if-not-exists] (if (sequential? table) table [table])] (let [coll
[(str (sql-kw k) " " (if (sequential? table)
(when if-not-exists (str (sql-kw :if-not-exists) " ")) table
(format-entity table))])) [table])
ine (last coll)
[prequel table ine]
(if (= :if-not-exists (sym->kw ine))
[(butlast (butlast coll)) (last (butlast coll)) ine]
[(butlast coll) (last coll) nil])]
[(str/join " " (map sql-kw prequel))
(format-entity table)
(when ine (sql-kw ine))]))
(defn- format-create-view [k x] (defn- format-create [k item as]
[(str (sql-kw k) " " (format-entity x) " AS")]) (let [[pre i ine] (destructure-create-item item)]
[(str/join " " (remove nil?
[(sql-kw :create)
(when (seq pre) pre)
(sql-kw k)
ine
i
(when as (sql-kw as))]))]))
(defn- format-drop-table (defn- format-drop-table
[k params] [k params]
@ -639,10 +654,10 @@
:add-index (fn [_ x] (format-on-expr :add x)) :add-index (fn [_ x] (format-on-expr :add x))
:drop-index #'format-selector :drop-index #'format-selector
:rename-table (fn [_ x] (format-selector :rename-to x)) :rename-table (fn [_ x] (format-selector :rename-to x))
:create-table #'format-create-table :create-table (fn [_ x] (format-create :table x nil))
:create-extension #'format-create-table :create-extension (fn [_ x] (format-create :extension x nil))
:with-columns #'format-table-columns :with-columns #'format-table-columns
:create-view #'format-create-view :create-view (fn [_ x] (format-create :view x :as))
:drop-table #'format-drop-table :drop-table #'format-drop-table
:drop-extension #'format-drop-table :drop-extension #'format-drop-table
:nest (fn [_ x] (format-expr x)) :nest (fn [_ x] (format-expr x))