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.