From 617c8325a60752f8a3e0cf3bf311cb8395999a91 Mon Sep 17 00:00:00 2001 From: ericwyuan Date: Wed, 2 Sep 2026 20:18:40 +0800 Subject: [PATCH] =?UTF-8?q?fix(analysis):=20refill=5Fbacklog=20=E6=B4=BB?= =?UTF-8?q?=E5=8A=A8=E6=9F=A5=E8=AF=A2=E5=8E=BB=E6=8E=89=20CAST(...=20AS?= =?UTF-8?q?=20TEXT)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 测试全绿。 --- backend/services/analysis.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/services/analysis.py b/backend/services/analysis.py index 1956a42..790ee4f 100644 --- a/backend/services/analysis.py +++ b/backend/services/analysis.py @@ -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], )