Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions tests/test_query_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
from tortoise.context import TortoiseContext, tortoise_test_context
from tortoise.contrib import test
from tortoise.exceptions import ParamsError
from tortoise.expressions import Subquery
from tortoise.models import Model
from tortoise.query_api import QueryResult, execute_pypika

Expand Down Expand Up @@ -343,3 +344,20 @@ async def test_execute_pypika_requires_connection_with_multiple_configured(multi
await execute_pypika(query)

assert "multiple databases" in str(exc_info.value)


@pytest.mark.asyncio
async def test_subquery_params_inline(query_api_db) -> None:
"""Subquery filter values should be inlined when using sql(params_inline=True).

Regression test for https://github.com/tortoise/tortoise-orm/issues/1800
"""
query = QueryModel.filter(
id__in=Subquery(QueryModel.filter(name="alpha").values_list("id"))
)
sql = query.sql(params_inline=True)
assert "'alpha'" in sql, f"Expected 'alpha' in inline SQL, got: {sql}"

# Also verify parameterized mode still works
sql_param = query.sql(params_inline=False)
assert "alpha" not in sql_param, f"Expected no 'alpha' in parameterized SQL, got: {sql_param}"
4 changes: 3 additions & 1 deletion tortoise/expressions.py
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,9 @@ def __init__(self, query: AwaitableQuery) -> None:
def get_sql(self, ctx: SqlContext) -> str:
self.query._choose_db_if_not_chosen()
self.query._make_query()
return self.query.query.get_parameterized_sql(ctx)[0]
if ctx.parameterizer:
return self.query.query.get_parameterized_sql(ctx)[0]
return self.query.query.get_sql(ctx)

def as_(self, alias: str) -> Selectable: # type: ignore
self.query._choose_db_if_not_chosen()
Expand Down
Loading