Skip to content

Commit

Permalink
Revert SQL casts for string comparisions (#366)
Browse files Browse the repository at this point in the history
- This should be revert of 42adca3
  • Loading branch information
hqsz authored Apr 26, 2020
1 parent d1c9117 commit a3d8507
Showing 1 changed file with 15 additions and 8 deletions.
23 changes: 15 additions & 8 deletions tortoise/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
from typing import TYPE_CHECKING, Any, Dict, Iterable, Optional, Tuple

from pypika import Table
from pypika.functions import Upper
from pypika.enums import SqlTypes
from pypika.functions import Cast, Upper
from pypika.terms import (
BasicCriterion,
Criterion,
Expand Down Expand Up @@ -147,31 +148,37 @@ def not_null(field: Term, value: Any) -> Criterion:


def contains(field: Term, value: str) -> Criterion:
return Like(field, field.wrap_constant(f"%{escape_like(value)}%"))
return Like(Cast(field, SqlTypes.VARCHAR), field.wrap_constant(f"%{escape_like(value)}%"))


def starts_with(field: Term, value: str) -> Criterion:
return Like(field, field.wrap_constant(f"{escape_like(value)}%"))
return Like(Cast(field, SqlTypes.VARCHAR), field.wrap_constant(f"{escape_like(value)}%"))


def ends_with(field: Term, value: str) -> Criterion:
return Like(field, field.wrap_constant(f"%{escape_like(value)}"))
return Like(Cast(field, SqlTypes.VARCHAR), field.wrap_constant(f"%{escape_like(value)}"))


def insensitive_exact(field: Term, value: str) -> Criterion:
return Upper(field).eq(Upper(str(value)))
return Upper(Cast(field, SqlTypes.VARCHAR)).eq(Upper(str(value)))


def insensitive_contains(field: Term, value: str) -> Criterion:
return Like(Upper(field), field.wrap_constant(Upper(f"%{escape_like(value)}%")))
return Like(
Upper(Cast(field, SqlTypes.VARCHAR)), field.wrap_constant(Upper(f"%{escape_like(value)}%"))
)


def insensitive_starts_with(field: Term, value: str) -> Criterion:
return Like(Upper(field), field.wrap_constant(Upper(f"{escape_like(value)}%")))
return Like(
Upper(Cast(field, SqlTypes.VARCHAR)), field.wrap_constant(Upper(f"{escape_like(value)}%"))
)


def insensitive_ends_with(field: Term, value: str) -> Criterion:
return Like(Upper(field), field.wrap_constant(Upper(f"%{escape_like(value)}")))
return Like(
Upper(Cast(field, SqlTypes.VARCHAR)), field.wrap_constant(Upper(f"%{escape_like(value)}"))
)


##############################################################################
Expand Down

0 comments on commit a3d8507

Please sign in to comment.