Skip to content

Commit 76ece75

Browse files
committed
Add SetColumnComment and DropColumnComment DDL elements
1 parent 15053c2 commit 76ece75

File tree

2 files changed

+37
-2
lines changed

2 files changed

+37
-2
lines changed

src/databricks/sqlalchemy/_ddl.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,21 @@ def visit_identity_column(self, identity, **kw):
3939
)
4040
return text
4141

42+
def visit_set_column_comment(self, create, **kw):
43+
return "ALTER TABLE %s ALTER COLUMN %s COMMENT %s" % (
44+
self.preparer.format_table(create.element.table),
45+
self.preparer.format_column(create.element),
46+
self.sql_compiler.render_literal_value(
47+
create.element.comment, sqltypes.String()
48+
)
49+
)
50+
51+
def visit_drop_column_comment(self, create, **kw):
52+
return "ALTER TABLE %s ALTER COLUMN %s COMMENT ''" % (
53+
self.preparer.format_table(create.element.table),
54+
self.preparer.format_column(create.element)
55+
)
56+
4257
def get_column_specification(self, column, **kwargs):
4358
# Emit a log message if a user attempts to set autoincrement=True on a column.
4459
# See comments in test_suite.py. We may implement implicit IDENTITY using this

src/databricks/sqlalchemy/test_local/e2e/test_basic.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from sqlalchemy.engine import Engine
1919
from sqlalchemy.engine.reflection import Inspector
2020
from sqlalchemy.orm import DeclarativeBase, Mapped, Session, mapped_column
21+
from sqlalchemy.schema import DropColumnComment, SetColumnComment
2122
from sqlalchemy.types import BOOLEAN, DECIMAL, Date, DateTime, Integer, String
2223

2324
try:
@@ -191,20 +192,39 @@ def test_create_table_not_null(db_engine, metadata_obj: MetaData):
191192
def test_column_comment(db_engine, metadata_obj: MetaData):
192193
table_name = "PySQLTest_{}".format(datetime.datetime.utcnow().strftime("%s"))
193194

195+
column = Column("name", String(255), comment="some comment")
194196
SampleTable = Table(
195197
table_name,
196198
metadata_obj,
197-
Column("name", String(255), comment="some comment")
199+
column
198200
)
199201

200202
metadata_obj.create_all(db_engine)
203+
connection = db_engine.connect()
201204

202205
columns = db_engine.dialect.get_columns(
203-
connection=db_engine.connect(), table_name=table_name
206+
connection=connection, table_name=table_name
204207
)
205208

206209
assert columns[0].get('comment') == "some comment"
207210

211+
column.comment = "other comment"
212+
connection.execute(SetColumnComment(column))
213+
214+
columns = db_engine.dialect.get_columns(
215+
connection=connection, table_name=table_name
216+
)
217+
218+
assert columns[0].get('comment') == "other comment"
219+
220+
connection.execute(DropColumnComment(column))
221+
222+
columns = db_engine.dialect.get_columns(
223+
connection=connection, table_name=table_name
224+
)
225+
226+
assert columns[0].get('comment') == ""
227+
208228
metadata_obj.drop_all(db_engine)
209229

210230

0 commit comments

Comments
 (0)