Empty draft created on deleting a group MMS message

Bug 7360609

Cleanup pdu table on db upgrade to remove all rows with a NULL threadId.
An earlier change made sure we only inserted rows with a valid threadId or
with 0. A NULL threadId in the pdu table causes deleting a thread to fail.

Change-Id: I38824aa879fed80fe2385633c46d3c7eab0ae3b8
diff --git a/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java b/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java
index 80473d1..036cad2 100644
--- a/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java
+++ b/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java
@@ -215,7 +215,7 @@
     private static boolean sFakeLowStorageTest = false;     // for testing only
 
     static final String DATABASE_NAME = "mmssms.db";
-    static final int DATABASE_VERSION = 56;
+    static final int DATABASE_VERSION = 57;
     private final Context mContext;
     private LowStorageMonitor mLowStorageMonitor;
 
@@ -1257,6 +1257,22 @@
             } finally {
                 db.endTransaction();
             }
+            // fall through
+        case 56:
+            if (currentVersion <= 56) {
+                return;
+            }
+
+            db.beginTransaction();
+            try {
+                upgradeDatabaseToVersion57(db);
+                db.setTransactionSuccessful();
+            } catch (Throwable ex) {
+                Log.e(TAG, ex.getMessage(), ex);
+                break;
+            } finally {
+                db.endTransaction();
+            }
             return;
         }
 
@@ -1453,6 +1469,11 @@
                 " INTEGER DEFAULT 0");
     }
 
+    private void upgradeDatabaseToVersion57(SQLiteDatabase db) {
+        // Clear out bad rows, those with empty threadIds, from the pdu table.
+        db.execSQL("DELETE FROM " + MmsProvider.TABLE_PDU + " WHERE " + Mms.THREAD_ID + " IS NULL");
+    }
+
     @Override
     public synchronized SQLiteDatabase getWritableDatabase() {
         SQLiteDatabase db = super.getWritableDatabase();