base_columnDescription
Retrieve detailed column information from Teradata database tables, including data types and constraints, to understand table structure for querying and analysis.
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 'base_columnDescription' tool. It queries the DBC.ColumnsVX view to retrieve detailed column type information for tables or views matching the provided database_name (optional, defaults to '%') and obj_name (table/view name, defaults to '%'). Maps Teradata column type codes to human-readable names and returns the results with metadata.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)