summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2022-12-22 18:41:20 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2022-12-23 12:16:50 -0500
commit26f8752a6c34c849221fa3c8c686ff67cd68e328 (patch)
treedfe464c0c0a1d52b5dd8f873d30c96e83317a32b /tests
parent4678d7f1da009689449a6550768139c32b50c646 (diff)
downloadalembic-26f8752a6c34c849221fa3c8c686ff67cd68e328.tar.gz
dont use repr to quote string in compare_server_default
Fixed issue where server default compare would not work for string defaults that contained backslashes, due to mis-rendering of these values when comparing their contents. The server default comparison still has a lot of not-robust behaviors, however at least get in place a parameterized test suite so that we can add new scenarios quickly. Made a slight adjustment to SQLite's compare server default implementation to better handle defaults with or without parens around them, from both the reflected and the local metadata side. Implemented basic server default comparison for the Oracle backend; previously, Oracle's formatting of reflected defaults prevented any matches from occurring. Change-Id: If5a69eec4b22d243a564d2c89e78ae33ba5be88f Fixes: #1145
Diffstat (limited to 'tests')
-rw-r--r--tests/test_autogen_diffs.py73
1 files changed, 73 insertions, 0 deletions
diff --git a/tests/test_autogen_diffs.py b/tests/test_autogen_diffs.py
index 86b2460..88806ff 100644
--- a/tests/test_autogen_diffs.py
+++ b/tests/test_autogen_diffs.py
@@ -862,6 +862,79 @@ class CompareTypeSpecificityTest(TestBase):
)
+class CompareServerDefaultTest(TestBase):
+ __backend__ = True
+
+ @testing.fixture()
+ def connection(self):
+ with config.db.begin() as conn:
+ yield conn
+
+ @testing.fixture()
+ def metadata(self, connection):
+ m = MetaData()
+ yield m
+ m.drop_all(connection)
+
+ @testing.combinations(
+ (VARCHAR(30), text("'some default'"), text("'some new default'")),
+ (VARCHAR(30), "some default", "some new default"),
+ (VARCHAR(30), text("'//slash'"), text("'s//l//ash'")),
+ (Integer(), text("15"), text("20")),
+ (Integer(), "15", "20"),
+ id_="sss",
+ argnames="type_,default_text,new_default_text",
+ )
+ def test_server_default_yes_positives(
+ self, type_, default_text, new_default_text, connection, metadata
+ ):
+ t1 = Table(
+ "t1", metadata, Column("x", type_, server_default=default_text)
+ )
+ t1.create(connection)
+
+ new_metadata = MetaData()
+ Table(
+ "t1",
+ new_metadata,
+ Column("x", type_, server_default=new_default_text),
+ )
+
+ mc = MigrationContext.configure(
+ connection, opts={"compare_server_default": True}
+ )
+
+ diff = api.compare_metadata(mc, new_metadata)
+ eq_(len(diff), 1)
+ eq_(diff[0][0][0], "modify_default")
+
+ @testing.combinations(
+ (VARCHAR(30), text("'some default'")),
+ (VARCHAR(30), "some default"),
+ (VARCHAR(30), text("'//slash'")),
+ (VARCHAR(30), text("'has '' quote'")),
+ (Integer(), text("15")),
+ (Integer(), "15"),
+ id_="ss",
+ argnames="type_,default_text",
+ )
+ def test_server_default_no_false_positives(
+ self, type_, default_text, connection, metadata
+ ):
+ t1 = Table(
+ "t1", metadata, Column("x", type_, server_default=default_text)
+ )
+ t1.create(connection)
+
+ mc = MigrationContext.configure(
+ connection, opts={"compare_server_default": True}
+ )
+
+ diff = api.compare_metadata(mc, metadata)
+
+ assert not diff
+
+
class CompareMetadataToInspectorTest(TestBase):
__backend__ = True