diff --git a/frappe/query_builder/utils.py b/frappe/query_builder/utils.py index d8e5698e66..e2276e15c0 100644 --- a/frappe/query_builder/utils.py +++ b/frappe/query_builder/utils.py @@ -11,7 +11,6 @@ class db_type(Enum): MARIADB = "mariadb" POSTGRES = "postgres" - class ImportMapper: def __init__(self, func_map: Dict[db_type, Callable]) -> None: self.func_map = func_map @@ -32,7 +31,7 @@ def get_query_builder(type_of_db: Optional[str]) -> Query: Returns: Query: [Query object] """ - db = db_type["MARIADB"] + db = db_type.MARIADB if type_of_db: db = db_type(type_of_db) selecter = {db_type.MARIADB: MariaDB, db_type.POSTGRES: Postgres} diff --git a/frappe/tests/test_query_builder.py b/frappe/tests/test_query_builder.py new file mode 100644 index 0000000000..6cbd3b2950 --- /dev/null +++ b/frappe/tests/test_query_builder.py @@ -0,0 +1,35 @@ +import unittest +from typing import Callable + +import frappe +from frappe.query_builder.functions import GroupConcat, Match +from frappe.query_builder.utils import db_type + + +def CheckDB(dbtype: db_type) -> Callable: + return unittest.skipIf( + db_type(frappe.conf.db_type) != dbtype, f"Only runs for{db_type}" + ) + +@CheckDB(dbtype=db_type.MARIADB) +class TestCustomFunctionsMariaDB(unittest.TestCase): + def test_concat(self): + self.assertEqual("GROUP_CONCAT('Notes')", GroupConcat("Notes").get_sql()) + + def test_match(self): + query = Match("Notes").Against("text") + self.assertEqual( + " MATCH('Notes') AGAINST ('+text*' IN BOOLEAN MODE)", query.get_sql() + ) + + +@CheckDB(dbtype=db_type.POSTGRES) +class TestCustomFunctionsPostgres(unittest.TestCase): + def test_concat(self): + self.assertEqual("STRING_AGG('Notes',',')", GroupConcat("Notes").get_sql()) + + def test_match(self): + query = Match("Notes").Against("text") + self.assertEqual( + "TO_TSVECTOR('Notes') @@ PLAINTO_TSQUERY('text')", query.get_sql() + )