Hai ragione sul fatto che il problema si presenta perché SQLite controlla i vincoli dopo ogni aggiornamento di riga e non alla fine dell'istruzione o alla fine della transazione.
Vedo questa soluzione al problema (di SQLite che non ha implementato UPDATE
correttamente). Supponendo che la priority
la colonna non ha valori negativi, possiamo usarli (valori negativi) come temporanei per evitare il UNIQUE
errori di vincolo:
UPDATE table1 SET priority = - (priority + 1) WHERE priority > 1 ;
UPDATE table1 SET priority = - priority WHERE priority < 0 ;