Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions PowerSync/PowerSync.Common/Client/PowerSyncDatabase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -420,6 +420,33 @@ await Database.WriteTransaction(async tx =>
Closed = true;
}

private record UploadQueueStatsResult(int size, int count);
/// <summary>
/// Get upload queue size estimate and count.
/// </summary>
public async Task<UploadQueueStats> GetUploadQueueStats(bool includeSize = false)
{
return await ReadTransaction(async tx =>
{
if (includeSize)
{
var result = await tx.Get<UploadQueueStatsResult>(
$"SELECT SUM(cast(data as blob) + 20) as size, count(*) as count FROM {PSInternalTable.CRUD}"
);

return new UploadQueueStats(result.count, result.size);
}
else
{
var result = await tx.Get<UploadQueueStatsResult>(
$"SELECT count(*) as count FROM {PSInternalTable.CRUD}"
);
return new UploadQueueStats(result.count);
}
});
}


/// <summary>
/// Get a batch of crud data to upload.
/// <para />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ namespace PowerSync.Common.Tests.Client;

using PowerSync.Common.Client;

/// <summary>
/// dotnet test -v n --framework net8.0 --filter "PowerSyncDatabaseTests"
/// </summary>
public class PowerSyncDatabaseTests : IAsyncLifetime
{
private PowerSyncDatabase db = default!;
Expand Down Expand Up @@ -454,4 +457,18 @@ await db.WriteTransaction(async tx =>
var afterTx = await db.GetAll<object>("SELECT * FROM assets");
Assert.Equal(2, afterTx.Length);
}

[Fact(Timeout = 5000)]
public async Task GetUploadQueueStatsTest()
{
for (var i = 0; i < 100; i++)
{
await db.Execute("INSERT INTO assets (id) VALUES(?)", ["0" + i + "-writelock"]);
}

var stats = await db.GetUploadQueueStats(true);
Assert.Equal(100, stats.Count);
Assert.NotNull(stats.Size);
}

}