This commit is contained in:
ⅅ₳ℕⅈⅇℒℒⅇ Ҝⅇℱℱʘℝⅅ 2017-05-21 04:42:32 +00:00 committed by GitHub
commit 3d2f5bb2e2
2 changed files with 18 additions and 0 deletions

View file

@ -41,6 +41,9 @@
(defn collify [x] (defn collify [x]
(if (coll? x) x [x])) (if (coll? x) x [x]))
(defhelper with [m ctes]
(assoc m :with (collify ctes)))
(defhelper select [m fields] (defhelper select [m fields]
(assoc m :select (collify fields))) (assoc m :select (collify fields)))

View file

@ -78,6 +78,21 @@
(sql/format (assoc m1 :lock {:mode :update}) (sql/format (assoc m1 :lock {:mode :update})
{:param1 "gabba" :param2 2})))))) {:param1 "gabba" :param2 2}))))))
(deftest test-with
(let [expected-sql (clojure.string/join " "
["WITH f AS (SELECT foo.* FROM foo),"
"b AS (SELECT bar.* FROM bar)"
"SELECT f.baz, b.quux"
"FROM f"
"INNER JOIN b ON f.id = b.id"])]
(is (= [expected-sql]
(-> (with [:f (-> (select :foo.* )(from :foo))]
[:b (-> (select :bar.* )(from :bar))])
(select :f.baz :b.quux)
(from :f)
(join :b [:= :f.id :b.id])
sql/format)))))
(deftest test-cast (deftest test-cast
(is (= ["SELECT foo, CAST(bar AS integer)"] (is (= ["SELECT foo, CAST(bar AS integer)"]
(sql/format {:select [:foo (sql/call :cast :bar :integer)]}))) (sql/format {:select [:foo (sql/call :cast :bar :integer)]})))