summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorke Lee <yorkelee@google.com>2014-03-04 08:26:45 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2014-03-04 08:26:45 +0000
commit64492d9996e53ca9f56e5309c6a2851274a8f1fd (patch)
treee17f28d581ba2146b59adafefd1312befa5c7d9b
parent61c549341bf7edd29387cf78dcad2651f55ff3fb (diff)
parent0b9af237969cc7920fa7886f9f7c1b0f7159a1fc (diff)
am 0b9af237: am 088b0b81: am d126f874: Fix Dialer OOM when building smart dialling index
* commit '0b9af237969cc7920fa7886f9f7c1b0f7159a1fc': Fix Dialer OOM when building smart dialling index
-rw-r--r--src/com/android/dialer/database/DialerDatabaseHelper.java14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/com/android/dialer/database/DialerDatabaseHelper.java b/src/com/android/dialer/database/DialerDatabaseHelper.java
index d3897c266..f6f5f6c3a 100644
--- a/src/com/android/dialer/database/DialerDatabaseHelper.java
+++ b/src/com/android/dialer/database/DialerDatabaseHelper.java
@@ -163,6 +163,17 @@ public class DialerDatabaseHelper extends SQLiteOpenHelper {
/** Selects only rows that have been updated after a certain time stamp.*/
static final String SELECT_UPDATED_CLAUSE =
Phone.CONTACT_LAST_UPDATED_TIMESTAMP + " > ?";
+
+ /** Ignores contacts that have an unreasonably long lookup key. These are likely to be
+ * the result of multiple (> 50) merged raw contacts, and are likely to cause
+ * OutOfMemoryExceptions within SQLite, or cause memory allocation problems later on
+ * when iterating through the cursor set (see b/13133579)
+ */
+ static final String SELECT_IGNORE_LOOKUP_KEY_TOO_LONG_CLAUSE =
+ "length(" + Phone.LOOKUP_KEY + ") < 1000";
+
+ static final String SELECTION = SELECT_UPDATED_CLAUSE + " AND " +
+ SELECT_IGNORE_LOOKUP_KEY_TOO_LONG_CLAUSE;
}
/** Query options for querying the deleted contact database.*/
@@ -658,7 +669,6 @@ public class DialerDatabaseHelper extends SQLiteOpenHelper {
} else {
insert.bindString(5, displayName);
}
-
insert.bindLong(1, updatedContactCursor.getLong(PhoneQuery.PHONE_ID));
insert.bindLong(3, updatedContactCursor.getLong(PhoneQuery.PHONE_CONTACT_ID));
insert.bindLong(6, updatedContactCursor.getLong(PhoneQuery.PHONE_PHOTO_ID));
@@ -758,7 +768,7 @@ public class DialerDatabaseHelper extends SQLiteOpenHelper {
* update time.
*/
final Cursor updatedContactCursor = mContext.getContentResolver().query(PhoneQuery.URI,
- PhoneQuery.PROJECTION, PhoneQuery.SELECT_UPDATED_CLAUSE,
+ PhoneQuery.PROJECTION, PhoneQuery.SELECTION,
new String[]{lastUpdateMillis}, null);
/** Sets the time after querying the database as the current update time. */