diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2019-10-13 23:02:22 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2019-10-13 23:02:22 -0400 |
| commit | 8a55fb6017b01c5b7503be2bedfa82b9663f8a94 (patch) | |
| tree | 8bb6b6bb67d82ba7b4fd92400633e520b2cd401b | |
| parent | 6b2875eba531a0b879ec345ec85fae00f522ff03 (diff) | |
| download | sqlalchemy-8a55fb6017b01c5b7503be2bedfa82b9663f8a94.tar.gz | |
Add _alembic_quote method to format_constraint()
Alembic needs a portable way of getting at the name of an
index without quoting being applied. As we would like the
indexes created by the Column index=True flag to support
deferred index names, supply a function that delivers this
for Alembic without it having to dig too deeply into the
internals. the _alembic_quote flag may be made public
at a later time, however as we've been through many quoting
flags that are difficult to get rid of, try to be conservative
to start.
Change-Id: I184adaeae26c2e75093aaea5ebe01a3815cadb08
| -rw-r--r-- | lib/sqlalchemy/sql/compiler.py | 7 | ||||
| -rw-r--r-- | test/sql/test_quote.py | 28 |
2 files changed, 33 insertions, 2 deletions
diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py index 453ff56d2..c6c30629d 100644 --- a/lib/sqlalchemy/sql/compiler.py +++ b/lib/sqlalchemy/sql/compiler.py @@ -3698,7 +3698,7 @@ class IdentifierPreparer(object): return ident @util.dependencies("sqlalchemy.sql.naming") - def format_constraint(self, naming, constraint): + def format_constraint(self, naming, constraint, _alembic_quote=True): if isinstance(constraint.name, elements._defer_name): name = naming._constraint_name_for_table( constraint, constraint.table @@ -3725,7 +3725,10 @@ class IdentifierPreparer(object): else: self.dialect.validate_identifier(name) - return self.quote(name) + if not _alembic_quote: + return name + else: + return self.quote(name) def format_index(self, index): return self.format_constraint(index) diff --git a/test/sql/test_quote.py b/test/sql/test_quote.py index b54da97ba..d7219b12d 100644 --- a/test/sql/test_quote.py +++ b/test/sql/test_quote.py @@ -868,6 +868,34 @@ class PreparerTest(fixtures.TestBase): a_eq(unformat("`foo`.bar"), ["foo", "bar"]) a_eq(unformat("`foo`.`b``a``r`.`baz`"), ["foo", "b`a`r", "baz"]) + def test_alembic_quote(self): + t1 = Table( + "TableOne", MetaData(), Column("MyCol", Integer, index=True) + ) + t2 = Table( + "some_table", MetaData(), Column("some_col", Integer, index=True) + ) + t3 = Table( + "some_table", MetaData(), Column("some_col", Integer, index=True) + ) + ix3 = Index("my_index", t3.c.some_col) + ix4 = Index("MyIndex", t3.c.some_col) + ix5 = Index(None, t3.c.some_col) + + for idx, expected in [ + (list(t1.indexes)[0], "ix_TableOne_MyCol"), + (list(t2.indexes)[0], "ix_some_table_some_col"), + (ix3, "my_index"), + (ix4, "MyIndex"), + (ix5, "ix_some_table_some_col"), + ]: + eq_( + testing.db.dialect.identifier_preparer.format_constraint( + idx, _alembic_quote=False + ), + expected, + ) + class QuotedIdentTest(fixtures.TestBase): def test_concat_quotetrue(self): |
