Handle Missing Event Row
When checking for Calendars.CAN_PARTIALLY_UPDATE in duplicateEvent() , don't
crash if there is no matching event id in the db.
Bug: 11392862
Change-Id: I895c3a307b842c4340c851da27c25951d3e7968f
diff --git a/src/com/android/providers/calendar/CalendarDatabaseHelper.java b/src/com/android/providers/calendar/CalendarDatabaseHelper.java
index dc3deba..407e21a 100644
--- a/src/com/android/providers/calendar/CalendarDatabaseHelper.java
+++ b/src/com/android/providers/calendar/CalendarDatabaseHelper.java
@@ -24,6 +24,7 @@
import android.database.DatabaseUtils;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteDoneException;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
@@ -3367,12 +3368,21 @@
*/
protected void duplicateEvent(final long id) {
final SQLiteDatabase db = getWritableDatabase();
- final long canPartiallyUpdate = DatabaseUtils.longForQuery(db, "SELECT "
- + Calendars.CAN_PARTIALLY_UPDATE + " FROM " + Views.EVENTS
- + " WHERE " + Events._ID + " = ?", new String[] {
- String.valueOf(id)
- });
- if (canPartiallyUpdate == 0) {
+ try {
+ final long canPartiallyUpdate = DatabaseUtils.longForQuery(db, "SELECT "
+ + Calendars.CAN_PARTIALLY_UPDATE + " FROM " + Views.EVENTS
+ + " WHERE " + Events._ID + " = ?", new String[] {
+ String.valueOf(id)
+ });
+ if (canPartiallyUpdate == 0) {
+ return;
+ }
+ } catch (SQLiteDoneException e) {
+ // b/11392862
+ // If no results are returned, this will be thrown. This can happen if the Events View
+ // has no rows for the provided id. This might happen for example if someone inserts a
+ // reminder that refers to a non existent event id.
+ // Return without doing anything because there is no event to duplicate.
return;
}