Merge "Log previous SQL statement also when logging "COMMIT;" operations."
diff --git a/core/java/android/database/sqlite/SQLiteDatabase.java b/core/java/android/database/sqlite/SQLiteDatabase.java
index a7e6ca0..9ac8a4d 100644
--- a/core/java/android/database/sqlite/SQLiteDatabase.java
+++ b/core/java/android/database/sqlite/SQLiteDatabase.java
@@ -201,10 +201,17 @@
private long mLastLockMessageTime = 0L;
- // always log queries which take 100ms+; shorter queries are sampled accordingly
+ // Things related to query logging/sampling for debugging
+ // slow/frequent queries during development. Always log queries
+ // which take 100ms+; shorter queries are sampled accordingly.
+ // Commit statements, which are typically slow, are logged
+ // together with the most recently executed SQL statement, for
+ // disambiguation.
private static final int QUERY_LOG_TIME_IN_MILLIS = 100;
private static final int QUERY_LOG_SQL_LENGTH = 64;
+ private static final String COMMIT_SQL = "COMMIT;";
private final Random mRandom = new Random();
+ private String mLastSqlStatement = null;
/** Used by native code, do not rename */
/* package */ int mNativeHandle = 0;
@@ -540,7 +547,7 @@
}
}
if (mTransactionIsSuccessful) {
- execSQL("COMMIT;");
+ execSQL(COMMIT_SQL);
} else {
try {
execSQL("ROLLBACK;");
@@ -1660,7 +1667,15 @@
} finally {
unlock();
}
- logTimeStat(sql, timeStart);
+
+ // Log commit statements along with the most recently executed
+ // SQL statement for disambiguation. Note that instance
+ // equality to COMMIT_SQL is safe here.
+ if (sql == COMMIT_SQL) {
+ logTimeStat(sql + mLastSqlStatement, timeStart);
+ } else {
+ logTimeStat(sql, timeStart);
+ }
}
/**
@@ -1786,6 +1801,11 @@
/* package */ void logTimeStat(String sql, long beginMillis) {
+ // Keep track of the last statement executed here, as this is
+ // the common funnel through which all methods of hitting
+ // libsqlite eventually flow.
+ mLastSqlStatement = sql;
+
// Sample fast queries in proportion to the time taken.
// Quantize the % first, so the logged sampling probability
// exactly equals the actual sampling rate for this query.