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