update Optimize message queries

This commit is contained in:
SL 2023-12-05 22:16:56 +08:00
parent 6d92c7865b
commit 65c6eeca1b
11 changed files with 67 additions and 120 deletions

10
.idea/deploymentTargetDropDown.xml generated Normal file
View 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
View File

@ -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
View 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>

View File

@ -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;
}

View File

@ -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;

View File

@ -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;
}

View File

@ -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);

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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);
}
}