11import re
2- from sqlalchemy .sql import compiler
2+ from sqlalchemy .sql import compiler , sqltypes , ColumnElement
33
44
55class DatabricksIdentifierPreparer (compiler .IdentifierPreparer ):
@@ -15,3 +15,53 @@ def __init__(self, dialect):
1515class DatabricksDDLCompiler (compiler .DDLCompiler ):
1616 def post_create_table (self , table ):
1717 return " USING DELTA"
18+
19+ def visit_set_column_comment (self , create , ** kw ):
20+ """
21+ Example syntax for adding column comment:
22+ "ALTER TABLE schema.table_name CHANGE COLUMN COLUMN_NAME COMMENT 'Comment to be added to column';"
23+
24+ """
25+ return """ALTER TABLE {0} CHANGE COLUMN {1} COMMENT {2}""" .format (
26+ 'testing.alembic_test1' ,
27+ self ._format_table_from_column (
28+ create , use_schema = True
29+ ),
30+ self .preparer .format_column (
31+ create .element , use_table = False
32+ ),
33+ self .sql_compiler .render_literal_value (
34+ create .element .comment , sqltypes .String ()
35+ ),
36+ )
37+
38+ def visit_drop_column_comment (self , drop , ** kw ):
39+ """
40+ Example syntax for dropping column comment:
41+ "ALTER TABLE schema.table_name CHANGE COLUMN COLUMN_NAME COMMENT '';"
42+
43+ Note: There is no syntactical 'DROP' statement in this case, the comment must be replaced with an empty string
44+ """
45+ return "ALTER TABLE {0} CHANGE COLUMN {1} COMMENT '';" .format (
46+ self ._format_table_from_column (
47+ drop , use_schema = True
48+ ),
49+ self .preparer .format_column (
50+ drop .element , use_table = False
51+ )
52+ )
53+
54+ def _format_table_from_column (self , column_object , use_schema = False ):
55+ """
56+ Prepare a quoted table name from the column object (including schema if specified)
57+ """
58+ schema_table_column = self .preparer .format_column (
59+ column_object .element , use_table = True , use_schema = True
60+ )
61+
62+ name = schema_table_column .split ("." )[1 ]
63+
64+ if use_schema :
65+ name = schema_table_column .split ("." )[0 ] + '.' + name
66+
67+ return name
0 commit comments