From f642b1881f33c2b8a82e2c6466681dce4c923eb3 Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Wed, 20 Mar 2024 14:19:29 +0530 Subject: [PATCH] fix: invalid select star expansions --- frappe/desk/reportview.py | 2 +- frappe/model/db_query.py | 2 +- frappe/tests/test_db_query.py | 5 +++++ frappe/tests/test_reportview.py | 6 ++---- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/frappe/desk/reportview.py b/frappe/desk/reportview.py index a4a86d517c..86dfccd47c 100644 --- a/frappe/desk/reportview.py +++ b/frappe/desk/reportview.py @@ -199,7 +199,7 @@ def extract_fieldnames(field): if not columns: f = field.lower() - if "count(" in f or "sum(" in f or "avg(" in f: + if ("count(" in f or "sum(" in f or "avg(" in f) and "*" in f: return ["*"] return columns diff --git a/frappe/model/db_query.py b/frappe/model/db_query.py index 98b697b51f..f1a36d79b2 100644 --- a/frappe/model/db_query.py +++ b/frappe/model/db_query.py @@ -641,7 +641,7 @@ class DatabaseQuery: continue column = columns[0] - if column == "*": + if column == "*" and "*" in field: if not in_function("*", field): asterisk_fields.append(i) continue diff --git a/frappe/tests/test_db_query.py b/frappe/tests/test_db_query.py index 8cd233431a..51df9d8983 100644 --- a/frappe/tests/test_db_query.py +++ b/frappe/tests/test_db_query.py @@ -1173,6 +1173,11 @@ class TestDBQuery(FrappeTestCase): data = get() self.assertEqual(len(data["values"]), 1) + def test_select_star_expansion(self): + count = frappe.get_list("Language", ["SUM(1)", "COUNT(*)"], as_list=1, order_by=None)[0] + self.assertEqual(count[0], frappe.db.count("Language")) + self.assertEqual(count[1], frappe.db.count("Language")) + class TestReportView(FrappeTestCase): @run_only_if(db_type_is.MARIADB) # TODO: postgres name casting is messed up diff --git a/frappe/tests/test_reportview.py b/frappe/tests/test_reportview.py index 98dc3a84e5..5224ca9414 100644 --- a/frappe/tests/test_reportview.py +++ b/frappe/tests/test_reportview.py @@ -68,10 +68,6 @@ class TestReportview(FrappeTestCase): self.assertEqual(extract_fieldnames("COUNT(*) AS count")[0], "*") - self.assertEqual(extract_fieldnames("COUNT(1) AS count")[0], "*") - - self.assertEqual(extract_fieldnames("COUNT(1) AS count, SUM(1) AS sum")[0], "*") - self.assertEqual( extract_fieldnames("first_name + ' ' + last_name AS full_name"), ["first_name", "last_name"] ) @@ -89,3 +85,5 @@ class TestReportview(FrappeTestCase): self.assertEqual(extract_fieldnames("tablefield.fiedname")[0], "tablefield.fiedname") self.assertEqual(extract_fieldnames("`tabChild DocType`.`fiedname`")[0], "tabChild DocType.fiedname") + + self.assertEqual(extract_fieldnames("sum(1)"), [])