Как я мог бы откатить транзакцию при возникновении пользовательских ошибок

#swift #sqlite.swift

#swift #sqlite.swift

Вопрос:

У меня есть метод массовой вставки, который пытается вставить массив элементов в транзакцию. Однако у меня есть пользовательские ошибки, которые я создаю на основе передаваемых значений. Например, строки не могут быть пустыми (что является допустимым строковым значением для sqlite).

Как я мог бы откатить транзакцию, если я выдаю свою пользовательскую ошибку?

В настоящее время, когда возникает ошибка throw, эта операция вставки пропускается. Итак, если я добавляю 10 элементов, а 1 элемент содержит недопустимую пустую строку, моя транзакция вставляет 9 элементов.

https://gist.github.com/tinder-calebdavis/90b8658f6494e3f2836d9ab53391834c

Ответ №1:

Возможно, это не лучший ответ, но в итоге я запустил свои собственные проверки перед запуском транзакции.

Если моя проверка выдает ошибку, транзакция никогда не начнется.

Я рассматривал возможность добавления ограничения к моему столбцу или даже триггера, но мне было нелегко разобраться в синтаксисе для этого. Наличие ограничения или триггера было бы неплохо, потому что я мог бы получить фактическую ошибку SQL, вызывающую откат транзакции.