Remove local_dedupe_key from picker db
Since we are removing MEDIA_STORE_DEDUPLICATION_KEY from the
CloudMediaProvider API, we need to remove the equivalent key from the
picker db.
Now, deduping is only based on the local_id instead of <local_id,
local_dedupe_key>
Bug: 190713331
Test: PickerDatabaseHelperTest
Change-Id: I3b3bf2c570b02f5aaba818b4d0396ffef77ee01f
Merged-In: I3b3bf2c570b02f5aaba818b4d0396ffef77ee01f
(cherry picked from commit 7684ed24dbfc55a49f05ed1d33d22b10d3cd8c4c)
diff --git a/src/com/android/providers/media/photopicker/data/PickerDatabaseHelper.java b/src/com/android/providers/media/photopicker/data/PickerDatabaseHelper.java
index 53e7d85..23a96bd 100644
--- a/src/com/android/providers/media/photopicker/data/PickerDatabaseHelper.java
+++ b/src/com/android/providers/media/photopicker/data/PickerDatabaseHelper.java
@@ -93,16 +93,13 @@
makePristineSchema(db);
db.execSQL("CREATE TABLE media (_id INTEGER PRIMARY KEY AUTOINCREMENT,"
- + "local_id INTEGER,cloud_id TEXT UNIQUE,is_local_verified INTEGER DEFAULT 0,"
+ + "local_id INTEGER UNIQUE,cloud_id TEXT UNIQUE,is_local_verified INTEGER DEFAULT 0,"
+ "date_taken_ms INTEGER NOT NULL CHECK(date_taken_ms >= 0),"
- + "local_dedupe_key TEXT,"
+ "size_bytes INTEGER NOT NULL CHECK(size_bytes > 0),"
+ "duration_ms INTEGER CHECK(duration_ms >= 0),"
+ "mime_type TEXT NOT NULL,"
+ "CHECK((is_local_verified = 0 AND cloud_id IS NOT NULL) OR "
- + "(is_local_verified != 0 AND local_id IS NOT NULL AND "
- + "local_dedupe_key IS NOT NULL)),"
- + "UNIQUE(local_id, local_dedupe_key))");
+ + "(is_local_verified != 0 AND local_id IS NOT NULL)))");
}
private static void createLatestIndexes(SQLiteDatabase db) {
@@ -110,7 +107,6 @@
db.execSQL("CREATE INDEX local_id_index on media(local_id)");
db.execSQL("CREATE INDEX cloud_id_index on media(cloud_id)");
- db.execSQL("CREATE INDEX local_dedupe_key_index on media(local_dedupe_key)");
db.execSQL("CREATE INDEX date_taken_index on media(date_taken_ms)");
db.execSQL("CREATE INDEX size_index on media(size_bytes)");
db.execSQL("CREATE INDEX mime_type_index on media(mime_type)");
diff --git a/tests/src/com/android/providers/media/photopicker/data/PickerDatabaseHelperTest.java b/tests/src/com/android/providers/media/photopicker/data/PickerDatabaseHelperTest.java
index f7d9616..6c925af 100644
--- a/tests/src/com/android/providers/media/photopicker/data/PickerDatabaseHelperTest.java
+++ b/tests/src/com/android/providers/media/photopicker/data/PickerDatabaseHelperTest.java
@@ -45,15 +45,12 @@
private static final String KEY_LOCAL_ID = "local_id";
private static final String KEY_CLOUD_ID = "cloud_id";
private static final String KEY_IS_LOCAL_VERIFIED = "is_local_verified";
- private static final String KEY_LOCAL_DEDUPE_KEY = "local_dedupe_key";
private static final String KEY_DATE_TAKEN_MS = "date_taken_ms";
private static final String KEY_SIZE_BYTES = "size_bytes";
private static final String KEY_DURATION_MS = "duration_ms";
private static final String KEY_MIME_TYPE = "mime_type";
private static final long LOCAL_ID = 50;
- // date_modified_ms+size
- private static final String LOCAL_DEDUPE_KEY = "1623852851911+7000";
private static final long SIZE_BYTES = 7000;
private static final long DATE_TAKEN_MS = 1623852851911L;
private static final String CLOUD_ID = "asdfghjkl;";
@@ -74,7 +71,6 @@
KEY_LOCAL_ID,
KEY_CLOUD_ID,
KEY_IS_LOCAL_VERIFIED,
- KEY_LOCAL_DEDUPE_KEY,
KEY_DATE_TAKEN_MS,
KEY_SIZE_BYTES,
KEY_DURATION_MS,
@@ -89,7 +85,6 @@
values.put(KEY_LOCAL_ID, LOCAL_ID);
values.put(KEY_CLOUD_ID, CLOUD_ID);
values.put(KEY_IS_LOCAL_VERIFIED, 1);
- values.put(KEY_LOCAL_DEDUPE_KEY, LOCAL_DEDUPE_KEY);
assertThat(db.insert(MEDIA_TABLE, null, values)).isNotEqualTo(-1);
try (Cursor cr = db.query(MEDIA_TABLE, projection, null, null, null, null, null)) {
@@ -98,26 +93,12 @@
assertThat(cr.getLong(0)).isEqualTo(LOCAL_ID);
assertThat(cr.getString(1)).isEqualTo(CLOUD_ID);
assertThat(cr.getInt(2)).isEqualTo(1);
- assertThat(cr.getString(3)).isEqualTo(LOCAL_DEDUPE_KEY);
- assertThat(cr.getLong(4)).isEqualTo(DATE_TAKEN_MS);
- assertThat(cr.getLong(5)).isEqualTo(SIZE_BYTES);
- assertThat(cr.getLong(6)).isEqualTo(DURATION_MS);
- assertThat(cr.getString(7)).isEqualTo(MIME_TYPE);
+ assertThat(cr.getLong(3)).isEqualTo(DATE_TAKEN_MS);
+ assertThat(cr.getLong(4)).isEqualTo(SIZE_BYTES);
+ assertThat(cr.getLong(5)).isEqualTo(DURATION_MS);
+ assertThat(cr.getString(6)).isEqualTo(MIME_TYPE);
}
}
-
- // Remove cloud_id to avoid hitting cloud_id unique constraint
- values.remove(KEY_CLOUD_ID);
-
- // Same local_dedupe_key with different local_id can be inserted
- ContentValues valuesLocalId = new ContentValues(values);
- valuesLocalId.put(KEY_LOCAL_ID, LOCAL_ID + 1);
- assertThat(db.insert(MEDIA_TABLE, null, valuesLocalId)).isNotEqualTo(-1);
-
- // Same local_id with different local_dedupe_key can be inserted
- ContentValues valuesLocalDateModifiedMs = new ContentValues(values);
- valuesLocalDateModifiedMs.put(KEY_LOCAL_DEDUPE_KEY, LOCAL_DEDUPE_KEY + "1");
- assertThat(db.insert(MEDIA_TABLE, null, valuesLocalDateModifiedMs)).isNotEqualTo(-1);
}
}
@@ -135,7 +116,6 @@
values = getBasicContentValues();
values.put(KEY_LOCAL_ID, LOCAL_ID);
values.put(KEY_IS_LOCAL_VERIFIED, 1);
- values.put(KEY_LOCAL_DEDUPE_KEY, LOCAL_DEDUPE_KEY);
assertThat(db.insert(MEDIA_TABLE, null, values)).isNotEqualTo(-1);
}
}
@@ -213,14 +193,6 @@
ContentValues values = getBasicContentValues();
values.put(KEY_CLOUD_ID, CLOUD_ID);
values.put(KEY_IS_LOCAL_VERIFIED, 1);
- values.put(KEY_LOCAL_DEDUPE_KEY, LOCAL_DEDUPE_KEY);
- assertThat(db.insert(MEDIA_TABLE, null, values)).isEqualTo(-1);
-
- // is_local_verified=1 && local_dedupe_key=NULL
- values = getBasicContentValues();
- values.put(KEY_CLOUD_ID, CLOUD_ID);
- values.put(KEY_IS_LOCAL_VERIFIED, 1);
- values.put(KEY_LOCAL_ID, LOCAL_ID);
assertThat(db.insert(MEDIA_TABLE, null, values)).isEqualTo(-1);
}
}
@@ -234,13 +206,11 @@
ContentValues values = getBasicContentValues();
values.put(KEY_IS_LOCAL_VERIFIED, 0);
values.put(KEY_LOCAL_ID, LOCAL_ID);
- values.put(KEY_LOCAL_DEDUPE_KEY, LOCAL_DEDUPE_KEY);
assertThat(db.insert(MEDIA_TABLE, null, values)).isEqualTo(-1);
// is_local_verified=NULL && cloud_id=NULL
values = getBasicContentValues();
values.put(KEY_LOCAL_ID, LOCAL_ID);
- values.put(KEY_LOCAL_DEDUPE_KEY, LOCAL_DEDUPE_KEY);
assertThat(db.insert(MEDIA_TABLE, null, values)).isEqualTo(-1);
}
}
@@ -253,12 +223,11 @@
final ContentValues values = getBasicContentValues();
values.put(KEY_LOCAL_ID, LOCAL_ID);
values.put(KEY_IS_LOCAL_VERIFIED, 1);
- values.put(KEY_LOCAL_DEDUPE_KEY, LOCAL_DEDUPE_KEY);
- // Insert <local_id, local_dedupe_key>: success
+ // Insert <local_id>: success
assertThat(db.insert(MEDIA_TABLE, null, values)).isNotEqualTo(-1);
- // Insert <local_id, local_dedupe_key, size> again: failure
+ // Insert <local_id> again: failure
assertThat(db.insert(MEDIA_TABLE, null, values)).isEqualTo(-1);
}
}