diff --git a/tests/test_query_api.py b/tests/test_query_api.py index 4b278b09a..aa2846784 100644 --- a/tests/test_query_api.py +++ b/tests/test_query_api.py @@ -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 @@ -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}" diff --git a/tortoise/expressions.py b/tortoise/expressions.py index ff51e2cb9..37e9a42a9 100644 --- a/tortoise/expressions.py +++ b/tortoise/expressions.py @@ -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()