mirror of
https://github.com/WuKongIM/WuKongIMFlutterSDK
synced 2025-05-31 16:07:24 +00:00
Optimize message queries
This commit is contained in:
parent
551d85d276
commit
0253ee0136
@ -44,3 +44,5 @@
|
|||||||
* Update channel info refresh listener and optimize data insertion issues
|
* Update channel info refresh listener and optimize data insertion issues
|
||||||
### 1.2.2
|
### 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:
|
dependencies:
|
||||||
wukongimfluttersdk: ^1.2.2
|
wukongimfluttersdk: ^1.2.3
|
||||||
```
|
```
|
||||||
#### 引入
|
#### 引入
|
||||||
```dart
|
```dart
|
||||||
|
@ -96,21 +96,15 @@ class ChannelDB {
|
|||||||
if (channelIDs.isEmpty) {
|
if (channelIDs.isEmpty) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
StringBuffer sb = StringBuffer();
|
List<Object> args = [];
|
||||||
for (int i = 0, size = channelIDs.length; i < size; i++) {
|
args.addAll(channelIDs);
|
||||||
if (i != 0) {
|
args.add(channelType);
|
||||||
sb.write(",");
|
|
||||||
}
|
|
||||||
sb.write("'");
|
|
||||||
sb.write(channelIDs[i]);
|
|
||||||
sb.write("'");
|
|
||||||
}
|
|
||||||
String channelIds = sb.toString();
|
|
||||||
List<WKChannel> list = [];
|
List<WKChannel> list = [];
|
||||||
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
||||||
WKDBConst.tableChannel,
|
WKDBConst.tableChannel,
|
||||||
where: "channel_id in (?) and channel_type=?",
|
where:
|
||||||
whereArgs: [channelIds, channelType]);
|
"channel_id in (${WKDBConst.getPlaceholders(channelIDs.length)}) and channel_type=?",
|
||||||
|
whereArgs: args);
|
||||||
if (results.isNotEmpty) {
|
if (results.isNotEmpty) {
|
||||||
for (Map<String, Object?> data in results) {
|
for (Map<String, Object?> data in results) {
|
||||||
list.add(WKDBConst.serializeChannel(data));
|
list.add(WKDBConst.serializeChannel(data));
|
||||||
|
@ -14,20 +14,16 @@ class ChannelMemberDB {
|
|||||||
|
|
||||||
Future<List<WKChannelMember>> queryMemberWithUIDs(
|
Future<List<WKChannelMember>> queryMemberWithUIDs(
|
||||||
String channelID, int channelType, List<String> uidList) async {
|
String channelID, int channelType, List<String> uidList) async {
|
||||||
StringBuffer sb = StringBuffer();
|
List<Object> args = [];
|
||||||
for (int i = 0, size = uidList.length; i < size; i++) {
|
args.add(channelID);
|
||||||
if (i != 0) {
|
args.add(channelType);
|
||||||
sb.write(",");
|
args.addAll(uidList);
|
||||||
}
|
|
||||||
sb.write("'");
|
|
||||||
sb.write(uidList[i]);
|
|
||||||
sb.write("'");
|
|
||||||
}
|
|
||||||
List<WKChannelMember> list = [];
|
List<WKChannelMember> list = [];
|
||||||
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
||||||
WKDBConst.tableChannelMember,
|
WKDBConst.tableChannelMember,
|
||||||
where: "channel_id=? and channel_type=? and member_uid in (?)",
|
where:
|
||||||
whereArgs: [channelID, channelType, sb.toString()]);
|
"channel_id=? and channel_type=? and member_uid in (${WKDBConst.getPlaceholders(uidList.length)})",
|
||||||
|
whereArgs: args);
|
||||||
if (results.isNotEmpty) {
|
if (results.isNotEmpty) {
|
||||||
for (Map<String, Object?> data in results) {
|
for (Map<String, Object?> data in results) {
|
||||||
list.add(WKDBConst.serializeChannelMember(data));
|
list.add(WKDBConst.serializeChannelMember(data));
|
||||||
@ -81,21 +77,17 @@ class ChannelMemberDB {
|
|||||||
|
|
||||||
Future<List<WKChannelMember>> queryWithUIDs(
|
Future<List<WKChannelMember>> queryWithUIDs(
|
||||||
String channelID, int channelType, List<String> uidList) async {
|
String channelID, int channelType, List<String> uidList) async {
|
||||||
StringBuffer sb = StringBuffer();
|
List<Object> args = [];
|
||||||
for (int i = 0, size = uidList.length; i < size; i++) {
|
args.add(channelID);
|
||||||
if (i != 0) {
|
args.add(channelType);
|
||||||
sb.write(",");
|
args.addAll(uidList);
|
||||||
}
|
|
||||||
sb.write("'");
|
|
||||||
sb.write(uidList[i]);
|
|
||||||
sb.write("'");
|
|
||||||
}
|
|
||||||
|
|
||||||
List<WKChannelMember> list = [];
|
List<WKChannelMember> list = [];
|
||||||
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
||||||
WKDBConst.tableChannelMember,
|
WKDBConst.tableChannelMember,
|
||||||
where: "channel_id=? and channel_type=? and member_uid in (?) ",
|
where:
|
||||||
whereArgs: [channelID, channelType, sb.toString()]);
|
"channel_id=? and channel_type=? and member_uid in (${WKDBConst.getPlaceholders(uidList.length)}) ",
|
||||||
|
whereArgs: args);
|
||||||
if (results.isNotEmpty) {
|
if (results.isNotEmpty) {
|
||||||
for (Map<String, Object?> data in results) {
|
for (Map<String, Object?> data in results) {
|
||||||
list.add(WKDBConst.serializeChannelMember(data));
|
list.add(WKDBConst.serializeChannelMember(data));
|
||||||
|
@ -245,4 +245,15 @@ class WKDBConst {
|
|||||||
}
|
}
|
||||||
return result.toString();
|
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(
|
Future<List<WKConversationMsg>> queryWithChannelIds(
|
||||||
List<String> channelIds) async {
|
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<WKConversationMsg> list = [];
|
||||||
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
||||||
WKDBConst.tableConversation,
|
WKDBConst.tableConversation,
|
||||||
where: "channel_id in (?)",
|
where:
|
||||||
whereArgs: [sb.toString()]);
|
"channel_id in (${WKDBConst.getPlaceholders(channelIds.length)})",
|
||||||
|
whereArgs: channelIds);
|
||||||
if (results.isNotEmpty) {
|
if (results.isNotEmpty) {
|
||||||
for (Map<String, Object?> data in results) {
|
for (Map<String, Object?> data in results) {
|
||||||
list.add(WKDBConst.serializeCoversation(data));
|
list.add(WKDBConst.serializeCoversation(data));
|
||||||
|
@ -103,21 +103,11 @@ class MessageDB {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<List<WKMsg>> queryWithMessageIds(List<String> messageIds) async {
|
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 =
|
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<WKMsg> list = [];
|
||||||
List<Map<String, Object?>> results =
|
List<Map<String, Object?>> results =
|
||||||
await WKDBHelper.shared.getDB().rawQuery(sql, [sb.toString()]);
|
await WKDBHelper.shared.getDB().rawQuery(sql, messageIds);
|
||||||
if (results.isNotEmpty) {
|
if (results.isNotEmpty) {
|
||||||
for (Map<String, Object?> data in results) {
|
for (Map<String, Object?> data in results) {
|
||||||
list.add(WKDBConst.serializeWKMsg(data));
|
list.add(WKDBConst.serializeWKMsg(data));
|
||||||
@ -582,21 +572,11 @@ class MessageDB {
|
|||||||
|
|
||||||
Future<List<WKMsg>> queryWithClientMsgNos(List<String> clientMsgNos) async {
|
Future<List<WKMsg>> queryWithClientMsgNos(List<String> clientMsgNos) async {
|
||||||
List<WKMsg> msgs = [];
|
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(
|
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
||||||
WKDBConst.tableMessage,
|
WKDBConst.tableMessage,
|
||||||
where: "client_msg_no in (?)",
|
where:
|
||||||
whereArgs: [sb.toString()]);
|
"client_msg_no in (${WKDBConst.getPlaceholders(clientMsgNos.length)})",
|
||||||
|
whereArgs: clientMsgNos);
|
||||||
if (results.isNotEmpty) {
|
if (results.isNotEmpty) {
|
||||||
for (Map<String, Object?> data in results) {
|
for (Map<String, Object?> data in results) {
|
||||||
msgs.add(WKDBConst.serializeWKMsg(data));
|
msgs.add(WKDBConst.serializeWKMsg(data));
|
||||||
@ -690,20 +670,11 @@ class MessageDB {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<List<WKMsgExtra>> queryMsgExtrasWithMsgIds(List<String> msgIds) async {
|
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<WKMsgExtra> list = [];
|
||||||
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
||||||
WKDBConst.tableMessageExtra,
|
WKDBConst.tableMessageExtra,
|
||||||
where: "message_id in (?)",
|
where: "message_id in (${WKDBConst.getPlaceholders(msgIds.length)})",
|
||||||
whereArgs: [sb.toString()]);
|
whereArgs: msgIds);
|
||||||
if (results.isNotEmpty) {
|
if (results.isNotEmpty) {
|
||||||
for (Map<String, Object?> data in results) {
|
for (Map<String, Object?> data in results) {
|
||||||
list.add(WKDBConst.serializeMsgExtra(data));
|
list.add(WKDBConst.serializeMsgExtra(data));
|
||||||
|
@ -42,21 +42,12 @@ class ReactionDB {
|
|||||||
|
|
||||||
Future<List<WKMsgReaction>> queryWithMessageIds(
|
Future<List<WKMsgReaction>> queryWithMessageIds(
|
||||||
List<String> messageIds) async {
|
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<WKMsgReaction> list = [];
|
||||||
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
||||||
WKDBConst.tableMessageReaction,
|
WKDBConst.tableMessageReaction,
|
||||||
where: "message_id in (?) and is_deleted=0",
|
where:
|
||||||
whereArgs: [sb.toString()],
|
"message_id in (${WKDBConst.getPlaceholders(messageIds.length)}) and is_deleted=0",
|
||||||
|
whereArgs: messageIds,
|
||||||
orderBy: "created_at desc");
|
orderBy: "created_at desc");
|
||||||
if (results.isNotEmpty) {
|
if (results.isNotEmpty) {
|
||||||
for (Map<String, Object?> data in results) {
|
for (Map<String, Object?> data in results) {
|
||||||
|
@ -118,20 +118,12 @@ class ReminderDB {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<List<WKReminder>> queryWithChannelIds(List<String> channelIds) async {
|
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<WKReminder> list = [];
|
||||||
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
||||||
WKDBConst.tableReminders,
|
WKDBConst.tableReminders,
|
||||||
where: "channel_id in (?)",
|
where:
|
||||||
whereArgs: [sb.toString()]);
|
"channel_id in (${WKDBConst.getPlaceholders(channelIds.length)})",
|
||||||
|
whereArgs: channelIds);
|
||||||
if (results.isNotEmpty) {
|
if (results.isNotEmpty) {
|
||||||
for (Map<String, Object?> data in results) {
|
for (Map<String, Object?> data in results) {
|
||||||
list.add(WKDBConst.serializeReminder(data));
|
list.add(WKDBConst.serializeReminder(data));
|
||||||
@ -141,18 +133,11 @@ class ReminderDB {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<List<WKReminder>> queryWithIds(List<int> ids) async {
|
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<WKReminder> list = [];
|
||||||
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
List<Map<String, Object?>> results = await WKDBHelper.shared.getDB().query(
|
||||||
WKDBConst.tableReminders,
|
WKDBConst.tableReminders,
|
||||||
where: "reminder_id in (?)",
|
where: "reminder_id in (${WKDBConst.getPlaceholders(ids.length)})",
|
||||||
whereArgs: [sb.toString()]);
|
whereArgs: ids);
|
||||||
if (results.isNotEmpty) {
|
if (results.isNotEmpty) {
|
||||||
for (Map<String, Object?> data in results) {
|
for (Map<String, Object?> data in results) {
|
||||||
list.add(WKDBConst.serializeReminder(data));
|
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
|
# 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
|
# 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.
|
# 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
|
homepage: https://github.com/WuKongIM/WuKongIMFlutterSDK
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user