diff options
author | mike bayer <mike_mp@zzzcomputing.com> | 2021-03-25 15:28:32 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@ci3.zzzcomputing.com> | 2021-03-25 15:28:32 +0000 |
commit | 320cbdf26f892ea6376150ba0defa7f3c530e9cc (patch) | |
tree | f0592e7887c0c89e6e7c54cc964fd09edc1b5783 /lib/sqlalchemy/sql/ddl.py | |
parent | 96dffd0ae9d19050f1d6000c35c4347bcb2dc6fe (diff) | |
parent | 1984b6d3c7fd95dd22203cb75fb3fb65348c4158 (diff) | |
download | sqlalchemy-320cbdf26f892ea6376150ba0defa7f3c530e9cc.tar.gz |
Merge "Allow dropping a schema with a sequence shared by more than one table."
Diffstat (limited to 'lib/sqlalchemy/sql/ddl.py')
-rw-r--r-- | lib/sqlalchemy/sql/ddl.py | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/lib/sqlalchemy/sql/ddl.py b/lib/sqlalchemy/sql/ddl.py index a166a6bdf..8d8e68d2f 100644 --- a/lib/sqlalchemy/sql/ddl.py +++ b/lib/sqlalchemy/sql/ddl.py @@ -1002,7 +1002,7 @@ class SchemaDropper(DDLBase): seq_coll = [ s for s in metadata._sequences.values() - if s.column is None and self._can_drop_sequence(s) + if self._can_drop_sequence(s) ] event_collection = [t for (t, fks) in collection if t is not None] @@ -1018,14 +1018,17 @@ class SchemaDropper(DDLBase): for table, fkcs in collection: if table is not None: self.traverse_single( - table, drop_ok=True, _is_metadata_operation=True + table, + drop_ok=True, + _is_metadata_operation=True, + _ignore_sequences=seq_coll, ) else: for fkc in fkcs: self.traverse_single(fkc) for seq in seq_coll: - self.traverse_single(seq, drop_ok=True) + self.traverse_single(seq, drop_ok=seq.column is None) metadata.dispatch.after_drop( metadata, @@ -1073,7 +1076,13 @@ class SchemaDropper(DDLBase): self.connection.execute(DropIndex(index)) - def visit_table(self, table, drop_ok=False, _is_metadata_operation=False): + def visit_table( + self, + table, + drop_ok=False, + _is_metadata_operation=False, + _ignore_sequences=[], + ): if not drop_ok and not self._can_drop_table(table): return @@ -1093,7 +1102,10 @@ class SchemaDropper(DDLBase): # latest/core/defaults.html#associating-a-sequence-as-the-server-side- # default), so have to be dropped after the table is dropped. for column in table.columns: - if column.default is not None: + if ( + column.default is not None + and column.default not in _ignore_sequences + ): self.traverse_single(column.default) table.dispatch.after_drop( |