37
37
from .orm import env , flush
38
38
from .pg import (
39
39
PGRegexp ,
40
+ SQLStr ,
40
41
_get_unique_indexes_with ,
41
42
_validate_table ,
42
43
column_exists ,
@@ -1654,28 +1655,36 @@ def replace_record_references_batch(cr, id_mapping, model_src, model_dst=None, r
1654
1655
continue
1655
1656
res_model_upd = []
1656
1657
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 ) )
1658
1659
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." )
1663
1664
1664
1665
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 ( "" )
1667
1668
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 )
1670
1671
1671
- query = """
1672
- UPDATE "{ir.table}" t
1672
+ query = format_query (
1673
+ cr ,
1674
+ """
1675
+ UPDATE {table} t
1673
1676
SET {upd}
1674
1677
{jmap_expr_upd}
1675
1678
FROM _upgrade_rrr
1676
1679
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
+ )
1679
1688
1680
1689
unique_indexes = []
1681
1690
if ir .res_model :
@@ -1687,24 +1696,30 @@ def replace_record_references_batch(cr, id_mapping, model_src, model_dst=None, r
1687
1696
for _ , uniq_cols in unique_indexes :
1688
1697
uniq_cols = set (uniq_cols ) - {ir .res_id , ir .res_model , ir .res_model_id } # noqa: PLW2901
1689
1698
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 ))
1695
1706
if uniq_cols
1696
- else "True"
1697
- }
1707
+ else SQLStr ( "True" ),
1708
+ )
1698
1709
)
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 ,
1706
1721
)
1707
- cr .execute (query . format ( ** locals ()) , locals ())
1722
+ cr .execute (query , locals ())
1708
1723
else :
1709
1724
fmt_query = cr .mogrify (query .format (** locals ()), locals ()).decode ()
1710
1725
parallel_execute (cr , explode_query_range (cr , fmt_query , table = ir .table , alias = "t" ))
0 commit comments