   "Format the values in result ROWS with the fns at the corresponding indecies in FORMAT-FNS.
    ROWS can be a sequence or any of the common map formats we expect in QP tests.
 
-     (format-rows-by [int str double] [[1 1 1]]) -> [[1 \"1\" 1.0]]"
-  [format-fns rows]
-  (cond
-    (:data rows) (update-in rows [:data :rows] (partial format-rows-by format-fns))
-    (:rows rows) (update    rows :rows         (partial format-rows-by format-fns))
-    :else        (vec (for [row rows]
-                        (vec (for [[f v] (partition 2 (interleave format-fns row))]
-                               (when v
-                                 (f v))))))))
+     (format-rows-by [int str double] [[1 1 1]]) -> [[1 \"1\" 1.0]]
+
+   By default, does't call fns on `nil` values; pass a truthy value as optional param FORMAT-NIL-VALUES? to override this behavior."
+  ([format-fns rows]
+   (format-rows-by format-fns (not :format-nil-values?) rows))
+  ([format-fns format-nil-values? rows]
+   (cond
+     (:data rows) (update-in rows [:data :rows] (partial format-rows-by format-fns))
+     (:rows rows) (update    rows :rows         (partial format-rows-by format-fns))
+     :else        (vec (for [row rows]
+                         (vec (for [[f v] (partition 2 (interleave format-fns row))]
+                                (when (or v format-nil-values?)
+                                  (f v)))))))))
 
 (def ^:private formatted-venues-rows (partial format-rows-by [int str int (partial u/round-to-decimals 4) (partial u/round-to-decimals 4) int]))
 

  (Q dataset places-cam-likes
     aggregate rows of places
     filter != liked true, order id+
     return rows (format-rows-by [int int->bool str])))


;; ### FILTER -- "BETWEEN", single subclause (neither "AND" nor "OR")

  (Q dataset places-cam-likes
     aggregate rows of places
     filter != liked false, order id+
     return rows (format-rows-by [int ->bool str] :format-nil-values)))

;;; filter != true
(datasets/expect-with-all-engines
