From e5eca8232fabec8c602adfc1c61b3c1ab1892dae Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Wed, 26 Jan 2022 17:47:30 +0530 Subject: [PATCH] fix: dont auto drop manually created index on text types (#15739) --- frappe/database/schema.py | 4 ++-- frappe/tests/test_db_update.py | 8 +++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/frappe/database/schema.py b/frappe/database/schema.py index 1767f90af0..9a6dd502dc 100644 --- a/frappe/database/schema.py +++ b/frappe/database/schema.py @@ -222,7 +222,7 @@ class DbColumn: # unique if ((self.unique and not current_def['unique']) and column_type not in ('text', 'longtext')): self.table.add_unique.append(self) - elif (current_def['unique'] and not self.unique): + elif (current_def['unique'] and not self.unique) and column_type not in ('text', 'longtext'): self.table.drop_unique.append(self) # default @@ -233,7 +233,7 @@ class DbColumn: self.table.set_default.append(self) # index should be applied or dropped irrespective of type change - if (current_def['index'] and not self.set_index): + if (current_def['index'] and not self.set_index) and column_type not in ('text', 'longtext'): self.table.drop_index.append(self) elif (not current_def['index'] and self.set_index) and not (column_type in ('text', 'longtext')): diff --git a/frappe/tests/test_db_update.py b/frappe/tests/test_db_update.py index 74254718e6..d2c54ef18c 100644 --- a/frappe/tests/test_db_update.py +++ b/frappe/tests/test_db_update.py @@ -80,6 +80,12 @@ class TestDBUpdate(unittest.TestCase): self.assertFalse(restrict_ip_in_table.index) self.assertTrue(restrict_ip_in_table.unique) + # explicitly make a text index + frappe.db.add_index(doctype, ["email_signature(200)"]) + frappe.db.updatedb(doctype) + email_sig_column = get_table_column("User", "email_signature") + self.assertEqual(email_sig_column.index, 1) + def get_fieldtype_from_def(field_def): fieldtuple = frappe.db.type_map.get(field_def.fieldtype, ('', 0)) fieldtype = fieldtuple[0] @@ -119,4 +125,4 @@ def get_other_fields_meta(meta): def get_table_column(doctype, fieldname): table_columns = frappe.db.get_table_columns_description('tab{}'.format(doctype)) - return find(table_columns, lambda d: d.get('name') == fieldname) \ No newline at end of file + return find(table_columns, lambda d: d.get('name') == fieldname)