Skip to content

Commit e324ff9

Browse files
committed
Updates to dialect to handle comments in alembic
1 parent 6f83144 commit e324ff9

File tree

2 files changed

+52
-1
lines changed

2 files changed

+52
-1
lines changed

src/databricks/sqlalchemy/dialect/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ class DatabricksDialect(default.DefaultDialect):
8080
supports_multivalues_insert: bool = True
8181
supports_native_decimal: bool = True
8282
supports_sane_rowcount: bool = False
83+
supports_comments: bool = True
8384

8485
@classmethod
8586
def dbapi(cls):
@@ -174,6 +175,7 @@ def get_columns(self, connection, table_name, schema=None, **kwargs):
174175
"nullable": bool(col.NULLABLE),
175176
"default": col.COLUMN_DEF,
176177
"autoincrement": False if col.IS_AUTO_INCREMENT == "NO" else True,
178+
'comment': col.REMARKS,
177179
}
178180
columns.append(this_column)
179181

src/databricks/sqlalchemy/dialect/base.py

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import re
2-
from sqlalchemy.sql import compiler
2+
from sqlalchemy.sql import compiler, sqltypes, ColumnElement
33

44

55
class DatabricksIdentifierPreparer(compiler.IdentifierPreparer):
@@ -15,3 +15,52 @@ def __init__(self, dialect):
1515
class DatabricksDDLCompiler(compiler.DDLCompiler):
1616
def post_create_table(self, table):
1717
return " USING DELTA"
18+
def visit_set_column_comment(self, create, **kw):
19+
"""
20+
Example syntax for adding column comment:
21+
"ALTER TABLE schema.table_name CHANGE COLUMN COLUMN_NAME COMMENT 'Comment to be added to column';"
22+
23+
"""
24+
return """ALTER TABLE {0} CHANGE COLUMN {1} COMMENT {2}""".format(
25+
'testing.alembic_test1',
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

Comments
 (0)