Skip to content

Commit f6f772e

Browse files
committed
[IMP] util/records: use format_query
Avoid direct formatting and old-stye param expansion. closes #230 Signed-off-by: Christophe Simonis (chs) <[email protected]>
1 parent d8ead01 commit f6f772e

File tree

1 file changed

+43
-28
lines changed

1 file changed

+43
-28
lines changed

src/util/records.py

+43-28
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
from .orm import env, flush
3838
from .pg import (
3939
PGRegexp,
40+
SQLStr,
4041
_get_unique_indexes_with,
4142
_validate_table,
4243
column_exists,
@@ -1654,28 +1655,36 @@ def replace_record_references_batch(cr, id_mapping, model_src, model_dst=None, r
16541655
continue
16551656
res_model_upd = []
16561657
if ir.res_model:
1657-
res_model_upd.append('"{ir.res_model}" = %(model_dst)s')
1658+
res_model_upd.append(format_query(cr, "{} = %(model_dst)s", ir.res_model))
16581659
if ir.res_model_id:
1659-
res_model_upd.append('"{ir.res_model_id}" = %(model_dest_id)s')
1660-
upd = ", ".join(res_model_upd).format(ir=ir)
1661-
res_model_whr = " AND ".join(res_model_upd).format(ir=ir)
1662-
whr = ir.model_filter(placeholder="%(model_src)s")
1660+
res_model_upd.append(format_query(cr, "{} = %(model_dest_id)s", ir.res_model_id))
1661+
upd = SQLStr(", ".join(res_model_upd))
1662+
res_model_whr = SQLStr(" AND ".join(res_model_upd))
1663+
whr = ir.model_filter(placeholder="%(model_src)s", prefix="t.")
16631664

16641665
if not id_update:
1665-
jmap_expr = "true" # no-op
1666-
jmap_expr_upd = ""
1666+
jmap_expr = SQLStr("true") # no-op
1667+
jmap_expr_upd = SQLStr("")
16671668
else:
1668-
jmap_expr = '"{ir.res_id}" = _upgrade_rrr.new'.format(ir=ir)
1669-
jmap_expr_upd = ", " + jmap_expr
1669+
jmap_expr = format_query(cr, "{} = _upgrade_rrr.new", ir.res_id)
1670+
jmap_expr_upd = SQLStr(", " + jmap_expr)
16701671

1671-
query = """
1672-
UPDATE "{ir.table}" t
1672+
query = format_query(
1673+
cr,
1674+
"""
1675+
UPDATE {table} t
16731676
SET {upd}
16741677
{jmap_expr_upd}
16751678
FROM _upgrade_rrr
16761679
WHERE {whr}
1677-
AND _upgrade_rrr.old = {ir.res_id}
1678-
"""
1680+
AND _upgrade_rrr.old = t.{res_id}
1681+
""",
1682+
table=ir.table,
1683+
res_id=ir.res_id,
1684+
whr=whr,
1685+
jmap_expr_upd=jmap_expr_upd,
1686+
upd=upd,
1687+
)
16791688

16801689
unique_indexes = []
16811690
if ir.res_model:
@@ -1687,24 +1696,30 @@ def replace_record_references_batch(cr, id_mapping, model_src, model_dst=None, r
16871696
for _, uniq_cols in unique_indexes:
16881697
uniq_cols = set(uniq_cols) - {ir.res_id, ir.res_model, ir.res_model_id} # noqa: PLW2901
16891698
conditions.append(
1690-
"""
1691-
NOT EXISTS(SELECT 1 FROM {ir.table} WHERE {res_model_whr} AND {jmap_expr} AND %(where_clause)s)
1692-
"""
1693-
% {
1694-
"where_clause": "AND".join('"%s"=t."%s"' % (col, col) for col in uniq_cols)
1699+
format_query(
1700+
cr,
1701+
"NOT EXISTS(SELECT 1 FROM {table} WHERE {res_model_whr} AND {jmap_expr} AND {where_clause})",
1702+
table=ir.table,
1703+
res_model_whr=res_model_whr,
1704+
jmap_expr=jmap_expr,
1705+
where_clause=SQLStr(" AND ".join(format_query(cr, "{0}=t.{0}", col) for col in uniq_cols))
16951706
if uniq_cols
1696-
else "True"
1697-
}
1707+
else SQLStr("True"),
1708+
)
16981709
)
1699-
query = """
1700-
%s
1701-
AND %s;
1702-
DELETE FROM {ir.table} USING _upgrade_rrr WHERE {whr} AND {ir.res_id} = _upgrade_rrr.old;
1703-
""" % (
1704-
query,
1705-
"AND".join(conditions),
1710+
query = format_query(
1711+
cr,
1712+
"""{prev_query} AND {cond};
1713+
1714+
DELETE FROM {table} t USING _upgrade_rrr WHERE {whr} AND t.{res_id} = _upgrade_rrr.old;
1715+
""",
1716+
prev_query=query,
1717+
cond=SQLStr("\nAND ".join(conditions)),
1718+
table=ir.table,
1719+
whr=whr,
1720+
res_id=ir.res_id,
17061721
)
1707-
cr.execute(query.format(**locals()), locals())
1722+
cr.execute(query, locals())
17081723
else:
17091724
fmt_query = cr.mogrify(query.format(**locals()), locals()).decode()
17101725
parallel_execute(cr, explode_query_range(cr, fmt_query, table=ir.table, alias="t"))

0 commit comments

Comments
 (0)