perf: use estimated rows instead of actual rows (#38830)
diff --git a/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py b/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py
index 176a215..7f2608e 100644
--- a/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py
+++ b/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py
@@ -4,7 +4,7 @@
import frappe
from frappe import _
-from frappe.utils import cint, flt, getdate
+from frappe.utils import cint, flt, get_table_name, getdate
from frappe.utils.deprecations import deprecated
from pypika import functions as fn
@@ -13,11 +13,22 @@
SLE_COUNT_LIMIT = 10_000
+def _estimate_table_row_count(doctype: str):
+ table = get_table_name(doctype)
+ return cint(
+ frappe.db.sql(
+ f"""select table_rows
+ from information_schema.tables
+ where table_name = '{table}' ;"""
+ )[0][0]
+ )
+
+
def execute(filters=None):
if not filters:
filters = {}
- sle_count = frappe.db.count("Stock Ledger Entry")
+ sle_count = _estimate_table_row_count("Stock Ledger Entry")
if sle_count > SLE_COUNT_LIMIT and not filters.get("item_code") and not filters.get("warehouse"):
frappe.throw(_("Please select either the Item or Warehouse filter to generate the report."))