fix(database): enable SQLite WAL before schema reconciliation
This commit is contained in:
@@ -54,6 +54,39 @@ public sealed class DatabaseBackupRunnerTests : IDisposable
|
||||
Assert.Equal(2L, (long)(await count.ExecuteScalarAsync())!);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task RunOnce_includes_committed_WAL_rows_in_an_independent_restorable_snapshot()
|
||||
{
|
||||
CreateSourceDb(out var connectionString);
|
||||
await using var source = new SqliteConnection(connectionString);
|
||||
await source.OpenAsync();
|
||||
await using var write = source.CreateCommand();
|
||||
write.CommandText = "PRAGMA journal_mode=WAL;";
|
||||
Assert.Equal("wal", await write.ExecuteScalarAsync());
|
||||
write.CommandText = "INSERT INTO Sample (Name) VALUES ('committed-in-wal');";
|
||||
await write.ExecuteNonQueryAsync();
|
||||
Assert.True(new FileInfo(Path.Combine(_root, "source.db-wal")).Length > 0);
|
||||
|
||||
var backupPath = await CreateRunner(connectionString).RunOnceAsync(CancellationToken.None);
|
||||
Assert.NotNull(backupPath);
|
||||
await using var backup = new SqliteConnection($"Data Source={backupPath};Mode=ReadOnly;Pooling=False");
|
||||
await backup.OpenAsync();
|
||||
await using var query = backup.CreateCommand();
|
||||
query.CommandText = "PRAGMA integrity_check;";
|
||||
Assert.Equal("ok", await query.ExecuteScalarAsync());
|
||||
query.CommandText = "SELECT COUNT(*) FROM Sample;";
|
||||
Assert.Equal(3L, await query.ExecuteScalarAsync());
|
||||
query.CommandText = "SELECT Name FROM Sample WHERE Id=3;";
|
||||
Assert.Equal("committed-in-wal", await query.ExecuteScalarAsync());
|
||||
|
||||
write.CommandText = "INSERT INTO Sample (Name) VALUES ('after-snapshot');";
|
||||
await write.ExecuteNonQueryAsync();
|
||||
query.CommandText = "SELECT COUNT(*) FROM Sample;";
|
||||
Assert.Equal(3L, await query.ExecuteScalarAsync());
|
||||
write.CommandText = "SELECT COUNT(*) FROM Sample;";
|
||||
Assert.Equal(4L, await write.ExecuteScalarAsync());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task RunOnce_prunes_backups_beyond_retention()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user