Skip to content
Snippets Groups Projects
Commit 4e3057ac authored by Cam Saul's avatar Cam Saul
Browse files

add `with-temp-db` macro.

parent 54bc03c2
No related branches found
No related tags found
No related merge requests found
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
(catch-api-exceptions 0) (catch-api-exceptions 0)
(check 1) (check 1)
(context 2) (context 2)
(create-database-definition 1)
(execute-query 1) (execute-query 1)
(expect 1) (expect 1)
(expect-eval-actual-first 1) (expect-eval-actual-first 1)
......
...@@ -72,7 +72,7 @@ ...@@ -72,7 +72,7 @@
DATASET-LOADER should be an object that implements `IDatasetLoader`." DATASET-LOADER should be an object that implements `IDatasetLoader`."
[dataset-loader ^DatabaseDefinition database-definition] [dataset-loader ^DatabaseDefinition database-definition]
;; Delete the Metabase Database and associated objects ;; Delete the Metabase Database and associated objects
(cascade-delete (metabase-instance database-definition (engine dataset-loader))) (cascade-delete Database :id (:id (metabase-instance database-definition (engine dataset-loader))))
;; now delete the DBMS database ;; now delete the DBMS database
(drop-physical-db! dataset-loader database-definition)) (drop-physical-db! dataset-loader database-definition))
...@@ -122,34 +122,16 @@ ...@@ -122,34 +122,16 @@
(sel :one Table :id (table->id (s/upper-case (name table-name))))) (sel :one Table :id (table->id (s/upper-case (name table-name)))))
;; ## TODO! with-temp-table and related macros ;; ## Temporary Dataset Macros
;; DEPRECATED ! Need to rewrite this to use the new TableDefinition stuff (defmacro with-temp-db
;; (defmacro with-temp-table "Load and sync DATABASE-DEFINITION with DATASET-LOADER and execute BODY with
;; "Execute BODY with a temporary Table that will be dropped afterward. the newly created `Database` bound to DB-BINDING.
;; The korma entity representing the Table is bound to TABLE-BINDING. Remove `Database` and destroy data afterward."
;; FIELDS-MAP should be a map of FIELD-NAME -> SQL-TYPE. [[db-binding dataset-loader ^DatabaseDefinition database-definition] & body]
`(let [loader# ~dataset-loader
;; (with-temp-table [table {:name \"VARCHAR(254)\"}] dbdef# ~database-definition]
;; (insert table (values [{:name \"A\"} (try (let [~db-binding (get-or-create-database! loader# dbdef#)]
;; {:name \"B\"}])) ~@body)
;; (select table values (where {:name \"A\"})))" (finally
;; [[table-binding fields-map] & body] (remove-database! loader# dbdef#)))))
;; {:pre [(map? fields-map)]}
;; (let [table-name (name (gensym "TABLE__"))
;; formatted-fields (->> fields-map
;; (map (fn [[field-name field-type]]
;; (format "\"%s\" %s" (.toUpperCase ^String (name field-name)) (name field-type))))
;; (interpose ", ")
;; (reduce str))]
;; `(do (get-or-create-database! (h2/dataset-loader) data/test-data)
;; (h2/exec-sql data/test-data (format "DROP TABLE IF EXISTS \"%s\";" ~table-name))
;; (h2/exec-sql data/test-data (format "CREATE TABLE \"%s\" (%s, \"ID\" BIGINT AUTO_INCREMENT, PRIMARY KEY (\"ID\"));" ~table-name ~formatted-fields))
;; (let [~table-binding (h2/korma-entity (map->TableDefinition {:table-name ~table-name})
;; data/test-data)]
;; (try
;; ~@body
;; (catch Throwable e#
;; (println "E: " e#))
;; (finally
;; (h2/exec-sql data/test-data (format "DROP TABLE \"%s\";" ~table-name))))))))
...@@ -1283,40 +1283,39 @@ ...@@ -1283,40 +1283,39 @@
;; ## Default Dataset DatabaseDefinition ;; ## Default Dataset DatabaseDefinition
(def ^DatabaseDefinition test-data (def ^DatabaseDefinition test-data
(create-database-definition (create-database-definition "Test Database"
"Test Database" ["users" [{:field-name "name"
["users" [{:field-name "name" :base-type :CharField}
:base-type :CharField} {:field-name "last_login"
{:field-name "last_login" :base-type :DateTimeField}
:base-type :DateTimeField} {:field-name "password"
{:field-name "password" :base-type :CharField
:base-type :CharField :field-type :sensitive}]
:field-type :sensitive}] users]
users] ["categories" [{:field-name "name"
["categories" [{:field-name "name" :base-type :CharField}]
:base-type :CharField}] categories]
categories] ["venues" [{:field-name "name"
["venues" [{:field-name "name" :base-type :CharField}
:base-type :CharField} {:field-name "latitude"
{:field-name "latitude" :base-type :FloatField
:base-type :FloatField :special-type :latitude}
:special-type :latitude} {:field-name "longitude"
{:field-name "longitude" :base-type :FloatField
:base-type :FloatField :special-type :longitude}
:special-type :longitude} {:field-name "price"
{:field-name "price" :base-type :IntegerField
:base-type :IntegerField :special-type :category}
:special-type :category} {:field-name "category_id"
{:field-name "category_id" :base-type :IntegerField
:base-type :IntegerField :fk :categories}]
:fk :categories}] venues]
venues] ["checkins" [{:field-name "user_id"
["checkins" [{:field-name "user_id" :base-type :IntegerField
:base-type :IntegerField :fk :users}
:fk :users} {:field-name "venue_id"
{:field-name "venue_id" :base-type :IntegerField
:base-type :IntegerField :fk :venues}
:fk :venues} {:field-name "date"
{:field-name "date" :base-type :DateField}]
:base-type :DateField}] checkins]))
checkins]))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment