From e6ac048b58e92a9754b9b1fcddffcf5fe68ab8c3 Mon Sep 17 00:00:00 2001 From: Michael Maltese Date: Thu, 9 Oct 2025 16:24:19 -0400 Subject: [PATCH] feat: make get_table_comment work on OS390 and AS400 Fixes #174 Signed-off-by: Michael Maltese --- ibm_db_sa/reflection.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/ibm_db_sa/reflection.py b/ibm_db_sa/reflection.py index 9340049..2aa6791 100644 --- a/ibm_db_sa/reflection.py +++ b/ibm_db_sa/reflection.py @@ -512,6 +512,7 @@ class AS400Reflector(BaseReflector): Column("TABLE_SCHEMA", CoerceUnicode, key="tabschema"), Column("TABLE_NAME", CoerceUnicode, key="tabname"), Column("TABLE_TYPE", CoerceUnicode, key="tabtype"), + Column("LONG_COMMENT", CoerceUnicode, key="remarks"), schema="QSYS2") sys_table_constraints = Table("SYSCST", ischema, @@ -616,7 +617,13 @@ def has_sequence(self, connection, sequence_name, schema=None): return c.first() is not None def get_table_comment(self, connection, table_name, schema=None, **kw): - raise NotImplementedError() + current_schema = self.denormalize_name(schema or self.default_schema_name) + table_name = self.denormalize_name(table_name) + systbl = self.sys_tables + query = sql.select(systbl.c.remarks).\ + where(systbl.c.tabschema == current_schema).\ + where(systbl.c.tabname == table_name) + return {'text': connection.execute(query).scalar()} @reflection.cache def get_sequence_names(self, connection, schema=None, **kw): @@ -884,6 +891,7 @@ class OS390Reflector(BaseReflector): Column("OWNERTYPE", CoerceUnicode, key="ownertype"), Column("TYPE", CoerceUnicode, key="type"), Column("STATUS", CoerceUnicode, key="status"), + Column("REMARKS", CoerceUnicode, key="remarks"), schema="SYSIBM") sys_indexes = Table("SYSINDEXES", ischema, @@ -993,7 +1001,13 @@ def get_schema_names(self, connection, **kw): return [self.normalize_name(r[0]) for r in connection.execute(query)] def get_table_comment(self, connection, table_name, schema=None, **kw): - raise NotImplementedError() + current_schema = self.denormalize_name(schema or self.default_schema_name) + table_name = self.denormalize_name(table_name) + systbl = self.sys_tables + query = sql.select(systbl.c.remarks).\ + where(systbl.c.tabschema == current_schema).\ + where(systbl.c.tabname == table_name) + return {'text': connection.execute(query).scalar()} @reflection.cache def get_table_names(self, connection, schema=None, **kw):