Advertisement
Guest User

Untitled

a guest
Dec 15th, 2016
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.75 KB | None | 0 0
  1. ```bash
  2. java -jar liquibase-core-3.0.8.jar
  3. --driver=org.postgresql.Driver
  4. --changeLogFile=x.xml
  5. --url="jdbc:postgresql://host:5432/db"
  6. --classpath=postgresql-9.4.1209.jre7.jar
  7. --username=postgres
  8. --password=postgres
  9. generateChangeLog
  10. ```
  11.  
  12. ```clojure
  13. (do
  14. (require '[medley.core]
  15. '[clojure.set :as set]
  16. '[camel-snake-kebab.core :as csk]
  17. '[clojure.walk]
  18. '[into-edn :refer [into-edn]]
  19. '[clojure.zip :as zip]
  20. '[clojure.data.xml :as xml]
  21. '[clojure.data.zip.xml :as zf])
  22.  
  23. (let [xml-string (slurp "x.xml")
  24. coerce-map (fn [m] (as-> m a
  25. (medley.core/map-keys csk/->kebab-case a)
  26. (medley.core/map-vals (fn [v] (if (#{"false" "true"} v)
  27. (= "true" v)
  28. v)) a)
  29. (set/rename-keys a {:nullable :nullable? :primary-key :primary-key? :default-value-boolean :default-value})
  30. (reduce (fn [m [k v]]
  31. (cond-> (assoc m k v)
  32. (= k :primary-key?) (assoc :unique true :nullable? false)))
  33. {}
  34. a)
  35. (medley.core/remove-keys #{:primary-key-name :deferrable :initially-deferred :on-delete :on-update :disabled} a)))
  36. coerce-create-index (fn [n] {:create-index (assoc (coerce-map (:attrs n)) :columns (mapv (comp (partial hash-map :column) :attrs) (:content n)))})
  37. xml-spec
  38. {:create-table
  39. [#(zf/xml-> % :changeSet :createTable)
  40. {:table-name #(-> % zip/node :attrs :tableName)
  41. :columns
  42. [#(zf/xml-> % :column)
  43. {:attrs
  44. #(-> % zip/node :attrs coerce-map)
  45. :constraints
  46. [#(zf/xml-> % :constraints)
  47. #(-> % zip/node :attrs coerce-map)]}]}]
  48. :add-foreign-key-constraint
  49. [#(zf/xml-> % :changeSet :addForeignKeyConstraint)
  50. #(-> % zip/node :attrs coerce-map)]
  51. :add-unique-constraint
  52. [#(zf/xml-> % :changeSet :addUniqueConstraint)
  53. #(-> % zip/node :attrs coerce-map)]
  54. :create-index
  55. [#(zf/xml-> % :changeSet :createIndex)
  56. #(-> % zip/node coerce-create-index)]}
  57. zipper (some-> xml-string
  58. xml/parse-str
  59. zip/xml-zip)
  60. edn (into-edn xml-spec zipper)
  61. coerce-create-table (fn [c] {:create-table
  62. (update c :columns
  63. (partial mapv (fn [col]
  64. {:column
  65. (cond-> (:attrs col)
  66. (seq (:constraints col)) (assoc :constraints (first (:constraints col))))})))})]
  67. (->>
  68. {:database-change-log
  69. [{:change-set
  70. {:id "bootstrap-0"
  71. :author "case"
  72. :changes (concat
  73. (->> (:create-table edn) (mapv coerce-create-table))
  74. (->> (:add-foreign-key-constraint edn) (mapv (partial hash-map :add-foreign-key-constraint)))
  75. (->> (:add-unique-constraint edn) (mapv (partial hash-map :add-unique-constraint)))
  76. (:create-index edn)}}]}
  77. (#(with-out-str (clojure.pprint/pprint %)))
  78. (spit "changelog.edn")))))
  79. ```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement