allow inlining values
Most of the time we want to parameterize numbers, but sometimes we don't Fixes #171
This commit is contained in:
parent
942756d2b3
commit
d99efb8606
4 changed files with 31 additions and 2 deletions
|
|
@ -9,6 +9,7 @@
|
|||
(#?(:clj defalias :cljs def) call types/call)
|
||||
(#?(:clj defalias :cljs def) raw types/raw)
|
||||
(#?(:clj defalias :cljs def) param types/param)
|
||||
(#?(:clj defalias :cljs def) inline types/inline)
|
||||
(#?(:clj defalias :cljs def) format format/format)
|
||||
(#?(:clj defalias :cljs def) format-predicate format/format-predicate)
|
||||
(#?(:clj defalias :cljs def) quote-identifier format/quote-identifier)
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
(ns honeysql.format
|
||||
(:refer-clojure :exclude [format])
|
||||
(:require [honeysql.types :refer [call raw param param-name
|
||||
#?@(:cljs [SqlCall SqlRaw SqlParam SqlArray])]]
|
||||
#?@(:cljs [SqlCall SqlRaw SqlParam SqlArray SqlInline])]]
|
||||
[clojure.string :as string])
|
||||
#?(:clj (:import [honeysql.types SqlCall SqlRaw SqlParam SqlArray])))
|
||||
#?(:clj (:import [honeysql.types SqlCall SqlRaw SqlParam SqlArray SqlInline])))
|
||||
|
||||
;;(set! *warn-on-reflection* true)
|
||||
|
||||
|
|
@ -388,6 +388,9 @@
|
|||
SqlArray
|
||||
(to-sql [x]
|
||||
(str "ARRAY[" (comma-join (map to-sql (.-values x))) "]"))
|
||||
SqlInline
|
||||
(to-sql [x]
|
||||
(str (.-value x)))
|
||||
#?(:clj Object :cljs default)
|
||||
(to-sql [x]
|
||||
#?(:clj (add-anon-param x)
|
||||
|
|
|
|||
|
|
@ -57,6 +57,18 @@
|
|||
;; late bind, as above
|
||||
(#?(:clj (resolve `array) :cljs array) form))
|
||||
|
||||
;;;;
|
||||
|
||||
(defrecord SqlInline [value])
|
||||
|
||||
(defn inline
|
||||
"Prevents parameterization"
|
||||
[value]
|
||||
(SqlInline. value))
|
||||
|
||||
(defn read-sql-inline [form]
|
||||
(#?(:clj (resolve `inline) :cljs inline) form))
|
||||
|
||||
#?(:clj
|
||||
(do
|
||||
(defmethod print-method SqlCall [^SqlCall o ^java.io.Writer w]
|
||||
|
|
@ -81,4 +93,10 @@
|
|||
(.write w (str "#sql/array " (pr-str (.values a)))))
|
||||
|
||||
(defmethod print-dup SqlArray [a w]
|
||||
(print-method a w))
|
||||
|
||||
(defmethod print-method SqlInline [^SqlInline a ^java.io.Writer w]
|
||||
(.write w (str "#sql/inline " (pr-str (.value a)))))
|
||||
|
||||
(defmethod print-dup SqlInline [a w]
|
||||
(print-method a w))))
|
||||
|
|
|
|||
|
|
@ -192,4 +192,11 @@
|
|||
(join :x [:= :foo.id :x.id] :y nil)
|
||||
sql/format)))))
|
||||
|
||||
(deftest inline-test
|
||||
(is (= ["SELECT * FROM foo WHERE id = 5"]
|
||||
(-> (select :*)
|
||||
(from :foo)
|
||||
(where [:= :id (sql/inline 5)])
|
||||
sql/format))))
|
||||
|
||||
#?(:cljs (cljs.test/run-all-tests))
|
||||
|
|
|
|||
Loading…
Reference in a new issue