mirror of
https://github.com/WuKongIM/WuKongIMAndroidSDK
synced 2025-06-02 23:39:05 +00:00
update Optimize message queries
This commit is contained in:
parent
6d92c7865b
commit
65c6eeca1b
10
.idea/deploymentTargetDropDown.xml
generated
Normal file
10
.idea/deploymentTargetDropDown.xml
generated
Normal file
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="deploymentTargetDropDown">
|
||||
<value>
|
||||
<entry key="app">
|
||||
<State />
|
||||
</entry>
|
||||
</value>
|
||||
</component>
|
||||
</project>
|
6
.idea/gradle.xml
generated
6
.idea/gradle.xml
generated
@ -4,11 +4,9 @@
|
||||
<component name="GradleSettings">
|
||||
<option name="linkedExternalProjectsSettings">
|
||||
<GradleProjectSettings>
|
||||
<option name="testRunner" value="GRADLE" />
|
||||
<option name="distributionType" value="DEFAULT_WRAPPED" />
|
||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||
<option name="gradleHome" value="/usr/local/Cellar/gradle/6.8.1/libexec" />
|
||||
<option name="gradleJvm" value="11" />
|
||||
<option name="gradleJvm" value="#GRADLE_LOCAL_JAVA_HOME" />
|
||||
<option name="modules">
|
||||
<set>
|
||||
<option value="$PROJECT_DIR$" />
|
||||
@ -16,7 +14,9 @@
|
||||
<option value="$PROJECT_DIR$/wkim" />
|
||||
</set>
|
||||
</option>
|
||||
<option name="resolveExternalAnnotations" value="false" />
|
||||
</GradleProjectSettings>
|
||||
</option>
|
||||
<option name="offlineMode" value="true" />
|
||||
</component>
|
||||
</project>
|
10
.idea/migrations.xml
generated
Normal file
10
.idea/migrations.xml
generated
Normal file
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectMigrations">
|
||||
<option name="MigrateToGradleLocalJavaHome">
|
||||
<set>
|
||||
<option value="$PROJECT_DIR$" />
|
||||
</set>
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
@ -37,29 +37,18 @@ public class ChannelDBManager {
|
||||
}
|
||||
|
||||
public List<WKChannel> queryWithChannelIdsAndChannelType(List<String> channelIDs, byte channelType) {
|
||||
StringBuffer stringBuffer = new StringBuffer();
|
||||
for (int i = 0, size = channelIDs.size(); i < size; i++) {
|
||||
if (stringBuffer.toString().contains(channelIDs.get(i)))
|
||||
continue;
|
||||
if (!TextUtils.isEmpty(stringBuffer)) {
|
||||
stringBuffer.append(",");
|
||||
}
|
||||
stringBuffer.append("'").append(channelIDs.get(i)).append("'");
|
||||
}
|
||||
Object[] args = new Object[2];
|
||||
args[0] = stringBuffer.toString();
|
||||
args[1] = channelType;
|
||||
String sql = "select * from " + channel + " where " + WKDBColumns.WKChannelColumns.channel_id + " in (?) and " + WKDBColumns.WKChannelColumns.channel_type + "=?";
|
||||
List<WKChannel> list = new ArrayList<>();
|
||||
if (WKIMApplication
|
||||
.getInstance()
|
||||
.getDbHelper() == null) {
|
||||
return list;
|
||||
}
|
||||
List<String> args = new ArrayList<>(channelIDs);
|
||||
args.add(String.valueOf(channelType));
|
||||
try (Cursor cursor = WKIMApplication
|
||||
.getInstance()
|
||||
.getDbHelper()
|
||||
.rawQuery(sql, args)) {
|
||||
.select(channel, "channel_id in (" + WKCursor.getPlaceholders(channelIDs.size()) + ") and channel_type=?", args.toArray(new String[0]), null)) {
|
||||
if (cursor == null) {
|
||||
return list;
|
||||
}
|
||||
|
@ -144,21 +144,14 @@ public class ChannelMembersDbManager {
|
||||
}
|
||||
|
||||
public List<WKChannelMember> queryWithUIDs(String channelID, byte channelType, List<String> uidList) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
Object[] args = new Object[3];
|
||||
args[0] = channelID;
|
||||
args[1] = channelType;
|
||||
String sql = "select * from " + channelMembers + " where channel_id =? and channel_type=? and member_uid in (?)";
|
||||
for (int i = 0, size = uidList.size(); i < size; i++) {
|
||||
if (i != 0) {
|
||||
sb.append(",");
|
||||
}
|
||||
sb.append("'").append(uidList.get(i)).append("'");
|
||||
}
|
||||
args[2] = sb.toString();
|
||||
List<String> args = new ArrayList<>();
|
||||
args.add(channelID);
|
||||
args.add(String.valueOf(channelType));
|
||||
args.addAll(uidList);
|
||||
uidList.add(String.valueOf(channelType));
|
||||
Cursor cursor = WKIMApplication
|
||||
.getInstance()
|
||||
.getDbHelper().rawQuery(sql, args);
|
||||
.getDbHelper().select(channelMembers, "channel_id =? and channel_type=? and member_uid in (" + WKCursor.getPlaceholders(uidList.size()) + ")", args.toArray(new String[0]), null);
|
||||
List<WKChannelMember> list = new ArrayList<>();
|
||||
if (cursor == null) {
|
||||
return list;
|
||||
|
@ -95,17 +95,12 @@ public class ConversationDbManager {
|
||||
}
|
||||
|
||||
public List<WKUIConversationMsg> queryWithChannelIds(List<String> channelIds) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (int i = 0, size = channelIds.size(); i < size; i++) {
|
||||
if (i != 0) sb.append(",");
|
||||
sb.append("'").append(channelIds.get(i)).append("'");
|
||||
}
|
||||
String sql = "select " + conversation + ".*," + channelCols + "," + extraCols + " from " + conversation + " left join " + channel + " on " + conversation + ".channel_id=" + channel + ".channel_id and " + conversation + ".channel_type=" + channel + ".channel_type left join " + conversationExtra + " on " + conversation + ".channel_id=" + conversationExtra + ".channel_id and " + conversation + ".channel_type=" + conversationExtra + ".channel_type where " + conversation + ".is_deleted=0 and " + conversation + ".channel_id in (?)";
|
||||
String sql = "select " + conversation + ".*," + channelCols + "," + extraCols + " from " + conversation + " left join " + channel + " on " + conversation + ".channel_id=" + channel + ".channel_id and " + conversation + ".channel_type=" + channel + ".channel_type left join " + conversationExtra + " on " + conversation + ".channel_id=" + conversationExtra + ".channel_id and " + conversation + ".channel_type=" + conversationExtra + ".channel_type where " + conversation + ".is_deleted=0 and " + conversation + ".channel_id in (" + WKCursor.getPlaceholders(channelIds.size()) + ")";
|
||||
List<WKUIConversationMsg> list = new ArrayList<>();
|
||||
try (Cursor cursor = WKIMApplication
|
||||
.getInstance()
|
||||
.getDbHelper()
|
||||
.rawQuery(sql, new Object[]{sb.toString()})) {
|
||||
.rawQuery(sql, channelIds.toArray(new String[0]))) {
|
||||
if (cursor == null) {
|
||||
return list;
|
||||
}
|
||||
@ -368,16 +363,8 @@ public class ConversationDbManager {
|
||||
}
|
||||
|
||||
private List<WKConversationMsgExtra> queryWithExtraChannelIds(List<String> channelIds) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
String sql = "select * from " + conversationExtra + " where channel_id in (?)";
|
||||
for (int i = 0, size = channelIds.size(); i < size; i++) {
|
||||
if (i != 0) {
|
||||
sb.append(",");
|
||||
}
|
||||
sb.append("'").append(channelIds.get(i)).append("'");
|
||||
}
|
||||
List<WKConversationMsgExtra> list = new ArrayList<>();
|
||||
try (Cursor cursor = WKIMApplication.getInstance().getDbHelper().rawQuery(sql, new Object[]{sb.toString()})) {
|
||||
try (Cursor cursor = WKIMApplication.getInstance().getDbHelper().select(conversationExtra, "channel_id in (" + WKCursor.getPlaceholders(channelIds.size()) + ")", channelIds.toArray(new String[0]), null)) {
|
||||
if (cursor == null) {
|
||||
return list;
|
||||
}
|
||||
|
@ -633,13 +633,7 @@ public class MsgDbManager {
|
||||
|
||||
public List<WKMsg> queryWithClientMsgNos(List<String> clientMsgNos) {
|
||||
List<WKMsg> msgs = new ArrayList<>();
|
||||
StringBuilder sb = new StringBuilder();
|
||||
String sql = "select * from " + message + " where " + WKDBColumns.WKMessageColumns.client_msg_no + " in (?)";
|
||||
for (int i = 0, size = clientMsgNos.size(); i < size; i++) {
|
||||
if (i != 0) sb.append(",");
|
||||
sb.append("'").append(clientMsgNos.get(i)).append("'");
|
||||
}
|
||||
try (Cursor cursor = WKIMApplication.getInstance().getDbHelper().rawQuery(sql, new Object[]{sb.toString()})) {
|
||||
try (Cursor cursor = WKIMApplication.getInstance().getDbHelper().select(message, "client_msg_no in (" + WKCursor.getPlaceholders(clientMsgNos.size()) + ")", clientMsgNos.toArray(new String[0]), null)) {
|
||||
if (cursor == null) {
|
||||
return msgs;
|
||||
}
|
||||
@ -856,14 +850,8 @@ public class MsgDbManager {
|
||||
}
|
||||
|
||||
private List<WKMsgExtra> queryMsgExtrasWithMsgIds(List<String> msgIds) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
String sql = "select * from " + messageExtra + " where message_id in (?)";
|
||||
for (int i = 0, size = msgIds.size(); i < size; i++) {
|
||||
if (i != 0) sb.append(",");
|
||||
sb.append("'").append(msgIds.get(i)).append("'");
|
||||
}
|
||||
List<WKMsgExtra> list = new ArrayList<>();
|
||||
try (Cursor cursor = WKIMApplication.getInstance().getDbHelper().rawQuery(sql, new Object[]{sb.toString()})) {
|
||||
try (Cursor cursor = WKIMApplication.getInstance().getDbHelper().select(messageExtra, "message_id in (" + WKCursor.getPlaceholders(msgIds.size()) + ")", msgIds.toArray(new String[0]), null)) {
|
||||
if (cursor == null) {
|
||||
return list;
|
||||
}
|
||||
@ -1320,14 +1308,8 @@ public class MsgDbManager {
|
||||
}
|
||||
|
||||
public List<WKMsg> queryWithMsgIds(List<String> messageIds) {
|
||||
StringBuffer sb = new StringBuffer();
|
||||
for (int i = 0, size = messageIds.size(); i < size; i++) {
|
||||
if (!TextUtils.isEmpty(sb)) {
|
||||
sb.append(",");
|
||||
}
|
||||
sb.append("'").append(messageIds.get(i)).append("'");
|
||||
}
|
||||
String sql = "select " + messageCols + "," + extraCols + " from " + message + " left join " + messageExtra + " on " + message + ".message_id=" + messageExtra + ".message_id where " + message + ".message_id in (?)";
|
||||
|
||||
String sql = "select " + messageCols + "," + extraCols + " from " + message + " left join " + messageExtra + " on " + message + ".message_id=" + messageExtra + ".message_id where " + message + ".message_id in (" + WKCursor.getPlaceholders(messageIds.size()) + ")";
|
||||
List<WKMsg> list = new ArrayList<>();
|
||||
List<String> gChannelIds = new ArrayList<>();
|
||||
List<String> pChannelIds = new ArrayList<>();
|
||||
@ -1335,7 +1317,7 @@ public class MsgDbManager {
|
||||
try (Cursor cursor = WKIMApplication
|
||||
.getInstance()
|
||||
.getDbHelper()
|
||||
.rawQuery(sql, new Object[]{sb.toString()})) {
|
||||
.rawQuery(sql, messageIds.toArray())) {
|
||||
if (cursor == null) {
|
||||
return list;
|
||||
}
|
||||
@ -1545,7 +1527,7 @@ public class MsgDbManager {
|
||||
Cursor cursor = WKIMApplication
|
||||
.getInstance()
|
||||
.getDbHelper()
|
||||
.rawQuery(sql,new Object[]{msgID});
|
||||
.rawQuery(sql, new Object[]{msgID});
|
||||
if (cursor != null) {
|
||||
if (cursor.moveToFirst()) {
|
||||
extra = serializeMsgExtra(cursor);
|
||||
|
@ -101,20 +101,11 @@ class MsgReactionDBManager {
|
||||
}
|
||||
|
||||
public List<WKMsgReaction> queryWithMessageIds(List<String> messageIds) {
|
||||
StringBuffer stringBuffer = new StringBuffer();
|
||||
for (int i = 0, size = messageIds.size(); i < size; i++) {
|
||||
if (!TextUtils.isEmpty(stringBuffer)) {
|
||||
stringBuffer.append(",");
|
||||
}
|
||||
stringBuffer.append(messageIds.get(i));
|
||||
}
|
||||
String sql = "select * from " + messageReaction + " where message_id in (?) and is_deleted=0 ORDER BY created_at desc";
|
||||
List<WKMsgReaction> list = new ArrayList<>();
|
||||
List<String> channelIds = new ArrayList<>();
|
||||
try (Cursor cursor = WKIMApplication
|
||||
.getInstance()
|
||||
.getDbHelper()
|
||||
.rawQuery(sql, new Object[]{stringBuffer.toString()})) {
|
||||
.getDbHelper().select(messageReaction, "message_id in (" + WKCursor.getPlaceholders(messageIds.size()) + ")", messageIds.toArray(new String[0]), "created_at desc")) {
|
||||
if (cursor == null) {
|
||||
return list;
|
||||
}
|
||||
|
@ -85,12 +85,12 @@ public class ReminderDBManager {
|
||||
}
|
||||
stringBuffer.append(ids.get(i));
|
||||
}
|
||||
String sql = "select * from " + reminders + " where reminder_id in (?)";
|
||||
String sql = "select * from " + reminders + " where reminder_id in (" + stringBuffer + ")";
|
||||
List<WKReminder> list = new ArrayList<>();
|
||||
try (Cursor cursor = WKIMApplication
|
||||
.getInstance()
|
||||
.getDbHelper()
|
||||
.rawQuery(sql, new Object[]{stringBuffer.toString()})) {
|
||||
.rawQuery(sql)) {
|
||||
if (cursor == null) {
|
||||
return list;
|
||||
}
|
||||
@ -104,19 +104,11 @@ public class ReminderDBManager {
|
||||
}
|
||||
|
||||
private List<WKReminder> queryWithChannelIds(List<String> channelIds) {
|
||||
StringBuilder stringBuffer = new StringBuilder();
|
||||
for (int i = 0, size = channelIds.size(); i < size; i++) {
|
||||
if (i != 0) {
|
||||
stringBuffer.append(",");
|
||||
}
|
||||
stringBuffer.append("'").append(channelIds.get(i)).append("'");
|
||||
}
|
||||
String sql = "select * from " + reminders + " where channel_id in (?)";
|
||||
List<WKReminder> list = new ArrayList<>();
|
||||
try (Cursor cursor = WKIMApplication
|
||||
.getInstance()
|
||||
.getDbHelper()
|
||||
.rawQuery(sql, new Object[]{stringBuffer.toString()})) {
|
||||
.select(reminders, "channel_id in (" + WKCursor.getPlaceholders(channelIds.size()) + ")", channelIds.toArray(new String[0]), null)) {
|
||||
if (cursor == null) {
|
||||
return list;
|
||||
}
|
||||
|
@ -38,10 +38,9 @@ public class RobotDBManager {
|
||||
|
||||
public boolean isExitMenu(String robotID, String cmd) {
|
||||
boolean isExist = false;
|
||||
String sql = "select * from " + robotMenu + " where robot_id =? and cmd=?";
|
||||
try (Cursor cursor = WKIMApplication
|
||||
.getInstance()
|
||||
.getDbHelper().rawQuery(sql, new Object[]{robotID, cmd})) {
|
||||
.getDbHelper().select(robotMenu, "robot_id =? and cmd=?", new String[]{robotID, cmd}, null)) {
|
||||
if (cursor != null && cursor.moveToLast()) {
|
||||
isExist = true;
|
||||
}
|
||||
@ -78,10 +77,9 @@ public class RobotDBManager {
|
||||
|
||||
public boolean isExist(String robotID) {
|
||||
boolean isExist = false;
|
||||
String sql = "select * from " + robot + " where robot_id =?";
|
||||
try (Cursor cursor = WKIMApplication
|
||||
.getInstance()
|
||||
.getDbHelper().rawQuery(sql, new Object[]{robotID})) {
|
||||
.getDbHelper().select(robot, "robot_id=?", new String[]{robotID}, null)) {
|
||||
if (cursor != null && cursor.moveToLast()) {
|
||||
isExist = true;
|
||||
}
|
||||
@ -138,10 +136,9 @@ public class RobotDBManager {
|
||||
|
||||
public WKRobot query(String robotID) {
|
||||
WKRobot wkRobot = null;
|
||||
String sql = "select * from " + robot + " where robot_id =?";
|
||||
try (Cursor cursor = WKIMApplication
|
||||
.getInstance()
|
||||
.getDbHelper().rawQuery(sql, new Object[]{robotID})) {
|
||||
.getDbHelper().select(robot, "robot_id =?", new String[]{robotID}, null)) {
|
||||
if (cursor == null) {
|
||||
return null;
|
||||
}
|
||||
@ -154,10 +151,9 @@ public class RobotDBManager {
|
||||
|
||||
public WKRobot queryWithUsername(String username) {
|
||||
WKRobot wkRobot = null;
|
||||
String sql = "select * from " + robot + " where username =?";
|
||||
try (Cursor cursor = WKIMApplication
|
||||
.getInstance()
|
||||
.getDbHelper().rawQuery(sql, new Object[]{username})) {
|
||||
.getDbHelper().select(robot, "username=?", new String[]{username}, null)) {
|
||||
if (cursor == null) {
|
||||
return null;
|
||||
}
|
||||
@ -169,17 +165,8 @@ public class RobotDBManager {
|
||||
}
|
||||
|
||||
public List<WKRobot> queryRobots(List<String> robotIds) {
|
||||
String sql = "select * from " + robot + " where robot_id in (?)";
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (int i = 0; i < robotIds.size(); i++) {
|
||||
if (i != 0) {
|
||||
sb.append(",");
|
||||
}
|
||||
sb.append("'").append(robotIds.get(i)).append("'");
|
||||
}
|
||||
List<WKRobot> list = new ArrayList<>();
|
||||
|
||||
try (Cursor cursor = WKIMApplication.getInstance().getDbHelper().rawQuery(sql, new Object[]{sb.toString()})) {
|
||||
try (Cursor cursor = WKIMApplication.getInstance().getDbHelper().select(robot, "robot_id in (" + WKCursor.getPlaceholders(robotIds.size()) + ")", robotIds.toArray(new String[0]), null)) {
|
||||
if (cursor == null) {
|
||||
return list;
|
||||
}
|
||||
@ -192,17 +179,8 @@ public class RobotDBManager {
|
||||
}
|
||||
|
||||
public List<WKRobotMenu> queryRobotMenus(List<String> robotIds) {
|
||||
String sql = "select * from " + robotMenu + " where robot_id in (?)";
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (int i = 0; i < robotIds.size(); i++) {
|
||||
if (i != 0) {
|
||||
sb.append(",");
|
||||
}
|
||||
sb.append("'").append(robotIds.get(i)).append("'");
|
||||
}
|
||||
List<WKRobotMenu> list = new ArrayList<>();
|
||||
|
||||
try (Cursor cursor = WKIMApplication.getInstance().getDbHelper().rawQuery(sql, new Object[]{sb.toString()})) {
|
||||
try (Cursor cursor = WKIMApplication.getInstance().getDbHelper().select(robotMenu, "robot_id in (" + WKCursor.getPlaceholders(robotIds.size()) + ")", robotIds.toArray(new String[0]), null)) {
|
||||
if (cursor == null) {
|
||||
return list;
|
||||
}
|
||||
@ -218,7 +196,7 @@ public class RobotDBManager {
|
||||
List<WKRobotMenu> list = new ArrayList<>();
|
||||
String sql = "select * from " + robotMenu + " where robot_id =?";
|
||||
|
||||
try (Cursor cursor = WKIMApplication.getInstance().getDbHelper().rawQuery(sql,new Object[]{robotID})) {
|
||||
try (Cursor cursor = WKIMApplication.getInstance().getDbHelper().rawQuery(sql, new Object[]{robotID})) {
|
||||
if (cursor == null) {
|
||||
return list;
|
||||
}
|
||||
|
@ -45,4 +45,19 @@ public class WKCursor {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static String getPlaceholders(int count) {
|
||||
StringBuilder placeholders = new StringBuilder();
|
||||
for (int i = 0; i < count; i++) {
|
||||
if (i != 0) {
|
||||
placeholders.append(", ");
|
||||
}
|
||||
placeholders.append("?");
|
||||
}
|
||||
return placeholders.toString();
|
||||
}
|
||||
|
||||
public static void copyArray(String[] src, String[] dest) {
|
||||
System.arraycopy(src, 0, dest, 0, src.length);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user