(ns metabase.driver.sql.ddl (:require [clojure.java.jdbc :as jdbc] [metabase.driver.ddl.interface :as ddl.i] [metabase.driver.sql.util :as sql.u] [metabase.public-settings :as public-settings])) | |
(defn- quote-fn [driver] (fn quote [ident entity] (sql.u/quote-name driver ident (ddl.i/format-name driver entity)))) | |
(defn- add-remark [sql-str] (str "-- Metabase\n" sql-str)) | |
(defn- jdbc-spec [connection-or-spec] (cond (instance? java.sql.Connection connection-or-spec) {:connection connection-or-spec} (map? connection-or-spec) connection-or-spec :else (throw (ex-info "Invalid JDBC connection spec" {:spec connection-or-spec})))) | |
Executes sql and params with a standard remark prepended to the statement. TODO -- move the JDBC stuff to something like [[metabase.driver.sql-jdbc.ddl]]. JDBC-specific stuff does not belong IN [[metabase.driver.sql]] !! | (defn execute! [connection-or-spec [sql & params]] (jdbc/execute! (jdbc-spec connection-or-spec) (into [(add-remark sql)] params))) |
Queries sql and params with a standard remark prepended to the statement. | (defn jdbc-query [connection-or-spec [sql & params]] (jdbc/query (jdbc-spec connection-or-spec) (into [(add-remark sql)] params))) |
SQL string to create a schema suitable | (defn create-schema-sql [{driver :engine :as database}] (let [q (quote-fn driver)] (format "create schema %s" (q :table (ddl.i/schema-name database (public-settings/site-uuid)))))) |
SQL string to drop a schema suitable | (defn drop-schema-sql [{driver :engine :as database}] (let [q (quote-fn driver)] (format "drop schema if exists %s" (q :table (ddl.i/schema-name database (public-settings/site-uuid)))))) |
Formats a create table statement within our own cache schema | (defn create-table-sql [{driver :engine :as database} definition query] (let [q (quote-fn driver)] (format "create table %s.%s as %s" (q :table (ddl.i/schema-name database (public-settings/site-uuid))) (q :table (:table-name definition)) query))) |
Formats a drop table statement within our own cache schema | (defn drop-table-sql [{driver :engine :as database} table-name] (let [q (quote-fn driver)] (format "drop table if exists %s.%s" (q :table (ddl.i/schema-name database (public-settings/site-uuid))) (q :table table-name)))) |