diff options
| author | Gord Thompson <gord@gordthompson.com> | 2021-01-25 11:24:25 -0700 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2021-01-29 16:48:00 -0500 |
| commit | 09e999808a5272a1426a7c00e3a4f27b2e27b8d7 (patch) | |
| tree | cdc8f16b86d19fdc2c95496c8ad12e8f226ecb03 /test/sql | |
| parent | bead576769e655481cddb4623fad4bfa0aaccdda (diff) | |
| download | sqlalchemy-09e999808a5272a1426a7c00e3a4f27b2e27b8d7.tar.gz | |
Use schema._copy_expression() fully in column collection constraints
Fixed issue where using :meth:`_schema.Table.to_metadata` (called
:meth:`_schema.Table.tometadata` in 1.3) in conjunction with a PostgreSQL
:class:`_postgresql.ExcludeConstraint` that made use of ad-hoc column
expressions would fail to copy correctly.
Fixes: #5850
Change-Id: I062480afb23f6f60962b7b55bc93f5e4e6ff05e4
Diffstat (limited to 'test/sql')
| -rw-r--r-- | test/sql/test_metadata.py | 50 |
1 files changed, 49 insertions, 1 deletions
diff --git a/test/sql/test_metadata.py b/test/sql/test_metadata.py index 17228dad6..4a592a476 100644 --- a/test/sql/test_metadata.py +++ b/test/sql/test_metadata.py @@ -40,6 +40,7 @@ from sqlalchemy.schema import DropIndex from sqlalchemy.sql import naming from sqlalchemy.sql import operators from sqlalchemy.sql.elements import _NONE_NAME +from sqlalchemy.sql.elements import literal_column from sqlalchemy.testing import assert_raises from sqlalchemy.testing import assert_raises_message from sqlalchemy.testing import AssertsCompiledSQL @@ -762,7 +763,7 @@ class MetaDataTest(fixtures.TestBase, ComparesTables): eq_(repr(const), exp) -class ToMetaDataTest(fixtures.TestBase, ComparesTables): +class ToMetaDataTest(fixtures.TestBase, AssertsCompiledSQL, ComparesTables): @testing.requires.check_constraints def test_copy(self): # TODO: modernize this test for 2.0 @@ -915,6 +916,53 @@ class ToMetaDataTest(fixtures.TestBase, ComparesTables): a2 = a.to_metadata(m2) assert b2.c.y.references(a2.c.x) + def test_column_collection_constraint_w_ad_hoc_columns(self): + """Test ColumnCollectionConstraint that has columns that aren't + part of the Table. + + """ + meta = MetaData() + + uq1 = UniqueConstraint(literal_column("some_name")) + cc1 = CheckConstraint(literal_column("some_name") > 5) + table = Table( + "mytable", + meta, + Column("myid", Integer, primary_key=True), + Column("name", String(40), nullable=True), + uq1, + cc1, + ) + + self.assert_compile( + schema.AddConstraint(uq1), + "ALTER TABLE mytable ADD UNIQUE (some_name)", + dialect="default", + ) + self.assert_compile( + schema.AddConstraint(cc1), + "ALTER TABLE mytable ADD CHECK (some_name > 5)", + dialect="default", + ) + meta2 = MetaData() + table2 = table.to_metadata(meta2) + uq2 = [ + c for c in table2.constraints if isinstance(c, UniqueConstraint) + ][0] + cc2 = [ + c for c in table2.constraints if isinstance(c, CheckConstraint) + ][0] + self.assert_compile( + schema.AddConstraint(uq2), + "ALTER TABLE mytable ADD UNIQUE (some_name)", + dialect="default", + ) + self.assert_compile( + schema.AddConstraint(cc2), + "ALTER TABLE mytable ADD CHECK (some_name > 5)", + dialect="default", + ) + def test_change_schema(self): meta = MetaData() |
