Skip to content
This repository was archived by the owner on May 30, 2025. It is now read-only.

Commit 19e2bcd

Browse files
author
Robert Roland
authored
Fixing tests under Redshift driver (metabase#12512)
Newly added metadata in the query remark was blowing up for parameter queries other than dimension / field-id queries. [ci redshift]
1 parent 2195278 commit 19e2bcd

File tree

2 files changed

+45
-29
lines changed

2 files changed

+45
-29
lines changed

modules/drivers/redshift/src/metabase/driver/redshift.clj

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
[execute :as sql-jdbc.execute]]
1515
[metabase.driver.sql-jdbc.execute.legacy-impl :as legacy]
1616
[metabase.driver.sql.query-processor :as sql.qp]
17+
[metabase.mbql.util :as mbql.u]
1718
[metabase.query-processor
1819
[store :as qp.store]
1920
[util :as qputil]]
@@ -136,7 +137,7 @@
136137
(defmethod sql.qp/->honeysql [:redshift :replace]
137138
[driver [_ arg pattern replacement]]
138139
(hsql/call :replace (sql.qp/->honeysql driver arg) (splice-raw-string-value driver pattern)
139-
(splice-raw-string-value driver replacement)))
140+
(splice-raw-string-value driver replacement)))
140141

141142
;;; +----------------------------------------------------------------------------------------------------------------+
142143
;;; | metabase.driver.sql-jdbc impls |
@@ -165,7 +166,21 @@
165166
(defn query->field-values
166167
"Convert a MBQL query to a map of field->value"
167168
[query]
168-
(into {} (map (fn [param] [(:name (qp.store/field (get-in param [:target 1 1]))) (:value param)]) (:user-parameters query))))
169+
(into {}
170+
(filter identity
171+
(map
172+
(fn [param]
173+
(if (contains? param :name)
174+
[(:name param) (:value param)]
175+
176+
(when-let [field-id (mbql.u/match-one
177+
param
178+
[:dimension field]
179+
(let [field-id-or-name (mbql.u/field-clause->id-or-literal field)]
180+
(when (integer? field-id-or-name)
181+
field-id-or-name)))]
182+
[(:name (qp.store/field field-id)) (:value param)])))
183+
(:user-parameters query)))))
169184

170185
(defmethod qputil/query->remark :redshift
171186
[_ {{:keys [executed-by query-hash card-id], :as info} :info, query-type :type :as query}]

modules/drivers/redshift/test/metabase/driver/redshift_test.clj

Lines changed: 28 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -32,30 +32,31 @@
3232
@native-query)))
3333

3434
(deftest remark-test
35-
(let [expected (str/replace
36-
(str
37-
"-- /* partner: \"metabase\", {\"dashboard_id\":null,\"chart_id\":1234,\"optional_user_id\":1000,"
38-
"\"optional_account_id\":\"" (pubset/site-uuid) "\","
39-
"\"filter_values\":{\"id\":[\"1\",\"2\",\"3\"]}} */"
40-
" Metabase:: userID: 1000 queryType: MBQL queryHash: cb83d4f6eedc250edb0f2c16f8d9a21e5d42f322ccece1494c8ef3d634581fe2\n"
41-
"SELECT \"%schema%\".\"test_data_users\".\"id\" AS \"id\","
42-
" \"%schema%\".\"test_data_users\".\"name\" AS \"name\","
43-
" \"%schema%\".\"test_data_users\".\"last_login\" AS \"last_login\""
44-
" FROM \"%schema%\".\"test_data_users\""
45-
" WHERE (\"%schema%\".\"test_data_users\".\"id\" = 1 OR \"%schema%\".\"test_data_users\".\"id\" = 2"
46-
" OR \"%schema%\".\"test_data_users\".\"id\" = 3)"
47-
" LIMIT 2000")
48-
"%schema%" rstest/session-schema-name)]
49-
(mt/test-driver
50-
:redshift
51-
(is (= expected
52-
(query->native
53-
(assoc
54-
(mt/mbql-query users {:limit 2000})
55-
:parameters [{:type "id", :target ["dimension" ["field-id" (mt/id :users :id)]], :value ["1" "2" "3"]}]
56-
:info {:executed-by 1000
57-
:card-id 1234
58-
:context :ad-hoc
59-
:nested? false
60-
:query-hash (byte-array [-53, -125, -44, -10, -18, -36, 37, 14, -37, 15, 44, 22, -8, -39, -94, 30, 93, 66, -13, 34, -52, -20, -31, 73, 76, -114, -13, -42, 52, 88, 31, -30])})))
61-
"if I run a Redshift query, does it get a remark added to it?"))))
35+
(testing "single field user-specified value"
36+
(let [expected (str/replace
37+
(str
38+
"-- /* partner: \"metabase\", {\"dashboard_id\":null,\"chart_id\":1234,\"optional_user_id\":1000,"
39+
"\"optional_account_id\":\"" (pubset/site-uuid) "\","
40+
"\"filter_values\":{\"id\":[\"1\",\"2\",\"3\"]}} */"
41+
" Metabase:: userID: 1000 queryType: MBQL queryHash: cb83d4f6eedc250edb0f2c16f8d9a21e5d42f322ccece1494c8ef3d634581fe2\n"
42+
"SELECT \"%schema%\".\"test_data_users\".\"id\" AS \"id\","
43+
" \"%schema%\".\"test_data_users\".\"name\" AS \"name\","
44+
" \"%schema%\".\"test_data_users\".\"last_login\" AS \"last_login\""
45+
" FROM \"%schema%\".\"test_data_users\""
46+
" WHERE (\"%schema%\".\"test_data_users\".\"id\" = 1 OR \"%schema%\".\"test_data_users\".\"id\" = 2"
47+
" OR \"%schema%\".\"test_data_users\".\"id\" = 3)"
48+
" LIMIT 2000")
49+
"%schema%" rstest/session-schema-name)]
50+
(mt/test-driver
51+
:redshift
52+
(is (= expected
53+
(query->native
54+
(assoc
55+
(mt/mbql-query users {:limit 2000})
56+
:parameters [{:type "id", :target ["dimension" ["field-id" (mt/id :users :id)]], :value ["1" "2" "3"]}]
57+
:info {:executed-by 1000
58+
:card-id 1234
59+
:context :ad-hoc
60+
:nested? false
61+
:query-hash (byte-array [-53, -125, -44, -10, -18, -36, 37, 14, -37, 15, 44, 22, -8, -39, -94, 30, 93, 66, -13, 34, -52, -20, -31, 73, 76, -114, -13, -42, 52, 88, 31, -30])})))
62+
"if I run a Redshift query, does it get a remark added to it?")))))

0 commit comments

Comments
 (0)