Just like in any database, It can be done using transaction with INSERT OR IGNORE
followed by UPDATE
.
One thing different is using @Insert
with onConflict
option instead of plain query.
@Insert(onConflict = OnConflictStrategy.IGNORE)
suspend fun insertOrIgnoreTask(task: Task) : Long
@Update
suspend fun updateTask(task: Task)
@Transaction
suspend fun insertOrUpdateTask(task: Task){
val row = insertOrIgnoreTask(task)
if(row < 0) updateTask(task)
}