Skip to content
Snippets Groups Projects
Unverified Commit 4aa8368d authored by Simon Belak's avatar Simon Belak Committed by GitHub
Browse files

Rewrite sources in all joined-fields (#12161)

parent 9a38e6db
No related branches found
No related tags found
No related merge requests found
......@@ -812,7 +812,7 @@
;;; -------------------------------------------- putting it all togetrher --------------------------------------------
(defn- expressions->subselect
[{:keys [expressions fields] :as query}]
[{:keys [expressions] :as query}]
(let [subselect (-> query
(select-keys [:joins :source-table :source-query :source-metadata])
(assoc :fields
......@@ -823,14 +823,12 @@
(mbql.u/replace expression-definition
[:expression expr] (expressions (keyword expr)))])
(distinct
(mbql.u/match query [(_ :guard #{:field-literal :field-id :joined-field}) & _])))))
;; TODO -- correctly handle fields in multiple tables with the same name
fields (mbql.u/replace fields
[:joined-field alias field] [:joined-field "source" field])]
(mbql.u/match query [(_ :guard #{:field-literal :field-id :joined-field}) & _])))))]
(-> query
;; TODO -- correctly handle fields in multiple tables with the same name
(mbql.u/replace [:joined-field alias field] [:joined-field "source" field])
(dissoc :source-table :source-query :joins :expressions :source-metadata)
(assoc :source-query subselect
:fields fields))))
(assoc :source-query subselect))))
(defn- apply-clauses
"Like `apply-top-level-clauses`, but handles `source-query` as well, which needs to be handled in a special way
......
......@@ -242,3 +242,25 @@
:limit 3
:order-by [[:asc $name]]})
mt/rows)))))))
;;; +----------------------------------------------------------------------------------------------------------------+
;;; | JOINS |
;;; +----------------------------------------------------------------------------------------------------------------+
(deftest expressions+joins-test
(datasets/test-drivers (mt/normal-drivers-with-feature :expressions)
(testing "Do calculated columns play well with joins"
(is (= "Quentin Sören"
(-> (mt/run-mbql-query checkins
{:expressions {:prev_month [:+ $date [:interval -31 :day]]}
:fields [[:joined-field "users__via__user_id" [:field-id (data/id :users :name)]]
[:expression :prev_month]]
:limit 1
:joins [{:strategy :left-join
:source-table (data/id :users)
:alias "users__via__user_id"
:condition [:= $user_id
[:joined-field "users__via__user_id" [:field-id (data/id :users :id)]]]}]})
mt/rows
ffirst))))))
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