From d086631e54f812e47507aefa70335723de514dff Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Wed, 8 Jan 2025 17:55:21 +0200 Subject: [PATCH] Refactor format-values to do fewer allocations --- CHANGELOG.md | 2 +- src/honey/sql.cljc | 60 +++++++++++++++++++++++----------------------- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ac0257a..7c9d1b7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ # Changes * 2.6.next in progress - * More performance optimizations via PR [#560](https://github.com/seancorfield/honeysql/pull/560) [@alexander-yakushev](https://github.com/alexander-yakushev). + * More performance optimizations via PRs [#560](https://github.com/seancorfield/honeysql/pull/560) and [#562](https://github.com/seancorfield/honeysql/pull/562) [@alexander-yakushev](https://github.com/alexander-yakushev). * Fix two broken links to the [HoneySQL web app](https://john.shaffe.rs/honeysql/) via PR [#559](https://github.com/seancorfield/honeysql/pull/559) [@whatacold](https://github.com/whatacold). * Make SQL Server dialect auto-lift Boolean values to parameters since SQL Server has no `TRUE` / `FALSE` literals. diff --git a/src/honey/sql.cljc b/src/honey/sql.cljc index 34f0162..3a9445a 100644 --- a/src/honey/sql.cljc +++ b/src/honey/sql.cljc @@ -1177,17 +1177,17 @@ x)) xs))) [sqls params] - (reduce (fn [[sql params] [sqls' params']] - [(conj sql - (if (sequential? sqls') - (str "(" (join ", " sqls') ")") - sqls')) - (into params params')]) + (reduce (fn [[sql params] x] + (if (sequential? x) + (let [[sqls' params'] (format-expr-list x)] + [(conj sql + (if (sequential? sqls') + (str "(" (join ", " sqls') ")") + sqls')) + (into* params params')]) + [(conj sql (sql-kw x)) params])) [[] []] - (map #(if (sequential? %) - (format-expr-list %) - [(sql-kw %)]) - xs')) + xs') sqls (if row-ctr (map #(str "ROW" %) sqls) sqls)] (into [(str (sql-kw k) " " (join ", " sqls))] params)) @@ -1199,26 +1199,26 @@ (contains-clause? :replace-into) (contains-clause? :columns))) [sqls params] - (reduce (fn [[sql params] [sqls' params']] - [(conj sql - (if (sequential? sqls') - (str "(" (join ", " sqls') ")") - sqls')) - (if params' (into params params') params')]) - [[] []] - (map (fn [m] - (if (map? m) - (format-expr-list - (map #(get m - % - ;; issue #366: use NULL or DEFAULT - ;; for missing column values: - (if (contains? *values-default-columns* %) - [:default] - nil)) - cols)) - [(sql-kw m)])) - xs))] + (reduce + (fn [[sql params] x] + (if (map? x) + (let [[sqls' params'] + (reduce-sql (map #(format-expr + (get x % + ;; issue #366: use NULL or DEFAULT + ;; for missing column values: + (if (contains? *values-default-columns* %) + [:default] + nil)))) + cols)] + [(conj sql + (if (sequential? sqls') + (str "(" (join ", " sqls') ")") + sqls')) + (into* params params')]) + [(conj sql (sql-kw x)) params])) + [[] []] + xs)] (into [(str (when cols-sql (str cols-sql " ")) (sql-kw k)