Skip to content

Commit b532c7b

Browse files
schmidt-sebastianjeremyjiang-dev
authored andcommitted
Fix index deletion bug (#3447)
1 parent 3ab2dcb commit b532c7b

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed

firebase-firestore/src/main/java/com/google/firebase/firestore/local/SQLiteIndexManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ public void addFieldIndex(FieldIndex index) {
217217
public void deleteFieldIndex(FieldIndex index) {
218218
db.execute("DELETE FROM index_configuration WHERE index_id = ?", index.getIndexId());
219219
db.execute("DELETE FROM index_entries WHERE index_id = ?", index.getIndexId());
220-
db.execute("DELETE FROM index_state WHERE index_id = ?", index.getIndexState());
220+
db.execute("DELETE FROM index_state WHERE index_id = ?", index.getIndexId());
221221

222222
nextIndexToUpdate.remove(index);
223223
Map<Integer, FieldIndex> collectionIndices = memoizedIndexes.get(index.getCollectionGroup());

firebase-firestore/src/test/java/com/google/firebase/firestore/local/SQLiteIndexManagerTest.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -651,6 +651,21 @@ public void testDeleteFieldIndexRemovesEntryFromCollectionGroup() {
651651
assertEquals("coll2", collectionGroup);
652652
}
653653

654+
@Test
655+
public void testDeleteFieldIndexRemovesAllMetadata() {
656+
indexManager.addFieldIndex(
657+
fieldIndex("coll", 1, IndexState.create(1, IndexOffset.NONE), "value", Kind.ASCENDING));
658+
addDoc("coll/doc", map("value", 1));
659+
indexManager.updateCollectionGroup("coll", IndexOffset.NONE);
660+
661+
validateRowCount(1);
662+
663+
FieldIndex existingIndex = indexManager.getFieldIndexes("coll").iterator().next();
664+
indexManager.deleteFieldIndex(existingIndex);
665+
666+
validateRowCount(0);
667+
}
668+
654669
@Test
655670
public void testChangeUser() {
656671
IndexManager indexManager = persistence.getIndexManager(User.UNAUTHENTICATED);
@@ -714,4 +729,21 @@ private void verifyResults(Query query, String... documents) {
714729
List<DocumentKey> keys = Arrays.stream(documents).map(s -> key(s)).collect(Collectors.toList());
715730
assertWithMessage("Result for %s", query).that(results).containsExactlyElementsIn(keys);
716731
}
732+
733+
/** Validates the row count in the SQLite tables that are used for indexing. */
734+
private void validateRowCount(int expectedRows) {
735+
SQLitePersistence persistence = (SQLitePersistence) this.persistence;
736+
persistence
737+
.query(
738+
"SELECT "
739+
+ "(SELECT COUNT(*) FROM index_state) AS index_state_count, "
740+
+ "(SELECT COUNT(*) FROM index_entries) AS index_entries_count, "
741+
+ "(SELECT COUNT(*) FROM index_configuration) AS index_configuration_count")
742+
.first(
743+
value -> {
744+
assertEquals(value.getInt(0), expectedRows);
745+
assertEquals(value.getInt(1), expectedRows);
746+
assertEquals(value.getInt(2), expectedRows);
747+
});
748+
}
717749
}

0 commit comments

Comments
 (0)