Переглянути джерело

Merge branch 'set_value-refactor' into set_value-refactor

version-14
Gavin D'souza 3 роки тому
джерело
коміт
1811f464a9
3 змінених файлів з 27 додано та 2 видалено
  1. +4
    -0
      frappe/query_builder/terms.py
  2. +22
    -1
      frappe/tests/test_query_builder.py
  3. +1
    -1
      frappe/utils/data.py

+ 4
- 0
frappe/query_builder/terms.py Переглянути файл

@@ -1,3 +1,4 @@
from datetime import timedelta
from typing import Any, Dict, Optional from typing import Any, Dict, Optional


from pypika.terms import Function, ValueWrapper from pypika.terms import Function, ValueWrapper
@@ -51,6 +52,9 @@ class ParameterizedValueWrapper(ValueWrapper):
value_sql = self.get_value_sql(quote_char=quote_char, **kwargs) value_sql = self.get_value_sql(quote_char=quote_char, **kwargs)
sql = param_wrapper.get_sql(param_value=value_sql, **kwargs) sql = param_wrapper.get_sql(param_value=value_sql, **kwargs)
else: else:
# * BUG: pypika doesen't parse timedeltas
if isinstance(self.value, timedelta):
self.value = str(self.value)
sql = self.get_value_sql( sql = self.get_value_sql(
quote_char=quote_char, quote_char=quote_char,
secondary_quote_char=secondary_quote_char, secondary_quote_char=secondary_quote_char,


+ 22
- 1
frappe/tests/test_query_builder.py Переглянути файл

@@ -5,7 +5,7 @@ import frappe
from frappe.query_builder.custom import ConstantColumn from frappe.query_builder.custom import ConstantColumn
from frappe.query_builder.functions import Coalesce, GroupConcat, Match from frappe.query_builder.functions import Coalesce, GroupConcat, Match
from frappe.query_builder.utils import db_type_is from frappe.query_builder.utils import db_type_is
from frappe.query_builder import Case


def run_only_if(dbtype: db_type_is) -> Callable: def run_only_if(dbtype: db_type_is) -> Callable:
return unittest.skipIf( return unittest.skipIf(
@@ -108,6 +108,27 @@ class TestParameterization(unittest.TestCase):
self.assertIn("param1", params) self.assertIn("param1", params)
self.assertEqual(params["param1"], "subject") self.assertEqual(params["param1"], "subject")


def test_case(self):
DocType = frappe.qb.DocType("DocType")
query = (
frappe.qb.from_(DocType)
.select(
Case()
.when(DocType.search_fields == "value", "other_value")
.when(Coalesce(DocType.search_fields == "subject_in_function"), "true_value")
)
)

self.assertTrue("walk" in dir(query))
query, params = query.walk()

self.assertIn("%(param1)s", query)
self.assertIn("param1", params)
self.assertEqual(params["param1"], "value")
self.assertEqual(params["param2"], "other_value")
self.assertEqual(params["param3"], "subject_in_function")
self.assertEqual(params["param4"], "true_value")



@run_only_if(db_type_is.MARIADB) @run_only_if(db_type_is.MARIADB)
class TestBuilderMaria(unittest.TestCase, TestBuilderBase): class TestBuilderMaria(unittest.TestCase, TestBuilderBase):


+ 1
- 1
frappe/utils/data.py Переглянути файл

@@ -756,7 +756,7 @@ def sbool(x: str) -> Union[bool, Any]:
return True return True
elif val in ('false', '0'): elif val in ('false', '0'):
return False return False
return bool(x)
return x
except Exception: except Exception:
return x return x




Завантаження…
Відмінити
Зберегти