fix: sqlor占位符外层引号致双重引号1064——去掉ph占位符的单引号包裹

上一提交修占位符时引入的新错: 给 dollar-brace 占位符加了外层单引号,
渲染成 IN ('占位符') → sqlor参数化时aiomysql再自动加引号 → 双重引号
IN (''owner.maintainer'') → MySQL把空串后 owner.maintainer 当裸标识符 → 1064。

证据: 同文件其余占位符(user/ticket等)均无外层引号且全部成功,
仅动态IN子句两处(todos角色池+core待认领队列)加了引号即报错。

修法: 去掉外层单引号, 占位符直接拼入IN子句, 与同文件其余用法一致。
渲染SQL现为 assignee_role IN (占位符) 正确绑定参数。

教训: sqlor占位符(dollar-brace-key-brace-dollar)由驱动参数化并自动加引号,
手工再包单引号=双重引号必炸; 拼接动态IN子句时占位符裸写不加引号。
This commit is contained in:
yumoqing 2026-09-10 17:09:53 +08:00
parent 8e0bbdbbd1
commit 86adf1aa8c
2 changed files with 2 additions and 2 deletions

View File

@ -545,7 +545,7 @@ async def list_staff_tickets(user_id, roles=None, queue='all', limit=100):
if queue == 'pending':
if not roles:
return []
ph = ','.join("'${role%d}$'" % i for i in range(len(roles)))
ph = ','.join("${role%d}$" % i for i in range(len(roles)))
for i, r in enumerate(roles):
params['role%d' % i] = r
cond = ("status='human_pending' AND assignee_role IN (%s)" % ph)

View File

@ -40,7 +40,7 @@ async def list_ticket_todos(user_id, roles=None, limit=100):
conds.append("(assignee_id=${u}$ AND status='human_processing')")
# ③ 角色池视角:待认领且受理角色∈我的角色
if roles:
ph = ','.join("'${r%d}$'" % i for i in range(len(roles)))
ph = ','.join("${r%d}$" % i for i in range(len(roles)))
for i, r in enumerate(roles):
params['r%d' % i] = r
conds.append("(status='human_pending' AND assignee_role IN (%s))" % ph)