@@ -127,20 +127,21 @@ private long ensureTransportContext(SQLiteDatabase db, TransportContext transpor
127
127
128
128
@ Nullable
129
129
private Long getTransportContextId (SQLiteDatabase db , TransportContext transportContext ) {
130
- try ( Cursor cursor =
130
+ return tryWithCursor (
131
131
db .query (
132
132
"transport_contexts" ,
133
133
new String [] {"_id" },
134
134
"backend_name = ?" ,
135
135
new String [] {transportContext .getBackendName ()},
136
136
null ,
137
137
null ,
138
- null )) {
139
- if (!cursor .moveToNext ()) {
140
- return null ;
141
- }
142
- return cursor .getLong (0 );
143
- }
138
+ null ),
139
+ cursor -> {
140
+ if (!cursor .moveToNext ()) {
141
+ return null ;
142
+ }
143
+ return cursor .getLong (0 );
144
+ });
144
145
}
145
146
146
147
@ Override
@@ -184,19 +185,20 @@ private static String toIdList(Iterable<PersistedEvent> events) {
184
185
185
186
@ Override
186
187
public long getNextCallTime (TransportContext transportContext ) {
187
- try ( Cursor cursor =
188
+ return tryWithCursor (
188
189
getDb ()
189
190
.rawQuery (
190
191
"SELECT next_request_ms FROM transport_contexts WHERE backend_name = ? and priority = ?" ,
191
192
new String [] {
192
193
transportContext .getBackendName (),
193
194
String .valueOf (transportContext .getPriority ().ordinal ())
194
- })) {
195
- if (cursor .moveToNext ()) {
196
- return cursor .getLong (0 );
197
- }
198
- }
199
- return 0 ;
195
+ }),
196
+ cursor -> {
197
+ if (cursor .moveToNext ()) {
198
+ return cursor .getLong (0 );
199
+ }
200
+ return 0L ;
201
+ });
200
202
}
201
203
202
204
@ Override
@@ -207,13 +209,12 @@ public boolean hasPendingEventsFor(TransportContext transportContext) {
207
209
if (contextId == null ) {
208
210
return false ;
209
211
}
210
- try ( Cursor cursor =
212
+ return tryWithCursor (
211
213
getDb ()
212
214
.rawQuery (
213
215
"SELECT 1 FROM events WHERE context_id = ? LIMIT 1" ,
214
- new String [] {contextId .toString ()})) {
215
- return cursor .moveToNext ();
216
- }
216
+ new String [] {contextId .toString ()}),
217
+ Cursor ::moveToNext );
217
218
});
218
219
}
219
220
@@ -264,7 +265,7 @@ private List<PersistedEvent> loadEvents(SQLiteDatabase db, TransportContext tran
264
265
return events ;
265
266
}
266
267
267
- try ( Cursor cursor =
268
+ tryWithCursor (
268
269
db .query (
269
270
"events" ,
270
271
new String [] {"_id" , "transport_name" , "timestamp_ms" , "uptime_ms" , "payload" },
@@ -273,19 +274,21 @@ private List<PersistedEvent> loadEvents(SQLiteDatabase db, TransportContext tran
273
274
null ,
274
275
null ,
275
276
null ,
276
- String .valueOf (config .getLoadBatchSize ()))) {
277
- while (cursor .moveToNext ()) {
278
- long id = cursor .getLong (0 );
279
- EventInternal event =
280
- EventInternal .builder ()
281
- .setTransportName (cursor .getString (1 ))
282
- .setEventMillis (cursor .getLong (2 ))
283
- .setUptimeMillis (cursor .getLong (3 ))
284
- .setPayload (cursor .getBlob (4 ))
285
- .build ();
286
- events .add (PersistedEvent .create (id , transportContext , event ));
287
- }
288
- }
277
+ String .valueOf (config .getLoadBatchSize ())),
278
+ cursor -> {
279
+ while (cursor .moveToNext ()) {
280
+ long id = cursor .getLong (0 );
281
+ EventInternal event =
282
+ EventInternal .builder ()
283
+ .setTransportName (cursor .getString (1 ))
284
+ .setEventMillis (cursor .getLong (2 ))
285
+ .setUptimeMillis (cursor .getLong (3 ))
286
+ .setPayload (cursor .getBlob (4 ))
287
+ .build ();
288
+ events .add (PersistedEvent .create (id , transportContext , event ));
289
+ }
290
+ return null ;
291
+ });
289
292
return events ;
290
293
}
291
294
@@ -301,25 +304,27 @@ private Map<Long, Set<Metadata>> loadMetadata(SQLiteDatabase db, List<PersistedE
301
304
}
302
305
whereClause .append (')' );
303
306
304
- try ( Cursor cursor =
307
+ tryWithCursor (
305
308
db .query (
306
309
"event_metadata" ,
307
310
new String [] {"event_id" , "name" , "value" },
308
311
whereClause .toString (),
309
312
null ,
310
313
null ,
311
314
null ,
312
- null )) {
313
- while (cursor .moveToNext ()) {
314
- long eventId = cursor .getLong (0 );
315
- Set <Metadata > currentSet = metadataIndex .get (eventId );
316
- if (currentSet == null ) {
317
- currentSet = new HashSet <>();
318
- metadataIndex .put (eventId , currentSet );
319
- }
320
- currentSet .add (new Metadata (cursor .getString (1 ), cursor .getString (2 )));
321
- }
322
- }
315
+ null ),
316
+ cursor -> {
317
+ while (cursor .moveToNext ()) {
318
+ long eventId = cursor .getLong (0 );
319
+ Set <Metadata > currentSet = metadataIndex .get (eventId );
320
+ if (currentSet == null ) {
321
+ currentSet = new HashSet <>();
322
+ metadataIndex .put (eventId , currentSet );
323
+ }
324
+ currentSet .add (new Metadata (cursor .getString (1 ), cursor .getString (2 )));
325
+ }
326
+ return null ;
327
+ });
323
328
return metadataIndex ;
324
329
}
325
330
@@ -436,6 +441,14 @@ private long getPageCount() {
436
441
return getDb ().compileStatement ("PRAGMA page_count" ).simpleQueryForLong ();
437
442
}
438
443
444
+ private static <T > T tryWithCursor (Cursor c , Function <Cursor , T > function ) {
445
+ try {
446
+ return function .apply (c );
447
+ } finally {
448
+ c .close ();
449
+ }
450
+ }
451
+
439
452
private static class OpenHelper extends SQLiteOpenHelper {
440
453
// TODO: when we do schema upgrades in the future we need to make sure both downgrades and
441
454
// upgrades work as expected, e.g. `up+down+up` is equivalent to `up`.
0 commit comments