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:
parent
8e0bbdbbd1
commit
86adf1aa8c
@ -545,7 +545,7 @@ async def list_staff_tickets(user_id, roles=None, queue='all', limit=100):
|
|||||||
if queue == 'pending':
|
if queue == 'pending':
|
||||||
if not roles:
|
if not roles:
|
||||||
return []
|
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):
|
for i, r in enumerate(roles):
|
||||||
params['role%d' % i] = r
|
params['role%d' % i] = r
|
||||||
cond = ("status='human_pending' AND assignee_role IN (%s)" % ph)
|
cond = ("status='human_pending' AND assignee_role IN (%s)" % ph)
|
||||||
|
|||||||
@ -40,7 +40,7 @@ async def list_ticket_todos(user_id, roles=None, limit=100):
|
|||||||
conds.append("(assignee_id=${u}$ AND status='human_processing')")
|
conds.append("(assignee_id=${u}$ AND status='human_processing')")
|
||||||
# ③ 角色池视角:待认领且受理角色∈我的角色
|
# ③ 角色池视角:待认领且受理角色∈我的角色
|
||||||
if roles:
|
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):
|
for i, r in enumerate(roles):
|
||||||
params['r%d' % i] = r
|
params['r%d' % i] = r
|
||||||
conds.append("(status='human_pending' AND assignee_role IN (%s))" % ph)
|
conds.append("(status='human_pending' AND assignee_role IN (%s))" % ph)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user