toucan2 icon indicating copy to clipboard operation
toucan2 copied to clipboard

`before-delete` doesn't work correctly when query manually specifies `:delete-from` or `:delete`/`:from`

Open camsaul opened this issue 7 months ago • 1 comments

(t2/delete! :model/Field
            {:delete-from [:metabase_field :field]
             :where [:= :id 0]})

runs a query like

SELECT * DELETE FROM `metabase_field` AS `field` FROM `metabase_field` WHERE `id` = ?

which of course doesn't make sense.

We need to make sure before-delete removes :delete-from / :delete before handing off to select but correctly uses any aliases specified there

camsaul avatar May 29 '25 19:05 camsaul

Failing test

(deftest ^:parallel build-before-delete-query-test
  (testing "before-delete's select query should remove `:delete`/`:delete-from` (workaround for https://github.com/camsaul/toucan2/issues/203)"
    (is (= {:select [:*], :from [[:metabase_field :field]], :where [:= :field.id 0]}
           (t2/build
             (t2/select :model/Field
                        {:delete-from [:metabase_field :field]
                         :where       [:= :field.id 0]}))))
    (is (= {:select [:*], :from [[:metabase_field :field]], :where [:= :field.id 0]}
           (t2/build
             (t2/select :model/Field
                        {:delete [:field]
                         :from   [[:metabase_field :field]]
                         :where  [:= :field.id 0]}))))))

camsaul avatar May 29 '25 19:05 camsaul