From 1aecaadce74b7742bfa28219bd66d65b68221df4 Mon Sep 17 00:00:00 2001 From: Austin Longino Date: Wed, 11 Mar 2015 15:39:18 -0700 Subject: [PATCH] support sending back rows changed --- .../database/DatabasePeerManager.java | 68 +++++++++++++++---- .../inspector/protocol/module/Database.java | 8 +++ 2 files changed, 62 insertions(+), 14 deletions(-) diff --git a/stetho/src/main/java/com/facebook/stetho/inspector/database/DatabasePeerManager.java b/stetho/src/main/java/com/facebook/stetho/inspector/database/DatabasePeerManager.java index 9763374e..d392061a 100644 --- a/stetho/src/main/java/com/facebook/stetho/inspector/database/DatabasePeerManager.java +++ b/stetho/src/main/java/com/facebook/stetho/inspector/database/DatabasePeerManager.java @@ -15,6 +15,7 @@ import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteException; +import android.database.sqlite.SQLiteStatement; import com.facebook.stetho.common.Util; import com.facebook.stetho.inspector.helper.ChromePeerManager; @@ -86,7 +87,7 @@ public List getDatabaseTableNames(String databaseName) SQLiteDatabase database = openDatabase(databaseName); try { Cursor cursor = database.rawQuery("SELECT name FROM sqlite_master WHERE type=?", - new String[] { "table" }); + new String[]{"table"}); try { List tableNames = new ArrayList(); while (cursor.moveToNext()) { @@ -107,17 +108,54 @@ public T executeSQL(String databaseName, String query, ExecuteResultHandler< Util.throwIfNull(handler); SQLiteDatabase database = openDatabase(databaseName); try { - Cursor cursor = database.rawQuery(query, null); - try { - return handler.handleResult(cursor); - } finally { - cursor.close(); + String trimmedSql = query.trim(); + String prefixSql = ""; + if (trimmedSql.length() >= 3) { + prefixSql = trimmedSql.substring(0, 3).toUpperCase(); } + if (prefixSql.equals("UPD") || prefixSql.equals("DEL")) { + return executeUpdateDelete(database, query, handler); + } else if (prefixSql.equals("INS")) { + return executeInsert(database, query, handler); + } else { + return executeRawQuery(database, trimmedSql, handler); + } + } finally { database.close(); } } + private T executeUpdateDelete( + SQLiteDatabase database, + String query, + ExecuteResultHandler handler) { + SQLiteStatement statement = database.compileStatement(query); + int count = statement.executeUpdateDelete(); + return handler.handleResult((long) count, "Rows Modified"); + } + + private T executeInsert( + SQLiteDatabase database, + String query, + ExecuteResultHandler handler) { + SQLiteStatement statement = database.compileStatement(query); + long count = statement.executeInsert(); + return handler.handleResult(count, "ID Of last inserted row"); + } + + private T executeRawQuery( + SQLiteDatabase database, + String query, + ExecuteResultHandler handler) { + Cursor cursor = database.rawQuery(query, null); + try { + return handler.handleResult(cursor); + } finally { + cursor.close(); + } + } + private SQLiteDatabase openDatabase(String databaseName) throws SQLiteException { Util.throwIfNull(databaseName); File databaseFile = mContext.getDatabasePath(databaseName); @@ -130,17 +168,19 @@ private SQLiteDatabase openDatabase(String databaseName) throws SQLiteException public interface ExecuteResultHandler { public T handleResult(Cursor result) throws SQLiteException; + + public T handleResult(Long value, String name) throws SQLiteException; } private final PeerRegistrationListener mPeerRegistrationListener = new PeerRegistrationListener() { - @Override - public void onPeerRegistered(JsonRpcPeer peer) { - bootstrapNewPeer(peer); - } + @Override + public void onPeerRegistered(JsonRpcPeer peer) { + bootstrapNewPeer(peer); + } - @Override - public void onPeerUnregistered(JsonRpcPeer peer) { - } - }; + @Override + public void onPeerUnregistered(JsonRpcPeer peer) { + } + }; } diff --git a/stetho/src/main/java/com/facebook/stetho/inspector/protocol/module/Database.java b/stetho/src/main/java/com/facebook/stetho/inspector/protocol/module/Database.java index 916d42a7..d12cb3ff 100644 --- a/stetho/src/main/java/com/facebook/stetho/inspector/protocol/module/Database.java +++ b/stetho/src/main/java/com/facebook/stetho/inspector/protocol/module/Database.java @@ -76,6 +76,14 @@ public ExecuteSQLResponse handleResult(Cursor result) throws SQLiteException { response.values = flattenRows(result, MAX_EXECUTE_RESULTS); return response; } + + @Override + public ExecuteSQLResponse handleResult(Long value, String name) throws SQLiteException { + ExecuteSQLResponse response = new ExecuteSQLResponse(); + response.columnNames = Arrays.asList(name); + response.values = Arrays.asList((Object)value); + return response; + } }); } catch (SQLiteException e) { Error error = new Error();