Skip to content
Snippets Groups Projects
Unverified Commit 66b0ea0f authored by metabase-bot[bot]'s avatar metabase-bot[bot] Committed by GitHub
Browse files

backport "[MLv2] Include implicit joins for breakout/order on models (#39801)" (#40027)


Fixes #39657.

Co-authored-by: default avatarBraden Shepherdson <braden@metabase.com>
parent 51faf90a
No related branches found
No related tags found
No related merge requests found
......@@ -196,7 +196,8 @@ describe("binning related reproductions", () => {
summarize();
rightSidebar().within(() => {
cy.findByRole("listitem", { name: "Created At" })
cy.findAllByRole("listitem", { name: "Created At" })
.eq(0)
.findByLabelText("Temporal bucket")
.click();
});
......
......@@ -29,7 +29,7 @@ describe("issue 32963", () => {
cy.findByTestId("qb-header").button("Summarize").click();
rightSidebar().within(() => {
cy.findByText("Created At").click();
cy.findAllByText("Created At").eq(0).click();
cy.button("Done").click();
});
cy.wait("@dataset");
......
......@@ -254,9 +254,7 @@
(->> (concat
existing-columns
;; add implicitly joinable columns if desired
(when (and include-implicitly-joinable?
(or (not (:source-card (lib.util/query-stage query stage-number)))
(:include-implicitly-joinable-for-source-card? options)))
(when include-implicitly-joinable?
(lib.metadata.calculation/implicitly-joinable-columns query stage-number existing-columns unique-name-fn)))
vec)))
......
......@@ -229,7 +229,26 @@
:display-name "Count"
:base-type :type/Integer
:lib/source :source/card
:lib/desired-column-alias "count"}]
:lib/desired-column-alias "count"}
;; Implicitly joinable columns
{:name "ID"
:display-name "ID"
:base-type :type/BigInteger
:lib/source :source/implicitly-joinable
:lib/desired-column-alias "USERS__via__USER_ID__ID"
:fk-field-id (meta/id :checkins :user-id)}
{:name "NAME"
:display-name "Name"
:base-type :type/Text
:lib/source :source/implicitly-joinable
:lib/desired-column-alias "USERS__via__USER_ID__NAME"
:fk-field-id (meta/id :checkins :user-id)}
{:name "LAST_LOGIN"
:display-name "Last Login"
:base-type :type/DateTime
:lib/source :source/implicitly-joinable
:lib/desired-column-alias "USERS__via__USER_ID__LAST_LOGIN"
:fk-field-id (meta/id :checkins :user-id)}]
columns))
(testing `lib/display-info
(is (=? [{:name "USER_ID"
......@@ -241,7 +260,32 @@
:display-name "Count"
:table {:name "My Card", :display-name "My Card"}
:is-from-previous-stage false
:is-implicitly-joinable false}]
:is-implicitly-joinable false}
;; Implicitly joinable columns
{:name "ID"
:display-name "ID"
:long-display-name "User → ID"
:table {:name "USERS"
:display-name "Users"
:is-source-table false}
:is-from-previous-stage false
:is-implicitly-joinable true}
{:name "NAME"
:display-name "Name"
:long-display-name "User → Name"
:table {:name "USERS"
:display-name "Users"
:is-source-table false}
:is-from-previous-stage false
:is-implicitly-joinable true}
{:name "LAST_LOGIN"
:display-name "Last Login"
:long-display-name "User → Last Login"
:table {:name "USERS"
:display-name "Users"
:is-source-table false}
:is-from-previous-stage false
:is-implicitly-joinable true}]
(for [col columns]
(lib/display-info query col)))))))))
......
......@@ -96,13 +96,30 @@
groups (lib/group-columns columns)]
(is (=? [{::lib.column-group/group-type :group-type/main
::lib.column-group/columns [{:display-name "User ID", :lib/source :source/card}
{:display-name "Count", :lib/source :source/card}]}]
{:display-name "Count", :lib/source :source/card}]}
{::lib.column-group/group-type :group-type/join.implicit
:fk-field-id (meta/id :checkins :user-id)
:fk-join-alias nil
::lib.column-group/columns [{:display-name "ID", :lib/source :source/implicitly-joinable}
{:display-name "Name", :lib/source :source/implicitly-joinable}
{:display-name "Last Login", :lib/source :source/implicitly-joinable}]}]
groups))
(testing `lib/display-info
(is (=? [{:name "My Card"
:display-name "My Card"
:is-from-join false
:is-implicitly-joinable false}]
:is-implicitly-joinable false}
{:name "USER_ID"
:display-name "User"
:long-display-name "User ID"
:semantic-type :type/FK
:effective-type :type/Integer
:is-aggregation false
:is-breakout false
:is-from-join false
:is-from-previous-stage false
:is-implicitly-joinable true
:is-calculated false}]
(for [group groups]
(lib/display-info query group)))))
(testing `lib/columns-group-columns
......@@ -180,13 +197,30 @@
(is (=? [{::lib.column-group/group-type :group-type/main
::lib.column-group/columns [{:display-name "User ID", :lib/source :source/card}
{:display-name "Count", :lib/source :source/card}
{:display-name "expr", :lib/source :source/expressions}]}]
{:display-name "expr", :lib/source :source/expressions}]}
{::lib.column-group/group-type :group-type/join.implicit
:fk-field-id (meta/id :checkins :user-id)
:fk-join-alias nil
::lib.column-group/columns [{:display-name "ID", :lib/source :source/implicitly-joinable}
{:display-name "Name", :lib/source :source/implicitly-joinable}
{:display-name "Last Login", :lib/source :source/implicitly-joinable}]}]
groups))
(testing `lib/display-info
(is (=? [{:name "My Card"
:display-name "My Card"
:is-from-join false
:is-implicitly-joinable false}]
:is-implicitly-joinable false}
{:name "USER_ID"
:display-name "User"
:long-display-name "User ID"
:semantic-type :type/FK
:effective-type :type/Integer
:is-aggregation false
:is-breakout false
:is-from-join false
:is-from-previous-stage false
:is-implicitly-joinable true
:is-calculated false}]
(for [group groups]
(lib/display-info query group)))))
(testing `lib/columns-group-columns
......
......@@ -332,7 +332,26 @@
:display-name "Count"
:base-type :type/Integer
:lib/source :source/card
:lib/desired-column-alias "count"}]
:lib/desired-column-alias "count"}
;; Implicitly joinable columns
{:name "ID"
:display-name "ID"
:base-type :type/BigInteger
:lib/source :source/implicitly-joinable
:lib/desired-column-alias "USERS__via__USER_ID__ID"
:fk-field-id (meta/id :checkins :user-id)}
{:name "NAME"
:display-name "Name"
:base-type :type/Text
:lib/source :source/implicitly-joinable
:lib/desired-column-alias "USERS__via__USER_ID__NAME"
:fk-field-id (meta/id :checkins :user-id)}
{:name "LAST_LOGIN"
:display-name "Last Login"
:base-type :type/DateTime
:lib/source :source/implicitly-joinable
:lib/desired-column-alias "USERS__via__USER_ID__LAST_LOGIN"
:fk-field-id (meta/id :checkins :user-id)}]
(lib/orderable-columns query)))
(testing `lib/display-info
(is (=? [{:name "USER_ID"
......@@ -344,7 +363,32 @@
:display-name "Count"
:table {:name "My Card", :display-name "My Card"}
:is-from-previous-stage false
:is-implicitly-joinable false}]
:is-implicitly-joinable false}
;; Implicitly joinable columns
{:name "ID"
:display-name "ID"
:long-display-name "User → ID"
:table {:name "USERS"
:display-name "Users"
:is-source-table false}
:is-from-previous-stage false
:is-implicitly-joinable true}
{:name "NAME"
:display-name "Name"
:long-display-name "User → Name"
:table {:name "USERS"
:display-name "Users"
:is-source-table false}
:is-from-previous-stage false
:is-implicitly-joinable true}
{:name "LAST_LOGIN"
:display-name "Last Login"
:long-display-name "User → Last Login"
:table {:name "USERS"
:display-name "Users"
:is-source-table false}
:is-from-previous-stage false
:is-implicitly-joinable true}]
(for [col (lib/orderable-columns query)]
(lib/display-info query col))))))))
......
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