fix(analysis): refill_backlog 活动查询去掉 CAST(... AS TEXT)
MariaDB 不支持 CAST 到 TEXT(仅 SQLite 支持),导致该语句在 prepare 阶段 直接 1064,activity 分支每次 idle 循环都报错刷屏——且无论 backlog 是否有 数据都会失败(语法错误先于执行)。activities.id 本身是 VARCHAR(64), ai_jobs/ai_insights.subject 是 VARCHAR(96),两侧同类型,CAST 本就不必要。 改为直接比较 ai.subject = a.id / aj.subject = a.id,双后端(SQLite/MariaDB) 语义一致。 已在生产 MariaDB 上只读验证两段 SQL 均正常执行(daily-backlog=0, activity-backlog=0),本地 analysis/ai/coach 测试全绿。
This commit is contained in:
@@ -670,10 +670,10 @@ def refill_backlog(max_users=3, max_daily=100, max_activity=100):
|
||||
"WHERE a.user_id = ? AND a.id IS NOT NULL "
|
||||
"AND NOT EXISTS (SELECT 1 FROM ai_insights ai "
|
||||
" WHERE ai.user_id = a.user_id AND ai.kind = 'activity' "
|
||||
" AND ai.subject = CAST(a.id AS TEXT)) "
|
||||
" AND ai.subject = a.id) "
|
||||
"AND NOT EXISTS (SELECT 1 FROM ai_jobs aj "
|
||||
" WHERE aj.user_id = a.user_id AND aj.kind = 'activity' "
|
||||
" AND aj.subject = CAST(a.id AS TEXT)) "
|
||||
" AND aj.subject = a.id) "
|
||||
"ORDER BY a.start_time DESC LIMIT ?",
|
||||
[uid, max_activity],
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user