From f0197d35d6cff2076353753f2ed6ad7bb35ff399 Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Fri, 4 Nov 2022 15:40:58 +0530 Subject: [PATCH] refactor: qb builder class identification --- frappe/query_builder/builder.py | 4 ++++ frappe/query_builder/utils.py | 3 +-- frappe/tests/test_query_builder.py | 8 -------- 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/frappe/query_builder/builder.py b/frappe/query_builder/builder.py index 60d0a1208d..5a7b06221f 100644 --- a/frappe/query_builder/builder.py +++ b/frappe/query_builder/builder.py @@ -47,6 +47,8 @@ class Base: class MariaDB(Base, MySQLQuery): Field = terms.Field + _BuilderClasss = MySQLQueryBuilder + @classmethod def _builder(cls, *args, **kwargs) -> "MySQLQueryBuilder": return super()._builder(*args, wrapper_cls=ParameterizedValueWrapper, **kwargs) @@ -70,6 +72,8 @@ class Postgres(Base, PostgreSQLQuery): # they are two different objects. The quick fix used here is to replace the # Field names in the "Field" function. + _BuilderClasss = PostgreSQLQueryBuilder + @classmethod def _builder(cls, *args, **kwargs) -> "PostgreSQLQueryBuilder": return super()._builder(*args, wrapper_cls=ParameterizedValueWrapper, **kwargs) diff --git a/frappe/query_builder/utils.py b/frappe/query_builder/utils.py index f0130ca813..d3a4935382 100644 --- a/frappe/query_builder/utils.py +++ b/frappe/query_builder/utils.py @@ -102,8 +102,7 @@ def patch_query_execute(): raise frappe.PermissionError("Only SELECT SQL allowed in scripting") return query, param_collector.get_parameters() - query_class = get_attr(str(frappe.qb).split("'")[1]) - builder_class = get_type_hints(query_class._builder).get("return") + builder_class = frappe.qb._BuilderClasss if not builder_class: raise BuilderIdentificationFailed diff --git a/frappe/tests/test_query_builder.py b/frappe/tests/test_query_builder.py index b80e3ad8e2..d05c8d7d02 100644 --- a/frappe/tests/test_query_builder.py +++ b/frappe/tests/test_query_builder.py @@ -373,11 +373,3 @@ class TestMisc(FrappeTestCase): DocType = Table("DocType") self.assertEqual(DocType.get_sql(), "DocType") - - def test_error_on_query_class(self): - import frappe.query_builder.utils - - frappe.query_builder.utils.get_type_hints = lambda x: {"return": None} - - with self.assertRaises(frappe.query_builder.utils.BuilderIdentificationFailed): - frappe.query_builder.utils.patch_query_execute()