mirror of
https://github.com/hellodigua/ChatLab.git
synced 2026-04-29 08:12:41 +08:00
fix: 修复表查询问题
This commit is contained in:
@@ -117,7 +117,7 @@ function buildKeywordCondition(keywords?: string[]): { condition: string; params
|
||||
const SYSTEM_FILTER = "AND COALESCE(m.account_name, '') != '系统消息'"
|
||||
|
||||
// 只获取文本消息的过滤条件
|
||||
const TEXT_ONLY_FILTER = 'AND msg.type = 0 AND msg.content IS NOT NULL AND msg.content != \'\''
|
||||
const TEXT_ONLY_FILTER = "AND msg.type = 0 AND msg.content IS NOT NULL AND msg.content != ''"
|
||||
|
||||
// ==================== 查询函数 ====================
|
||||
|
||||
@@ -127,19 +127,15 @@ const TEXT_ONLY_FILTER = 'AND msg.type = 0 AND msg.content IS NOT NULL AND msg.c
|
||||
* @param filter 时间过滤器
|
||||
* @param limit 返回数量限制
|
||||
*/
|
||||
export function getRecentMessages(
|
||||
sessionId: string,
|
||||
filter?: TimeFilter,
|
||||
limit: number = 100
|
||||
): MessagesWithTotal {
|
||||
export function getRecentMessages(sessionId: string, filter?: TimeFilter, limit: number = 100): MessagesWithTotal {
|
||||
// 确保数据库有 avatar 字段(兼容旧数据库)
|
||||
ensureAvatarColumn(sessionId)
|
||||
|
||||
const db = openDatabase(sessionId)
|
||||
if (!db) return { messages: [], total: 0 }
|
||||
|
||||
// 构建时间过滤条件
|
||||
const { clause: timeClause, params: timeParams } = buildTimeFilter(filter)
|
||||
// 构建时间过滤条件(使用 'msg' 表别名避免多表 JOIN 时的列名歧义)
|
||||
const { clause: timeClause, params: timeParams } = buildTimeFilter(filter, 'msg')
|
||||
const timeCondition = timeClause ? timeClause.replace('WHERE', 'AND') : ''
|
||||
|
||||
// 查询总数
|
||||
@@ -196,19 +192,15 @@ export function getRecentMessages(
|
||||
* @param filter 时间过滤器
|
||||
* @param limit 返回数量限制
|
||||
*/
|
||||
export function getAllRecentMessages(
|
||||
sessionId: string,
|
||||
filter?: TimeFilter,
|
||||
limit: number = 100
|
||||
): MessagesWithTotal {
|
||||
export function getAllRecentMessages(sessionId: string, filter?: TimeFilter, limit: number = 100): MessagesWithTotal {
|
||||
// 确保数据库有 avatar 字段(兼容旧数据库)
|
||||
ensureAvatarColumn(sessionId)
|
||||
|
||||
const db = openDatabase(sessionId)
|
||||
if (!db) return { messages: [], total: 0 }
|
||||
|
||||
// 构建时间过滤条件
|
||||
const { clause: timeClause, params: timeParams } = buildTimeFilter(filter)
|
||||
// 构建时间过滤条件(使用 'msg' 表别名避免多表 JOIN 时的列名歧义)
|
||||
const { clause: timeClause, params: timeParams } = buildTimeFilter(filter, 'msg')
|
||||
const timeCondition = timeClause ? timeClause.replace('WHERE', 'AND') : ''
|
||||
|
||||
// 查询总数
|
||||
@@ -286,8 +278,8 @@ export function searchMessages(
|
||||
keywordParams.push(...keywords.map((k) => `%${k}%`))
|
||||
}
|
||||
|
||||
// 构建时间过滤条件
|
||||
const { clause: timeClause, params: timeParams } = buildTimeFilter(filter)
|
||||
// 构建时间过滤条件(使用 'msg' 表别名避免多表 JOIN 时的列名歧义)
|
||||
const { clause: timeClause, params: timeParams } = buildTimeFilter(filter, 'msg')
|
||||
const timeCondition = timeClause ? timeClause.replace('WHERE', 'AND') : ''
|
||||
|
||||
// 构建发送者筛选条件
|
||||
@@ -445,8 +437,8 @@ export function getMessagesBefore(
|
||||
const db = openDatabase(sessionId)
|
||||
if (!db) return { messages: [], hasMore: false }
|
||||
|
||||
// 构建时间过滤条件
|
||||
const { clause: timeClause, params: timeParams } = buildTimeFilter(filter)
|
||||
// 构建时间过滤条件(使用 'msg' 表别名避免多表 JOIN 时的列名歧义)
|
||||
const { clause: timeClause, params: timeParams } = buildTimeFilter(filter, 'msg')
|
||||
const timeCondition = timeClause ? timeClause.replace('WHERE', 'AND') : ''
|
||||
|
||||
// 构建关键词条件
|
||||
@@ -480,7 +472,9 @@ export function getMessagesBefore(
|
||||
LIMIT ?
|
||||
`
|
||||
|
||||
const rows = db.prepare(sql).all(beforeId, ...timeParams, ...keywordParams, ...senderParams, limit + 1) as DbMessageRow[]
|
||||
const rows = db
|
||||
.prepare(sql)
|
||||
.all(beforeId, ...timeParams, ...keywordParams, ...senderParams, limit + 1) as DbMessageRow[]
|
||||
|
||||
const hasMore = rows.length > limit
|
||||
const resultRows = hasMore ? rows.slice(0, limit) : rows
|
||||
@@ -515,8 +509,8 @@ export function getMessagesAfter(
|
||||
const db = openDatabase(sessionId)
|
||||
if (!db) return { messages: [], hasMore: false }
|
||||
|
||||
// 构建时间过滤条件
|
||||
const { clause: timeClause, params: timeParams } = buildTimeFilter(filter)
|
||||
// 构建时间过滤条件(使用 'msg' 表别名避免多表 JOIN 时的列名歧义)
|
||||
const { clause: timeClause, params: timeParams } = buildTimeFilter(filter, 'msg')
|
||||
const timeCondition = timeClause ? timeClause.replace('WHERE', 'AND') : ''
|
||||
|
||||
// 构建关键词条件
|
||||
@@ -550,7 +544,9 @@ export function getMessagesAfter(
|
||||
LIMIT ?
|
||||
`
|
||||
|
||||
const rows = db.prepare(sql).all(afterId, ...timeParams, ...keywordParams, ...senderParams, limit + 1) as DbMessageRow[]
|
||||
const rows = db
|
||||
.prepare(sql)
|
||||
.all(afterId, ...timeParams, ...keywordParams, ...senderParams, limit + 1) as DbMessageRow[]
|
||||
|
||||
const hasMore = rows.length > limit
|
||||
const resultRows = hasMore ? rows.slice(0, limit) : rows
|
||||
@@ -584,22 +580,30 @@ export function getConversationBetween(
|
||||
if (!db) return { messages: [], total: 0, member1Name: '', member2Name: '' }
|
||||
|
||||
// 获取成员名称
|
||||
const member1 = db.prepare(`
|
||||
const member1 = db
|
||||
.prepare(
|
||||
`
|
||||
SELECT COALESCE(group_nickname, account_name, platform_id) as name
|
||||
FROM member WHERE id = ?
|
||||
`).get(memberId1) as { name: string } | undefined
|
||||
`
|
||||
)
|
||||
.get(memberId1) as { name: string } | undefined
|
||||
|
||||
const member2 = db.prepare(`
|
||||
const member2 = db
|
||||
.prepare(
|
||||
`
|
||||
SELECT COALESCE(group_nickname, account_name, platform_id) as name
|
||||
FROM member WHERE id = ?
|
||||
`).get(memberId2) as { name: string } | undefined
|
||||
`
|
||||
)
|
||||
.get(memberId2) as { name: string } | undefined
|
||||
|
||||
if (!member1 || !member2) {
|
||||
return { messages: [], total: 0, member1Name: '', member2Name: '' }
|
||||
}
|
||||
|
||||
// 构建时间过滤条件
|
||||
const { clause: timeClause, params: timeParams } = buildTimeFilter(filter)
|
||||
// 构建时间过滤条件(使用 'msg' 表别名避免多表 JOIN 时的列名歧义)
|
||||
const { clause: timeClause, params: timeParams } = buildTimeFilter(filter, 'msg')
|
||||
const timeCondition = timeClause ? timeClause.replace('WHERE', 'AND') : ''
|
||||
|
||||
// 查询两人之间的所有消息
|
||||
@@ -649,4 +653,3 @@ export function getConversationBetween(
|
||||
member2Name: member2.name,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user