Você está certo de que o problema aparece porque o SQLite verifica as restrições após cada atualização de linha e não no final da instrução ou no final da transação.
Eu vejo esta solução para o problema (do SQLite não ter implementado
UPDATE
corretamente). Supondo que a priority
coluna não tem nenhum valor negativo, podemos usá-los (valores negativos) como temporários para evitar o UNIQUE
erros de restrição:UPDATE table1 SET priority = - (priority + 1) WHERE priority > 1 ;
UPDATE table1 SET priority = - priority WHERE priority < 0 ;