From e7fefe86a622aef57e4628b39495738c1640537f Mon Sep 17 00:00:00 2001 From: alice Date: Thu, 12 Dec 2013 11:35:38 +0900 Subject: [PATCH] add columns, merge-columns and query-values clauses --- src/honeysql/core.clj | 2 ++ src/honeysql/format.clj | 11 +++++++++-- src/honeysql/helpers.clj | 21 +++++++++++++++++---- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/honeysql/core.clj b/src/honeysql/core.clj index c299c50..51999ea 100644 --- a/src/honeysql/core.clj +++ b/src/honeysql/core.clj @@ -44,7 +44,9 @@ :offset :modifiers, :merge-modifiers :insert-into + :columns, :merge-columns :values, :merge-values + :query-values :update :set :delete-from" diff --git a/src/honeysql/format.clj b/src/honeysql/format.clj index e6c25f6..d0a816f 100644 --- a/src/honeysql/format.clj +++ b/src/honeysql/format.clj @@ -147,8 +147,9 @@ (def clause-order "Determines the order that clauses will be placed within generated SQL" - [:select :insert-into :update :delete-from :set :from :join :left-join :right-join :where :group-by :having - :order-by :limit :offset :values]) + [:select :insert-into :update :delete-from :columns :set :from :join + :left-join :right-join :where :group-by :having :order-by :limit :offset + :values :query-values]) (def known-clauses (set clause-order)) @@ -333,6 +334,9 @@ (defmethod format-clause :insert-into [[_ table] _] (str "INSERT INTO " (to-sql table))) +(defmethod format-clause :columns [[_ fields] _] + (str "(" (comma-join (map to-sql fields)) ")")) + (defmethod format-clause :values [[_ values] _] (if (sequential? (first values)) (str "VALUES " (comma-join (for [x values] @@ -342,6 +346,9 @@ (comma-join (for [x values] (str "(" (comma-join (map to-sql (vals x))) ")")))))) +(defmethod format-clause :query-values [[_ query-values] _] + (to-sql query-values)) + (defmethod format-clause :update [[_ table] _] (str "UPDATE " (to-sql table))) diff --git a/src/honeysql/helpers.clj b/src/honeysql/helpers.clj index 57967d3..91c1ca2 100644 --- a/src/honeysql/helpers.clj +++ b/src/honeysql/helpers.clj @@ -161,20 +161,33 @@ ([table] (insert-into nil table)) ([m table] (build-clause :insert-into m table))) -(defmethod build-clause :values [_ m values] - (assoc m :values values)) +(defhelper columns [m fields] + (assoc m :columns (collify fields))) + +(defhelper merge-columns [m fields] + (update-in m [:columns] concat (collify fields))) + +(defmethod build-clause :values [_ m vs] + (assoc m :values vs)) (defn values ([vs] (values nil vs)) ([m vs] (build-clause :values m vs))) -(defmethod build-clause :merge-values [_ m values] - (update-in m [:values] concat values)) +(defmethod build-clause :merge-values [_ m vs] + (update-in m [:values] concat vs)) (defn merge-values ([vs] (merge-values nil vs)) ([m vs] (build-clause :merge-values m vs))) +(defmethod build-clause :query-values [_ m vs] + (assoc m :query-values vs)) + +(defn query-values + ([vs] (values nil vs)) + ([m vs] (build-clause :query-values m vs))) + (defmethod build-clause :update [_ m table] (assoc m :update table))