Skip to content
Snippets Groups Projects
Commit f0da2c16 authored by Cam Saul's avatar Cam Saul
Browse files

Limit max # of result rows returned to 2000

parent dac4846b
Branches
Tags
No related merge requests found
......@@ -159,6 +159,20 @@
rows values)]
(assoc results :rows rows))))
;; ### LIMIT-MAX-RESULT-ROWS
(def ^:const max-result-rows
"Maximum number of rows the QP should ever return."
2000)
(defn limit-max-result-rows
"Limit the number of rows returned in RESULTS to `max-result-rows`."
[results]
{:pre [(map? results)
(sequential? (:rows results))]}
(assoc results :rows (take max-result-rows (:rows results))))
;; ### ADD-ROW-COUNT-AND-STATUS
(defn add-row-count-and-status
......@@ -177,11 +191,13 @@
(defn post-process
"Apply post-processing steps to the RESULTS of a QUERY, such as applying cumulative sum."
[driver query results]
(->> (case (keyword (:type query))
:native results
:query (let [query (:query query)]
(->> results
(post-process-cumulative-sum query))))
{:pre [(map? query)
(map? results)]}
(->> results
limit-max-result-rows
(#(case (keyword (:type query))
:native %
:query (post-process-cumulative-sum (:query query) %)))
add-row-count-and-status))
......
......@@ -3,6 +3,7 @@
(:require [expectations :refer :all]
[metabase.db :refer :all]
[metabase.driver :as driver]
[metabase.driver.query-processor :refer :all]
(metabase.models [table :refer [Table]])
[metabase.test.data.datasets :as datasets :refer [*dataset* expect-with-all-datasets]]))
......@@ -519,6 +520,14 @@
;; # POST PROCESSING TESTS
;; ## LIMIT-MAX-RESULT-ROWS
;; Apply limit-max-result-rows to an infinite sequence and make sure it gets capped at `max-result-rows`
(expect max-result-rows
(count (->> {:rows (repeat [:ok])}
limit-max-result-rows
:rows)))
;; ## CUMULATIVE SUM
;; TODO - Should we move this into IDataset? It's only used here, but the logic might get a little more compilcated when we add more drivers
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment