diff --git a/README.md b/README.md index 7bb3ade..7a2f0e5 100644 --- a/README.md +++ b/README.md @@ -297,6 +297,11 @@ FROM dual; :row-fn :sysdate :identifiers identity}) ;=> #inst "2014-09-30T07:30:06.764000000-00:00" + +;;; With :as-arrays? you get ordered vectors instead of unordered maps. +;;; Useful if you want to preserve the column ordering of your SQL statement: +(find-older-than {:age 20} {:as-arrays? true}) +;=> ([:person_id :name :age] [1 "Betty" 21] [2 "Betsy" 22] [3 "Becky" 23]) ``` As with `clojure.java.jdbc` the default `:result-set-fn` is `doall`, diff --git a/src/yesql/generate.clj b/src/yesql/generate.clj index 9ff489a..ea94167 100644 --- a/src/yesql/generate.clj +++ b/src/yesql/generate.clj @@ -81,7 +81,7 @@ (defn query-handler [db sql-and-params - {:keys [row-fn result-set-fn identifiers] + {:keys [row-fn result-set-fn identifiers as-arrays?] :or {identifiers lower-case row-fn identity result-set-fn doall} @@ -89,7 +89,8 @@ (jdbc/query db sql-and-params :identifiers identifiers :row-fn row-fn - :result-set-fn result-set-fn)) + :result-set-fn result-set-fn + :as-arrays? as-arrays?)) (defn generate-query-fn "Generate a function to run a query. diff --git a/test/yesql/core_test.clj b/test/yesql/core_test.clj index b752f07..2af0ea1 100644 --- a/test/yesql/core_test.clj +++ b/test/yesql/core_test.clj @@ -52,6 +52,13 @@ :identifiers clojure.string/upper-case :row-fn :TIME})) +;;; Check that :as-arrays? option returns a seq of ordered vectors instead of unordered maps +(expect [:time] (current-time-query {} {:result-set-fn first + :as-arrays? true})) + +(expect java.util.Date (first (current-time-query {} {:result-set-fn second + :as-arrays? true}))) + ;;; Test comment rules. (defquery inline-comments-query "yesql/sample_files/inline_comments.sql"