perf: Patch qb only once - not on every init

This commit is contained in:
Gavin D'souza 2022-06-10 17:42:47 +05:30 committed by gavin
parent 3871fe6cd0
commit 64e5273764
2 changed files with 9 additions and 3 deletions

View file

@ -44,6 +44,7 @@ local = Local()
STANDARD_USERS = ("Guest", "Administrator")
_dev_server = int(sbool(os.environ.get("DEV_SERVER", False)))
_qb_patched = False
if _dev_server:
warnings.simplefilter("always", DeprecationWarning)
@ -236,8 +237,10 @@ def init(site, sites_path=None, new_site=False):
local.qb = get_query_builder(local.conf.db_type or "mariadb")
setup_module_map()
patch_query_execute()
patch_query_aggregation()
if not _qb_patched:
patch_query_execute()
patch_query_aggregation()
local.initialised = True

View file

@ -64,7 +64,6 @@ def patch_query_execute():
This excludes the use of `frappe.db.sql` method while
executing the query object
"""
from frappe.utils.safe_exec import check_safe_sql_query
def execute_query(query, *args, **kwargs):
query, params = prepare_query(query)
@ -73,6 +72,8 @@ def patch_query_execute():
def prepare_query(query):
import inspect
from frappe.utils.safe_exec import check_safe_sql_query
param_collector = NamedParameterWrapper()
query = query.get_sql(param_wrapper=param_collector)
if frappe.flags.in_safe_exec and not check_safe_sql_query(query, throw=False):
@ -103,6 +104,7 @@ def patch_query_execute():
builder_class.run = execute_query
builder_class.walk = prepare_query
frappe._qb_patched = True
def patch_query_aggregation():
@ -113,3 +115,4 @@ def patch_query_aggregation():
frappe.qb.min = _min
frappe.qb.avg = _avg
frappe.qb.sum = _sum
frappe._qb_patched = True