From 19e495dbbdd2de2516dc30ec13067ed21325a774 Mon Sep 17 00:00:00 2001
From: Simon Belak <simon@metabase.com>
Date: Wed, 13 May 2020 21:16:54 +0200
Subject: [PATCH] Generate correct query when no DB supports nested queries
 (#12527)

---
 src/metabase/api/database.clj       | 27 ++++++++++++++-------------
 test/metabase/api/database_test.clj |  4 ++++
 2 files changed, 18 insertions(+), 13 deletions(-)

diff --git a/src/metabase/api/database.clj b/src/metabase/api/database.clj
index 1fb03b73af8..c09f25910db 100644
--- a/src/metabase/api/database.clj
+++ b/src/metabase/api/database.clj
@@ -123,19 +123,20 @@
 (defn- source-query-cards
   "Fetch the Cards that can be used as source queries (e.g. presented as virtual tables)."
   [& {:keys [additional-constraints xform], :or {xform identity}}]
-  (transduce
-   (comp (filter card-can-be-used-as-source-query?) xform)
-   (completing conj #(hydrate % :collection))
-   []
-   (db/select-reducible [Card :name :description :database_id :dataset_query :id :collection_id :result_metadata]
-     {:where    (into [:and
-                       [:not= :result_metadata nil]
-                       [:= :archived false]
-                       [:in :database_id (ids-of-dbs-that-support-source-queries)]
-                       (collection/visible-collection-ids->honeysql-filter-clause
-                        (collection/permissions-set->visible-collection-ids @api/*current-user-permissions-set*))]
-                      additional-constraints)
-      :order-by [[:%lower.name :asc]]})))
+  (when-let [ids-of-dbs-that-support-source-queries (not-empty (ids-of-dbs-that-support-source-queries))]
+    (transduce
+     (comp (filter card-can-be-used-as-source-query?) xform)
+     (completing conj #(hydrate % :collection))
+     []
+     (db/select-reducible [Card :name :description :database_id :dataset_query :id :collection_id :result_metadata]
+       {:where    (into [:and
+                         [:not= :result_metadata nil]
+                         [:= :archived false]
+                         [:in :database_id ids-of-dbs-that-support-source-queries]
+                         (collection/visible-collection-ids->honeysql-filter-clause
+                          (collection/permissions-set->visible-collection-ids @api/*current-user-permissions-set*))]
+                        additional-constraints)
+       :order-by [[:%lower.name :asc]]}))))
 
 (defn- source-query-cards-exist?
   "Truthy if a single Card that can be used as a source query exists."
diff --git a/test/metabase/api/database_test.clj b/test/metabase/api/database_test.clj
index 26e2137e50d..6a2fb8f48e7 100644
--- a/test/metabase/api/database_test.clj
+++ b/test/metabase/api/database_test.clj
@@ -441,6 +441,10 @@
                        saved-questions-virtual-db)
                    (fetch-virtual-database)))))
 
+        (testing "should work when there are no DBs that support nested queries"
+          (with-redefs [metabase.driver/supports? (constantly false)]
+            (is (nil? (fetch-virtual-database)))))
+
         (testing "should remove Cards that use cumulative-sum and cumulative-count aggregations"
           (mt/with-temp* [Card [ok-card (ok-mbql-card)]
                           Card [_ (merge
-- 
GitLab