diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2016-06-20 11:39:01 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2016-06-20 12:52:31 -0400 |
| commit | bf03d4332ae35e2087b175f8a2e0291d2f4c9aa0 (patch) | |
| tree | 8eadf8feeab0e2a677a8385125251b17bf715b1c /lib/sqlalchemy | |
| parent | 91a1022227499c8efce038c4a0a9bdcdb14a69d0 (diff) | |
| download | sqlalchemy-bf03d4332ae35e2087b175f8a2e0291d2f4c9aa0.tar.gz | |
Don't reorder PrimaryKeyConstraint columns if explicit
Dialed back the "order the primary key columns per auto-increment"
described in :ref:`change_mysql_3216` a bit, so that if the
:class:`.PrimaryKeyConstraint` is explicitly defined, the order
of columns is maintained exactly, allowing control of this behavior
when necessary.
Change-Id: I9e7902c57a96c15968a6abf53e319acf15680da0
Fixes: #3726
Diffstat (limited to 'lib/sqlalchemy')
| -rw-r--r-- | lib/sqlalchemy/sql/compiler.py | 4 | ||||
| -rw-r--r-- | lib/sqlalchemy/sql/schema.py | 7 |
2 files changed, 9 insertions, 2 deletions
diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py index fc5073596..16ca7f959 100644 --- a/lib/sqlalchemy/sql/compiler.py +++ b/lib/sqlalchemy/sql/compiler.py @@ -2519,7 +2519,9 @@ class DDLCompiler(Compiled): text += "CONSTRAINT %s " % formatted_name text += "PRIMARY KEY " text += "(%s)" % ', '.join(self.preparer.quote(c.name) - for c in constraint.columns_autoinc_first) + for c in (constraint.columns_autoinc_first + if constraint._implicit_generated + else constraint.columns)) text += self.define_constraint_deferrability(constraint) return text diff --git a/lib/sqlalchemy/sql/schema.py b/lib/sqlalchemy/sql/schema.py index cb01a49e3..ee139827a 100644 --- a/lib/sqlalchemy/sql/schema.py +++ b/lib/sqlalchemy/sql/schema.py @@ -475,7 +475,8 @@ class Table(DialectKWArgs, SchemaItem, TableClause): self.indexes = set() self.constraints = set() self._columns = ColumnCollection() - PrimaryKeyConstraint()._set_parent_with_dispatch(self) + PrimaryKeyConstraint(_implicit_generated=True).\ + _set_parent_with_dispatch(self) self.foreign_keys = set() self._extra_dependencies = set() if self.schema is not None: @@ -3023,6 +3024,10 @@ class PrimaryKeyConstraint(ColumnCollectionConstraint): __visit_name__ = 'primary_key_constraint' + def __init__(self, *columns, **kw): + self._implicit_generated = kw.pop('_implicit_generated', False) + super(PrimaryKeyConstraint, self).__init__(*columns, **kw) + def _set_parent(self, table): super(PrimaryKeyConstraint, self)._set_parent(table) |
