Skip to content
Snippets Groups Projects
Unverified Commit bc3c54b6 authored by Case Nelson's avatar Case Nelson Committed by GitHub
Browse files

fix: MYSQL filter database with dbname in sync (#50091)

Fixes: #50072

When we `describe-fields` we are passing db details, but sometimes we
have the database name in `dbname` rather than in `db` depending on the
connection specs and possibly environment. So we check for both now.
parent 13eb9ae2
No related branches found
No related tags found
No related merge requests found
...@@ -954,7 +954,8 @@ ...@@ -954,7 +954,8 @@
:where :where
[:and [:raw "c.table_schema not in ('information_schema','performance_schema','sys','mysql')"] [: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')"] [: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)])]} (when (seq table-names) [:in [:lower :c.table_name] (map u/lower-case-en table-names)])]}
:dialect (sql.qp/quote-style driver))) :dialect (sql.qp/quote-style driver)))
......
(ns ^:mb/once metabase.driver.mysql-test (ns ^:mb/once metabase.driver.mysql-test
(:require (:require
[clojure.java.jdbc :as jdbc] [clojure.java.jdbc :as jdbc]
[clojure.set :as set]
[clojure.string :as str] [clojure.string :as str]
[clojure.test :refer :all] [clojure.test :refer :all]
[honey.sql :as sql] [honey.sql :as sql]
...@@ -77,6 +78,22 @@ ...@@ -77,6 +78,22 @@
(mt/rows (mt/rows
(mt/run-mbql-query exciting-moments-in-history)))))))))) (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 (deftest date-test
;; make sure stuff at least compiles. Even if the result probably isn't as concise as it could be. ;; 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 ;; See [[metabase.query-processor-test.date-time-zone-functions-test/extract-week-tests]] for something that tests
......
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