From 4a70e07c998e752d5dee5268e5c02f5350577177 Mon Sep 17 00:00:00 2001 From: Cam Saul <cam@getluckybird.com> Date: Thu, 19 Mar 2015 22:29:47 -0700 Subject: [PATCH] use `reductions` instead of implementing cumulative sum myself --- .../driver/generic_sql/query_processor.clj | 14 +------------- .../driver/generic_sql/query_processor_test.clj | 1 + 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/src/metabase/driver/generic_sql/query_processor.clj b/src/metabase/driver/generic_sql/query_processor.clj index 6c7728ead40..89b07f13ce9 100644 --- a/src/metabase/driver/generic_sql/query_processor.clj +++ b/src/metabase/driver/generic_sql/query_processor.clj @@ -219,18 +219,6 @@ first (= "cum_sum"))) -(defn- cumulative-sum - "Recursively cumulative sum a sequence of VALUES." - ([values] - {:pre [(sequential? values) - (every? number? values)]} - (cumulative-sum 0 [] values)) - ([acc-sum acc-values [value & more]] - (let [acc-sum (+ acc-sum value) - acc-values (conj acc-values acc-sum)] - (if-not (seq? more) acc-values - (recur acc-sum acc-values more))))) - (defn- apply-cumulative-sum "Apply `cumulative-sum` to values of the aggregate `Field` in RESULTS." {:arglists '([query results])} @@ -238,7 +226,7 @@ (let [field (field-id->kw field-id) values (->> results ; make a sequence of cumulative sum values for each row (map field) - cumulative-sum)] + (reductions +))] (map (fn [row value] ; replace the value for each row with the cumulative sum value (assoc row field value)) results values))) diff --git a/test/metabase/driver/generic_sql/query_processor_test.clj b/test/metabase/driver/generic_sql/query_processor_test.clj index 4e885683f6a..bef80343a9e 100644 --- a/test/metabase/driver/generic_sql/query_processor_test.clj +++ b/test/metabase/driver/generic_sql/query_processor_test.clj @@ -387,6 +387,7 @@ ;; # POST PROCESSING TESTS ;; ## CUMULATIVE SUM + ;; ### Simple cumulative sum w/o any breakout (expect {:status :completed :row_count 15 -- GitLab