diff options
author | Federico Caselli <cfederico87@gmail.com> | 2023-04-28 21:24:43 +0200 |
---|---|---|
committer | Federico Caselli <cfederico87@gmail.com> | 2023-04-28 21:24:43 +0200 |
commit | ac0785dc3e56ebe9fc8caa78cd9c564d5e796da3 (patch) | |
tree | 2b5b0f58069a9ac28dba9f622e086f267c8df959 /tests | |
parent | abd175bf86b1091fe444b91c4f98dc9ea97ff723 (diff) | |
download | alembic-ac0785dc3e56ebe9fc8caa78cd9c564d5e796da3.tar.gz |
Fix ExcludeConstraint with func.
Fix autogenerate issue with PostgreSQL :class:`.ExcludeConstraint`
that included sqlalchemy functions. The function text was previously
rendered as a plain string without surrounding with ``text()``.
Fixes: #1230
Change-Id: I0d59e04d5a64132ed86f92a27e4247ac9703f3e0
Diffstat (limited to 'tests')
-rw-r--r-- | tests/test_postgresql.py | 41 |
1 files changed, 33 insertions, 8 deletions
diff --git a/tests/test_postgresql.py b/tests/test_postgresql.py index 18f50ce..77ed4da 100644 --- a/tests/test_postgresql.py +++ b/tests/test_postgresql.py @@ -1053,8 +1053,6 @@ class PostgresqlAutogenRenderTest(TestBase): ) def test_add_exclude_constraint(self): - from sqlalchemy.dialects.postgresql import ExcludeConstraint - autogen_context = self.autogen_context m = MetaData() @@ -1074,8 +1072,6 @@ class PostgresqlAutogenRenderTest(TestBase): ) def test_add_exclude_constraint_case_sensitive(self): - from sqlalchemy.dialects.postgresql import ExcludeConstraint - autogen_context = self.autogen_context m = MetaData() @@ -1100,8 +1096,6 @@ class PostgresqlAutogenRenderTest(TestBase): ) def test_inline_exclude_constraint(self): - from sqlalchemy.dialects.postgresql import ExcludeConstraint - autogen_context = self.autogen_context m = MetaData() @@ -1130,8 +1124,6 @@ class PostgresqlAutogenRenderTest(TestBase): ) def test_inline_exclude_constraint_case_sensitive(self): - from sqlalchemy.dialects.postgresql import ExcludeConstraint - autogen_context = self.autogen_context m = MetaData() @@ -1184,6 +1176,39 @@ class PostgresqlAutogenRenderTest(TestBase): ) @config.requirements.sqlalchemy_2 + def test_inline_exclude_constraint_fn(self): + """test for #1230""" + + autogen_context = self.autogen_context + + effective_time = Column("effective_time", DateTime(timezone=True)) + expiry_time = Column("expiry_time", DateTime(timezone=True)) + + m = MetaData() + t = Table( + "TTable", + m, + effective_time, + expiry_time, + ExcludeConstraint( + (func.tstzrange(effective_time, expiry_time), "&&"), + using="gist", + ), + ) + + op_obj = ops.CreateTableOp.from_table(t) + + eq_ignore_whitespace( + autogenerate.render_op_text(autogen_context, op_obj), + "op.create_table('TTable',sa.Column('effective_time', " + "sa.DateTime(timezone=True), nullable=True)," + "sa.Column('expiry_time', sa.DateTime(timezone=True), " + "nullable=True),postgresql.ExcludeConstraint(" + "(sa.text('tstzrange(effective_time, expiry_time)'), " + "'&&'), using='gist'))", + ) + + @config.requirements.sqlalchemy_2 def test_inline_exclude_constraint_text(self): """test for #1184. |