toucan2
toucan2 copied to clipboard
`before-delete` doesn't work correctly when query manually specifies `:delete-from` or `:delete`/`:from`
(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
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]}))))))