diff --git a/modules/drivers/snowflake/src/metabase/driver/snowflake.clj b/modules/drivers/snowflake/src/metabase/driver/snowflake.clj index 961adcd27577fb9d9f2b9be17372c9618365b602..1b75ba03d621a848f6b1da8541d3159fddc8743d 100644 --- a/modules/drivers/snowflake/src/metabase/driver/snowflake.clj +++ b/modules/drivers/snowflake/src/metabase/driver/snowflake.clj @@ -225,7 +225,7 @@ excluded-schemas (set (sql-jdbc.sync/excluded-schemas driver))] {:tables (set (for [table (jdbc/query (sql-jdbc.conn/db->pooled-connection-spec database) - (format "SHOW TABLES IN DATABASE \"%s\"" db-name)) + (format "SHOW OBJECTS IN DATABASE \"%s\"" db-name)) :when (not (contains? excluded-schemas (:schema_name table)))] {:name (:name table) :schema (:schema_name table) diff --git a/modules/drivers/snowflake/test/metabase/driver/snowflake_test.clj b/modules/drivers/snowflake/test/metabase/driver/snowflake_test.clj index a09ee6517d55d609023876b1311a546fde103a6f..2dcdf1b9c707cfef3edee984a8d6521bbcc1cb5a 100644 --- a/modules/drivers/snowflake/test/metabase/driver/snowflake_test.clj +++ b/modules/drivers/snowflake/test/metabase/driver/snowflake_test.clj @@ -1,5 +1,6 @@ (ns metabase.driver.snowflake-test - (:require [clojure + (:require [clojure.java.jdbc :as jdbc] + [clojure [set :as set] [string :as str] [test :refer :all]] @@ -7,11 +8,19 @@ [driver :as driver] [models :refer [Table]] [query-processor :as qp] - [test :as mt]] + [sync :as sync] + [test :as mt] + [util :as u]] + [metabase.driver.sql-jdbc + [connection :as sql-jdbc.conn] + [execute :as sql-jdbc.execute]] + [metabase.models + [database :refer [Database]]] [metabase.test.data [dataset-definitions :as dataset-defs] [sql :as sql.tx]] - [metabase.test.data.sql.ddl :as ddl])) + [metabase.test.data.sql.ddl :as ddl] + [toucan.db :as db])) ;; (deftest ddl-statements-test @@ -67,6 +76,28 @@ (is (= expected (driver/describe-database :snowflake (assoc (mt/db) :name "ABC"))))))))) +(deftest describe-database-views-test + (mt/test-driver :snowflake + (testing "describe-database views" + (let [details (mt/dbdef->connection-details :snowflake :db {:database-name "views_test"}) + spec (sql-jdbc.conn/connection-details->spec :snowflake details)] + ;; create the snowflake DB + (jdbc/execute! spec ["DROP DATABASE IF EXISTS \"views_test\";"] + {:transaction? false}) + (jdbc/execute! spec ["CREATE DATABASE \"views_test\";"] + {:transaction? false}) + ;; create the DB object + (mt/with-temp Database [database {:engine :snowflake, :details (assoc details :db "views_test")}] + (let [sync! #(sync/sync-database! database)] + ;; create a view + (jdbc/execute! spec ["CREATE VIEW \"views_test\".\"PUBLIC\".\"example_view\" AS SELECT 'hello world' AS \"name\";"]) + ;; now sync the DB + (sync!) + ;; now take a look at the Tables in the database, there should be an entry for the view + (is (= [{:name "example_view"}] + (map (partial into {}) + (db/select [Table :name] :db_id (u/get-id database))))))))))) + (deftest describe-table-test (mt/test-driver :snowflake (testing "make sure describe-table uses the NAME FROM DETAILS too"