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:
ericwyuan
2026-09-02 20:18:40 +08:00
parent 224144915c
commit 617c8325a6

View File

@@ -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 " "WHERE a.user_id = ? AND a.id IS NOT NULL "
"AND NOT EXISTS (SELECT 1 FROM ai_insights ai " "AND NOT EXISTS (SELECT 1 FROM ai_insights ai "
" WHERE ai.user_id = a.user_id AND ai.kind = 'activity' " " 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 " "AND NOT EXISTS (SELECT 1 FROM ai_jobs aj "
" WHERE aj.user_id = a.user_id AND aj.kind = 'activity' " " 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 ?", "ORDER BY a.start_time DESC LIMIT ?",
[uid, max_activity], [uid, max_activity],
) )