diff --git a/frappe/__init__.py b/frappe/__init__.py index cf29b45fd1..55813cd4cb 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -353,6 +353,9 @@ def connect_replica() -> bool: local.primary_db = local.db local.db = local.replica_db + if hasattr(frappe.local, "_recorder"): + frappe.local._recorder._patch_sql(local.db) + return True diff --git a/frappe/recorder.py b/frappe/recorder.py index 6247eb3ec2..c13535e08b 100644 --- a/frappe/recorder.py +++ b/frappe/recorder.py @@ -183,6 +183,7 @@ def record(force=False): flag_value = frappe.client_cache.get_value(RECORDER_INTERCEPT_FLAG) if flag_value or force: frappe.local._recorder = Recorder(force=force) + return frappe.local._recorder elif flag_value is None: # Explicitly set it once so next requests can use client-side cache frappe.client_cache.set_value(RECORDER_INTERCEPT_FLAG, False) @@ -233,8 +234,7 @@ class Recorder: self.uuid = frappe.generate_hash(length=10) self.time = now_datetime() - if self.config.record_sql: - self._patch_sql(frappe.db) + self._patch_sql(frappe.db) if self.config.profile: self.profiler = cProfile.Profile() @@ -283,10 +283,12 @@ class Recorder: request_data["profile"] = profiler_output frappe.cache.hset(RECORDER_REQUEST_HASH, self.uuid, request_data) - if self.config.record_sql: - self._unpatch_sql() + self._unpatch_sql() def _patch_sql(self, db: "Database"): + if not self.config.record_sql: + return + frappe.db._sql = frappe.db.sql frappe.db.sql = record_sql self.patched_databases.append(db) @@ -391,8 +393,7 @@ def record_queries(func: Callable): @functools.wraps(func) def wrapped(*args, **kwargs): - record(force=True) - recorder = frappe.local._recorder + recorder = record(force=True) recorder.path = f"Function call: {func.__module__}.{func.__qualname__}" ret = func(*args, **kwargs) dump()