public async Task Rebuild_Large_Files() { // do some tests async Task DoTestAsync(ILiteDatabaseAsync db, ILiteCollectionAsync <Zip> col) { Assert.Equal(1, await col.CountAsync()); Assert.Equal(99, db.UserVersion); }; using (var file = new TempFile()) { using (var db = new LiteDatabaseAsync(file.Filename)) { var col = db.GetCollection <Zip>(); db.UserVersion = 99; await col.EnsureIndexAsync("city", false); var inserted = await col.InsertAsync(DataGen.Zip()); // 29.353 docs var deleted = await col.DeleteManyAsync(x => x.Id != "01001"); // delete 29.352 docs Assert.Equal(29353, inserted); Assert.Equal(29352, deleted); Assert.Equal(1, await col.CountAsync()); // must checkpoint await db.CheckpointAsync(); // file still large than 5mb (even with only 1 document) Assert.True(file.Size > 5 * 1024 * 1024); // reduce datafile var reduced = await db.RebuildAsync(); // now file are small than 50kb Assert.True(file.Size < 50 * 1024); await DoTestAsync(db, col); } // re-open and rebuild again using (var db = new LiteDatabaseAsync(file.Filename)) { var col = db.GetCollection <Zip>(); await DoTestAsync(db, col); await db.RebuildAsync(); await DoTestAsync(db, col); } } }
public async Task Rebuild_After_DropCollection() { using (var file = new TempFile()) using (var db = new LiteDatabaseAsync(file.Filename)) { var col = db.GetCollection <Zip>("zip"); await col.InsertAsync(DataGen.Zip()); await db.DropCollectionAsync("zip"); await db.CheckpointAsync(); // full disk usage var size = file.Size; var r = await db.RebuildAsync(); // only header page Assert.Equal(8192, size - r); } }