[FIX] Fix database compatibility issue in search query builder for payments filter (#3090)

Co-authored-by: dni  <office@dnilabs.com>
Co-authored-by: Vlad Stan <stan.v.vlad@gmail.com>
This commit is contained in:
PatMulligan
2025-05-02 10:45:35 +03:00
committed by GitHub
co-authored by dni ⚡ Vlad Stan
parent 32cbf16d91
commit 51bf344d65
2 changed files with 79 additions and 6 deletions
+7 -3
View File
@@ -554,9 +554,13 @@ class Filters(BaseModel, Generic[TFilterModel]):
for page_filter in self.filters:
where_stmts.append(page_filter.statement)
if self.search and self.model and self.model.__search_fields__:
where_stmts.append(
f"lower(concat({', '.join(self.model.__search_fields__)})) LIKE :search"
# Use `COALESCE` to handle `NULL` values and `||`
# for cross-database compatible string concatenation
_fields = self.model.__search_fields__
search_expr = " || ".join(
f"COALESCE(CAST({field} AS TEXT), '')" for field in _fields
)
where_stmts.append(f"lower({search_expr}) LIKE :search")
if where_stmts:
return "WHERE " + " AND ".join(where_stmts)
@@ -576,7 +580,7 @@ class Filters(BaseModel, Generic[TFilterModel]):
for key, value in page_filter.values.items():
values[key] = value
if self.search and self.model:
values["search"] = f"%{self.search}%"
values["search"] = f"%{self.search.lower()}%"
return values