fix: rename autoincrement sequence on doctype rename (#37578)

* fix: rename sequence on doctype rename

* fix: only rename sequence for autoincrement doctypes
This commit is contained in:
Safwan 2026-02-27 17:08:30 +05:30 committed by GitHub
parent d7f7618039
commit 05854a5803
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -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, []):