@@ -65,7 +65,10 @@ public async Task<int> GenerateDbAsync(bool skipIfUpdatedToday, CancellationToke
6565 }
6666
6767 await CreateDbAsync ( cancellationToken ) ;
68+
69+ SetDbJournaling ( false ) ;
6870 await FillDataAsync ( cancellationToken ) ;
71+ SetDbJournaling ( true ) ;
6972
7073 _logger . LogInformation ( "Microsoft Graph database successfully updated" ) ;
7174
@@ -107,6 +110,8 @@ private async Task FillDataAsync(CancellationToken cancellationToken)
107110 {
108111 _logger . LogInformation ( "Filling database..." ) ;
109112
113+ await using var transaction = await Connection . BeginTransactionAsync ( cancellationToken ) ;
114+
110115 var i = 0 ;
111116
112117 foreach ( var openApiDocument in _openApiDocuments )
@@ -120,9 +125,10 @@ private async Task FillDataAsync(CancellationToken cancellationToken)
120125
121126 var insertEndpoint = Connection . CreateCommand ( ) ;
122127 insertEndpoint . CommandText = "INSERT INTO endpoints (path, graphVersion, hasSelect) VALUES (@path, @graphVersion, @hasSelect)" ;
123- _ = insertEndpoint . Parameters . Add ( new ( "@path" , null ) ) ;
124- _ = insertEndpoint . Parameters . Add ( new ( "@graphVersion" , null ) ) ;
125- _ = insertEndpoint . Parameters . Add ( new ( "@hasSelect" , null ) ) ;
128+ var pathParam = insertEndpoint . Parameters . Add ( new ( "@path" , null ) ) ;
129+ var graphVersionParam = insertEndpoint . Parameters . Add ( new ( "@graphVersion" , null ) ) ;
130+ var hasSelectParam = insertEndpoint . Parameters . Add ( new ( "@hasSelect" , null ) ) ;
131+ await insertEndpoint . PrepareAsync ( cancellationToken ) ;
126132
127133 foreach ( var path in document . Paths )
128134 {
@@ -142,14 +148,16 @@ private async Task FillDataAsync(CancellationToken cancellationToken)
142148 var hasSelect = getOperation . Parameters . Any ( p => p . Name == "$select" ) ;
143149
144150 _logger . LogTrace ( "Inserting endpoint {GraphVersion}{Key} with hasSelect={HasSelect}..." , graphVersion , path . Key , hasSelect ) ;
145- insertEndpoint . Parameters [ "@path" ] . Value = path . Key ;
146- insertEndpoint . Parameters [ "@graphVersion" ] . Value = graphVersion ;
147- insertEndpoint . Parameters [ "@hasSelect" ] . Value = hasSelect ;
151+ pathParam . Value = path . Key ;
152+ graphVersionParam . Value = graphVersion ;
153+ hasSelectParam . Value = hasSelect ;
148154 _ = await insertEndpoint . ExecuteNonQueryAsync ( cancellationToken ) ;
149155 i ++ ;
150156 }
151157 }
152158
159+ await transaction . CommitAsync ( cancellationToken ) ;
160+
153161 _logger . LogInformation ( "Inserted {EndpointCount} endpoints in the database" , i ) ;
154162 }
155163
@@ -202,7 +210,8 @@ private async Task LoadOpenAPIFilesAsync(string folder, CancellationToken cancel
202210
203211 try
204212 {
205- var openApiDocument = await new OpenApiStreamReader ( ) . ReadAsync ( file . OpenRead ( ) , cancellationToken ) ;
213+ await using var fileStream = file . OpenRead ( ) ;
214+ var openApiDocument = await new OpenApiStreamReader ( ) . ReadAsync ( fileStream , cancellationToken ) ;
206215 _openApiDocuments [ version ] = openApiDocument . OpenApiDocument ;
207216
208217 _logger . LogDebug ( "Added OpenAPI file {FilePath} for {Version}" , filePath , version ) ;
@@ -214,6 +223,21 @@ private async Task LoadOpenAPIFilesAsync(string folder, CancellationToken cancel
214223 }
215224 }
216225
226+ private void SetDbJournaling ( bool enabled )
227+ {
228+ using var command = Connection . CreateCommand ( ) ;
229+ if ( enabled )
230+ {
231+ command . CommandText = "PRAGMA journal_mode = DELETE;" ;
232+ _ = command . ExecuteNonQuery ( ) ;
233+ }
234+ else
235+ {
236+ command . CommandText = "PRAGMA journal_mode = OFF;" ;
237+ _ = command . ExecuteNonQuery ( ) ;
238+ }
239+ }
240+
217241 public void Dispose ( )
218242 {
219243 _connection ? . Dispose ( ) ;
0 commit comments