From de58f3ebb50b1656d05a590fc8672b3944a22f02 Mon Sep 17 00:00:00 2001 From: Avery Fischer Date: Mon, 12 May 2025 13:50:08 +0200 Subject: [PATCH] ExecuteSQLOp rendering respects alembic_module_prefix Rendering ExecuteSQLOp did not respect the alembic_module_prefix setting due to having op. hard-coded in its template. This change updates the render logic to use the same _alembic_autogenerate_prefix() as it seems the rest of the ops use. --- Fixes #1656 --- alembic/autogenerate/render.py | 5 ++++- tests/test_autogen_render.py | 9 +++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/alembic/autogenerate/render.py b/alembic/autogenerate/render.py index ffc277db..66c67673 100644 --- a/alembic/autogenerate/render.py +++ b/alembic/autogenerate/render.py @@ -1122,7 +1122,10 @@ def _execute_sql(autogen_context: AutogenContext, op: ops.ExecuteSQLOp) -> str: "Autogenerate rendering of SQL Expression language constructs " "not supported here; please use a plain SQL string" ) - return "op.execute(%r)" % op.sqltext + return "{prefix}execute({sqltext!r})".format( + prefix=_alembic_autogenerate_prefix(autogen_context), + sqltext=op.sqltext, + ) renderers = default_renderers.branch() diff --git a/tests/test_autogen_render.py b/tests/test_autogen_render.py index ed31183e..cf71da07 100644 --- a/tests/test_autogen_render.py +++ b/tests/test_autogen_render.py @@ -2035,6 +2035,15 @@ class AutogenRenderTest(TestBase): op_obj, ) + @testing.combinations(("test.",), (None,), argnames="alembic_module_prefix") + def test_render_executesql_alembic_module_prefix(self, alembic_module_prefix): + self.autogen_context.opts.update(alembic_module_prefix=alembic_module_prefix) + op_obj = ops.ExecuteSQLOp("drop table foo") + eq_( + autogenerate.render_op_text(self.autogen_context, op_obj), + f"{alembic_module_prefix or ''}execute('drop table foo')", + ) + def test_render_alter_column_modify_comment(self): op_obj = ops.AlterColumnOp( "sometable", "somecolumn", modify_comment="This is a comment" -- 2.47.3