4343import static android .database .sqlite .SQLiteDatabase .CONFLICT_NONE ;
4444import static android .database .sqlite .SQLiteDatabase .CONFLICT_REPLACE ;
4545import static android .database .sqlite .SQLiteDatabase .CONFLICT_ROLLBACK ;
46+ import static java .lang .System .nanoTime ;
4647import static java .lang .annotation .RetentionPolicy .SOURCE ;
48+ import static java .util .concurrent .TimeUnit .NANOSECONDS ;
4749
4850/**
4951 * A lightweight wrapper around {@link SQLiteOpenHelper} which allows for continuously observing
5052 * the result of a query. Create using a {@link SqlBrite} instance.
5153 */
5254public final class BriteDatabase implements Closeable {
53- private static final Set <String > INITIAL_TRIGGER = Collections .singleton ("<initial>" );
54-
5555 private final SQLiteOpenHelper helper ;
5656 private final SqlBrite .Logger logger ;
5757
@@ -285,7 +285,17 @@ private QueryObservable createQuery(final Func1<Set<String>, Boolean> tableFilte
285285 if (transactions .get () != null ) {
286286 throw new IllegalStateException ("Cannot execute observable query in a transaction." );
287287 }
288- return getReadableDatabase ().rawQuery (sql , args );
288+
289+ long startNanos = nanoTime ();
290+ Cursor cursor = getReadableDatabase ().rawQuery (sql , args );
291+ long tookMillis = NANOSECONDS .toMillis (nanoTime () - startNanos );
292+
293+ if (logging ) {
294+ log ("QUERY (%sms)\n tables: %s\n sql: %s\n args: %s" , tookMillis , tableFilter , sql ,
295+ Arrays .toString (args ));
296+ }
297+
298+ return cursor ;
289299 }
290300
291301 @ Override public String toString () {
@@ -295,16 +305,12 @@ private QueryObservable createQuery(final Func1<Set<String>, Boolean> tableFilte
295305
296306 Observable <Query > queryObservable = triggers //
297307 .filter (tableFilter ) // Only trigger on tables we care about.
298- .startWith (INITIAL_TRIGGER ) // Immediately execute the query for initial value.
299308 .map (new Func1 <Set <String >, Query >() {
300309 @ Override public Query call (Set <String > trigger ) {
301- if (logging ) {
302- log ("QUERY\n trigger: %s\n tables: %s\n sql: %s\n args: %s" , trigger , tableFilter ,
303- sql , Arrays .toString (args ));
304- }
305310 return query ;
306311 }
307312 }) //
313+ .startWith (query ) // Immediately trigger the query for initial value.
308314 .onBackpressureLatest () //
309315 .doOnSubscribe (new Action0 () {
310316 @ Override public void call () {
@@ -324,8 +330,15 @@ private QueryObservable createQuery(final Func1<Set<String>, Boolean> tableFilte
324330 */
325331 @ CheckResult // TODO @WorkerThread
326332 public Cursor query (@ NonNull String sql , @ NonNull String ... args ) {
327- if (logging ) log ("QUERY\n sql: %s\n args: %s" , sql , Arrays .toString (args ));
328- return getReadableDatabase ().rawQuery (sql , args );
333+ long startNanos = nanoTime ();
334+ Cursor cursor = getReadableDatabase ().rawQuery (sql , args );
335+ long tookMillis = NANOSECONDS .toMillis (nanoTime () - startNanos );
336+
337+ if (logging ) {
338+ log ("QUERY (%sms)\n sql: %s\n args: %s" , tookMillis , sql , Arrays .toString (args ));
339+ }
340+
341+ return cursor ;
329342 }
330343
331344 /**
0 commit comments