Optimize message queries

This commit is contained in:
SL 2023-12-05 23:09:20 +08:00
parent 551d85d276
commit 0253ee0136
10 changed files with 54 additions and 116 deletions

View File

@ -43,4 +43,6 @@
### 1.2.1
* Update channel info refresh listener and optimize data insertion issues
### 1.2.2
* Modifying the issue of reconnecting disconnected objects without destroying them
* Modifying the issue of reconnecting disconnected objects without destroying them
### 1.2.3
* Optimize message queries

View File

@ -9,7 +9,7 @@
#### 安装
```
dependencies:
wukongimfluttersdk: ^1.2.2
wukongimfluttersdk: ^1.2.3
```
#### 引入
```dart

View File

@ -96,21 +96,15 @@ class ChannelDB {
if (channelIDs.isEmpty) {
return [];
}
StringBuffer sb = StringBuffer();
for (int i = 0, size = channelIDs.length; i < size; i++) {
if (i != 0) {
sb.write(",");
}
sb.write("'");
sb.write(channelIDs[i]);
sb.write("'");
}
String channelIds = sb.toString();
List<Object> args = [];
args.addAll(channelIDs);
args.add(channelType);
List<WKChannel> list = [];
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
WKDBConst.tableChannel,
where: "channel_id in (?) and channel_type=?",
whereArgs: [channelIds, channelType]);
where:
"channel_id in (${WKDBConst.getPlaceholders(channelIDs.length)}) and channel_type=?",
whereArgs: args);
if (results.isNotEmpty) {
for (Map<String, Object?> data in results) {
list.add(WKDBConst.serializeChannel(data));

View File

@ -14,20 +14,16 @@ class ChannelMemberDB {
Future<List<WKChannelMember>> queryMemberWithUIDs(
String channelID, int channelType, List<String> uidList) async {
StringBuffer sb = StringBuffer();
for (int i = 0, size = uidList.length; i < size; i++) {
if (i != 0) {
sb.write(",");
}
sb.write("'");
sb.write(uidList[i]);
sb.write("'");
}
List<Object> args = [];
args.add(channelID);
args.add(channelType);
args.addAll(uidList);
List<WKChannelMember> list = [];
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
WKDBConst.tableChannelMember,
where: "channel_id=? and channel_type=? and member_uid in (?)",
whereArgs: [channelID, channelType, sb.toString()]);
where:
"channel_id=? and channel_type=? and member_uid in (${WKDBConst.getPlaceholders(uidList.length)})",
whereArgs: args);
if (results.isNotEmpty) {
for (Map<String, Object?> data in results) {
list.add(WKDBConst.serializeChannelMember(data));
@ -81,21 +77,17 @@ class ChannelMemberDB {
Future<List<WKChannelMember>> queryWithUIDs(
String channelID, int channelType, List<String> uidList) async {
StringBuffer sb = StringBuffer();
for (int i = 0, size = uidList.length; i < size; i++) {
if (i != 0) {
sb.write(",");
}
sb.write("'");
sb.write(uidList[i]);
sb.write("'");
}
List<Object> args = [];
args.add(channelID);
args.add(channelType);
args.addAll(uidList);
List<WKChannelMember> list = [];
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
WKDBConst.tableChannelMember,
where: "channel_id=? and channel_type=? and member_uid in (?) ",
whereArgs: [channelID, channelType, sb.toString()]);
where:
"channel_id=? and channel_type=? and member_uid in (${WKDBConst.getPlaceholders(uidList.length)}) ",
whereArgs: args);
if (results.isNotEmpty) {
for (Map<String, Object?> data in results) {
list.add(WKDBConst.serializeChannelMember(data));

View File

@ -245,4 +245,15 @@ class WKDBConst {
}
return result.toString();
}
static String getPlaceholders(int count) {
StringBuffer placeholders = StringBuffer();
for (int i = 0; i < count; i++) {
if (i != 0) {
placeholders.write(", ");
}
placeholders.write("?");
}
return placeholders.toString();
}
}

View File

@ -113,20 +113,12 @@ class ConversationDB {
Future<List<WKConversationMsg>> queryWithChannelIds(
List<String> channelIds) async {
StringBuffer sb = StringBuffer();
for (var i = 0; i < channelIds.length; i++) {
if (i != 0) {
sb.write(",");
}
sb.write("'");
sb.write(channelIds[i]);
sb.write("'");
}
List<WKConversationMsg> list = [];
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
WKDBConst.tableConversation,
where: "channel_id in (?)",
whereArgs: [sb.toString()]);
where:
"channel_id in (${WKDBConst.getPlaceholders(channelIds.length)})",
whereArgs: channelIds);
if (results.isNotEmpty) {
for (Map<String, Object?> data in results) {
list.add(WKDBConst.serializeCoversation(data));

View File

@ -103,21 +103,11 @@ class MessageDB {
}
Future<List<WKMsg>> queryWithMessageIds(List<String> messageIds) async {
StringBuffer sb = StringBuffer();
for (int i = 0, size = messageIds.length; i < size; i++) {
if (i != 0) {
sb.write(",");
}
sb.write("'");
sb.write(messageIds[i]);
sb.write("'");
}
String sql =
"select $messageCols,$extraCols from ${WKDBConst.tableMessage} LEFT JOIN ${WKDBConst.tableMessageExtra} ON ${WKDBConst.tableMessage}.message_id=${WKDBConst.tableMessageExtra}.message_id WHERE ${WKDBConst.tableMessage}.message_id in (?)";
"select $messageCols,$extraCols from ${WKDBConst.tableMessage} LEFT JOIN ${WKDBConst.tableMessageExtra} ON ${WKDBConst.tableMessage}.message_id=${WKDBConst.tableMessageExtra}.message_id WHERE ${WKDBConst.tableMessage}.message_id in (${WKDBConst.getPlaceholders(messageIds.length)}})";
List<WKMsg> list = [];
List<Map<String, Object?>> results =
await WKDBHelper.shared.getDB().rawQuery(sql, [sb.toString()]);
await WKDBHelper.shared.getDB().rawQuery(sql, messageIds);
if (results.isNotEmpty) {
for (Map<String, Object?> data in results) {
list.add(WKDBConst.serializeWKMsg(data));
@ -582,21 +572,11 @@ class MessageDB {
Future<List<WKMsg>> queryWithClientMsgNos(List<String> clientMsgNos) async {
List<WKMsg> msgs = [];
StringBuffer sb = StringBuffer();
for (int i = 0, size = clientMsgNos.length; i < size; i++) {
if (i != 0) {
sb.write(",");
}
sb.write("'");
sb.write(clientMsgNos[i]);
sb.write("'");
}
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
WKDBConst.tableMessage,
where: "client_msg_no in (?)",
whereArgs: [sb.toString()]);
where:
"client_msg_no in (${WKDBConst.getPlaceholders(clientMsgNos.length)})",
whereArgs: clientMsgNos);
if (results.isNotEmpty) {
for (Map<String, Object?> data in results) {
msgs.add(WKDBConst.serializeWKMsg(data));
@ -690,20 +670,11 @@ class MessageDB {
}
Future<List<WKMsgExtra>> queryMsgExtrasWithMsgIds(List<String> msgIds) async {
StringBuffer sb = StringBuffer();
for (int i = 0, size = msgIds.length; i < size; i++) {
if (i != 0) {
sb.write(",");
}
sb.write("'");
sb.write(msgIds[i]);
sb.write("'");
}
List<WKMsgExtra> list = [];
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
WKDBConst.tableMessageExtra,
where: "message_id in (?)",
whereArgs: [sb.toString()]);
where: "message_id in (${WKDBConst.getPlaceholders(msgIds.length)})",
whereArgs: msgIds);
if (results.isNotEmpty) {
for (Map<String, Object?> data in results) {
list.add(WKDBConst.serializeMsgExtra(data));

View File

@ -42,21 +42,12 @@ class ReactionDB {
Future<List<WKMsgReaction>> queryWithMessageIds(
List<String> messageIds) async {
StringBuffer sb = StringBuffer();
for (int i = 0, size = messageIds.length; i < size; i++) {
if (i != 0) {
sb.write(",");
}
sb.write("'");
sb.write(messageIds[i]);
sb.write("'");
}
List<WKMsgReaction> list = [];
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
WKDBConst.tableMessageReaction,
where: "message_id in (?) and is_deleted=0",
whereArgs: [sb.toString()],
where:
"message_id in (${WKDBConst.getPlaceholders(messageIds.length)}) and is_deleted=0",
whereArgs: messageIds,
orderBy: "created_at desc");
if (results.isNotEmpty) {
for (Map<String, Object?> data in results) {

View File

@ -118,20 +118,12 @@ class ReminderDB {
}
Future<List<WKReminder>> queryWithChannelIds(List<String> channelIds) async {
StringBuffer sb = StringBuffer();
for (int i = 0, size = channelIds.length; i < size; i++) {
if (i != 0) {
sb.write(",");
}
sb.write("'");
sb.write(channelIds[i]);
sb.write("'");
}
List<WKReminder> list = [];
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
WKDBConst.tableReminders,
where: "channel_id in (?)",
whereArgs: [sb.toString()]);
where:
"channel_id in (${WKDBConst.getPlaceholders(channelIds.length)})",
whereArgs: channelIds);
if (results.isNotEmpty) {
for (Map<String, Object?> data in results) {
list.add(WKDBConst.serializeReminder(data));
@ -141,18 +133,11 @@ class ReminderDB {
}
Future<List<WKReminder>> queryWithIds(List<int> ids) async {
StringBuffer sb = StringBuffer();
for (int i = 0, size = ids.length; i < size; i++) {
if (sb.length != 0) {
sb.write(',');
}
sb.write(ids[i]);
}
List<WKReminder> list = [];
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
WKDBConst.tableReminders,
where: "reminder_id in (?)",
whereArgs: [sb.toString()]);
where: "reminder_id in (${WKDBConst.getPlaceholders(ids.length)})",
whereArgs: ids);
if (results.isNotEmpty) {
for (Map<String, Object?> data in results) {
list.add(WKDBConst.serializeReminder(data));

View File

@ -15,7 +15,7 @@ description: wukong IM flutter sdk
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
# In Windows, build-name is used as the major, minor, and patch parts
# of the product and file versions while build-number is used as the build suffix.
version: 1.2.2
version: 1.2.3
homepage: https://github.com/WuKongIM/WuKongIMFlutterSDK
environment: