Skip to content

Commit 92ebb0e

Browse files
authored
fix: handle None/empty edge cases in SearchFilter and Update.set() (#282)
- SearchFilter now accepts `value: str | None` to handle cases where no search parameter is provided (fixes #281) - Update.set() now returns self unchanged when called with empty args/kwargs, supporting Pydantic/msgspec exclude_unset patterns (fixes #279) Both fixes follow the principle of handling edge cases gracefully at the source rather than requiring defensive checks everywhere.
1 parent 187b9ef commit 92ebb0e

File tree

3 files changed

+5
-8
lines changed

3 files changed

+5
-8
lines changed

sqlspec/builder/_dml.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,8 @@ def _process_update_value(self, val: Any, col: Any) -> exp.Expression:
310310
return placeholder
311311

312312
def set(self, *args: Any, **kwargs: Any) -> Self:
313+
if not args and not kwargs:
314+
return self
313315
current_expr = self.get_expression()
314316
if current_expr is None:
315317
self.set_expression(exp.Update())

sqlspec/core/filters.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -658,7 +658,7 @@ class SearchFilter(StatementFilter):
658658

659659
__slots__ = ("_field_name", "_ignore_case", "_value")
660660

661-
def __init__(self, field_name: str | set[str], value: str, ignore_case: bool | None = False) -> None:
661+
def __init__(self, field_name: str | set[str], value: str | None, ignore_case: bool | None = False) -> None:
662662
self._field_name = field_name
663663
self._value = value
664664
self._ignore_case = ignore_case
@@ -668,7 +668,7 @@ def field_name(self) -> str | set[str]:
668668
return self._field_name
669669

670670
@property
671-
def value(self) -> str:
671+
def value(self) -> str | None:
672672
return self._value
673673

674674
@property

sqlspec/extensions/litestar/providers.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -226,12 +226,7 @@ def provide_search_filter(
226226
),
227227
) -> SearchFilter:
228228
field_names = set(search_fields.split(",")) if isinstance(search_fields, str) else set(search_fields)
229-
230-
return SearchFilter(
231-
field_name=field_names,
232-
value=search_string, # type: ignore[arg-type]
233-
ignore_case=ignore_case or False,
234-
)
229+
return SearchFilter(field_name=field_names, value=search_string, ignore_case=ignore_case or False)
235230

236231
filters[dep_defaults.SEARCH_FILTER_DEPENDENCY_KEY] = Provide(provide_search_filter, sync_to_thread=False)
237232

0 commit comments

Comments
 (0)