Skip to content

Commit bf2f18b

Browse files
committed
Add SetColumnComment and DropColumnComment DDL elements
Signed-off-by: Christophe Bornet <[email protected]>
1 parent 15053c2 commit bf2f18b

File tree

2 files changed

+38
-7
lines changed

2 files changed

+38
-7
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: 23 additions & 7 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,19 +192,34 @@ 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

194-
SampleTable = Table(
195-
table_name,
196-
metadata_obj,
197-
Column("name", String(255), comment="some comment")
198-
)
195+
column = Column("name", String(255), comment="some comment")
196+
SampleTable = Table(table_name, metadata_obj, column)
199197

200198
metadata_obj.create_all(db_engine)
199+
connection = db_engine.connect()
201200

202201
columns = db_engine.dialect.get_columns(
203-
connection=db_engine.connect(), table_name=table_name
202+
connection=connection, table_name=table_name
203+
)
204+
205+
assert columns[0].get("comment") == "some comment"
206+
207+
column.comment = "other comment"
208+
connection.execute(SetColumnComment(column))
209+
210+
columns = db_engine.dialect.get_columns(
211+
connection=connection, table_name=table_name
212+
)
213+
214+
assert columns[0].get("comment") == "other comment"
215+
216+
connection.execute(DropColumnComment(column))
217+
218+
columns = db_engine.dialect.get_columns(
219+
connection=connection, table_name=table_name
204220
)
205221

206-
assert columns[0].get('comment') == "some comment"
222+
assert columns[0].get("comment") == ""
207223

208224
metadata_obj.drop_all(db_engine)
209225

0 commit comments

Comments
 (0)