diff --git a/src/metabase/driver/mysql.clj b/src/metabase/driver/mysql.clj index b024d9326812e88997fe2a00abb2e51201916dc9..09c4027c1964e75b7f7d9b565ecbf7ae6e52f40e 100644 --- a/src/metabase/driver/mysql.clj +++ b/src/metabase/driver/mysql.clj @@ -953,7 +953,8 @@ :where [:and [:raw "c.table_schema not in ('information_schema','performance_schema','sys','mysql')"] [:raw "c.table_name not in ('innodb_table_stats', 'innodb_index_stats')"] - (when (:db details) [:= :c.table_schema (:db details)]) + (when-let [db-name ((some-fn :db :dbname) details)] + [:= :c.table_schema db-name]) (when (seq table-names) [:in [:lower :c.table_name] (map u/lower-case-en table-names)])]} :dialect (sql.qp/quote-style driver))) diff --git a/test/metabase/driver/mysql_test.clj b/test/metabase/driver/mysql_test.clj index 4306645e8d918d79c397845cc13536ceca124f77..6540d4f092f4865cf303322a5ff722c8d3c0e2e7 100644 --- a/test/metabase/driver/mysql_test.clj +++ b/test/metabase/driver/mysql_test.clj @@ -1,6 +1,7 @@ (ns ^:mb/once metabase.driver.mysql-test (:require [clojure.java.jdbc :as jdbc] + [clojure.set :as set] [clojure.string :as str] [clojure.test :refer :all] [honey.sql :as sql] @@ -77,6 +78,22 @@ (mt/rows (mt/run-mbql-query exciting-moments-in-history)))))))))) +(deftest multiple-schema-test + (testing "Make sure that we filter databases (schema) with :db or :dbname (#50072)" + (mt/test-driver :mysql + (drop-if-exists-and-create-db! "dbone") + (drop-if-exists-and-create-db! "dbtwo") + (doseq [dbname ["dbone" "dbtwo"] + :let [details (tx/dbdef->connection-details :mysql :db {:database-name dbname}) + spec (sql-jdbc.conn/connection-details->spec :mysql details)]] + (jdbc/execute! spec [(format "CREATE TABLE same_table_name (%s_a integer, %s_b integer, %s_c integer);" dbname dbname dbname)])) + (doseq [details [(tx/dbdef->connection-details :mysql :db {:database-name "dbone"}) + (set/rename-keys (tx/dbdef->connection-details :mysql :db {:database-name "dbone"}) {:db :dbname})]] + (t2.with-temp/with-temp [Database database {:engine "mysql", :details details}] + (sync/sync-database! database) + (is (= #{"dbone_a" "dbone_b" "dbone_c"} + (into #{} (map :name) (driver/describe-fields :mysql database))))))))) + (deftest date-test ;; make sure stuff at least compiles. Even if the result probably isn't as concise as it could be. ;; See [[metabase.query-processor-test.date-time-zone-functions-test/extract-week-tests]] for something that tests