3737from .orm import env , flush
3838from .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 ("\n AND " .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