format the format namespace a bit more nicely
This commit is contained in:
parent
941a5b708a
commit
44a22e3787
1 changed files with 50 additions and 44 deletions
|
|
@ -244,63 +244,69 @@
|
||||||
|
|
||||||
(extend-protocol ToSql
|
(extend-protocol ToSql
|
||||||
clojure.lang.Keyword
|
clojure.lang.Keyword
|
||||||
(-to-sql [x] (let [s ^String (name x)]
|
(-to-sql [x]
|
||||||
(condp = (.charAt s 0)
|
(let [s (name x)]
|
||||||
\% (let [call-args (string/split (subs s 1) #"\." 2)]
|
(condp = (.charAt s 0)
|
||||||
(to-sql (apply call (map keyword call-args))))
|
\% (let [call-args (string/split (subs s 1) #"\." 2)]
|
||||||
\? (to-sql (param (keyword (subs s 1))))
|
(to-sql (apply call (map keyword call-args))))
|
||||||
(quote-identifier x))))
|
\? (to-sql (param (keyword (subs s 1))))
|
||||||
|
(quote-identifier x))))
|
||||||
clojure.lang.Symbol
|
clojure.lang.Symbol
|
||||||
(-to-sql [x] (quote-identifier x))
|
(-to-sql [x] (quote-identifier x))
|
||||||
java.lang.Number
|
java.lang.Number
|
||||||
(-to-sql [x] (str x))
|
(-to-sql [x] (str x))
|
||||||
java.lang.Boolean
|
java.lang.Boolean
|
||||||
(-to-sql [x] (if x "TRUE" "FALSE"))
|
(-to-sql [x]
|
||||||
|
(if x "TRUE" "FALSE"))
|
||||||
clojure.lang.Sequential
|
clojure.lang.Sequential
|
||||||
(-to-sql [x] (if *fn-context?*
|
(-to-sql [x]
|
||||||
;; list argument in fn call
|
(if *fn-context?*
|
||||||
(paren-wrap (comma-join (map to-sql x)))
|
;; list argument in fn call
|
||||||
;; alias
|
(paren-wrap (comma-join (map to-sql x)))
|
||||||
(str (to-sql (first x))
|
;; alias
|
||||||
; Omit AS in FROM, JOIN, etc. - Oracle doesn't allow it
|
(str (to-sql (first x))
|
||||||
(if (= :select *clause*)
|
; Omit AS in FROM, JOIN, etc. - Oracle doesn't allow it
|
||||||
" AS "
|
(if (= :select *clause*)
|
||||||
" ")
|
" AS "
|
||||||
(if (string? (second x))
|
" ")
|
||||||
(quote-identifier (second x))
|
(if (string? (second x))
|
||||||
(to-sql (second x))))))
|
(quote-identifier (second x))
|
||||||
|
(to-sql (second x))))))
|
||||||
SqlCall
|
SqlCall
|
||||||
(-to-sql [x] (binding [*fn-context?* true]
|
(-to-sql [x]
|
||||||
(let [fn-name (name (.name x))
|
(binding [*fn-context?* true]
|
||||||
fn-name (fn-aliases fn-name fn-name)]
|
(let [fn-name (name (.name x))
|
||||||
(apply fn-handler fn-name (.args x)))))
|
fn-name (fn-aliases fn-name fn-name)]
|
||||||
|
(apply fn-handler fn-name (.args x)))))
|
||||||
SqlRaw
|
SqlRaw
|
||||||
(-to-sql [x] (.s x))
|
(-to-sql [x] (.s x))
|
||||||
clojure.lang.IPersistentMap
|
clojure.lang.IPersistentMap
|
||||||
(-to-sql [x] (let [clause-ops (sort-clauses (keys x))
|
(-to-sql [x]
|
||||||
sql-str (binding [*subquery?* true
|
(let [clause-ops (sort-clauses (keys x))
|
||||||
*fn-context?* false]
|
sql-str (binding [*subquery?* true
|
||||||
(space-join
|
*fn-context?* false]
|
||||||
(map (comp #(-format-clause % x) #(find x %))
|
(space-join
|
||||||
clause-ops)))]
|
(map (comp #(-format-clause % x) #(find x %))
|
||||||
(if *subquery?*
|
clause-ops)))]
|
||||||
(paren-wrap sql-str)
|
(if *subquery?*
|
||||||
sql-str)))
|
(paren-wrap sql-str)
|
||||||
|
sql-str)))
|
||||||
nil
|
nil
|
||||||
(-to-sql [x] "NULL")
|
(-to-sql [x] "NULL")
|
||||||
Object
|
Object
|
||||||
(-to-sql [x] (let [[x pname] (if (instance? SqlParam x)
|
(-to-sql [x]
|
||||||
(let [pname (param-name x)]
|
(let [[x pname] (if (instance? SqlParam x)
|
||||||
(if (map? @*input-params*)
|
(let [pname (param-name x)]
|
||||||
[(get @*input-params* pname) pname]
|
(if (map? @*input-params*)
|
||||||
(let [x (first @*input-params*)]
|
[(get @*input-params* pname) pname]
|
||||||
(swap! *input-params* rest)
|
(let [x (first @*input-params*)]
|
||||||
[x pname])))
|
(swap! *input-params* rest)
|
||||||
;; Anonymous param name -- :_1, :_2, etc.
|
[x pname])))
|
||||||
[x (keyword (str "_" (swap! *param-counter* inc)))])]
|
;; Anonymous param name -- :_1, :_2, etc.
|
||||||
(swap! *param-names* conj pname)
|
[x (keyword (str "_" (swap! *param-counter* inc)))])]
|
||||||
(swap! *params* conj x)
|
(swap! *param-names* conj pname)
|
||||||
"?")))
|
(swap! *params* conj x)
|
||||||
|
"?")))
|
||||||
|
|
||||||
(defn sqlable? [x]
|
(defn sqlable? [x]
|
||||||
(satisfies? ToSql x))
|
(satisfies? ToSql x))
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue