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

member1o seems to be about 2x as fast as membero for long-running

ordering. Fix lint error
parent 06cde158
Branches
Tags
No related merge requests found
......@@ -58,7 +58,8 @@
:eastwood {:exclude-namespaces [:test-paths]
:add-linters [:unused-private-vars]
:exclude-linters [:constant-test ; korma macros generate some forms with if statements that are always logically true or false
:suspicious-expression]} ; core.match macros generate some forms like (and expr) which is "suspicious"
:suspicious-expression ; core.match macros generate some forms like (and expr) which is "suspicious"
:unused-ret-vals]} ; gives too many false positives for functions with side-effects like conj!
:profiles {:dev {:dependencies [[org.clojure/tools.nrepl "0.2.10"] ; REPL <3
[expectations "2.1.2"] ; unit tests
[marginalia "0.8.0"] ; for documentation
......
......@@ -46,11 +46,11 @@
;;; # ---------------------------------------- COLUMN RESOLUTION & ORDERING ----------------------------------------
(defn- breakout-fieldo [{breakout-fields :breakout} field]
(membero field breakout-fields))
(member1o field breakout-fields))
(defn- explicit-fields-fieldo [{:keys [fields-is-implicit], fields-fields :fields} field]
(all (nilo fields-is-implicit)
(membero field fields-fields)))
(member1o field fields-fields)))
(defn- aggregate-fieldo [{{ag-type :aggregation-type, ag-field :field} :aggregation} field]
(all (== field (if (contains? #{:count :distinct} ag-type)
......@@ -61,16 +61,16 @@
(select-keys [:base-type :special-type])
(assoc :field-name (if (= ag-type :distinct) :count
ag-type)))))
(membero ag-type [:count :avg :sum :stddev :distinct])))
(member1o ag-type [:count :avg :sum :stddev :distinct])))
(defn- valid-nameo [{:keys [result-keys]} field]
(fresh [field-name]
(featurec field {:field-name field-name})
(membero field-name result-keys)))
(member1o field-name result-keys)))
(defn- fieldo [{:keys [query-fields], :as query} field]
(all (conde
((membero field query-fields))
((member1o field query-fields))
((aggregate-fieldo query field)))
(valid-nameo query field)))
......@@ -160,15 +160,22 @@
{:post [(or (sequential? %)
(println "FAILED!\n" (u/pprint-to-str query) "\nRESULTS:" %))
(every? map? %)]}
(let [num-cols (count (:result-keys query))
cols (vec (lvars num-cols))]
(time (first (run 1 [q]
(== q cols)
(distincto q)
(everyg (partial fieldo query) q)
(everyg (fn [i]
(fields< query (cols i) (cols (inc i))))
(range 0 (dec num-cols))))))))
(let [num-cols (count (:result-keys query))
cols (vec (lvars num-cols))
;; A few queries take a ridiculous amount of time to order. Let's do some ghetto profiling
start-time (System/currentTimeMillis)
results (first (run 1 [q]
(== q cols)
(distincto q)
(everyg (partial fieldo query) q)
(everyg (fn [i]
(fields< query (cols i) (cols (inc i))))
(range 0 (dec num-cols)))))
run-time (- (System/currentTimeMillis) start-time)]
(when (> run-time 2000)
(println (u/format-color 'red "This query took a STUPID LONG amount of time to order (%.1f seconds):\n%s\n%s" (/ run-time 1000.0)
(u/pprint-to-str query) (u/pprint-to-str results))))
results))
;;; # ---------------------------------------- COLUMN DETAILS ----------------------------------------
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment