Skip to content

Commit e254745

Browse files
authored
Fix insert transform only keys in first row (#138)
* fix insert transform only keys that are in first row * a better approach? * adds a test description
1 parent 651dd55 commit e254745

File tree

2 files changed

+24
-12
lines changed

2 files changed

+24
-12
lines changed

src/toucan2/tools/transformed.clj

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -281,20 +281,15 @@
281281

282282
;;;; before insert
283283

284-
;;; TODO -- this shares a lot of code with [[transform-update-changes]]
285284
(defn- transform-insert-rows [[first-row :as rows] k->transform]
286285
{:pre [(map? first-row) (map? k->transform)]}
287-
;; all rows should have the same keys, so we just need to look at the keys in the first row
288-
(let [row-xforms (for [k (keys first-row)
289-
:let [xform (get k->transform k)]
290-
:when xform]
291-
(fn [row]
292-
(update row k (fn [v]
293-
(if (some? v)
294-
(xform v)
295-
v)))))
296-
row-xform (apply comp row-xforms)]
297-
(map row-xform rows)))
286+
(let [x-forms (for [[k transform] k->transform]
287+
(fn [row]
288+
(if (some? (get row k))
289+
(update row k transform)
290+
row)))
291+
x-form (apply comp x-forms)]
292+
(map x-form rows)))
298293

299294
(m/defmethod pipeline/build [#_query-type :toucan.query-type/insert.*
300295
#_model ::transformed.model

test/toucan2/tools/transformed_test.clj

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -543,3 +543,20 @@
543543
(is (= 'transforms-primary-method-model-2
544544
(generated-name `(transformed/deftransforms :model-2
545545
{:x {:in ~'inc}})))))))
546+
547+
(derive ::venues.edn-category ::test/venues)
548+
549+
(transformed/deftransforms ::venues.edn-category
550+
{:category {:in pr-str
551+
:out (fn [s]
552+
(binding [*read-eval* false]
553+
(read-string s)))}})
554+
555+
(deftest ^:parallel transform-insert-rows-test
556+
(testing "insert multiple rows in which each row has different key set will still do transformation properly (#130)"
557+
(is (= [{:name "Venue 1"}
558+
{:name "Venue 2", :category "{:name \"Category 2\"}"}]
559+
(#'toucan2.tools.transformed/transform-insert-rows
560+
'[{:name "Venue 1"}
561+
{:name "Venue 2", :category {:name "Category 2"}}]
562+
(#'toucan2.tools.transformed/in-transforms ::venues.edn-category))))))

0 commit comments

Comments
 (0)