-
Notifications
You must be signed in to change notification settings - Fork 4
/
values.cljc
34 lines (28 loc) · 1.12 KB
/
values.cljc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
(ns com.yetanalytics.flint.format.values
(:require [clojure.string :as cstr]
[com.yetanalytics.flint.format :as f]
[com.yetanalytics.flint.format.axiom]))
(defmulti format-values-clause
(fn [vars _ _] (if (= 1 (count vars)) :values/single :values/default)))
(defmethod format-values-clause :values/single
[var values pretty?]
(let [kstr (first var)
vstrs (map first values)
vstr (-> vstrs
(f/join-clauses pretty?)
(f/wrap-in-braces pretty?))]
(str kstr " " vstr)))
(defmethod format-values-clause :values/default
[vars values pretty?]
(let [kstr (str "(" (cstr/join " " vars) ")")
vstrs (map #(str "(" (cstr/join " " %) ")") values)
vstr (-> vstrs
(f/join-clauses pretty?)
(f/wrap-in-braces pretty?))]
(str kstr " " vstr)))
(defmethod f/format-ast-node :values/undef [_ _]
"UNDEF")
(defmethod f/format-ast-node :values/map [{:keys [pretty?]} [_ [vars values]]]
(format-values-clause vars values pretty?))
(defmethod f/format-ast-node :values [_ [_ values-map]]
(str "VALUES " values-map))