From 8025d3520d6cdb66a76ce73d9aa7fad78158d927 Mon Sep 17 00:00:00 2001 From: Sean Corfield Date: Mon, 12 Oct 2020 22:54:59 -0700 Subject: [PATCH] Bug fixes for JOINs --- src/honey/sql.cljc | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/honey/sql.cljc b/src/honey/sql.cljc index 95eb861..0e7c875 100644 --- a/src/honey/sql.cljc +++ b/src/honey/sql.cljc @@ -256,13 +256,19 @@ [(str (sql-kw k) " " (format-entity-alias table))]) [(str (sql-kw k) " " (format-entity-alias table))])) -(defn- format-join [k [j e]] - (let [[sql & params] (format-expr e)] - ;; for backward compatibility, treat plain JOIN as INNER JOIN: - (into [(str (sql-kw (if (= :join k) :inner-join k)) " " - (format-entity-alias j) " ON " - sql)] - params))) +(defn- format-join [k clauses] + (let [[sqls params] + (reduce (fn [[sqls params] [j e]] + ;; TODO: join using! + (let [[sql & params'] (when e (format-expr e))] + [(cond-> (conj sqls + (sql-kw (if (= :join k) :inner-join k)) + (format-entity-alias j)) + e (conj "ON" sql)) + (into params params')])) + [[] []] + (partition 2 clauses))] + (into [(str/join " " sqls)] params))) (defn- format-on-expr [k e] (if (or (not (sequential? e)) (seq e))