package com.basic.security.manager.erlang;
|
|
import android.database.SQLException;
|
|
import com.basic.security.manager.DatabaseManager;
|
import com.basic.security.utils.Constants;
|
import com.basic.security.utils.DateUtil;
|
import com.ericsson.otp.erlang.OtpConnection;
|
import com.ericsson.otp.erlang.OtpErlangList;
|
import com.ericsson.otp.erlang.OtpErlangObject;
|
import com.ericsson.otp.erlang.OtpErlangString;
|
import com.ericsson.otp.erlang.OtpErlangTuple;
|
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.UUID;
|
|
public class SqliteManager {
|
|
public static List<Map<String, String>> queryFromSync(OtpConnection connection, String sql) {
|
return query(connection, sql, Constants.syncDatabasePath);
|
}
|
|
public static void executeInSync(OtpConnection connection, String sql) {
|
execute(connection, sql, Constants.syncDatabasePath);
|
}
|
|
public static List<Map<String, String>> queryFromCache(OtpConnection connection, String sql) {
|
return query(connection, sql, Constants.cacheDatabasePath);
|
}
|
|
public static void executeInCache(OtpConnection connection, String sql) {
|
String sqlCacheInsertSql = "INSERT INTO SqlCache " +
|
"(uuid, func, sql, create_by,create_time) " +
|
"values (\"" + UUID.randomUUID().toString() + "\",\"test\" ,\"" +
|
sql + "\",\"" + Constants.erlangLocalNode + "\",\"" + DateUtil.getDateTimeStrFull() + "\");";
|
execute(connection, sqlCacheInsertSql, Constants.cacheDatabasePath);
|
}
|
|
public static void executeConfirmInCache(OtpConnection connection, String sql) {
|
execute(connection, sql, Constants.cacheDatabasePath);
|
}
|
|
public static void execute(OtpConnection connection, String sql, String databaseName) {
|
if (ErlangProcess.erlangProcessCanStart) {
|
try {
|
if (connection != null && connection.isConnected()) {
|
connection.sendRPC("sqlite", "execute", new OtpErlangObject[]{
|
new OtpErlangString(sql),
|
new OtpErlangString(databaseName),
|
new OtpErlangString(UUID.randomUUID().toString())
|
});
|
OtpErlangObject oeo = connection.receive();
|
// System.out.println("SqliteManager execute " + oeo);
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
} else {
|
try {
|
DatabaseManager.getDatabase(databaseName).execSQL(sql);
|
} catch (SQLException e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
|
private static List<Map<String, String>> query(OtpConnection connection, String sql, String databaseName) {
|
List<Map<String, String>> dataRowList = new ArrayList<>();
|
try {
|
if (connection != null && connection.isConnected()) {
|
connection.sendRPC("sqlite", "query", new OtpErlangObject[]{
|
new OtpErlangString(sql),
|
new OtpErlangString(databaseName)
|
});
|
OtpErlangObject oeo = connection.receive();
|
if (oeo instanceof OtpErlangTuple) {
|
OtpErlangTuple oet = (OtpErlangTuple) oeo;
|
OtpErlangObject[] elems = oet.elements();
|
if (elems.length == 2 && elems[1] instanceof OtpErlangList) {
|
OtpErlangList oel = (OtpErlangList) elems[1];
|
OtpErlangObject[] rows = oel.elements();
|
for (OtpErlangObject row : rows) {
|
Map<String, String> dataRow = new HashMap<>();
|
if (row instanceof OtpErlangList) {
|
OtpErlangObject[] columns = ((OtpErlangList) row).elements();
|
for (OtpErlangObject column : columns) {
|
if (column instanceof OtpErlangTuple) {
|
OtpErlangObject[] theColumn = ((OtpErlangTuple) column).elements();
|
if (theColumn.length == 2 && theColumn[0] instanceof OtpErlangString
|
&& theColumn[1] instanceof OtpErlangString) {
|
String key = ((OtpErlangString) theColumn[0]).stringValue();
|
String value = ((OtpErlangString) theColumn[1]).stringValue();
|
dataRow.put(key, value);
|
}
|
}
|
}
|
}
|
if (dataRow.size() > 0) {
|
dataRowList.add(dataRow);
|
}
|
}
|
}
|
}
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return dataRowList;
|
}
|
|
|
}
|