diff options
author | Jason Kirtland <jek@discorporate.us> | 2008-02-05 05:46:33 +0000 |
---|---|---|
committer | Jason Kirtland <jek@discorporate.us> | 2008-02-05 05:46:33 +0000 |
commit | 6d843aeeb2915206e3e80a6b88d9ce8ed068a035 (patch) | |
tree | 87f288a7c9d991ea484aba19d44d885a3af8c523 /lib/sqlalchemy/sql/compiler.py | |
parent | 6c73fbb4227327335be8f45f4dbf2bccd01d0918 (diff) | |
download | sqlalchemy-6d843aeeb2915206e3e80a6b88d9ce8ed068a035.tar.gz |
- Added free-form `DDL` statements, can be executed standalone or tied to the DDL create/drop lifecycle of Tables and MetaData. [ticket:903]
- Added DDL event hooks, triggers callables before and after create / drop.
Diffstat (limited to 'lib/sqlalchemy/sql/compiler.py')
-rw-r--r-- | lib/sqlalchemy/sql/compiler.py | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py index cdb680431..4e73221c1 100644 --- a/lib/sqlalchemy/sql/compiler.py +++ b/lib/sqlalchemy/sql/compiler.py @@ -775,6 +775,9 @@ class SchemaGenerator(DDLBase): self.add_foreignkey(alterable) def visit_table(self, table): + for listener in table.ddl_listeners['before-create']: + listener('before-create', table, self.connection) + for column in table.columns: if column.default is not None: self.traverse_single(column.default) @@ -803,10 +806,14 @@ class SchemaGenerator(DDLBase): self.append("\n)%s\n\n" % self.post_create_table(table)) self.execute() + if hasattr(table, 'indexes'): for index in table.indexes: self.traverse_single(index) + for listener in table.ddl_listeners['after-create']: + listener('after-create', table, self.connection) + def post_create_table(self, table): return '' @@ -892,6 +899,7 @@ class SchemaGenerator(DDLBase): string.join([preparer.quote(c, c.name) for c in index.columns], ', '))) self.execute() + class SchemaDropper(DDLBase): def __init__(self, dialect, connection, checkfirst=False, tables=None, **kwargs): super(SchemaDropper, self).__init__(connection, **kwargs) @@ -919,6 +927,9 @@ class SchemaDropper(DDLBase): self.execute() def visit_table(self, table): + for listener in table.ddl_listeners['before-drop']: + listener('before-drop', table, self.connection) + for column in table.columns: if column.default is not None: self.traverse_single(column.default) @@ -926,6 +937,10 @@ class SchemaDropper(DDLBase): self.append("\nDROP TABLE " + self.preparer.format_table(table)) self.execute() + for listener in table.ddl_listeners['after-drop']: + listener('after-drop', table, self.connection) + + class IdentifierPreparer(object): """Handle quoting and case-folding of identifiers based on options.""" |