summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/sql
diff options
context:
space:
mode:
authorFrazer McLean <frazer@frazermclean.co.uk>2016-06-13 10:31:18 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2016-06-13 10:31:18 -0400
commit84974cf09220105bc7a92e5bcde31f52827c1de7 (patch)
tree250677d68a0c6ba0070a97cd6cd3a7c2c2949c50 /lib/sqlalchemy/sql
parent7189d0bc82598c2d6dcbb55b054837416db2ee7d (diff)
downloadsqlalchemy-pr_github_284.tar.gz
Comment supportpr_github_284
Implementation of [#1546 (BitBucket)](https://bitbucket.org/zzzeek/sqlalchemy/issues/1546). Very unfinished but I have reflection and setting after table creation working for PostgreSQL. If you're not opposed, perhaps best to continue discussion on Gerrit? Change-Id: Ib90683850805a2b4ee198e420dc294f32f15d35d Pull-request: https://github.com/zzzeek/sqlalchemy/pull/284
Diffstat (limited to 'lib/sqlalchemy/sql')
-rw-r--r--lib/sqlalchemy/sql/compiler.py22
-rw-r--r--lib/sqlalchemy/sql/ddl.py45
-rw-r--r--lib/sqlalchemy/sql/schema.py5
3 files changed, 72 insertions, 0 deletions
diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py
index 6d9ab9039..b26b0d1a7 100644
--- a/lib/sqlalchemy/sql/compiler.py
+++ b/lib/sqlalchemy/sql/compiler.py
@@ -2396,6 +2396,28 @@ class DDLCompiler(Compiled):
self.process(create.element)
)
+ def visit_set_table_comment(self, create):
+ return "COMMENT ON TABLE %s IS %s" % (
+ self.preparer.format_table(create.element),
+ self.sql_compiler.render_literal_bindparam(
+ elements.BindParameter('comment', value=create.comment))
+ )
+
+ def visit_drop_table_comment(self, drop):
+ return "COMMENT ON TABLE %s IS NULL" % \
+ self.preparer.format_table(drop.element)
+
+ def visit_set_column_comment(self, create):
+ return "COMMENT ON COLUMN %s IS %s" % (
+ self.preparer.format_column(create.element, use_table=True),
+ self.sql_compiler.render_literal_bindparam(
+ elements.BindParameter('comment', value=create.comment))
+ )
+
+ def visit_drop_column_comment(self, drop):
+ return "COMMENT ON COLUMN %s IS NULL" % \
+ self.preparer.format_column(drop.element, use_table=True)
+
def visit_create_sequence(self, create):
text = "CREATE SEQUENCE %s" % \
self.preparer.format_sequence(create.element)
diff --git a/lib/sqlalchemy/sql/ddl.py b/lib/sqlalchemy/sql/ddl.py
index 48f27b8b8..79fbc8ed6 100644
--- a/lib/sqlalchemy/sql/ddl.py
+++ b/lib/sqlalchemy/sql/ddl.py
@@ -486,6 +486,15 @@ class CreateTable(_CreateDropBase):
]
self.include_foreign_key_constraints = include_foreign_key_constraints
+ if element.comment is not None:
+ event.listen(element, 'after_create',
+ SetTableComment(element, element.comment))
+
+ for col in element.columns:
+ if col.comment is not None:
+ event.listen(element, 'after_create',
+ SetColumnComment(col, col.comment))
+
class _DropView(_CreateDropBase):
"""Semi-public 'DROP VIEW' construct.
@@ -661,6 +670,42 @@ class DropConstraint(_CreateDropBase):
self._create_rule_disable)
+class SetTableComment(_CreateDropBase):
+ """Represent a COMMENT ON TABLE IS statement."""
+
+ __visit_name__ = "set_table_comment"
+
+ def __init__(self, element, comment, **kw):
+ self.comment = comment
+ super(SetTableComment, self).__init__(element, **kw)
+ element._create_rule = util.portable_instancemethod(
+ self._create_rule_disable)
+
+
+class DropTableComment(_CreateDropBase):
+ """Represent a COMMENT ON TABLE IS NULL statement."""
+
+ __visit_name__ = "drop_table_comment"
+
+
+class SetColumnComment(_CreateDropBase):
+ """Represent a COMMENT ON COLUMN IS statement."""
+
+ __visit_name__ = "set_column_comment"
+
+ def __init__(self, element, comment, **kw):
+ self.comment = comment
+ super(SetColumnComment, self).__init__(element, **kw)
+ element._create_rule = util.portable_instancemethod(
+ self._create_rule_disable)
+
+
+class DropColumnComment(_CreateDropBase):
+ """Represent a COMMENT ON COLUMN IS NULL statement."""
+
+ __visit_name__ = "drop_column_comment"
+
+
class DDLBase(SchemaVisitor):
def __init__(self, connection):
self.connection = connection
diff --git a/lib/sqlalchemy/sql/schema.py b/lib/sqlalchemy/sql/schema.py
index cb01a49e3..ede9c7944 100644
--- a/lib/sqlalchemy/sql/schema.py
+++ b/lib/sqlalchemy/sql/schema.py
@@ -490,6 +490,7 @@ class Table(DialectKWArgs, SchemaItem, TableClause):
include_columns = kwargs.pop('include_columns', None)
self.implicit_returning = kwargs.pop('implicit_returning', True)
+ self.comment = kwargs.pop('comment', None)
if 'info' in kwargs:
self.info = kwargs.pop('info')
@@ -579,6 +580,9 @@ class Table(DialectKWArgs, SchemaItem, TableClause):
if 'info' in kwargs:
self.info = kwargs.pop('info')
+ if 'comment' in kwargs:
+ self.comment = kwargs.pop('comment')
+
if autoload:
if not autoload_replace:
exclude_columns = [c.name for c in self.c]
@@ -1176,6 +1180,7 @@ class Column(SchemaItem, ColumnClause):
self.autoincrement = kwargs.pop('autoincrement', "auto")
self.constraints = set()
self.foreign_keys = set()
+ self.comment = kwargs.pop('comment', None)
# check if this Column is proxying another column
if '_proxies' in kwargs: