summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/sql/compiler.py
diff options
context:
space:
mode:
authorJason Kirtland <jek@discorporate.us>2008-02-05 05:46:33 +0000
committerJason Kirtland <jek@discorporate.us>2008-02-05 05:46:33 +0000
commit6d843aeeb2915206e3e80a6b88d9ce8ed068a035 (patch)
tree87f288a7c9d991ea484aba19d44d885a3af8c523 /lib/sqlalchemy/sql/compiler.py
parent6c73fbb4227327335be8f45f4dbf2bccd01d0918 (diff)
downloadsqlalchemy-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.py15
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."""