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

extra try/catch blocks for Sync DB

parent db8e5a80
Branches
Tags
No related merge requests found
......@@ -91,38 +91,44 @@
"Create new Fields for any that don't exist; mark ones that no longer exist as `inactive`."
{:arglists '([korma-table table])}
[korma-table {table-id :id, table-name :name, db :db}]
(let [fields (jdbc-columns db table-name)
field-names (set (map :column_name fields))
field-name->id (sel :many :field->id [Field :name] :table_id table-id :name [in field-names])]
;; Mark any existing `Field` objects not returned by jdbc-columns as inactive
(dorun (map (fn [[field-name field-id]]
(when-not (contains? field-names field-name)
(upd Field field-id :active false)))
field-name->id))
;; Create `Field` objects for any new Fields returned by jdbc-columns
(dorun (map (fn [{field-name :column_name type-name :type_name}]
(when-not (field-name->id field-name)
(ins Field
:table_id table-id
:name field-name
:base_type (or (*column->base-type* (keyword type-name))
(throw (Exception. (str "Column '" field-name "' has an unknown type: '" type-name
"'. Please add the type mapping to corresponding driver (e.g. metabase.driver.postgres.sync).")))))))
fields))))
(try
(let [fields (jdbc-columns db table-name)
field-names (set (map :column_name fields))
field-name->id (sel :many :field->id [Field :name] :table_id table-id :name [in field-names])]
;; Mark any existing `Field` objects not returned by jdbc-columns as inactive
(dorun (map (fn [[field-name field-id]]
(when-not (contains? field-names field-name)
(upd Field field-id :active false)))
field-name->id))
;; Create `Field` objects for any new Fields returned by jdbc-columns
(dorun (map (fn [{field-name :column_name type-name :type_name}]
(when-not (field-name->id field-name)
(ins Field
:table_id table-id
:name field-name
:base_type (or (*column->base-type* (keyword type-name))
(throw (Exception. (str "Column '" field-name "' has an unknown type: '" type-name
"'. Please add the type mapping to corresponding driver (e.g. metabase.driver.postgres.sync).")))))))
fields)))
(catch Throwable e
(log/error "Caught exception in sync-fields-create:" e))))
(defn- sync-fields-metadata
"Sync the metadata of all active fields for TABLE (in parallel)."
{:arglists '([korma-table table])}
[korma-table {table-id :id table-name :name}]
(->> (sel :many Field :table_id table-id :active true)
(pmap (fn [field]
(try
(check-for-low-cardinality korma-table field)
(check-for-large-average-length korma-table field)
(check-for-urls korma-table field)
(catch Throwable e
(log/warn (format "Caught exception when syncing field '%s.%s':" table-name (:name field)) e)))))
dorun))
(try
(->> (sel :many Field :table_id table-id :active true)
(pmap (fn [field]
(try
(check-for-low-cardinality korma-table field)
(check-for-large-average-length korma-table field)
(check-for-urls korma-table field)
(catch Throwable e
(log/warn (format "Caught exception when syncing field '%s.%s':" table-name (:name field)) e)))))
dorun)
(catch Throwable e
(log/error "Caught exception in sync-fields-metadata:" e))))
;; ## Metadata -- Fetch Tables/Columns/PKs/FKs from DB
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment