From 9c38554154732f792fe2f30599fa85cc91a3f937 Mon Sep 17 00:00:00 2001 From: Neil McCalum Date: Tue, 11 May 2021 01:07:34 +1200 Subject: [PATCH] format with opts, hyphen to under in function names, improve and relocate tests --- src/honey/sql.cljc | 15 +++++++-------- test/honey/sql/helpers_test.cljc | 24 ------------------------ test/honey/sql_test.cljc | 21 +++++++++++++++++++++ 3 files changed, 28 insertions(+), 32 deletions(-) diff --git a/src/honey/sql.cljc b/src/honey/sql.cljc index b3b69d4..604d06e 100644 --- a/src/honey/sql.cljc +++ b/src/honey/sql.cljc @@ -153,6 +153,7 @@ (defn- namespace-_ [x] (some-> (namespace x) (str/replace "-" "_"))) (defn- name-_ [x] (str/replace (name x) "-" "_")) +(defn- -_ [x] (str/replace x "-" "_")) (defn- sqlize-value [x] (cond @@ -217,15 +218,13 @@ (let [c (name x)] (cond (= \% (first c)) (let [[f & args] (str/split (subs c 1) #"\.") - quoted-args (->> args - (map keyword) - (map format-entity))] - [(str (upper-case f) "(" (str/join "," quoted-args) ")")]) + quoted-args (map #(format-entity (keyword %) opts) args)] + [(str (upper-case (-_ f)) "(" (str/join ", " quoted-args) ")")]) (= \? (first c)) - (let [k (keyword (subs c 1))] - (if *inline* - [(sqlize-value (param-value k))] - ["?" (->param k)])) + (let [k (keyword (subs (-_ c) 1))] + (if *inline* + [(sqlize-value (param-value k))] + ["?" (->param k)])) :else [(format-entity x opts)]))) diff --git a/test/honey/sql/helpers_test.cljc b/test/honey/sql/helpers_test.cljc index 60e9a4d..33ea68c 100644 --- a/test/honey/sql/helpers_test.cljc +++ b/test/honey/sql/helpers_test.cljc @@ -866,27 +866,3 @@ {:with [[:a]], :insert-into [[:quux [:x :y]] {:select [:id], :from [:table]}]})))) - -(deftest quoting-:%-syntax - (testing "quoting of expressions in functions shouldn't depend on syntax" - (is (= [(str "SELECT `foo-bar`," - " COUNT(*)," - " COUNT(*)," - " SYSDATE()," - " SYSDATE()," - " AVG(`bar-bar`)," - " AVG(`bar-bar`,`bar-foo`)," - " SUM(`foo-foo`)" - " FROM `employee`" - " GROUP BY `foo-bar`")] - (-> (select :foo-bar - [[:count :*]] - :%count.* - :%sysdate - :%sysdate. - :%avg.bar-bar - :%avg.bar-bar.bar-foo - [[:sum :foo-foo]]) - (from :employee) - (group-by :foo-bar) - (sql/format :dialect :mysql)))))) diff --git a/test/honey/sql_test.cljc b/test/honey/sql_test.cljc index 489807b..ff12565 100644 --- a/test/honey/sql_test.cljc +++ b/test/honey/sql_test.cljc @@ -731,3 +731,24 @@ ORDER BY id = ? DESC (is (thrown-with-msg? ExceptionInfo #"does not match" (format {:where [:in :x :?y]} {:params {:y [nil]} :checking :strict}))))) + +(deftest quoting-:%-syntax + (testing "quoting of expressions in functions shouldn't depend on syntax" + (is (= ["SELECT SYSDATE()"] + (format {:select [[[:sysdate]]]}) + (format {:select :%sysdate}))) + (is (= ["SELECT COUNT(*)"] + (format {:select [[[:count :*]]]}) + (format {:select :%count.*}))) + (is (= ["SELECT AVERAGE(`foo-foo`)"] + (format {:select [[[:average :foo-foo]]]} :dialect :mysql) + (format {:select :%average.foo-foo} :dialect :mysql))) + (is (= ["SELECT GREATER(`foo-foo`, `bar-bar`)"] + (format {:select [[[:greater :foo-foo :bar-bar]]]} :dialect :mysql) + (format {:select :%greater.foo-foo.bar-bar} :dialect :mysql))) + (is (= ["SELECT MIXED_KEBAB(`yum-yum`)"] + #_(format {:select [[[:mixed-kebab :yum-yum]]]} :dialect :mysql) + (format {:select :%mixed-kebab.yum-yum} :dialect :mysql))) + (is (= ["SELECT RANSOM(`NoTe`)"] + (format {:select [[[:ransom :NoTe]]]} :dialect :mysql) + (format {:select :%ransom.NoTe} :dialect :mysql)))))