Skip to content

Added LoggingQuery for diagnostics during debug mode.

While working on #511 (closed) and investigating database performance, I found myself really wanting to understand the bits of F-Droid which were slow and those which were fast due to the database. I created this thing, and thought I'd create a separate MR as it is not directly related to the other stuff, but rather a general utility class that should be helpful.

SQLite has a very nice "EXPLAIN QUERY PLAN" command (https://sqlite.org/eqp.html). It is not really meant to be used in production code, as per the docs, but it is super helpful at diagnosing missing indexes or other performance problems with databases. I find it much better than, for example, the MySQL alternative.

This commit routes queries from the ApkProvider and AppProvider through a LoggingQuery which (in debug builds) times queries, and if they take longer than a certain threshold, outputs them to logcat. In addition, it will then ask sqlite to explain its query plan for that same query, and output that to logcat too.

I created this as a separate class because it has zero dependence on any F-Droid related stuff and might be helpful to other people too.

Merge request reports