summaryrefslogtreecommitdiff
path: root/test/sql
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2022-03-26 10:09:10 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2022-03-26 10:11:31 -0400
commit74d3f3965b383aef7421f2cf1779573a4ac65987 (patch)
treeffbbe8818f23cbc1c4ace1888ca01ced4f4e8591 /test/sql
parent59308fd60fd8f7750205063134df4b944d12704b (diff)
downloadsqlalchemy-74d3f3965b383aef7421f2cf1779573a4ac65987.tar.gz
support BLANK_SCHEMA, RETAIN_SCHEMA FK schema on copy
Added support so that the :paramref:`.Table.tometadata.referred_schema_fn` callable passed to :meth:`.Table.to_metadata` may return the value :data:`.BLANK_SCHEMA` to indicate that the referenced foreign key should be reset to None. The :data.`RETAIN_SCHEMA` symbol may also be returned from this function to indicate "no change", which will behave the same as ``None`` currently does which also indicates no change. Fixes: #7860 Change-Id: I82a45988d534295d8356453f68001b21d4ff706d
Diffstat (limited to 'test/sql')
-rw-r--r--test/sql/test_metadata.py22
1 files changed, 22 insertions, 0 deletions
diff --git a/test/sql/test_metadata.py b/test/sql/test_metadata.py
index 21fc0a627..f7480d11a 100644
--- a/test/sql/test_metadata.py
+++ b/test/sql/test_metadata.py
@@ -41,6 +41,7 @@ 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.sql.schema import RETAIN_SCHEMA
from sqlalchemy.testing import assert_raises
from sqlalchemy.testing import assert_raises_message
from sqlalchemy.testing import AssertsCompiledSQL
@@ -1315,6 +1316,27 @@ class ToMetaDataTest(fixtures.TestBase, AssertsCompiledSQL, ComparesTables):
self._assert_fk(t2, "z", "h.t1.x", referred_schema_fn=ref_fn)
+ def test_fk_reset_to_none(self):
+ m = MetaData()
+
+ t2 = Table("t2", m, Column("y", Integer, ForeignKey("p.t1.x")))
+
+ def ref_fn(table, to_schema, constraint, referred_schema):
+ return BLANK_SCHEMA
+
+ self._assert_fk(t2, None, "t1.x", referred_schema_fn=ref_fn)
+
+ @testing.combinations(None, RETAIN_SCHEMA)
+ def test_fk_test_non_return_for_referred_schema(self, sym):
+ m = MetaData()
+
+ t2 = Table("t2", m, Column("y", Integer, ForeignKey("p.t1.x")))
+
+ def ref_fn(table, to_schema, constraint, referred_schema):
+ return sym
+
+ self._assert_fk(t2, None, "p.t1.x", referred_schema_fn=ref_fn)
+
def test_copy_info(self):
m = MetaData()
fk = ForeignKey("t2.id")