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