From 031aad0d8524db5725a0fe4d43cb73d29a949c4e Mon Sep 17 00:00:00 2001 From: Suraj Shetty Date: Wed, 29 Apr 2020 12:28:08 +0530 Subject: [PATCH 1/5] perf: Cache get_tables values - To avoid redundant db calls --- frappe/database/database.py | 11 ++++++++++- frappe/database/schema.py | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/frappe/database/database.py b/frappe/database/database.py index b083ff1014..cc76745c2e 100644 --- a/frappe/database/database.py +++ b/frappe/database/database.py @@ -769,7 +769,16 @@ class Database(object): return ("tab" + doctype) in self.get_tables() def get_tables(self): - return [d[0] for d in self.sql("select table_name from information_schema.tables where table_schema not in ('pg_catalog', 'information_schema')")] + tables = frappe.cache().get_value('db_tables') + if not tables: + table_rows = self.sql(""" + SELECT table_name + FROM information_schema.tables + WHERE table_schema NOT IN ('pg_catalog', 'information_schema') + """) + tables = set([d[0] for d in table_rows]) + frappe.cache().set_value('db_tables', tables) + return tables def a_row_exists(self, doctype): """Returns True if atleast one row exists.""" diff --git a/frappe/database/schema.py b/frappe/database/schema.py index 28e055f382..3d484a1f1b 100644 --- a/frappe/database/schema.py +++ b/frappe/database/schema.py @@ -31,6 +31,7 @@ class DBTable: def sync(self): if self.is_new(): + frappe.cache().delete_key('db_tables') self.create() else: frappe.cache().hdel('table_columns', self.table_name) From 651109bb004fa9edd9a400358b1db7e6ffed3019 Mon Sep 17 00:00:00 2001 From: Suraj Shetty Date: Wed, 29 Apr 2020 14:07:51 +0530 Subject: [PATCH 2/5] fix: Translatable string --- frappe/database/schema.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/frappe/database/schema.py b/frappe/database/schema.py index 3d484a1f1b..9c7008a8ed 100644 --- a/frappe/database/schema.py +++ b/frappe/database/schema.py @@ -144,10 +144,9 @@ class DBTable: if max_length and max_length[0][0] and max_length[0][0] > new_length: if col.fieldname in self.columns: self.columns[col.fieldname].length = current_length - - frappe.msgprint(_("""Reverting length to {0} for '{1}' in '{2}'; - Setting the length as {3} will cause truncation of data.""") - .format(current_length, col.fieldname, self.doctype, new_length)) + info_message = _("Reverting length to {0} for '{1}' in '{2}'. Setting the length as {3} will cause truncation of data.") \ + .format(current_length, col.fieldname, self.doctype, new_length) + frappe.msgprint(info_message) def is_new(self): return self.table_name not in frappe.db.get_tables() From bf3a80f05de7fc9dbcf41d2199d71c832cbc5148 Mon Sep 17 00:00:00 2001 From: Suraj Shetty Date: Wed, 29 Apr 2020 14:39:14 +0530 Subject: [PATCH 3/5] fix: Directly used set comprehension As indicated by deepsource --- frappe/database/database.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/database/database.py b/frappe/database/database.py index cc76745c2e..103538944c 100644 --- a/frappe/database/database.py +++ b/frappe/database/database.py @@ -776,7 +776,7 @@ class Database(object): FROM information_schema.tables WHERE table_schema NOT IN ('pg_catalog', 'information_schema') """) - tables = set([d[0] for d in table_rows]) + tables = set(d[0] for d in table_rows) frappe.cache().set_value('db_tables', tables) return tables From a73be732fd55d1ba8a2952ab9043530a8ef2ad75 Mon Sep 17 00:00:00 2001 From: Suraj Shetty <13928957+surajshetty3416@users.noreply.github.com> Date: Wed, 29 Apr 2020 16:43:01 +0530 Subject: [PATCH 4/5] refactor: Fix redundant cache value set --- frappe/database/database.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/database/database.py b/frappe/database/database.py index 103538944c..3092e6c0ae 100644 --- a/frappe/database/database.py +++ b/frappe/database/database.py @@ -777,7 +777,7 @@ class Database(object): WHERE table_schema NOT IN ('pg_catalog', 'information_schema') """) tables = set(d[0] for d in table_rows) - frappe.cache().set_value('db_tables', tables) + frappe.cache().set_value('db_tables', tables) return tables def a_row_exists(self, doctype): From 2f821f9c2d27834142e1f89bbedbee9874c355c2 Mon Sep 17 00:00:00 2001 From: "Chinmay D. Pai" Date: Wed, 29 Apr 2020 21:58:00 +0530 Subject: [PATCH 5/5] chore: fix deepsource issues * use set comprehension instead of generator * remove redundant else statement Signed-off-by: Chinmay D. Pai --- frappe/database/database.py | 2 +- frappe/database/schema.py | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/frappe/database/database.py b/frappe/database/database.py index 3092e6c0ae..364f0c73cd 100644 --- a/frappe/database/database.py +++ b/frappe/database/database.py @@ -776,7 +776,7 @@ class Database(object): FROM information_schema.tables WHERE table_schema NOT IN ('pg_catalog', 'information_schema') """) - tables = set(d[0] for d in table_rows) + tables = {d[0] for d in table_rows} frappe.cache().set_value('db_tables', tables) return tables diff --git a/frappe/database/schema.py b/frappe/database/schema.py index 9c7008a8ed..83c22090eb 100644 --- a/frappe/database/schema.py +++ b/frappe/database/schema.py @@ -138,8 +138,7 @@ class DBTable: if frappe.db.is_missing_column(e): # Unknown column 'column_name' in 'field list' continue - else: - raise + raise if max_length and max_length[0][0] and max_length[0][0] > new_length: if col.fieldname in self.columns: