@@ -65,7 +65,10 @@ public async Task<int> GenerateDbAsync(bool skipIfUpdatedToday, CancellationToke
65
65
}
66
66
67
67
await CreateDbAsync ( cancellationToken ) ;
68
+
69
+ SetDbJournaling ( false ) ;
68
70
await FillDataAsync ( cancellationToken ) ;
71
+ SetDbJournaling ( true ) ;
69
72
70
73
_logger . LogInformation ( "Microsoft Graph database successfully updated" ) ;
71
74
@@ -107,6 +110,8 @@ private async Task FillDataAsync(CancellationToken cancellationToken)
107
110
{
108
111
_logger . LogInformation ( "Filling database..." ) ;
109
112
113
+ await using var transaction = await Connection . BeginTransactionAsync ( cancellationToken ) ;
114
+
110
115
var i = 0 ;
111
116
112
117
foreach ( var openApiDocument in _openApiDocuments )
@@ -120,9 +125,10 @@ private async Task FillDataAsync(CancellationToken cancellationToken)
120
125
121
126
var insertEndpoint = Connection . CreateCommand ( ) ;
122
127
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 ) ;
126
132
127
133
foreach ( var path in document . Paths )
128
134
{
@@ -142,14 +148,16 @@ private async Task FillDataAsync(CancellationToken cancellationToken)
142
148
var hasSelect = getOperation . Parameters . Any ( p => p . Name == "$select" ) ;
143
149
144
150
_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 ;
148
154
_ = await insertEndpoint . ExecuteNonQueryAsync ( cancellationToken ) ;
149
155
i ++ ;
150
156
}
151
157
}
152
158
159
+ await transaction . CommitAsync ( cancellationToken ) ;
160
+
153
161
_logger . LogInformation ( "Inserted {EndpointCount} endpoints in the database" , i ) ;
154
162
}
155
163
@@ -202,7 +210,8 @@ private async Task LoadOpenAPIFilesAsync(string folder, CancellationToken cancel
202
210
203
211
try
204
212
{
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 ) ;
206
215
_openApiDocuments [ version ] = openApiDocument . OpenApiDocument ;
207
216
208
217
_logger . LogDebug ( "Added OpenAPI file {FilePath} for {Version}" , filePath , version ) ;
@@ -214,6 +223,21 @@ private async Task LoadOpenAPIFilesAsync(string folder, CancellationToken cancel
214
223
}
215
224
}
216
225
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
+
217
241
public void Dispose ( )
218
242
{
219
243
_connection ? . Dispose ( ) ;
0 commit comments