mirror of
https://github.com/WuKongIM/WuKongIMFlutterSDK
synced 2025-05-29 15:12:20 +00:00
Optimize message queries
This commit is contained in:
parent
551d85d276
commit
0253ee0136
@ -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
|
@ -9,7 +9,7 @@
|
||||
#### 安装
|
||||
```
|
||||
dependencies:
|
||||
wukongimfluttersdk: ^1.2.2
|
||||
wukongimfluttersdk: ^1.2.3
|
||||
```
|
||||
#### 引入
|
||||
```dart
|
||||
|
@ -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));
|
||||
|
@ -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));
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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));
|
||||
|
@ -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));
|
||||
|
@ -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) {
|
||||
|
@ -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));
|
||||
|
@ -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:
|
||||
|
Loading…
x
Reference in New Issue
Block a user