base_columnDescription
Retrieve detailed column information for a specified database table using SQLAlchemy, including bind parameters and fully rendered SQL, within the Teradata MCP Server environment.
Instructions
Shows detailed column information about a database table via SQLAlchemy, bind parameters if provided (prepared SQL), and return the fully rendered SQL (with literals) in metadata.
Arguments: database_name - Database name obj_name - table or view name
Returns: ResponseType: formatted response with query results + metadata
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| database_name | Yes | ||
| obj_name | Yes |
Implementation Reference
- The handler function that implements the core logic for the 'base_columnDescription' tool. It executes a SQL query against DBC.ColumnsVX to fetch table and column names along with mapped data types for the specified database and object patterns.def handle_base_columnDescription(conn: TeradataConnection, database_name: str | None, obj_name: str, *args, **kwargs): """ Shows detailed column information about a database table via SQLAlchemy, bind parameters if provided (prepared SQL), and return the fully rendered SQL (with literals) in metadata. Arguments: database_name - Database name obj_name - table or view name Returns: ResponseType: formatted response with query results + metadata """ logger.debug(f"Tool: handle_base_columnDescription: Args: database_name: {database_name}, obj_name: {obj_name}") if len(database_name) == 0: database_name = "%" if len(obj_name) == 0: obj_name = "%" with conn.cursor() as cur: query = """ sel TableName, ColumnName, CASE ColumnType WHEN '++' THEN 'TD_ANYTYPE' WHEN 'A1' THEN 'UDT' WHEN 'AT' THEN 'TIME' WHEN 'BF' THEN 'BYTE' WHEN 'BO' THEN 'BLOB' WHEN 'BV' THEN 'VARBYTE' WHEN 'CF' THEN 'CHAR' WHEN 'CO' THEN 'CLOB' WHEN 'CV' THEN 'VARCHAR' WHEN 'D' THEN 'DECIMAL' WHEN 'DA' THEN 'DATE' WHEN 'DH' THEN 'INTERVAL DAY TO HOUR' WHEN 'DM' THEN 'INTERVAL DAY TO MINUTE' WHEN 'DS' THEN 'INTERVAL DAY TO SECOND' WHEN 'DY' THEN 'INTERVAL DAY' WHEN 'F' THEN 'FLOAT' WHEN 'HM' THEN 'INTERVAL HOUR TO MINUTE' WHEN 'HR' THEN 'INTERVAL HOUR' WHEN 'HS' THEN 'INTERVAL HOUR TO SECOND' WHEN 'I1' THEN 'BYTEINT' WHEN 'I2' THEN 'SMALLINT' WHEN 'I8' THEN 'BIGINT' WHEN 'I' THEN 'INTEGER' WHEN 'MI' THEN 'INTERVAL MINUTE' WHEN 'MO' THEN 'INTERVAL MONTH' WHEN 'MS' THEN 'INTERVAL MINUTE TO SECOND' WHEN 'N' THEN 'NUMBER' WHEN 'PD' THEN 'PERIOD(DATE)' WHEN 'PM' THEN 'PERIOD(TIMESTAMP WITH TIME ZONE)' WHEN 'PS' THEN 'PERIOD(TIMESTAMP)' WHEN 'PT' THEN 'PERIOD(TIME)' WHEN 'PZ' THEN 'PERIOD(TIME WITH TIME ZONE)' WHEN 'SC' THEN 'INTERVAL SECOND' WHEN 'SZ' THEN 'TIMESTAMP WITH TIME ZONE' WHEN 'TS' THEN 'TIMESTAMP' WHEN 'TZ' THEN 'TIME WITH TIME ZONE' WHEN 'UT' THEN 'UDT' WHEN 'YM' THEN 'INTERVAL YEAR TO MONTH' WHEN 'YR' THEN 'INTERVAL YEAR' WHEN 'AN' THEN 'UDT' WHEN 'XM' THEN 'XML' WHEN 'JN' THEN 'JSON' WHEN 'DT' THEN 'DATASET' WHEN '??' THEN 'STGEOMETRY''ANY_TYPE' END as CType from DBC.ColumnsVX where upper(tableName) like upper(?) and upper(DatabaseName) like upper(?) """ rows = cur.execute(query, [obj_name, database_name]) data = rows_to_json(cur.description, rows.fetchall()) metadata = { "tool_name": "base_columnDescription", "database": database_name, "object": obj_name, "column_count": len(data) } logger.debug(f"Tool: handle_base_columnDescription: metadata: {metadata}") return create_response(data, metadata)