diff --git a/frappe/core/doctype/doctype/test_doctype.py b/frappe/core/doctype/doctype/test_doctype.py index 464996d3e9..8a481eb11f 100644 --- a/frappe/core/doctype/doctype/test_doctype.py +++ b/frappe/core/doctype/doctype/test_doctype.py @@ -10,6 +10,7 @@ import frappe from frappe.cache_manager import clear_doctype_cache from frappe.core.doctype.doctype.doctype import ( CannotIndexedError, + DocType, DoctypeLinkError, HiddenAndMandatoryWithoutDefaultError, IllegalMandatoryError, @@ -782,7 +783,7 @@ def new_doctype( custom: bool = True, default: str | None = None, **kwargs, -): +) -> "DocType": if not name: # Test prefix is required to avoid coverage name = "Test " + "".join(random.sample(string.ascii_lowercase, 10)) diff --git a/frappe/model/base_document.py b/frappe/model/base_document.py index 3a7520fd1c..dbda0133d7 100644 --- a/frappe/model/base_document.py +++ b/frappe/model/base_document.py @@ -983,6 +983,9 @@ class BaseDocument: self.throw_length_exceeded_error(df, max_length, value) elif column_type in ("int", "bigint", "smallint"): + if cint(df.get("length")) > 11: # We implicitl switch to bigint for >11 + column_type = "bigint" + max_length = max_positive_value[column_type] if abs(cint(value)) > max_length: diff --git a/frappe/tests/test_db_update.py b/frappe/tests/test_db_update.py index 68a22e0de2..a6f6a095dd 100644 --- a/frappe/tests/test_db_update.py +++ b/frappe/tests/test_db_update.py @@ -99,6 +99,16 @@ class TestDBUpdate(FrappeTestCase): len(indexes), 1, msg=f"There should be 1 index on {doctype}.{field}, found {indexes}" ) + def test_bigint_conversion(self): + doctype = new_doctype(fields=[{"fieldname": "int_field", "fieldtype": "Int"}]).insert() + + with self.assertRaises(frappe.CharacterLengthExceededError): + frappe.get_doc(doctype=doctype.name, int_field=2**62 - 1).insert() + + doctype.fields[0].length = 14 + doctype.save() + frappe.get_doc(doctype=doctype.name, int_field=2**62 - 1).insert() + @run_only_if(db_type_is.MARIADB) def test_unique_index_on_install(self): """Only one unique index should be added"""