Fix for SQL onconflict - specify FAIL. This fixes the default update's error because we don't use transactions.

pull/14/head
Tim Su 13 years ago
parent 272cab96d1
commit df1e3cba8c

@ -257,7 +257,8 @@ abstract public class AbstractDatabase {
* @see android.database.sqlite.SQLiteDatabase#update(String table, ContentValues values, String whereClause, String[] whereArgs)
*/
public synchronized int update(String table, ContentValues values, String whereClause, String[] whereArgs) {
int result = getDatabase().update(table, values, whereClause, whereArgs);
int result = getDatabase().updateWithOnConflict(table, values, whereClause, whereArgs,
SQLiteDatabase.CONFLICT_FAIL);
onDatabaseUpdated();
return result;
}

@ -167,17 +167,21 @@ public class TaskDao extends DatabaseDao<Task> {
* @return true if save occurred, false otherwise (i.e. nothing changed)
*/
public boolean save(Task task) {
boolean saveSuccessful;
boolean saveSuccessful = false;
if (task.getId() == Task.NO_ID) {
try {
saveSuccessful = createNew(task);
} catch (SQLiteConstraintException e) { // Tried to create task with remote id that already exists
saveSuccessful = false;
TodorooCursor<Task> cursor = query(Query.select(Task.ID).where(Task.REMOTE_ID.eq(task.getValue(Task.REMOTE_ID))));
if (cursor.getCount() > 0) {
cursor.moveToFirst();
task.setId(cursor.get(Task.ID));
saveSuccessful = saveExisting(task);
} catch (SQLiteConstraintException e) {
if(e.getMessage().contains(Task.REMOTE_ID_PROPERTY_NAME)) {
// Tried to create task with remote id that already exists
saveSuccessful = false;
TodorooCursor<Task> cursor = query(Query.select(Task.ID).where(
Task.REMOTE_ID.eq(task.getValue(Task.REMOTE_ID))));
if (cursor.getCount() > 0) {
cursor.moveToFirst();
task.setId(cursor.get(Task.ID));
saveSuccessful = saveExisting(task);
}
}
}
} else {

Loading…
Cancel
Save