Skip to content

Commit 415025a

Browse files
committed
debug
1 parent d981032 commit 415025a

File tree

3 files changed

+22
-15
lines changed

3 files changed

+22
-15
lines changed

tortoise/contrib/postgres/regex.py

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from typing import cast
55

66
from pypika_tortoise.enums import SqlTypes
7-
from pypika_tortoise.functions import Cast, Coalesce
7+
from pypika_tortoise.functions import Cast
88
from pypika_tortoise.terms import BasicCriterion, Term
99

1010

@@ -15,13 +15,9 @@ class PostgresRegexMatching(enum.Enum):
1515

1616
def postgres_posix_regex(field: Term, value: str):
1717
term = cast(Term, field.wrap_constant(value))
18-
return BasicCriterion(
19-
PostgresRegexMatching.POSIX_REGEX, Coalesce(Cast(field, SqlTypes.VARCHAR), ""), term
20-
)
18+
return BasicCriterion(PostgresRegexMatching.POSIX_REGEX, Cast(field, SqlTypes.VARCHAR), term)
2119

2220

2321
def postgres_insensitive_posix_regex(field: Term, value: str):
2422
term = cast(Term, field.wrap_constant(value))
25-
return BasicCriterion(
26-
PostgresRegexMatching.IPOSIX_REGEX, Coalesce(Cast(field, SqlTypes.VARCHAR), ""), term
27-
)
23+
return BasicCriterion(PostgresRegexMatching.IPOSIX_REGEX, Cast(field, SqlTypes.VARCHAR), term)

tortoise/contrib/sqlite/regex.py

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
import aiosqlite
88
from pypika_tortoise.enums import SqlTypes
9-
from pypika_tortoise.functions import Cast, Coalesce
9+
from pypika_tortoise.functions import Cast
1010
from pypika_tortoise.terms import BasicCriterion, Term
1111

1212

@@ -17,16 +17,12 @@ class SQLiteRegexMatching(enum.Enum):
1717

1818
def posix_sqlite_regexp(field: Term, value: str):
1919
term = cast(Term, field.wrap_constant(value))
20-
return BasicCriterion(
21-
SQLiteRegexMatching.POSIX_REGEX, Coalesce(Cast(field, SqlTypes.VARCHAR), ""), term
22-
)
20+
return BasicCriterion(SQLiteRegexMatching.POSIX_REGEX, Cast(field, SqlTypes.VARCHAR), term)
2321

2422

2523
def insensitive_posix_sqlite_regexp(field: Term, value: str):
2624
term = cast(Term, field.wrap_constant(value))
27-
return BasicCriterion(
28-
SQLiteRegexMatching.IPOSIX_REGEX, Coalesce(Cast(field, SqlTypes.VARCHAR), ""), term
29-
)
25+
return BasicCriterion(SQLiteRegexMatching.IPOSIX_REGEX, Cast(field, SqlTypes.VARCHAR), term)
3026

3127

3228
async def install_regexp_functions(connection: aiosqlite.Connection):

tortoise/expressions.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from __future__ import annotations
22

3+
import numbers
34
import operator
45
from dataclasses import dataclass
56
from dataclasses import field as dataclass_field
@@ -95,6 +96,20 @@ def resolve(self, resolve_context: ResolveContext) -> ResolveResult:
9596
right = self.right.resolve(resolve_context)
9697
left_output_field, right_output_field = left.output_field, right.output_field # type: ignore
9798

99+
def _inline_numeric_constants(term: Term) -> Term:
100+
if isinstance(term, ValueWrapper) and isinstance(term.value, numbers.Real):
101+
if isinstance(term.value, bool):
102+
return term
103+
return ValueWrapper(term.value, allow_parametrize=False)
104+
return term
105+
106+
if resolve_context.model._meta.db.capabilities.dialect == "postgres":
107+
left_term = _inline_numeric_constants(left.term)
108+
right_term = _inline_numeric_constants(right.term)
109+
else:
110+
left_term = left.term
111+
right_term = right.term
112+
98113
if (
99114
left_output_field
100115
and right_output_field
@@ -104,7 +119,7 @@ def resolve(self, resolve_context: ResolveContext) -> ResolveResult:
104119

105120
operator_func = getattr(operator, self.connector.value)
106121
return ResolveResult(
107-
term=operator_func(left.term, right.term),
122+
term=operator_func(left_term, right_term),
108123
joins=list(set(left.joins + right.joins)), # dedup joins
109124
output_field=right_output_field or left_output_field,
110125
)

0 commit comments

Comments
 (0)