(ns metabase.sync.sync-metadata.sync-table-privileges (:require [metabase.driver :as driver] [metabase.driver.util :as driver.u] [metabase.util.malli :as mu] [metabase.util.malli.schema :as ms] [toucan2.core :as t2])) | |
(set! *warn-on-reflection* true) | |
Sync the This is a cache of the data returned from | (mu/defn sync-table-privileges!
[database :- (ms/InstanceOf :model/Database)]
(let [driver (driver.u/database->driver database)]
(when (driver.u/supports? driver :table-privileges database)
(let [rows (driver/current-user-table-privileges driver database)
schema+table->id (t2/select-fn->pk (fn [t] {:schema (:schema t), :table (:name t)}) :model/Table :db_id (:id database))
rows-with-table-id (keep (fn [row]
(when-let [table-id (get schema+table->id (select-keys row [:schema :table]))]
(-> row
(assoc :table_id table-id)
(dissoc :schema :table))))
rows)]
(t2/with-transaction [_conn]
(t2/delete! :model/TablePrivileges :table_id [:in {:select [:t.id]
:from [[:metabase_table :t]]
:where [:= :t.db_id (:id database)]}])
{:total-table-privileges (t2/insert! :model/TablePrivileges rows-with-table-id)}))))) |