@@ -40,13 +40,7 @@ def make_index_name(table_name, column_name):
4040from .const import ENVIRON
4141from .domains import _adapt_one_domain , _replace_path , _valid_path_to , adapt_domains
4242from .exceptions import SleepyDeveloperError
43- from .helpers import (
44- _dashboard_actions ,
45- _remove_export_lines ,
46- _validate_model ,
47- resolve_model_fields_path ,
48- table_of_model ,
49- )
43+ from .helpers import _dashboard_actions , _validate_model , resolve_model_fields_path , table_of_model
5044from .inherit import for_each_inherit
5145from .misc import SelfPrintEvalContext , log_progress , version_gte
5246from .orm import env , invalidate
@@ -63,6 +57,7 @@ def make_index_name(table_name, column_name):
6357 savepoint ,
6458 table_exists ,
6559)
60+ from .records import _remove_import_export_paths
6661from .report import add_to_migration_reports , get_anchor_link_to_record
6762
6863# python3 shims
@@ -208,8 +203,7 @@ def clean_context(context):
208203 [(fieldname , fieldname + " desc" ), model , r"\y{}\y" .format (fieldname )],
209204 )
210205
211- # ir.exports.line
212- _remove_export_lines (cr , model , fieldname )
206+ _remove_import_export_paths (cr , model , fieldname )
213207
214208 def adapter (leaf , is_or , negated ):
215209 # replace by TRUE_LEAF, unless negated or in a OR operation but not negated
@@ -969,6 +963,54 @@ def update_field_references(cr, old, new, only_models=None, domain_adapter=None,
969963 return _update_field_usage_multi (cr , models , old , new , domain_adapter = domain_adapter , skip_inherit = skip_inherit )
970964
971965
966+ def _update_impex_renamed_fields_paths (cr , old_field_name , new_field_name , only_models ):
967+ export_q = cr .mogrify (
968+ """
969+ SELECT el.id,
970+ e.resource,
971+ STRING_TO_ARRAY(el.name, '/')
972+ FROM ir_exports_line el
973+ JOIN ir_exports e
974+ ON el.export_id = e.id
975+ WHERE el.name ~ %s
976+ """ ,
977+ [r"\y{}\y" .format (old_field_name )],
978+ ).decode ()
979+ impex_data = [(export_q , "ir_exports_line" , "name" )]
980+ if table_exists (cr , "base_import_mapping" ):
981+ import_q = cr .mogrify (
982+ """
983+ SELECT id,
984+ res_model,
985+ STRING_TO_ARRAY(field_name, '/')
986+ FROM base_import_mapping
987+ WHERE field_name ~ %s
988+ """ ,
989+ [r"\y{}\y" .format (old_field_name )],
990+ ).decode ()
991+ impex_data .append ((import_q , "base_import_mapping" , "field_name" ))
992+
993+ for query , table , column in impex_data :
994+ cr .execute (query )
995+ if not cr .rowcount :
996+ continue
997+ fixed_paths = {}
998+ for record_id , related_model , path in cr .fetchall ():
999+ new_path = [
1000+ new_field_name
1001+ if field .field_name == old_field_name and field .field_model in only_models
1002+ else field .field_name
1003+ for field in resolve_model_fields_path (cr , related_model , path )
1004+ ]
1005+ if len (new_path ) == len (path ) and new_path != path :
1006+ fixed_paths [record_id ] = "/" .join (new_path )
1007+ if fixed_paths :
1008+ cr .execute (
1009+ format_query (cr , "UPDATE {} SET {} = (%s::jsonb)->>(id::text) WHERE id IN %s" , table , column ),
1010+ [Json (fixed_paths ), tuple (fixed_paths )],
1011+ )
1012+
1013+
9721014def _update_field_usage_multi (cr , models , old , new , domain_adapter = None , skip_inherit = ()):
9731015 assert models
9741016 only_models = None if models == "*" else tuple (models )
@@ -1079,33 +1121,9 @@ def _update_field_usage_multi(cr, models, old, new, domain_adapter=None, skip_in
10791121 """
10801122 cr .execute (q .format (col_prefix = col_prefix ), p )
10811123
1082- # ir.exports.line
1124+ # ir.exports.line, base_import.mapping # noqa
10831125 if only_models :
1084- cr .execute (
1085- """
1086- SELECT el.id,
1087- e.resource,
1088- STRING_TO_ARRAY(el.name, '/')
1089- FROM ir_exports_line el
1090- JOIN ir_exports e
1091- ON el.export_id = e.id
1092- WHERE el.name ~ %s
1093- """ ,
1094- [r"\y{}\y" .format (old )],
1095- )
1096- fixed_lines_paths = {}
1097- for line_id , line_model , line_path in cr .fetchall ():
1098- new_path = [
1099- new if x .field_name == old and x .field_model in only_models else x .field_name
1100- for x in resolve_model_fields_path (cr , line_model , line_path )
1101- ]
1102- if len (new_path ) == len (line_path ) and new_path != line_path :
1103- fixed_lines_paths [line_id ] = "/" .join (new_path )
1104- if fixed_lines_paths :
1105- cr .execute (
1106- "UPDATE ir_exports_line SET name = (%s::jsonb)->>(id::text) WHERE id IN %s" ,
1107- [Json (fixed_lines_paths ), tuple (fixed_lines_paths )],
1108- )
1126+ _update_impex_renamed_fields_paths (cr , old , new , only_models )
11091127
11101128 # mail.alias
11111129 if column_exists (cr , "mail_alias" , "alias_defaults" ):
0 commit comments