Skip to content
Snippets Groups Projects
Unverified Commit b6ad9f50 authored by Alvin Savoy's avatar Alvin Savoy Committed by GitHub
Browse files

Sync views in Snowflake databases (#12936)

SHOW OBJECTS IN DATABASE... will return views, as well as tables, in Snowflake.
parent 6ef833b0
No related branches found
No related tags found
No related merge requests found
......@@ -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)
......
(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"
......
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