diff --git a/frappe/database/database.py b/frappe/database/database.py index 0c7fe76a39..b30be49437 100644 --- a/frappe/database/database.py +++ b/frappe/database/database.py @@ -389,15 +389,15 @@ class Database: """Wrap the object with str to generate mogrified query.""" return LazyMogrify(query, values) - def explain_query(self, query, values=None): + def explain_query(self, query, values=EmptyQueryValues): """Print `EXPLAIN` in error log.""" frappe.log("--- query explain ---") try: - self._cursor.execute(f"EXPLAIN {query}", values) + results = self.sql(f"EXPLAIN {query}", values, as_dict=1) except Exception as e: frappe.log(f"error in query explain: {e}") else: - frappe.log(json.dumps(self.fetch_as_dict(), indent=1)) + frappe.log(json.dumps(results, indent=1)) frappe.log("--- query explain end ---") def sql_list(self, query, values=(), debug=False, **kwargs): diff --git a/frappe/tests/test_db.py b/frappe/tests/test_db.py index 6beb96860f..9469abb6b7 100644 --- a/frappe/tests/test_db.py +++ b/frappe/tests/test_db.py @@ -618,6 +618,9 @@ class TestDB(FrappeTestCase): self.assertEqual(order_of_execution, list(range(0, 9))) + def test_db_explain(self): + frappe.db.sql("select 1", debug=1, explain=1) + @run_only_if(db_type_is.MARIADB) class TestDDLCommandsMaria(FrappeTestCase):