diff --git a/frappe/model/rename_doc.py b/frappe/model/rename_doc.py index 5e1f6e4276..95758ba51d 100644 --- a/frappe/model/rename_doc.py +++ b/frappe/model/rename_doc.py @@ -5,10 +5,10 @@ from typing import TYPE_CHECKING import frappe import frappe.permissions -from frappe import _, bold +from frappe import _, bold, scrub from frappe.model.document import Document from frappe.model.dynamic_links import get_dynamic_link_map -from frappe.model.naming import validate_name +from frappe.model.naming import is_autoincremented, validate_name from frappe.model.utils.user_settings import sync_user_settings, update_user_settings_data from frappe.query_builder import Field from frappe.utils.data import cint, cstr, sbool @@ -412,6 +412,11 @@ def rename_doctype(doctype: str, old: str, new: str) -> None: # change parenttype for fieldtype Table update_parenttype_values(old, new) + # if autoincrement is enabled, update sequence name + meta = frappe.get_meta(new) + if is_autoincremented(new, meta): + update_sequence_name(old, new) + def update_child_docs(old: str, new: str, meta: "Meta") -> None: # update "parent" @@ -656,6 +661,15 @@ def update_parenttype_values(old: str, new: str): frappe.qb.update(table).set(table.parenttype, new).where(table.parenttype == old).run() +def update_sequence_name(old: str, new: str, slug: str = "_id_seq"): + old_sequence_name = scrub(old + slug) + new_sequence_name = scrub(new + slug) + if frappe.db.db_type == "mariadb": + frappe.db.sql_ddl(f"RENAME TABLE `{old_sequence_name}` TO `{new_sequence_name}`") + else: + frappe.db.sql_ddl(f'ALTER SEQUENCE "{old_sequence_name}" RENAME TO "{new_sequence_name}"') + + def rename_dynamic_links(doctype: str, old: str, new: str): Singles = frappe.qb.DocType("Singles") for df in get_dynamic_link_map().get(doctype, []):