summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/sql
diff options
context:
space:
mode:
authormike bayer <mike_mp@zzzcomputing.com>2018-07-11 09:30:17 -0400
committerGerrit Code Review <gerrit@ci.zzzcomputing.com>2018-07-11 09:30:17 -0400
commit5e6cfc306273bb6f1a873e9ca580e0effec57bc3 (patch)
tree773b43753269e360fbecc2917575232a909aa3dd /lib/sqlalchemy/sql
parentaaa60cd17e5d883f954f8510744408cf565460ee (diff)
parent532566ba1f28ff8a6afa6eacc10c59eb918501f6 (diff)
downloadsqlalchemy-5e6cfc306273bb6f1a873e9ca580e0effec57bc3.tar.gz
Merge "Drop default-related structures after the Table is dropped."
Diffstat (limited to 'lib/sqlalchemy/sql')
-rw-r--r--lib/sqlalchemy/sql/ddl.py16
1 files changed, 11 insertions, 5 deletions
diff --git a/lib/sqlalchemy/sql/ddl.py b/lib/sqlalchemy/sql/ddl.py
index 8de6f9cdc..91e93efe7 100644
--- a/lib/sqlalchemy/sql/ddl.py
+++ b/lib/sqlalchemy/sql/ddl.py
@@ -948,17 +948,22 @@ class SchemaDropper(DDLBase):
_ddl_runner=self,
_is_metadata_operation=_is_metadata_operation)
+ self.connection.execute(DropTable(table))
+
+ # traverse client side defaults which may refer to server-side
+ # sequences. noting that some of these client side defaults may also be
+ # set up as server side defaults (see http://docs.sqlalchemy.org/en/
+ # 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:
self.traverse_single(column.default)
- self.connection.execute(DropTable(table))
-
table.dispatch.after_drop(
table, self.connection,
- checkfirst=self.checkfirst,
- _ddl_runner=self,
- _is_metadata_operation=_is_metadata_operation)
+ checkfirst=self.checkfirst,
+ _ddl_runner=self,
+ _is_metadata_operation=_is_metadata_operation)
def visit_foreign_key_constraint(self, constraint):
if not self.dialect.supports_alter:
@@ -966,6 +971,7 @@ class SchemaDropper(DDLBase):
self.connection.execute(DropConstraint(constraint))
def visit_sequence(self, sequence, drop_ok=False):
+
if not drop_ok and not self._can_drop_sequence(sequence):
return
self.connection.execute(DropSequence(sequence))