Skip to content

Commit

Permalink
support sending back rows changed
Browse files Browse the repository at this point in the history
  • Loading branch information
longinoa committed Mar 11, 2015
1 parent aa9bb4e commit 1aecaad
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -86,7 +87,7 @@ public List<String> 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<String> tableNames = new ArrayList<String>();
while (cursor.moveToNext()) {
Expand All @@ -107,17 +108,54 @@ public <T> 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> T executeUpdateDelete(
SQLiteDatabase database,
String query,
ExecuteResultHandler<T> handler) {
SQLiteStatement statement = database.compileStatement(query);
int count = statement.executeUpdateDelete();
return handler.handleResult((long) count, "Rows Modified");
}

private <T> T executeInsert(
SQLiteDatabase database,
String query,
ExecuteResultHandler<T> handler) {
SQLiteStatement statement = database.compileStatement(query);
long count = statement.executeInsert();
return handler.handleResult(count, "ID Of last inserted row");
}

private <T> T executeRawQuery(
SQLiteDatabase database,
String query,
ExecuteResultHandler<T> 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);
Expand All @@ -130,17 +168,19 @@ private SQLiteDatabase openDatabase(String databaseName) throws SQLiteException

public interface ExecuteResultHandler<T> {
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) {
}
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down

0 comments on commit 1aecaad

Please sign in to comment.