From 86f70b9e985bb8039adb6b123b562cf8a23d60a7 Mon Sep 17 00:00:00 2001 From: David Arnold Date: Tue, 22 Oct 2024 21:33:48 +0200 Subject: [PATCH] chore: inline unnecessary indirection (#28250) --- frappe/database/database.py | 143 +++++++++++------------------------- frappe/database/query.py | 2 +- 2 files changed, 44 insertions(+), 101 deletions(-) diff --git a/frappe/database/database.py b/frappe/database/database.py index b0f43a5adc..fba34b499d 100644 --- a/frappe/database/database.py +++ b/frappe/database/database.py @@ -603,48 +603,43 @@ class Database: order_by = None if isinstance(filters, list): - out = self._get_value_for_many_names( - doctype=doctype, - names=filters, - field=fieldname, - order_by=order_by, - debug=debug, - run=run, - pluck=pluck, - distinct=distinct, - limit=limit, - as_dict=as_dict, - skip_locked=skip_locked, - wait=True, - for_update=for_update, - ) - + if filters := list(f for f in filters if f is not None): + out = frappe.qb.get_query( + table=doctype, + fields=fieldname, + filters=filters, + order_by=order_by, + distinct=distinct, + limit=limit, + validate_filters=True, + for_update=for_update, + skip_locked=skip_locked, + wait=True, + ).run(debug=debug, run=run, as_dict=as_dict, pluck=pluck) + else: + out = {} else: - fields = fieldname - if fieldname != "*": - if isinstance(fieldname, str): - fields = [fieldname] - if (filters is not None) and (filters != doctype or doctype == "DocType"): try: if order_by: order_by = "creation" if order_by == DefaultOrderBy else order_by - out = self._get_values_from_table( - fields=fields, + + query = frappe.qb.get_query( + table=doctype, filters=filters, - doctype=doctype, - as_dict=as_dict, - debug=debug, order_by=order_by, - update=update, - run=run, - pluck=pluck, - distinct=distinct, - limit=limit, for_update=for_update, skip_locked=skip_locked, wait=wait, + fields=fieldname, + distinct=distinct, + limit=limit, + validate_filters=True, ) + if isinstance(fieldname, str) and fieldname == "*": + as_dict = True + out = query.run(as_dict=as_dict, debug=debug, update=update, run=run, pluck=pluck) + except Exception as e: if ignore and ( frappe.db.is_missing_column(e) @@ -655,14 +650,29 @@ class Database: elif (not ignore) and frappe.db.is_table_missing(e): # table not found, look in singles out = self.get_values_from_single( - fields, filters, doctype, as_dict, debug, update, run=run, distinct=distinct + "*" if fieldname == "*" else [fieldname], + filters, + doctype, + as_dict, + debug, + update, + run=run, + distinct=distinct, ) else: raise else: out = self.get_values_from_single( - fields, filters, doctype, as_dict, debug, update, run=run, pluck=pluck, distinct=distinct + "*" if fieldname == "*" else [fieldname], + filters, + doctype, + as_dict, + debug, + update, + run=run, + pluck=pluck, + distinct=distinct, ) if cache and cache_key: @@ -869,73 +879,6 @@ class Database: """Alias for get_single_value""" return self.get_single_value(*args, **kwargs) - def _get_values_from_table( - self, - fields, - filters, - doctype, - as_dict, - *, - debug=False, - order_by=None, - update=None, - for_update=False, - skip_locked=False, - wait=True, - run=True, - pluck=False, - distinct=False, - limit=None, - ): - query = frappe.qb.get_query( - table=doctype, - filters=filters, - order_by=order_by, - for_update=for_update, - skip_locked=skip_locked, - wait=wait, - fields=fields, - distinct=distinct, - limit=limit, - validate_filters=True, - ) - if isinstance(fields, str) and fields == "*": - as_dict = True - - return query.run(as_dict=as_dict, debug=debug, update=update, run=run, pluck=pluck) - - def _get_value_for_many_names( - self, - doctype, - names, - field, - order_by, - *, - debug=False, - run=True, - pluck=False, - distinct=False, - limit=None, - as_dict=False, - for_update=False, - skip_locked=False, - wait=True, - ): - if names := list(filter(None, names)): - return frappe.qb.get_query( - doctype, - fields=field, - filters=names, - order_by=order_by, - distinct=distinct, - limit=limit, - validate_filters=True, - for_update=for_update, - skip_locked=skip_locked, - wait=wait, - ).run(debug=debug, run=run, as_dict=as_dict, pluck=pluck) - return {} - def set_value( self, dt: str, diff --git a/frappe/database/query.py b/frappe/database/query.py index 5248c9d5c1..0cdb09533c 100644 --- a/frappe/database/query.py +++ b/frappe/database/query.py @@ -34,7 +34,7 @@ class Engine: def get_query( self, table: str | Table, - fields: list | tuple | None = None, + fields: str | list | tuple | None = None, filters: dict[str, FilterValue] | FilterValue | list[list | FilterValue] | None = None, order_by: str | None = None, group_by: str | None = None,