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

pull/14/head
Tim Su 14 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) * @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) { 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(); onDatabaseUpdated();
return result; return result;
} }

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

Loading…
Cancel
Save