base_columnDescription
Retrieve detailed column information for Teradata database tables, including data types and metadata, to understand table structure and schema details.
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 of the 'base_columnDescription' tool. It executes a SQL query against DBC.ColumnsVX to retrieve detailed column information (name, type mapping) for tables/views matching the provided database_name and obj_name 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)