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