diff --git a/src/metabase/lib/core.cljc b/src/metabase/lib/core.cljc index 9d3af8f64c3aa233767e59edaeec289ffc8d4085..3e5e9821d8958176de1c457e2d8a864371015c2d 100644 --- a/src/metabase/lib/core.cljc +++ b/src/metabase/lib/core.cljc @@ -17,6 +17,7 @@ [metabase.lib.join :as lib.join] [metabase.lib.limit :as lib.limit] [metabase.lib.metadata.calculation :as lib.metadata.calculation] + [metabase.lib.metadata.composed-provider :as lib.metadata.composed-provider] [metabase.lib.metric :as lib.metric] [metabase.lib.native :as lib.native] [metabase.lib.normalize :as lib.normalize] @@ -43,6 +44,7 @@ lib.join/keep-me lib.limit/keep-me lib.metadata.calculation/keep-me + lib.metadata.composed-provider/keep-me lib.metric/keep-me lib.native/keep-me lib.normalize/keep-me @@ -55,193 +57,198 @@ lib.temporal-bucket/keep-me) (shared.ns/import-fns - [lib.aggregation - aggregate - aggregation-clause - aggregation-ref - aggregation-operator-columns - aggregations - aggregations-metadata - available-aggregation-operators - selected-aggregation-operators - count - avg - count-where - distinct - max - median - min - percentile - share - stddev - sum - sum-where - var - cum-count - cum-sum] - [lib.binning - available-binning-strategies - binning - with-binning] - [lib.breakout - breakout - breakoutable-columns - breakouts - breakouts-metadata] - [lib.column-group - columns-group-columns - group-columns] - [lib.common - external-op] - [lib.database - database-id] - [lib.expression - expression - expressions - expressions-metadata - expressionable-columns - expression-ref - + - - - * - / - case - coalesce - abs - log - exp - sqrt - ceil - floor - round - power - interval - relative-datetime - time - absolute-datetime - now - convert-timezone - get-week - get-year - get-month - get-day - get-hour - get-minute - get-second - get-quarter - datetime-add - datetime-subtract - concat - substring - replace - regexextract - length - trim - ltrim - rtrim - upper - lower] - [lib.field - add-field - field-id - fieldable-columns - fields - remove-field - with-fields] - [lib.filter - filter - filters - filterable-columns - filterable-column-operators - filter-clause - filter-operator - and - or - not - = != - < <= - > >= - between - inside - is-null not-null - is-empty not-empty - starts-with ends-with - contains does-not-contain - time-interval - segment] - [lib.join - available-join-strategies - join - join-clause - join-condition-lhs-columns - join-condition-operators - join-condition-rhs-columns - join-condition-update-temporal-bucketing - join-conditions - join-fields - join-lhs-display-name - join-strategy - joinable-columns - joins - raw-join-strategy - suggested-join-condition - with-join-alias - with-join-fields - with-join-strategy - with-join-conditions] - [lib.limit - current-limit - limit] - [lib.metadata.calculation - column-name - describe-query - describe-top-level-key - display-name - display-info - suggested-name - type-of] - [lib.metric - available-metrics] - [lib.native - #?@(:cljs [->TemplateTags - TemplateTags->]) - native-query - raw-native-query - with-native-query - template-tags - with-template-tags - required-native-extras - native-extras - with-native-extras - with-different-database - extract-template-tags] - [lib.order-by - change-direction - order-by - order-by-clause - order-bys - orderable-columns] - [lib.normalize - normalize] - [lib.query - query] - [lib.ref - ref] - [lib.remove-replace - remove-clause - remove-join - rename-join - replace-clause - replace-join] - [lib.segment - available-segments] - [lib.stage - append-stage - drop-stage] - [lib.temporal-bucket - describe-temporal-unit - describe-temporal-interval - describe-relative-datetime - available-temporal-buckets - temporal-bucket - with-temporal-bucket]) + [lib.aggregation + aggregate + aggregation-clause + aggregation-ref + aggregation-operator-columns + aggregations + aggregations-metadata + available-aggregation-operators + selected-aggregation-operators + count + avg + count-where + distinct + max + median + min + percentile + share + stddev + sum + sum-where + var + cum-count + cum-sum] + [lib.binning + available-binning-strategies + binning + with-binning] + [lib.breakout + breakout + breakoutable-columns + breakouts + breakouts-metadata] + [lib.column-group + columns-group-columns + group-columns] + [lib.common + external-op] + [lib.database + database-id] + [lib.expression + expression + expressions + expressions-metadata + expressionable-columns + expression-ref + + + - + * + / + case + coalesce + abs + log + exp + sqrt + ceil + floor + round + power + interval + relative-datetime + time + absolute-datetime + now + convert-timezone + get-week + get-year + get-month + get-day + get-hour + get-minute + get-second + get-quarter + datetime-add + datetime-subtract + concat + substring + replace + regexextract + length + trim + ltrim + rtrim + upper + lower] + [lib.field + add-field + field-id + fieldable-columns + fields + remove-field + with-fields] + [lib.filter + filter + filters + filterable-columns + filterable-column-operators + filter-clause + filter-operator + and + or + not + = != + < <= + > >= + between + inside + is-null not-null + is-empty not-empty + starts-with ends-with + contains does-not-contain + time-interval + segment] + [lib.join + available-join-strategies + join + join-clause + join-condition-lhs-columns + join-condition-operators + join-condition-rhs-columns + join-condition-update-temporal-bucketing + join-conditions + join-fields + join-lhs-display-name + join-strategy + joinable-columns + joins + raw-join-strategy + suggested-join-condition + with-join-alias + with-join-fields + with-join-strategy + with-join-conditions] + [lib.limit + current-limit + limit] + [lib.metadata.calculation + column-name + describe-query + describe-top-level-key + display-name + display-info + metadata + returned-columns + suggested-name + type-of + visible-columns] + [lib.metadata.composed-provider + composed-metadata-provider] + [lib.metric + available-metrics] + [lib.native + #?@(:cljs [->TemplateTags + TemplateTags->]) + native-query + raw-native-query + with-native-query + template-tags + with-template-tags + required-native-extras + native-extras + with-native-extras + with-different-database + extract-template-tags] + [lib.order-by + change-direction + order-by + order-by-clause + order-bys + orderable-columns] + [lib.normalize + normalize] + [lib.query + query] + [lib.ref + ref] + [lib.remove-replace + remove-clause + remove-join + rename-join + replace-clause + replace-join] + [lib.segment + available-segments] + [lib.stage + append-stage + drop-stage] + [lib.temporal-bucket + describe-temporal-unit + describe-temporal-interval + describe-relative-datetime + available-temporal-buckets + temporal-bucket + with-temporal-bucket]) diff --git a/src/metabase/lib/field.cljc b/src/metabase/lib/field.cljc index 952f17a665ea7ae09b2512de10c177cd3608c6f8..d6303d83c2455cbe6e0db242921bf793a27a6ded 100644 --- a/src/metabase/lib/field.cljc +++ b/src/metabase/lib/field.cljc @@ -122,9 +122,9 @@ {:base-type base-type}) (when-let [effective-type ((some-fn :effective-type :base-type) opts)] {:effective-type effective-type}) - ;; TODO -- some of the other stuff in `opts` probably ought to be merged in here as well. Also, if the Field is - ;; temporally bucketed, the base-type/effective-type would probably be affected, right? We should probably be - ;; taking that into consideration? + ;; TODO -- some of the other stuff in `opts` probably ought to be merged in here as well. Also, if + ;; the Field is temporally bucketed, the base-type/effective-type would probably be affected, right? + ;; We should probably be taking that into consideration? (when-let [binning (:binning opts)] {::binning binning}) (when-let [unit (:temporal-unit opts)] diff --git a/src/metabase/query_processor/middleware/annotate.clj b/src/metabase/query_processor/middleware/annotate.clj index 21ec1aeb2ea7985695a918216be7000a1f61ad34..b9e5c6ee9e06c9c91638073e9785438c02dd38e0 100644 --- a/src/metabase/query_processor/middleware/annotate.clj +++ b/src/metabase/query_processor/middleware/annotate.clj @@ -347,7 +347,7 @@ ;; why is this the case? Who knows! But that's the old pre-MLv2 behavior. I think we should try to fix it, but it's ;; probably going to involve updating a ton of tests that encode the old behavior. (binding [lib.metadata.calculation/*display-name-style* :long] - (-> (lib.metadata.calculation/metadata (mlv2-query inner-query) -1 mlv2-clause) + (-> (lib/metadata (mlv2-query inner-query) -1 mlv2-clause) (update-keys u/->snake_case_en) (dissoc :lib/type))))) @@ -362,7 +362,7 @@ {:error/message "legacy inner-query with :source-table or :source-query"} (some-fn :source-table :source-query)]] ag-clause] - (lib.metadata.calculation/column-name (mlv2-query inner-query) (lib.convert/->pMBQL ag-clause))) + (lib/column-name (mlv2-query inner-query) (lib.convert/->pMBQL ag-clause))) ;;; ----------------------------------------- Putting it all together (MBQL) ----------------------------------------- diff --git a/src/metabase/query_processor/store.clj b/src/metabase/query_processor/store.clj index 662fcb07e4befc6608a3ed1bbee061abaae8b76e..56592372dff4801b5a5149fc81eed0b52d4a71a1 100644 --- a/src/metabase/query_processor/store.clj +++ b/src/metabase/query_processor/store.clj @@ -13,8 +13,7 @@ but fetching all Fields in a single pass and storing them for reuse is dramatically more efficient than fetching those Fields potentially dozens of times in a single query execution." (:require - [metabase.lib.metadata.composed-provider - :as lib.metadata.composed-provider] + [metabase.lib.core :as lib] [metabase.lib.metadata.jvm :as lib.metadata.jvm] [metabase.lib.metadata.protocols :as lib.metadata.protocols] [metabase.lib.schema.id :as lib.schema.id] @@ -344,6 +343,6 @@ "Create a new MLv2 metadata provider that uses the QP store." [] (cached ::metadata-provider - (lib.metadata.composed-provider/composed-metadata-provider + (lib/composed-metadata-provider (base-metadata-provider) (lib.metadata.jvm/application-database-metadata-provider (:id (database)))))) diff --git a/test/metabase/lib/aggregation_test.cljc b/test/metabase/lib/aggregation_test.cljc index 8b12f0080262b0168d0ff3f6334462d43e8cd78e..02b9541effd38811221926fdfd6b4185bb397076 100644 --- a/test/metabase/lib/aggregation_test.cljc +++ b/test/metabase/lib/aggregation_test.cljc @@ -5,7 +5,6 @@ [medley.core :as m] [metabase.lib.convert :as lib.convert] [metabase.lib.core :as lib] - [metabase.lib.metadata.calculation :as lib.metadata.calculation] [metabase.lib.query :as lib.query] [metabase.lib.schema.expression :as lib.schema.expression] [metabase.lib.test-metadata :as meta] @@ -36,10 +35,10 @@ (op venues-category-id-metadata))))))) (defn- aggregation-display-name [aggregation-clause] - (lib.metadata.calculation/display-name lib.tu/venues-query -1 aggregation-clause)) + (lib/display-name lib.tu/venues-query -1 aggregation-clause)) (defn- aggregation-column-name [aggregation-clause] - (lib.metadata.calculation/column-name lib.tu/venues-query -1 aggregation-clause)) + (lib/column-name lib.tu/venues-query -1 aggregation-clause)) (deftest ^:parallel aggregation-names-test (are [aggregation-clause expected] (= expected @@ -103,7 +102,7 @@ ;;; make sure that given an existing query, the expected description was generated correctly. (defn- describe-legacy-query [query] - (lib.metadata.calculation/describe-query (lib.query/query meta/metadata-provider (lib.convert/->pMBQL query)))) + (lib/describe-query (lib.query/query meta/metadata-provider (lib.convert/->pMBQL query)))) (deftest ^:parallel describe-multiple-aggregations-test (let [query {:database (meta/id) @@ -132,7 +131,7 @@ (col-info-for-aggregation-clause query -1 clause)) ([query stage clause] - (lib.metadata.calculation/metadata query stage clause))) + (lib/metadata query stage clause))) (deftest ^:parallel col-info-for-aggregation-clause-test (are [clause expected] (=? expected @@ -200,7 +199,7 @@ (deftest ^:parallel type-of-sum-test (is (= :type/BigInteger - (lib.metadata.calculation/type-of + (lib/type-of lib.tu/venues-query [:sum {:lib/uuid (str (random-uuid))} @@ -229,7 +228,7 @@ (is (= (condp = (first arg) :field :type/BigInteger :type/Integer) - (lib.metadata.calculation/type-of lib.tu/venues-query clause))))))) + (lib/type-of lib.tu/venues-query clause))))))) (deftest ^:parallel expression-ref-inside-aggregation-type-of-test (let [query (-> lib.tu/venues-query @@ -611,7 +610,7 @@ :name "sum" :display-name "Sum of Price" :lib/source :source/aggregations} - (lib.metadata.calculation/metadata query (first (lib/aggregations-metadata query -1)))))))) + (lib/metadata query (first (lib/aggregations-metadata query -1)))))))) (deftest ^:parallel count-aggregation-type-test (testing "Count aggregation should produce numeric columns" @@ -632,7 +631,7 @@ (is (=? {:stages [{:aggregation [[:var {} [:field {} (meta/id :venues :price)]]]}]} query)) (is (= "Venues, Variance of Price" - (lib.metadata.calculation/describe-query query))))) + (lib/describe-query query))))) (deftest ^:parallel aggregation-ref-display-info-test (let [query (-> lib.tu/venues-query @@ -640,18 +639,18 @@ ag-uuid (:lib/source-uuid (first (lib/aggregations-metadata query))) ag-ref [:aggregation {:lib/uuid "8e76cd35-465d-4a2b-a03a-55857f07c4e0", :effective-type :type/Float} ag-uuid]] (is (= :type/Float - (lib.metadata.calculation/type-of query ag-ref))) + (lib/type-of query ag-ref))) (is (= "Average of Price + 1" - (lib.metadata.calculation/display-name query ag-ref))) + (lib/display-name query ag-ref))) (is (=? {:lib/type :metadata/column :lib/source :source/aggregations :display-name "Average of Price + 1" :effective-type :type/Float :lib/source-uuid ag-uuid} - (lib.metadata.calculation/metadata query ag-ref))) + (lib/metadata query ag-ref))) (is (=? {:display-name "Average of Price + 1" :effective-type :type/Float} - (lib.metadata.calculation/display-info query ag-ref))))) + (lib/display-info query ag-ref))))) (deftest ^:parallel aggregate-should-drop-invalid-parts (let [query (-> lib.tu/venues-query @@ -720,7 +719,7 @@ :lib/source-uuid string? :lib/source-column-alias "sum" :lib/desired-column-alias "sum"}] - (lib.metadata.calculation/returned-columns query))))) + (lib/returned-columns query))))) (deftest ^:parallel count-display-name-test (testing "#31255" @@ -746,7 +745,7 @@ "query") (is (= [(expected (if field? :with-field :without-field))] (map (partial lib/display-name query) - (lib.metadata.calculation/returned-columns query))) + (lib/returned-columns query))) "display name")))))))) (deftest ^:parallel aggregation-name-from-previous-stage-test diff --git a/test/metabase/lib/card_test.cljc b/test/metabase/lib/card_test.cljc index 0a756831a1343356683e98c61060024dfacc2efc..10b3677cbb7c71c3b5c819764027e9a7beda5462 100644 --- a/test/metabase/lib/card_test.cljc +++ b/test/metabase/lib/card_test.cljc @@ -3,8 +3,6 @@ [clojure.set :as set] [clojure.test :refer [deftest is testing]] [metabase.lib.core :as lib] - [metabase.lib.metadata.calculation :as lib.metadata.calculation] - [metabase.lib.metadata.composed-provider :as lib.metadata.composed-provider] [metabase.lib.test-metadata :as meta] [metabase.lib.test-util :as lib.tu] [metabase.util :as u] @@ -26,7 +24,7 @@ :lib/source :source/card :lib/source-column-alias "count" :lib/desired-column-alias "count"}] - (lib.metadata.calculation/returned-columns query))) + (lib/returned-columns query))) (testing `lib/display-info (is (=? [{:name "USER_ID" :display-name "User ID" @@ -47,7 +45,7 @@ :is-from-join false :is-calculated false :is-implicitly-joinable false}] - (for [col (lib.metadata.calculation/returned-columns query)] + (for [col (lib/returned-columns query)] (lib/display-info query col)))))))) (deftest ^:parallel card-source-query-metadata-test @@ -67,7 +65,7 @@ (-> col (assoc :lib/source :source/card) (dissoc :fk-target-field-id))) - (lib.metadata.calculation/returned-columns query))))))) + (lib/returned-columns query))))))) (deftest ^:parallel card-results-metadata-merge-metadata-provider-metadata-test (testing "Merge metadata from the metadata provider into result-metadata (#30046)" @@ -79,12 +77,12 @@ :lib/desired-column-alias "USER_ID"} {:lib/type :metadata/column :name "count"}] - (lib.metadata.calculation/returned-columns query)))))) + (lib/returned-columns query)))))) (deftest ^:parallel visible-columns-use-result--metadata-test (testing "visible-columns should use the Card's `:result-metadata` (regardless of what's actually in the Card)" (let [venues-query (lib/query - (lib.metadata.composed-provider/composed-metadata-provider + (lib/composed-metadata-provider (lib.tu/mock-metadata-provider {:cards [(assoc (:orders lib.tu/mock-cards) :dataset-query lib.tu/venues-query)]}) meta/metadata-provider) @@ -92,4 +90,4 @@ (is (= ["ID" "SUBTOTAL" "TOTAL" "TAX" "DISCOUNT" "QUANTITY" "CREATED_AT" "PRODUCT_ID" "USER_ID"] (mapv :name (get-in lib.tu/mock-cards [:orders :result-metadata])))) (is (= ["ID" "SUBTOTAL" "TOTAL" "TAX" "DISCOUNT" "QUANTITY" "CREATED_AT" "PRODUCT_ID" "USER_ID"] - (mapv :name (lib.metadata.calculation/visible-columns venues-query))))))) + (mapv :name (lib/visible-columns venues-query))))))) diff --git a/test/metabase/lib/database_test.cljc b/test/metabase/lib/database_test.cljc index 9e4a68ad5a0f7af57e3099c131d408e7447cc558..6ebe47a0981acd67c51677781f1fb2eb2e136674 100644 --- a/test/metabase/lib/database_test.cljc +++ b/test/metabase/lib/database_test.cljc @@ -2,8 +2,6 @@ (:require [clojure.test :refer [deftest is testing]] [metabase.lib.core :as lib] - [metabase.lib.metadata.composed-provider - :as lib.metadata.composed-provider] [metabase.lib.test-metadata :as meta] [metabase.lib.test-util :as lib.tu] [metabase.mbql.schema :as mbql.s])) @@ -26,7 +24,7 @@ (let [query (assoc query :lib/metadata meta/metadata-provider)] (is (nil? (lib/database-id query))))) (testing "CardMetadata is missing `:database-id`" - (let [metadata-provider (lib.metadata.composed-provider/composed-metadata-provider + (let [metadata-provider (lib/composed-metadata-provider meta/metadata-provider (lib.tu/mock-metadata-provider {:cards [{:name "My Card" diff --git a/test/metabase/lib/expression_test.cljc b/test/metabase/lib/expression_test.cljc index 07b619ccaf8bfabe314281c7f8b3ca47c91c4fa4..aba11cd7dfa125fb96bb21ff77d852fc538dc8f0 100644 --- a/test/metabase/lib/expression_test.cljc +++ b/test/metabase/lib/expression_test.cljc @@ -5,7 +5,6 @@ [malli.core :as mc] [metabase.lib.core :as lib] [metabase.lib.expression :as lib.expression] - [metabase.lib.metadata.calculation :as lib.metadata.calculation] [metabase.lib.schema :as lib.schema] [metabase.lib.schema.expression :as lib.schema.expression] [metabase.lib.test-metadata :as meta] @@ -88,7 +87,7 @@ :name "double-price" :display-name "double-price" :lib/source :source/expressions} - (lib.metadata.calculation/metadata + (lib/metadata (-> lib.tu/venues-query (lib/expression "double-price" (lib/* (lib.tu/field-clause :venues :price {:base-type :type/Integer}) 2))) @@ -107,7 +106,7 @@ :display-name "prev_month" :base-type :type/DateTime :lib/source :source/expressions}] - (lib.metadata.calculation/returned-columns query))))) + (lib/returned-columns query))))) (deftest ^:parallel date-interval-names-test (let [clause [:datetime-add @@ -116,9 +115,9 @@ -1 :day]] (is (= "DATE_minus_1_day" - (lib.metadata.calculation/column-name lib.tu/venues-query -1 clause))) + (lib/column-name lib.tu/venues-query -1 clause))) (is (= "Date - 1 day" - (lib.metadata.calculation/display-name lib.tu/venues-query -1 clause))))) + (lib/display-name lib.tu/venues-query -1 clause))))) (deftest ^:parallel expression-reference-names-test (let [query (-> lib.tu/venues-query @@ -130,20 +129,20 @@ {:lib/uuid (str (random-uuid))} [:expression {:lib/uuid (str (random-uuid))} "double-price"]]] (is (= "Sum of double-price" - (lib.metadata.calculation/display-name query -1 expr))) + (lib/display-name query -1 expr))) (is (= "sum" - (lib.metadata.calculation/column-name query -1 expr))))) + (lib/column-name query -1 expr))))) (deftest ^:parallel coalesce-names-test (let [clause [:coalesce {} (lib.tu/field-clause :venues :name) "<Venue>"]] (is (= "NAME" - (lib.metadata.calculation/column-name lib.tu/venues-query -1 clause))) + (lib/column-name lib.tu/venues-query -1 clause))) (is (= "Name" - (lib.metadata.calculation/display-name lib.tu/venues-query -1 clause))))) + (lib/display-name lib.tu/venues-query -1 clause))))) (defn- infer-first [expr] - (lib.metadata.calculation/metadata + (lib/metadata (-> lib.tu/venues-query (lib/expression "expr" expr)) -1 @@ -190,7 +189,7 @@ :name "last-login-plus-2" :display-name "last-login-plus-2" :lib/source :source/expressions} - (lib.metadata.calculation/metadata + (lib/metadata (-> lib.tu/venues-query (lib/expression "last-login-plus-2" [:datetime-add @@ -206,7 +205,7 @@ (is (thrown-with-msg? #?(:clj Throwable :cljs js/Error) #"No expression named \"double-price\"" - (lib.metadata.calculation/metadata + (lib/metadata (-> lib.tu/venues-query (lib/expression "one-hundred" (lib/+ 100 0))) -1 @@ -226,7 +225,7 @@ (is (= (condp = arg-2 1 :type/Integer 1.0 :type/Number) - (lib.metadata.calculation/type-of lib.tu/venues-query clause))))) + (lib/type-of lib.tu/venues-query clause))))) (testing "/ should always return type/Float" (doseq [arg-2 [1 1.0] :let [clause [:/ {:lib/uuid (str (random-uuid))} field arg-2]]] @@ -234,7 +233,7 @@ (is (= :type/Float (lib.schema.expression/type-of clause))) (is (= :type/Float - (lib.metadata.calculation/type-of lib.tu/venues-query clause))))))))) + (lib/type-of lib.tu/venues-query clause))))))))) (deftest ^:parallel expressions-names-test (testing "expressions should include the original expression name" @@ -286,7 +285,7 @@ (is (= ["ID" "NAME" "a"] (expressionable-expressions-for-position 1))) (is (= ["ID" "NAME" "a" "b"] (expressionable-expressions-for-position nil))) (is (= ["ID" "NAME" "a" "b"] (expressionable-expressions-for-position 2))) - (is (= (lib.metadata.calculation/visible-columns query) + (is (= (lib/visible-columns query) (lib/expressionable-columns query nil))))) (deftest ^:parallel infix-display-name-with-expressions-test @@ -298,4 +297,4 @@ (lib.tu/field-literal-ref query "QUANTITY"))))] (is (= ["ID" "Subtotal" "Total" "Tax" "Discount" "Quantity" "Created At" "Product ID" "User ID" "Unit price"] (map (partial lib/display-name query) - (lib.metadata.calculation/returned-columns query))))))) + (lib/returned-columns query))))))) diff --git a/test/metabase/lib/field_test.cljc b/test/metabase/lib/field_test.cljc index 353257da75bed8f81aaafffe583af671fa9f83c2..32284d50d6a12133c1fcde343b2b489409e7f5c1 100644 --- a/test/metabase/lib/field_test.cljc +++ b/test/metabase/lib/field_test.cljc @@ -6,9 +6,6 @@ [metabase.lib.core :as lib] [metabase.lib.field :as lib.field] [metabase.lib.metadata :as lib.metadata] - [metabase.lib.metadata.calculation :as lib.metadata.calculation] - [metabase.lib.metadata.composed-provider - :as lib.metadata.composed-provider] [metabase.lib.options :as lib.options] [metabase.lib.schema.expression :as lib.schema.expression] [metabase.lib.temporal-bucket :as lib.temporal-bucket] @@ -65,7 +62,7 @@ (deftest ^:parallel col-info-combine-parent-field-names-test (letfn [(col-info [a-field-clause] - (lib.metadata.calculation/metadata + (lib/metadata {:lib/type :mbql/query :lib/metadata grandparent-parent-child-metadata-provider :database (meta/id) @@ -95,7 +92,7 @@ :display-name "sum of User ID" :base-type :type/Integer :semantic-type :type/FK} - (lib.metadata.calculation/metadata + (lib/metadata lib.tu/native-query -1 [:field {:lib/uuid (str (random-uuid)), :base-type :type/Integer} "sum"]))))) @@ -132,7 +129,7 @@ :default "Name" :long "Categories → Name") (is (=? {:display-name "Name"} - (lib.metadata.calculation/metadata query -1 field))))) + (lib/metadata query -1 field))))) (deftest ^:parallel legacy-query-joined-field-display-name-test (testing "Should calculate correct display names for joined fields when source query is a legacy MBQL query (#31368)" @@ -150,7 +147,7 @@ :dataset-query card-query} ;; legacy result metadata will already include the Join name in the `:display-name`, so simulate that. Make ;; sure we're not including it twice. - result-metadata (for [col (lib.metadata.calculation/returned-columns + result-metadata (for [col (lib/returned-columns (lib/query meta/metadata-provider card-query))] (cond-> col (:source-alias col) @@ -162,7 +159,7 @@ "Card with result metadata" (assoc card-def :result-metadata result-metadata)}] (testing (str \newline message) - (let [metadata-provider (lib.metadata.composed-provider/composed-metadata-provider + (let [metadata-provider (lib/composed-metadata-provider (lib.tu/mock-metadata-provider {:cards [card-def]}) meta/metadata-provider) @@ -222,7 +219,7 @@ :unit :day-of-month} (lib/temporal-bucket field)))) (is (= "Date: Day of month" - (lib.metadata.calculation/display-name query -1 field))))) + (lib/display-name query -1 field))))) (def ^:private temporal-bucketing-mock-metadata "Mock metadata for testing temporal bucketing stuff. @@ -238,7 +235,7 @@ time-field (assoc (meta/field-metadata :orders :created-at) :base-type :type/Time :effective-type :type/Time) - metadata-provider (lib.metadata.composed-provider/composed-metadata-provider + metadata-provider (lib/composed-metadata-provider (lib.tu/mock-metadata-provider {:fields [date-field time-field]}) @@ -260,7 +257,7 @@ (testing (str what " unit = " unit "\n\n" (u/pprint-to-str x') "\n") (testing "should calculate correct effective type" (is (= effective-type - (lib.metadata.calculation/type-of (:query temporal-bucketing-mock-metadata) x')))) + (lib/type-of (:query temporal-bucketing-mock-metadata) x')))) (testing "lib/temporal-bucket should return the option" (is (= {:lib/type :option/temporal-bucketing :unit unit} @@ -339,14 +336,14 @@ field)) (testing "(lib/binning <column-metadata>)" (is (=? binning-typed - (lib/binning (lib.metadata.calculation/metadata query -1 field))))) + (lib/binning (lib/metadata query -1 field))))) (testing "(lib/binning <field-ref>)" (is (=? binning-typed (lib/binning field)))) #?(:clj ;; i18n/trun doesn't work in the CLJS tests, only in proper FE, so this test is JVM-only. (is (= "Subtotal: 10 bins" - (lib.metadata.calculation/display-name query -1 field)))))) + (lib/display-name query -1 field)))))) (deftest ^:parallel with-binning-test (doseq [[binning1 binning2] (partition 2 1 [{:strategy :default} @@ -420,7 +417,7 @@ (testing "There should be no binning strategies for expressions as they are not supported (#31367)" (let [query (-> lib.tu/venues-query (lib/expression "myadd" (lib/+ 1 (meta/field-metadata :venues :category-id))))] - (is (empty? (->> (lib.metadata.calculation/returned-columns query) + (is (empty? (->> (lib/returned-columns query) (m/find-first (comp #{"myadd"} :name)) (lib/available-binning-strategies query))))))) @@ -475,7 +472,7 @@ {:lib/desired-column-alias "PRICE"} {:lib/desired-column-alias "Cat__ID"} {:lib/desired-column-alias "Cat__NAME"}] - (lib.metadata.calculation/returned-columns query))))) + (lib/returned-columns query))))) (deftest ^:parallel field-ref-type-of-test (testing "Make sure we can calculate field ref type information correctly" @@ -483,7 +480,7 @@ (is (= ::lib.schema.expression/type.unknown (lib.schema.expression/type-of clause))) (is (= :type/BigInteger - (lib.metadata.calculation/type-of lib.tu/venues-query clause)))))) + (lib/type-of lib.tu/venues-query clause)))))) (deftest ^:parallel implicitly-joinable-field-display-name-test (testing "Should be able to calculate a display name for an implicitly joinable Field" @@ -516,7 +513,7 @@ ;; this uses a legacy `card__<id>` `:table-id` intentionally; we don't currently have logic that parses this to ;; something like `:card-id` for Column Metadata yet. Make sure it works correctly. (let [query (assoc lib.tu/venues-query :lib/metadata lib.tu/metadata-provider-with-card) - field (lib.metadata.calculation/metadata query (assoc (lib.metadata/field query (meta/id :venues :name)) + field (lib/metadata query (assoc (lib.metadata/field query (meta/id :venues :name)) :table-id "card__1"))] (is (=? {:name "NAME" :display-name "Name" @@ -534,7 +531,7 @@ :query {:source-table (meta/id :checkins) :aggregation [[:count]] :breakout [[:field (meta/id :checkins :user-id) nil]]}}} - metadata-provider (lib.metadata.composed-provider/composed-metadata-provider + metadata-provider (lib/composed-metadata-provider meta/metadata-provider (lib.tu/mock-metadata-provider {:cards [card-1]})) @@ -578,14 +575,14 @@ :lib/source :source/aggregations :lib/source-column-alias "avg" :lib/desired-column-alias "avg"}] - (lib.metadata.calculation/returned-columns query)))))) + (lib/returned-columns query)))))) (deftest ^:parallel with-fields-test (let [query (-> lib.tu/venues-query (lib/expression "myadd" (lib/+ 1 (meta/field-metadata :venues :category-id))) (lib/with-fields [(meta/field-metadata :venues :id) (meta/field-metadata :venues :name)])) fields-metadata (fn [query] - (map (partial lib.metadata.calculation/metadata query) + (map (partial lib/metadata query) (lib/fields query))) metadatas (fields-metadata query)] (testing "Expressions should be included in :fields by default (#31236)" @@ -615,7 +612,7 @@ (lib/with-fields [(meta/field-metadata :venues :id)]) (lib/expression "myadd" (lib/+ 1 (meta/field-metadata :venues :category-id)))) fields-metadata (fn [query] - (map (partial lib.metadata.calculation/metadata query) + (map (partial lib/metadata query) (lib/fields query))) metadatas (fields-metadata query)] (testing "Expressions should be included in :fields by default (#31236)" @@ -673,7 +670,7 @@ :lib/card-id 3 :lib/source-column-alias "Field 4" :lib/desired-column-alias "Field 4"}] - (lib.metadata.calculation/returned-columns query))) + (lib/returned-columns query))) (is (= {:lib/type :metadata/column :base-type :type/Text :effective-type :type/Text @@ -684,7 +681,7 @@ :lib/source :source/card :lib/source-column-alias "Field 4" :lib/source-uuid "aa0e13af-29b3-4c27-a880-a10c33e55a3e"} - (lib.metadata.calculation/metadata + (lib/metadata query [:field {:lib/uuid "aa0e13af-29b3-4c27-a880-a10c33e55a3e", :base-type :type/Text} 4])))))) @@ -710,7 +707,7 @@ :lib/desired-column-alias "Categories__NAME"} joined-col)) (testing "Metadata should not contain inherited join information" - (is (not-any? :metabase.lib.join/join-alias (lib.metadata.calculation/returned-columns query)))) + (is (not-any? :metabase.lib.join/join-alias (lib/returned-columns query)))) (testing "Reference a joined column from a previous stage w/ desired-column-alias and w/o join-alias" (is (=? {:lib/type :mbql.stage/mbql, :breakout [[:field @@ -811,7 +808,7 @@ fields-of)))) (testing "when given as a list" (is (=? fields - (let [returned (lib.metadata.calculation/returned-columns query -1 (first (lib/joins query -1)))] + (let [returned (lib/returned-columns query -1 (first (lib/joins query -1)))] (-> query (lib.util/update-query-stage -1 update-in [:joins 0] lib/with-join-fields (take 3 returned)) (#'lib.field/populate-fields-for-stage -1) @@ -860,7 +857,7 @@ (testing "custom expressions are ignored" (let [query (-> (lib/query meta/metadata-provider (meta/table-metadata :orders)) (lib/expression "custom" (lib/* 3 2))) - expr-column (->> (lib.metadata.calculation/returned-columns query) + expr-column (->> (lib/returned-columns query) (remove :id) first) own-columns (filter #(= (:lib/source %) :source/table-defaults) @@ -880,7 +877,7 @@ (lib/suggested-join-condition <> -1) vector (lib/join-clause (meta/table-metadata :people))))) - all-columns (lib.metadata.calculation/returned-columns query) + all-columns (lib/returned-columns query) table-columns (lib/fieldable-columns query -1) join-columns (filter #(= (:lib/source %) :source/joins) all-columns)] ;; Orders has 9 columns, People has 13, for 22 total. @@ -901,7 +898,7 @@ (map lib/ref) (map #(lib.options/update-options % dissoc :lib/uuid)) sorted-fields) - (->> (lib.metadata.calculation/returned-columns field-query) + (->> (lib/returned-columns field-query) (map lib/ref) sorted-fields)))) (testing "properly adds a top-level field" @@ -912,7 +909,7 @@ (map #(lib.options/update-options % dissoc :lib/uuid)) sorted-fields) (->> (lib/add-field field-query -1 (nth table-columns 6)) - lib.metadata.calculation/returned-columns + lib/returned-columns (map lib/ref) sorted-fields)))))) @@ -927,7 +924,7 @@ (map lib/ref) (map #(lib.options/update-options % dissoc :lib/uuid)) sorted-fields) - (->> (lib.metadata.calculation/returned-columns join-fields-query) + (->> (lib/returned-columns join-fields-query) (map lib/ref) sorted-fields)))) (testing "properly adds a join field" @@ -938,7 +935,7 @@ (map #(lib.options/update-options % dissoc :lib/uuid)) sorted-fields) (->> (lib/add-field join-fields-query -1 (nth join-columns 6)) - lib.metadata.calculation/returned-columns + lib/returned-columns (map lib/ref) sorted-fields)))) (testing "does nothing if the join field is already selected" @@ -947,11 +944,11 @@ (testing "adding implicit join fields" (let [query (lib/query meta/metadata-provider (meta/table-metadata :orders)) - viz-columns (lib.metadata.calculation/visible-columns query) + viz-columns (lib/visible-columns query) table-columns (lib/fieldable-columns query -1) implicit-columns (filter #(= (:lib/source %) :source/implicitly-joinable) viz-columns)] (is (= (map #(dissoc % :selected?) table-columns) - (lib.metadata.calculation/returned-columns query))) + (lib/returned-columns query))) (testing "with no :fields set" (testing "populates the table's fields plus the implicitly joined field" (is (=? (->> (concat table-columns @@ -1023,7 +1020,7 @@ (testing "custom expressions throw an exception" (let [query (-> (lib/query meta/metadata-provider (meta/table-metadata :orders)) (lib/expression "custom" (lib/* 3 2))) - expr-column (->> (lib.metadata.calculation/returned-columns query) + expr-column (->> (lib/returned-columns query) (remove :id) first)] (is (thrown-with-msg? #?(:cljs :default :clj Exception) #"Custom expressions cannot be de-selected." @@ -1035,7 +1032,7 @@ (lib/suggested-join-condition <> -1) vector (lib/join-clause (meta/table-metadata :people))))) - all-columns (lib.metadata.calculation/returned-columns query) + all-columns (lib/returned-columns query) table-columns (lib/fieldable-columns query -1) join-columns (filter #(= (:lib/source %) :source/joins) all-columns)] ;; Orders has 9 columns, People has 13, for 22 total. @@ -1053,7 +1050,7 @@ (map #(lib.options/update-options % dissoc :lib/uuid)) sorted-fields) (->> (lib/remove-field field-query -1 (first table-columns)) - lib.metadata.calculation/returned-columns + lib/returned-columns (map lib/ref) sorted-fields)))) (testing "does nothing if field not listed" @@ -1070,7 +1067,7 @@ (map #(lib.options/update-options % dissoc :lib/uuid)) sorted-fields) (->> (lib/remove-field query -1 created-at) - lib.metadata.calculation/returned-columns + lib/returned-columns (map lib/ref) sorted-fields)))))) @@ -1086,7 +1083,7 @@ (map #(lib.options/update-options % dissoc :lib/uuid)) sorted-fields) (->> (lib/remove-field join-fields-query -1 (first join-columns)) - lib.metadata.calculation/returned-columns + lib/returned-columns (map lib/ref) sorted-fields)))) (testing "does nothing if the join field is already selected" @@ -1095,12 +1092,12 @@ (testing "removing implicit join fields" (let [query (lib/query meta/metadata-provider (meta/table-metadata :orders)) - viz-columns (lib.metadata.calculation/visible-columns query) + viz-columns (lib/visible-columns query) table-columns (lib/fieldable-columns query -1) implicit-columns (filter #(= (:lib/source %) :source/implicitly-joinable) viz-columns) implied-query (lib/add-field query -1 (first implicit-columns))] (is (= (map #(dissoc % :selected?) table-columns) - (lib.metadata.calculation/returned-columns query))) + (lib/returned-columns query))) (testing "with no :fields set does nothing" (is (=? query (lib/remove-field query -1 (first implicit-columns))))) @@ -1120,7 +1117,7 @@ (deftest ^:parallel add-remove-fields-source-card-test (testing "query with a source card" (let [query lib.tu/query-with-source-card - columns (lib.metadata.calculation/visible-columns query)] + columns (lib/visible-columns query)] (testing "allows removing each of the fields" (is (=? [[:field {} "USER_ID"]] (-> query @@ -1152,7 +1149,7 @@ (lib/breakout -1 (lib/with-temporal-bucket (meta/field-metadata :orders :created-at) :month)) lib/append-stage) stage1 (lib.util/query-stage query 1) - [created-at sum] (lib.metadata.calculation/visible-columns query 1 stage1)] + [created-at sum] (lib/visible-columns query 1 stage1)] (testing "populating :fields" (is (nil? (:fields stage1))) (is (=? [[:field {} "CREATED_AT"] @@ -1188,7 +1185,7 @@ (deftest ^:parallel add-remove-fields-native-query-test (testing "native query" (let [native-query lib.tu/native-query - native-columns (lib.metadata.calculation/visible-columns native-query)] + native-columns (lib/visible-columns native-query)] (testing "throws when editing fields directly" (is (thrown-with-msg? #?(:cljs :default :clj Exception) #"Fields cannot be adjusted on native queries" (lib/add-field native-query -1 (first native-columns)))) @@ -1197,7 +1194,7 @@ (testing "with MBQL stage" (let [query (lib/append-stage native-query) stage1 (lib.util/query-stage query 1) - columns (lib.metadata.calculation/visible-columns query 1 stage1)] + columns (lib/visible-columns query 1 stage1)] (testing "removing each field" (is (=? [[:field {} "sum"]] (-> query @@ -1228,7 +1225,7 @@ (lib/aggregate -1 (lib/sum (meta/field-metadata :orders :subtotal))) (lib/breakout -1 (lib/with-temporal-bucket (meta/field-metadata :orders :created-at) :month))) stage (lib.util/query-stage query -1) - columns (lib.metadata.calculation/returned-columns query) + columns (lib/returned-columns query) created-at [:field {} (meta/id :orders :created-at)] sum [:aggregation {} (-> stage :aggregation first lib.options/uuid)]] (testing "removing each field" diff --git a/test/metabase/lib/join_test.cljc b/test/metabase/lib/join_test.cljc index 35460d82f2c6408c84bb55a5bb23ca04aa43b211..984e5cdcd9bebd81324ac85610baafa3ac8cc45e 100644 --- a/test/metabase/lib/join_test.cljc +++ b/test/metabase/lib/join_test.cljc @@ -5,8 +5,6 @@ [metabase.lib.core :as lib] [metabase.lib.join :as lib.join] [metabase.lib.metadata :as lib.metadata] - [metabase.lib.metadata.calculation :as lib.metadata.calculation] - [metabase.lib.metadata.composed-provider :as lib.metadata.composed-provider] [metabase.lib.options :as lib.options] [metabase.lib.test-metadata :as meta] [metabase.lib.test-util :as lib.tu] @@ -166,7 +164,7 @@ :id (meta/id :categories :name) :fk-field-id (meta/id :venues :category-id) :lib/source :source/fields}] - (lib.metadata.calculation/returned-columns query -1 query)))))) + (lib/returned-columns query -1 query)))))) (deftest ^:parallel col-info-explicit-join-test (testing "Display name for a joined field should include a nice name for the join; include other info like :source-alias" @@ -192,7 +190,7 @@ :source-table (meta/id :categories)}]}]}] :database (meta/id) :lib/metadata meta/metadata-provider}] - (let [metadata (lib.metadata.calculation/returned-columns query)] + (let [metadata (lib/returned-columns query)] (is (=? [(merge (meta/field-metadata :categories :name) {:display-name "Name" :lib/source :source/fields @@ -213,7 +211,7 @@ :query {:source-table (meta/id :checkins) :aggregation [[:count]] :breakout [[:field (meta/id :checkins :user-id) nil]]}}} - metadata-provider (lib.metadata.composed-provider/composed-metadata-provider + metadata-provider (lib/composed-metadata-provider meta/metadata-provider (lib.tu/mock-metadata-provider {:cards [card-1]})) @@ -248,7 +246,7 @@ :lib/source :source/joins :lib/source-column-alias "count" :lib/desired-column-alias "checkins_by_user__count"}] - (lib.metadata.calculation/returned-columns query -1 join))) + (lib/returned-columns query -1 join))) (is (= (assoc card-1 :lib/type :metadata/card) (lib.join/joined-thing query join))))) @@ -277,7 +275,7 @@ :lib/desired-column-alias "Cat__NAME" ::lib.join/join-alias "Cat" :lib/source :source/joins}] - (lib.metadata.calculation/returned-columns query))) + (lib/returned-columns query))) (is (=? {:lib/type :metadata/table :db-id (meta/id) :name "CATEGORIES" @@ -306,7 +304,7 @@ :long-display-name "Cat → Name" :display-name "Name"}] (map #(lib/display-info query %) - (lib.metadata.calculation/returned-columns query)))) + (lib/returned-columns query)))) (testing "Introduce a new stage" (let [query' (lib/append-stage query)] (is (=? [{:name "ID" @@ -321,7 +319,7 @@ :lib/source-column-alias "Cat__NAME" :lib/desired-column-alias "Cat__NAME" :lib/source :source/previous-stage}] - (lib.metadata.calculation/returned-columns query'))))))) + (lib/returned-columns query'))))))) (deftest ^:parallel default-columns-added-by-joins-deduplicate-names-test (let [join-alias "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" @@ -360,7 +358,7 @@ :display-name "ID" :lib/source-column-alias "ID" :lib/desired-column-alias "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXY_bfaf4e7b"}] - (lib.metadata.calculation/returned-columns query))))) + (lib/returned-columns query))))) (deftest ^:parallel join-strategy-test (let [query lib.tu/query-with-join @@ -408,7 +406,7 @@ (deftest ^:parallel join-strategy-display-name-test (let [query lib.tu/query-with-join] (is (= ["Left outer join" "Right outer join" "Inner join"] - (map (partial lib.metadata.calculation/display-name query) + (map (partial lib/display-name query) (lib/available-join-strategies query)))))) (deftest ^:parallel join-strategy-display-info-test @@ -416,7 +414,7 @@ (is (= [{:short-name "left-join", :display-name "Left outer join", :default true} {:short-name "right-join", :display-name "Right outer join"} {:short-name "inner-join", :display-name "Inner join"}] - (map (partial lib.metadata.calculation/display-info query) + (map (partial lib/display-info query) (lib/available-join-strategies query)))))) (deftest ^:parallel with-join-alias-update-fields-test diff --git a/test/metabase/lib/metadata/calculation_test.cljc b/test/metabase/lib/metadata/calculation_test.cljc index ea2e080621e94fcef7b038f935d4e6fd3971ee3c..e5cf04b49abf1b81da4c7e35128c529a8864206d 100644 --- a/test/metabase/lib/metadata/calculation_test.cljc +++ b/test/metabase/lib/metadata/calculation_test.cljc @@ -2,7 +2,6 @@ (:require [clojure.test :refer [deftest is testing]] [metabase.lib.core :as lib] - [metabase.lib.metadata.calculation :as lib.metadata.calculation] [metabase.lib.test-metadata :as meta] [metabase.lib.test-util :as lib.tu] [metabase.util :as u])) @@ -18,19 +17,19 @@ "TOTAL"]))]] (testing (str "\nquery =\n" (u/pprint-to-str query)) (is (= "Venues, Sorted by Total ascending" - (lib.metadata.calculation/suggested-name query))))))) + (lib/suggested-name query))))))) (deftest ^:parallel long-display-name-test (let [query lib.tu/venues-query results (->> query - lib.metadata.calculation/visible-columns + lib/visible-columns (map (comp :long-display-name #(lib/display-info query 0 %))))] (is (= ["ID" "Name" "Category ID" "Latitude" "Longitude" "Price" "Category → ID" "Category → Name"] results))) (let [query (lib/query meta/metadata-provider (meta/table-metadata :orders)) results (->> query - lib.metadata.calculation/visible-columns + lib/visible-columns (map (comp :long-display-name #(lib/display-info query 0 %))))] (is (= ["ID" "User ID" @@ -82,7 +81,7 @@ (meta/field-metadata :venues :category-id) (lib/with-join-alias (meta/field-metadata :categories :id) "Categories"))]) (lib/with-join-fields [(lib/with-join-alias (meta/field-metadata :categories :name) "Categories")]))) - lib.metadata.calculation/visible-columns))))) + lib/visible-columns))))) (testing "nil has no visible columns (#31366)" (is (empty? (-> lib.tu/venues-query - (lib.metadata.calculation/visible-columns nil)))))) + (lib/visible-columns nil)))))) diff --git a/test/metabase/lib/metadata/composed_provider_test.cljc b/test/metabase/lib/metadata/composed_provider_test.cljc index a54b373510928a4dd2b0d699c847e2a648c474da..e9a6a6ef56aded801f12c4dab665a07c3c20e06b 100644 --- a/test/metabase/lib/metadata/composed_provider_test.cljc +++ b/test/metabase/lib/metadata/composed_provider_test.cljc @@ -1,9 +1,8 @@ (ns metabase.lib.metadata.composed-provider-test (:require [clojure.test :refer [deftest is testing]] + [metabase.lib.core :as lib] [metabase.lib.metadata :as lib.metadata] - [metabase.lib.metadata.composed-provider - :as lib.metadata.composed-provider] [metabase.lib.test-metadata :as meta] [metabase.lib.test-util :as lib.tu] #?@(:cljs ([metabase.test-runner.assert-exprs.approximately-equal])))) @@ -16,7 +15,7 @@ (let [time-field (assoc (meta/field-metadata :people :birth-date) :base-type :type/Time :effective-type :type/Time) - metadata-provider (lib.metadata.composed-provider/composed-metadata-provider + metadata-provider (lib/composed-metadata-provider (lib.tu/mock-metadata-provider {:fields [time-field]}) meta/metadata-provider)] diff --git a/test/metabase/lib/metadata_test.cljc b/test/metabase/lib/metadata_test.cljc index bb690600b9862f2d7b897ea5354ac6732dd1d58b..a897fa950e67498b7531fa4a0aee1357516cadf1 100644 --- a/test/metabase/lib/metadata_test.cljc +++ b/test/metabase/lib/metadata_test.cljc @@ -3,7 +3,6 @@ [clojure.test :refer [are deftest is testing]] [metabase.lib.core :as lib] [metabase.lib.metadata :as lib.metadata] - [metabase.lib.metadata.calculation :as lib.metadata.calculation] [metabase.lib.test-metadata :as meta] [metabase.lib.test-util :as lib.tu] #?@(:cljs ([metabase.test-runner.assert-exprs.approximately-equal])))) @@ -42,8 +41,8 @@ (deftest ^:parallel display-name-from-name-test (testing "Use the 'simple humanization' logic to calculate a display name for a Field that doesn't have one" (is (= "Venue ID" - (lib.metadata.calculation/display-name lib.tu/venues-query -1 {:lib/type :metadata/column - :name "venue_id"}))))) + (lib/display-name lib.tu/venues-query -1 {:lib/type :metadata/column + :name "venue_id"}))))) (deftest ^:parallel table-or-card-test (are [id expected] (=? expected diff --git a/test/metabase/lib/metric_test.cljc b/test/metabase/lib/metric_test.cljc index 802be1bbbe50149b5afa4155e5cab6586e39c8af..b7f69ae3338bde1222276ac6335166d50b1d72e6 100644 --- a/test/metabase/lib/metric_test.cljc +++ b/test/metabase/lib/metric_test.cljc @@ -3,7 +3,6 @@ [clojure.test :refer [are deftest is testing]] [metabase.lib.core :as lib] [metabase.lib.metadata :as lib.metadata] - [metabase.lib.metadata.calculation :as lib.metadata.calculation] [metabase.lib.test-metadata :as meta] [metabase.lib.test-util :as lib.tu] #?@(:cljs ([metabase.test-runner.assert-exprs.approximately-equal])))) @@ -40,7 +39,7 @@ (deftest ^:parallel query-suggested-name-test (is (= "Venues, Sum of Cans" - (lib.metadata.calculation/suggested-name query-with-metric)))) + (lib/suggested-name query-with-metric)))) (deftest ^:parallel display-name-test (doseq [metric [metric-clause @@ -52,8 +51,8 @@ "style = " (pr-str style)) (is (= "Sum of Cans" (if style - (lib.metadata.calculation/display-name query-with-metric -1 metric style) - (lib.metadata.calculation/display-name query-with-metric metric))))))) + (lib/display-name query-with-metric -1 metric style) + (lib/display-name query-with-metric metric))))))) (deftest ^:parallel unknown-display-name-test (let [metric [:metric {} 1]] @@ -63,8 +62,8 @@ (testing (str "style = " (pr-str style)) (is (= "[Unknown Metric]" (if style - (lib.metadata.calculation/display-name query-with-metric -1 metric style) - (lib.metadata.calculation/display-name query-with-metric metric)))))))) + (lib/display-name query-with-metric -1 metric style) + (lib/display-name query-with-metric metric)))))))) (deftest ^:parallel display-info-test (are [metric] (=? {:name "sum_of_cans" @@ -73,13 +72,13 @@ :effective-type :type/Integer :description "Number of toucans plus number of pelicans" :selected true} - (lib.metadata.calculation/display-info query-with-metric metric)) + (lib/display-info query-with-metric metric)) metric-clause metric-metadata)) (deftest ^:parallel display-info-unselected-metric-test (testing "Include `:selected false` in display info for Metrics not in aggregations" - (are [metric] (not (:selected (lib.metadata.calculation/display-info lib.tu/venues-query metric))) + (are [metric] (not (:selected (lib/display-info lib.tu/venues-query metric))) metric-clause metric-metadata))) @@ -87,17 +86,17 @@ (is (=? {:effective-type :type/* :display-name "[Unknown Metric]" :long-display-name "[Unknown Metric]"} - (lib.metadata.calculation/display-info query-with-metric [:metric {} 1])))) + (lib/display-info query-with-metric [:metric {} 1])))) (deftest ^:parallel type-of-test (are [metric] (= :type/Integer - (lib.metadata.calculation/type-of query-with-metric metric)) + (lib/type-of query-with-metric metric)) metric-clause metric-metadata)) (deftest ^:parallel unknown-type-of-test (is (= :type/* - (lib.metadata.calculation/type-of query-with-metric [:metric {} 1])))) + (lib/type-of query-with-metric [:metric {} 1])))) (deftest ^:parallel available-metrics-test (testing "Should return Metrics with the same Table ID as query's `:source-table`" @@ -142,7 +141,7 @@ (let [query (-> (lib/query metadata-provider (meta/table-metadata :venues)) (lib/aggregate [:metric {:lib/uuid (str (random-uuid))} 100]))] (is (= :type/Integer - (lib.metadata.calculation/type-of query [:metric {:lib/uuid (str (random-uuid))} 100]))))) + (lib/type-of query [:metric {:lib/uuid (str (random-uuid))} 100]))))) (deftest ^:parallel ga-metric-metadata-test (testing "Make sure we can calculate metadata for FAKE Google Analytics metric clauses" @@ -156,4 +155,4 @@ :lib/source :source/aggregations :lib/source-column-alias "metric" :lib/type :metadata/column}] - (lib.metadata.calculation/returned-columns query -1 query)))))) + (lib/returned-columns query -1 query)))))) diff --git a/test/metabase/lib/native_test.cljc b/test/metabase/lib/native_test.cljc index f25b785ce9ec919c8209f348ff9cfdb602ee69f6..e0fe069d69b25abd8a9328b01a50b0e8ac8ca53c 100644 --- a/test/metabase/lib/native_test.cljc +++ b/test/metabase/lib/native_test.cljc @@ -4,7 +4,6 @@ [metabase.test.util.js :as test.js])) [clojure.test :refer [are deftest is testing]] [metabase.lib.core :as lib] - [metabase.lib.metadata.calculation :as lib.metadata.calculation] [metabase.lib.native :as lib.native] [metabase.lib.test-metadata :as meta] [metabase.lib.test-metadata.graph-provider :as meta.graph-provider] @@ -188,8 +187,8 @@ (deftest ^:parallel native-query-suggested-name-test (let [query (lib/native-query meta/metadata-provider "SELECT * FROM VENUES;" qp-results-metadata nil)] (is (= "Native query" - (lib.metadata.calculation/describe-query query))) - (is (nil? (lib.metadata.calculation/suggested-name query))))) + (lib/describe-query query))) + (is (nil? (lib/suggested-name query))))) (deftest ^:parallel native-query-building (let [query (lib/native-query meta/metadata-provider "select * from venues where id = {{myid}}")] diff --git a/test/metabase/lib/query_test.cljc b/test/metabase/lib/query_test.cljc index 7bda0551402b4f95fc582517ffb6b26a9c95e4cd..0700fce7c360e036128df0da931a924aade61e33 100644 --- a/test/metabase/lib/query_test.cljc +++ b/test/metabase/lib/query_test.cljc @@ -3,7 +3,6 @@ #?@(:cljs ([metabase.test-runner.assert-exprs.approximately-equal])) [clojure.test :refer [deftest is]] [metabase.lib.core :as lib] - [metabase.lib.metadata.calculation :as lib.metadata.calculation] [metabase.lib.test-metadata :as meta] [metabase.lib.test-util :as lib.tu])) @@ -27,9 +26,9 @@ " Filtered by Name equals \"Toucannery\"," " Sorted by ID ascending," " 100 rows") - (lib.metadata.calculation/display-name query) - (lib.metadata.calculation/describe-query query) - (lib.metadata.calculation/suggested-name query))))) + (lib/display-name query) + (lib/describe-query query) + (lib/suggested-name query))))) (deftest ^:parallel notebook-query-test (is (=? {:lib/type :mbql/query diff --git a/test/metabase/lib/stage_test.cljc b/test/metabase/lib/stage_test.cljc index cc9fe272ecb5c1aff92d6583066ec55b3a2ee8bc..28870cdbb123560399b6d9c8c9e9701e7e0ee1b9 100644 --- a/test/metabase/lib/stage_test.cljc +++ b/test/metabase/lib/stage_test.cljc @@ -4,7 +4,6 @@ [malli.core :as mc] [metabase.lib.core :as lib] [metabase.lib.join :as lib.join] - [metabase.lib.metadata.calculation :as lib.metadata.calculation] [metabase.lib.schema :as lib.schema] [metabase.lib.stage :as lib.stage] [metabase.lib.test-metadata :as meta] @@ -38,7 +37,7 @@ (is (mc/validate ::lib.schema/query query)) (is (=? [(merge (meta/field-metadata :venues :price) {:lib/source :source/fields})] - (lib.metadata.calculation/returned-columns query)))))) + (lib/returned-columns query)))))) (deftest ^:parallel deduplicate-expression-names-in-aggregations-test (testing "make sure multiple expressions come back with deduplicated names" @@ -66,12 +65,12 @@ :display-name "0.8 × Average of Price" :lib/source-column-alias "expression" :lib/desired-column-alias "expression_2"}] - (lib.metadata.calculation/returned-columns query))))))) + (lib/returned-columns query))))))) (deftest ^:parallel stage-display-name-card-source-query (let [query lib.tu/query-with-source-card] (is (= "My Card" - (lib.metadata.calculation/display-name query))))) + (lib/display-name query))))) (deftest ^:parallel adding-and-removing-stages (let [query lib.tu/venues-query @@ -106,7 +105,7 @@ {:id (meta/id :venues :price), :name "PRICE", :lib/source :source/table-defaults} {:name "ID + 1", :lib/source :source/expressions} {:name "ID + 2", :lib/source :source/expressions}] - (lib.metadata.calculation/returned-columns (query-with-expressions)))))) + (lib/returned-columns (query-with-expressions)))))) (deftest ^:parallel default-fields-metadata-return-expressions-before-joins-test (testing "expressions should come back BEFORE columns from joins" @@ -127,7 +126,7 @@ :expressions [[:+ {:lib/expression-name "ID + 1"} [:field {} (meta/id :venues :id)] 1] [:+ {:lib/expression-name "ID + 2"} [:field {} (meta/id :venues :id)] 2]]}]} query)) - (let [metadata (lib.metadata.calculation/returned-columns query)] + (let [metadata (lib/returned-columns query)] (is (=? [{:id (meta/id :venues :id), :name "ID", :lib/source :source/table-defaults} {:id (meta/id :venues :name), :name "NAME", :lib/source :source/table-defaults} {:id (meta/id :venues :category-id), :name "CATEGORY_ID", :lib/source :source/table-defaults} @@ -162,7 +161,7 @@ "ID + 2" "Cat → ID" "Cat → Name"] - (mapv #(lib.metadata.calculation/display-name query -1 % :long) metadata)))))))) + (mapv #(lib/display-name query -1 % :long) metadata)))))))) (deftest ^:parallel query-with-source-card-include-implicit-columns-test (testing "visible-columns should not include implicitly joinable columns when the query has a source Card (#30950)" @@ -180,13 +179,13 @@ :base-type :type/Integer :lib/source :source/card :lib/desired-column-alias "count"}] - (lib.metadata.calculation/visible-columns query))))))) + (lib/visible-columns query))))))) (deftest ^:parallel do-not-propagate-temporal-units-to-next-stage-text (let [query (-> (lib/query meta/metadata-provider (meta/table-metadata :checkins)) (lib/with-fields [(lib/with-temporal-bucket (meta/field-metadata :checkins :date) :year)]) lib/append-stage) - cols (lib.metadata.calculation/visible-columns query)] + cols (lib/visible-columns query)] (is (= [nil] (map lib/temporal-bucket cols))) (is (=? [[:field @@ -237,7 +236,7 @@ :effective-type :type/Text, :lib/desired-column-alias "Cat__NAME", :display-name "Name"}] - (lib.metadata.calculation/visible-columns query))))) + (lib/visible-columns query))))) (deftest ^:parallel expression-breakout-visible-column (testing "expression breakouts are handled by visible-columns" @@ -247,7 +246,7 @@ (is (=? [{:lib/type :metadata/column :lib/source :source/expressions}] (filter #(= (:name %) expr-name) - (lib.metadata.calculation/visible-columns query))))))) + (lib/visible-columns query))))))) (defn- metadata-for-breakouts-from-joins-test-query "A query against `ORDERS` with joins against `PRODUCTS` and `PEOPLE`, and breakouts on columns from both of those @@ -285,7 +284,7 @@ :lib/source-column-alias "count" :lib/desired-column-alias "count"}] (map #(select-keys % [:name :lib/source-column-alias ::lib.join/join-alias :lib/desired-column-alias]) - (lib.metadata.calculation/returned-columns query))))))) + (lib/returned-columns query))))))) (defn- metadata-for-breakouts-from-joins-test-query-2 "A query against `REVIEWS` joining `PRODUCTS`." @@ -307,7 +306,7 @@ (is (= [{:name "CATEGORY", :lib/source-column-alias "P2__CATEGORY", :lib/desired-column-alias "P2__CATEGORY"} {:name "avg", :lib/source-column-alias "avg", :lib/desired-column-alias "avg"}] (map #(select-keys % [:name :lib/source-column-alias ::lib.join/join-alias :lib/desired-column-alias]) - (lib.metadata.calculation/returned-columns query))))))) + (lib/returned-columns query))))))) (defn- metadata-for-breakouts-from-joins-from-previous-stage-test-query "[[metadata-for-breakouts-from-joins-test-query]] but with an additional stage and a join @@ -344,4 +343,4 @@ ::lib.join/join-alias "Q2" :lib/desired-column-alias "Q2__avg"}] (map #(select-keys % [:name :lib/source-column-alias ::lib.join/join-alias :lib/desired-column-alias]) - (lib.metadata.calculation/returned-columns query))))))) + (lib/returned-columns query))))))) diff --git a/test/metabase/lib/table_test.cljc b/test/metabase/lib/table_test.cljc index 35ea65ee7bcd94ef94700b4b2e3436f61deb225d..78f0d31c0253413a11e0554b14f822b3dc901c61 100644 --- a/test/metabase/lib/table_test.cljc +++ b/test/metabase/lib/table_test.cljc @@ -2,12 +2,11 @@ (:require [clojure.test :refer [deftest is testing]] [metabase.lib.core :as lib] - [metabase.lib.metadata.calculation :as lib.metadata.calculation] [metabase.lib.metadata.protocols :as metadata.protocols] [metabase.lib.test-metadata :as meta] [metabase.lib.test-util :as lib.tu] - #?@(:cljs ([metabase.test-runner.assert-exprs.approximately-equal])) - [metabase.util.malli :as mu])) + [metabase.util.malli :as mu] + #?@(:cljs ([metabase.test-runner.assert-exprs.approximately-equal])))) #?(:cljs (comment metabase.test-runner.assert-exprs.approximately-equal/keep-me)) @@ -43,4 +42,4 @@ (metadata.protocols/fields meta/metadata-provider table-id)))) query (lib/query metadata-provider (meta/table-metadata :venues))] (mu/disable-enforcement - (is (sequential? (lib.metadata.calculation/visible-columns query))))))) + (is (sequential? (lib/visible-columns query))))))) diff --git a/test/metabase/lib/temporal_bucket_test.cljc b/test/metabase/lib/temporal_bucket_test.cljc index 97f8259204595079fb65924a92ffc84339766d0f..3a848b9f2875e4b7978669635e55910b6c218d00 100644 --- a/test/metabase/lib/temporal_bucket_test.cljc +++ b/test/metabase/lib/temporal_bucket_test.cljc @@ -3,7 +3,6 @@ [clojure.test :refer [are deftest is testing]] [medley.core :as m] [metabase.lib.core :as lib] - [metabase.lib.metadata.calculation :as lib.metadata.calculation] [metabase.lib.temporal-bucket :as lib.temporal-bucket] [metabase.lib.test-metadata :as meta] [metabase.lib.test-util :as lib.tu])) @@ -151,7 +150,7 @@ {:unit :week-of-year} {:unit :month-of-year} {:unit :quarter-of-year}] - (->> (lib.metadata.calculation/returned-columns query) + (->> (lib/returned-columns query) first (lib/available-temporal-buckets query) (mapv #(select-keys % [:unit :default]))))))) @@ -160,6 +159,6 @@ (testing "There should be no bucketing options for expressions as they are not supported (#31367)" (let [query (-> lib.tu/venues-query (lib/expression "myadd" (lib/+ 1 (meta/field-metadata :venues :category-id))))] - (is (empty? (->> (lib.metadata.calculation/returned-columns query) + (is (empty? (->> (lib/returned-columns query) (m/find-first (comp #{"myadd"} :name)) (lib/available-temporal-buckets query))))))) diff --git a/test/metabase/lib/test_util.cljc b/test/metabase/lib/test_util.cljc index cf63d7f64504a6454ef05a32e79597a49e9d589e..61eece739d7e20b46fb94e64e6b592d13008eb8f 100644 --- a/test/metabase/lib/test_util.cljc +++ b/test/metabase/lib/test_util.cljc @@ -8,8 +8,6 @@ [metabase.lib.convert :as lib.convert] [metabase.lib.core :as lib] [metabase.lib.metadata :as lib.metadata] - [metabase.lib.metadata.calculation :as lib.metadata.calculation] - [metabase.lib.metadata.composed-provider :as lib.metadata.composed-provider] [metabase.lib.metadata.protocols :as metadata.protocols] [metabase.lib.query :as lib.query] [metabase.lib.schema :as lib.schema] @@ -104,7 +102,7 @@ (def metadata-provider-with-card "[[meta/metadata-provider]], but with a Card with ID 1." - (lib.metadata.composed-provider/composed-metadata-provider + (lib/composed-metadata-provider meta/metadata-provider (mock-metadata-provider {:cards [{:name "My Card" @@ -127,7 +125,7 @@ (def metadata-provider-with-card-with-result-metadata "[[meta/metadata-provider]], but with a Card with results metadata as ID 1." - (lib.metadata.composed-provider/composed-metadata-provider + (lib/composed-metadata-provider meta/metadata-provider (mock-metadata-provider {:cards [{:name "My Card" @@ -263,7 +261,7 @@ (def metadata-provider-with-mock-cards "A metadata provider with all of the [[mock-cards]]. Composed with the normal [[meta/metadata-provider]]." - (lib.metadata.composed-provider/composed-metadata-provider + (lib/composed-metadata-provider meta/metadata-provider (mock-metadata-provider {:cards (vals mock-cards)}))) @@ -274,7 +272,7 @@ source Card." [query :- ::lib.schema/query column-name :- ::lib.schema.common/non-blank-string] - (let [cols (lib.metadata.calculation/visible-columns query) + (let [cols (lib/visible-columns query) metadata (or (m/find-first #(= (:name %) column-name) cols) (let [col-names (vec (sort (map :name cols)))]