From 74d6ed32d69991ce7c1f100ea974771b2fdbf2cd Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 7 Sep 2021 17:40:55 +0530 Subject: [PATCH] test: add frappe.db.add_index --- frappe/database/mariadb/database.py | 4 +-- frappe/database/postgres/database.py | 2 +- frappe/tests/test_db.py | 40 ++++++++++++++++++++++++---- 3 files changed, 38 insertions(+), 8 deletions(-) diff --git a/frappe/database/mariadb/database.py b/frappe/database/mariadb/database.py index d4a119804b..71acefe17c 100644 --- a/frappe/database/mariadb/database.py +++ b/frappe/database/mariadb/database.py @@ -256,11 +256,11 @@ class MariaDBDatabase(Database): index_name=index_name )) - def add_index(self, doctype, fields, index_name=None): + def add_index(self, doctype: str, fields: List, index_name: str = None): """Creates an index with given fields if not already created. Index name will be `fieldname1_fieldname2_index`""" index_name = index_name or self.get_index_name(fields) - table_name = 'tab' + doctype + table_name = get_table_name(doctype) if not self.has_index(table_name, index_name): self.commit() self.sql("""ALTER TABLE `%s` diff --git a/frappe/database/postgres/database.py b/frappe/database/postgres/database.py index a40c48c4c8..264d3bbf14 100644 --- a/frappe/database/postgres/database.py +++ b/frappe/database/postgres/database.py @@ -258,7 +258,7 @@ class PostgresDatabase(Database): return self.sql("""SELECT 1 FROM pg_indexes WHERE tablename='{table_name}' and indexname='{index_name}' limit 1""".format(table_name=table_name, index_name=index_name)) - def add_index(self, doctype, fields, index_name=None): + def add_index(self, doctype: str, fields: List, index_name: str = None): """Creates an index with given fields if not already created. Index name will be `fieldname1_fieldname2_index`""" table_name = get_table_name(doctype) diff --git a/frappe/tests/test_db.py b/frappe/tests/test_db.py index 044ce455d9..741c355ad8 100644 --- a/frappe/tests/test_db.py +++ b/frappe/tests/test_db.py @@ -75,7 +75,7 @@ class TestDB(unittest.TestCase): frappe.db.set_value("Print Settings", "Print Settings", fieldname, inp["value"]) self.assertEqual(frappe.db.get_single_value("Print Settings", fieldname), inp["value"]) - #teardown + #teardown clear_custom_fields("Print Settings") def test_log_touched_tables(self): @@ -192,6 +192,7 @@ class TestDB(unittest.TestCase): frappe.delete_doc(test_doctype, doc) clear_custom_fields(test_doctype) + @run_only_if(db_type_is.MARIADB) class TestDDLCommandsMaria(unittest.TestCase): test_table_name = "TestNotes" @@ -200,7 +201,7 @@ class TestDDLCommandsMaria(unittest.TestCase): frappe.db.commit() frappe.db.sql( f""" - CREATE TABLE `tab{self.test_table_name}` (`id` INT NULL,PRIMARY KEY (`id`)); + CREATE TABLE `tab{self.test_table_name}` (`id` INT NULL, content TEXT, PRIMARY KEY (`id`)); """ ) @@ -225,7 +226,10 @@ class TestDDLCommandsMaria(unittest.TestCase): def test_describe(self) -> None: self.assertEqual( - (("id", "int(11)", "NO", "PRI", None, ""),), + ( + ("id", "int(11)", "NO", "PRI", None, ""), + ("content", "text", "YES", "", None, ""), + ), frappe.db.describe(self.test_table_name), ) @@ -235,6 +239,17 @@ class TestDDLCommandsMaria(unittest.TestCase): self.assertGreater(len(test_table_description), 0) self.assertIn("varchar(255)", test_table_description[0]) + def test_add_index(self) -> None: + index_name = "test_index" + frappe.db.add_index(self.test_table_name, ["id", "content(50)"], index_name) + indexs_in_table = frappe.db.sql( + f""" + SHOW INDEX FROM tab{self.test_table_name} + WHERE Key_name = '{index_name}'; + """ + ) + self.assertEquals(len(indexs_in_table), 2) + @run_only_if(db_type_is.POSTGRES) class TestDDLCommandsPost(unittest.TestCase): @@ -243,7 +258,7 @@ class TestDDLCommandsPost(unittest.TestCase): def setUp(self) -> None: frappe.db.sql( f""" - CREATE TABLE "tab{self.test_table_name}" ("id" INT NULL,PRIMARY KEY ("id")) + CREATE TABLE "tab{self.test_table_name}" ("id" INT NULL, content text, PRIMARY KEY ("id")) """ ) @@ -268,7 +283,9 @@ class TestDDLCommandsPost(unittest.TestCase): self.test_table_name = new_table_name def test_describe(self) -> None: - self.assertEqual([("id",)], frappe.db.describe(self.test_table_name)) + self.assertEqual( + [("id",), ("content",)], frappe.db.describe(self.test_table_name) + ) def test_change_type(self) -> None: frappe.db.change_column_type(self.test_table_name, "id", "varchar(255)") @@ -286,3 +303,16 @@ class TestDDLCommandsPost(unittest.TestCase): ) self.assertGreater(len(check_change), 0) self.assertIn("character varying", check_change[0]) + + def test_add_index(self) -> None: + index_name = "test_index" + frappe.db.add_index(self.test_table_name, ["id", "content(50)"], index_name) + indexs_in_table = frappe.db.sql( + f""" + SELECT indexname + FROM pg_indexes + WHERE tablename = 'tab{self.test_table_name}' + AND indexname = '{index_name}' ; + """, + ) + self.assertEquals(len(indexs_in_table), 1)