From 44440832ba58cd7077c493ecf981b00b11554bae Mon Sep 17 00:00:00 2001 From: Artem Azaraev Date: Tue, 26 Aug 2025 11:03:54 +0300 Subject: [PATCH 1/6] Prevent MSGraphDb generation every run from IDE --- DevProxy/DevProxy.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DevProxy/DevProxy.csproj b/DevProxy/DevProxy.csproj index b7fa312b..4b747fd6 100644 --- a/DevProxy/DevProxy.csproj +++ b/DevProxy/DevProxy.csproj @@ -57,7 +57,7 @@ - Always + PreserveNewest Always From e3be0cad6c092262578be7f20844b8b3a16a6e3a Mon Sep 17 00:00:00 2001 From: Artem Azaraev Date: Tue, 26 Aug 2025 12:06:21 +0300 Subject: [PATCH 2/6] Disable journaling while filling data --- DevProxy.Abstractions/Data/MSGraphDb.cs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/DevProxy.Abstractions/Data/MSGraphDb.cs b/DevProxy.Abstractions/Data/MSGraphDb.cs index 9ce5c021..cf6b5d9c 100644 --- a/DevProxy.Abstractions/Data/MSGraphDb.cs +++ b/DevProxy.Abstractions/Data/MSGraphDb.cs @@ -65,7 +65,11 @@ public async Task GenerateDbAsync(bool skipIfUpdatedToday, CancellationToke } await CreateDbAsync(cancellationToken); + + SetDbJournaling(false); await FillDataAsync(cancellationToken); + SetDbJournaling(true); + _logger.LogInformation("Microsoft Graph database successfully updated"); @@ -214,6 +218,21 @@ private async Task LoadOpenAPIFilesAsync(string folder, CancellationToken cancel } } + private void SetDbJournaling(bool enabled) + { + using var command = Connection.CreateCommand(); + if (enabled) + { + command.CommandText = "PRAGMA journal_mode = DELETE;"; + _ = command.ExecuteNonQuery(); + } + else + { + command.CommandText = "PRAGMA journal_mode = OFF;"; + _ = command.ExecuteNonQuery(); + } + } + public void Dispose() { _connection?.Dispose(); From f382e4b6d8468ccd3cb9ae3a275dd81e7fecff2c Mon Sep 17 00:00:00 2001 From: Artem Azaraev Date: Tue, 26 Aug 2025 12:08:27 +0300 Subject: [PATCH 3/6] Wrap multiple INSERT statements within a single transaction --- DevProxy.Abstractions/Data/MSGraphDb.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/DevProxy.Abstractions/Data/MSGraphDb.cs b/DevProxy.Abstractions/Data/MSGraphDb.cs index cf6b5d9c..2f501628 100644 --- a/DevProxy.Abstractions/Data/MSGraphDb.cs +++ b/DevProxy.Abstractions/Data/MSGraphDb.cs @@ -110,6 +110,8 @@ private async Task CreateDbAsync(CancellationToken cancellationToken) private async Task FillDataAsync(CancellationToken cancellationToken) { _logger.LogInformation("Filling database..."); + + await using var transaction = await Connection.BeginTransactionAsync(cancellationToken); var i = 0; @@ -154,6 +156,8 @@ private async Task FillDataAsync(CancellationToken cancellationToken) } } + await transaction.CommitAsync(cancellationToken); + _logger.LogInformation("Inserted {EndpointCount} endpoints in the database", i); } From 2064e0f668d3052f4c35526d241edaf2f8fe0b91 Mon Sep 17 00:00:00 2001 From: Artem Azaraev Date: Tue, 26 Aug 2025 12:12:38 +0300 Subject: [PATCH 4/6] Adjust parameterized insert-command --- DevProxy.Abstractions/Data/MSGraphDb.cs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/DevProxy.Abstractions/Data/MSGraphDb.cs b/DevProxy.Abstractions/Data/MSGraphDb.cs index 2f501628..f6a9365a 100644 --- a/DevProxy.Abstractions/Data/MSGraphDb.cs +++ b/DevProxy.Abstractions/Data/MSGraphDb.cs @@ -126,9 +126,10 @@ private async Task FillDataAsync(CancellationToken cancellationToken) var insertEndpoint = Connection.CreateCommand(); insertEndpoint.CommandText = "INSERT INTO endpoints (path, graphVersion, hasSelect) VALUES (@path, @graphVersion, @hasSelect)"; - _ = insertEndpoint.Parameters.Add(new("@path", null)); - _ = insertEndpoint.Parameters.Add(new("@graphVersion", null)); - _ = insertEndpoint.Parameters.Add(new("@hasSelect", null)); + var pathParam = insertEndpoint.Parameters.Add(new("@path", null)); + var graphVersionParam = insertEndpoint.Parameters.Add(new("@graphVersion", null)); + var hasSelectParam = insertEndpoint.Parameters.Add(new("@hasSelect", null)); + await insertEndpoint.PrepareAsync(cancellationToken); foreach (var path in document.Paths) { @@ -148,9 +149,9 @@ private async Task FillDataAsync(CancellationToken cancellationToken) var hasSelect = getOperation.Parameters.Any(p => p.Name == "$select"); _logger.LogTrace("Inserting endpoint {GraphVersion}{Key} with hasSelect={HasSelect}...", graphVersion, path.Key, hasSelect); - insertEndpoint.Parameters["@path"].Value = path.Key; - insertEndpoint.Parameters["@graphVersion"].Value = graphVersion; - insertEndpoint.Parameters["@hasSelect"].Value = hasSelect; + pathParam.Value = path.Key; + graphVersionParam.Value = graphVersion; + hasSelectParam.Value = hasSelect; _ = await insertEndpoint.ExecuteNonQueryAsync(cancellationToken); i++; } From c14bea5c7624aa1bef5207142308c89a5578b27e Mon Sep 17 00:00:00 2001 From: Artem Azaraev Date: Tue, 26 Aug 2025 14:31:38 +0300 Subject: [PATCH 5/6] Fix filestream resource leak --- DevProxy.Abstractions/Data/MSGraphDb.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/DevProxy.Abstractions/Data/MSGraphDb.cs b/DevProxy.Abstractions/Data/MSGraphDb.cs index f6a9365a..0eb3bff2 100644 --- a/DevProxy.Abstractions/Data/MSGraphDb.cs +++ b/DevProxy.Abstractions/Data/MSGraphDb.cs @@ -211,7 +211,8 @@ private async Task LoadOpenAPIFilesAsync(string folder, CancellationToken cancel try { - var openApiDocument = await new OpenApiStreamReader().ReadAsync(file.OpenRead(), cancellationToken); + await using var fileStream = file.OpenRead(); + var openApiDocument = await new OpenApiStreamReader().ReadAsync(fileStream, cancellationToken); _openApiDocuments[version] = openApiDocument.OpenApiDocument; _logger.LogDebug("Added OpenAPI file {FilePath} for {Version}", filePath, version); From 921227286839b5c9d60ade56c8c58fb63c787899 Mon Sep 17 00:00:00 2001 From: Waldek Mastykarz Date: Thu, 28 Aug 2025 14:56:51 +0200 Subject: [PATCH 6/6] Remove unnecessary blank lines --- DevProxy.Abstractions/Data/MSGraphDb.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/DevProxy.Abstractions/Data/MSGraphDb.cs b/DevProxy.Abstractions/Data/MSGraphDb.cs index 0eb3bff2..e28ccc09 100644 --- a/DevProxy.Abstractions/Data/MSGraphDb.cs +++ b/DevProxy.Abstractions/Data/MSGraphDb.cs @@ -70,7 +70,6 @@ public async Task GenerateDbAsync(bool skipIfUpdatedToday, CancellationToke await FillDataAsync(cancellationToken); SetDbJournaling(true); - _logger.LogInformation("Microsoft Graph database successfully updated"); return 0; @@ -110,7 +109,7 @@ private async Task CreateDbAsync(CancellationToken cancellationToken) private async Task FillDataAsync(CancellationToken cancellationToken) { _logger.LogInformation("Filling database..."); - + await using var transaction = await Connection.BeginTransactionAsync(cancellationToken); var i = 0;