Get column information for a specific table. Uses pgAdmin's SQL templates for version-aware column listing. Args: sid: Server ID did: Database ID schema_name: Schema name table_name: Table name Returns: Dictionary containing column informat
(
sid: int,
did: int,
schema_name: str,
table_name: str
)
| 517 | |
| 518 | |
| 519 | def get_table_columns( |
| 520 | sid: int, |
| 521 | did: int, |
| 522 | schema_name: str, |
| 523 | table_name: str |
| 524 | ) -> dict: |
| 525 | """ |
| 526 | Get column information for a specific table. |
| 527 | |
| 528 | Uses pgAdmin's SQL templates for version-aware column listing. |
| 529 | |
| 530 | Args: |
| 531 | sid: Server ID |
| 532 | did: Database ID |
| 533 | schema_name: Schema name |
| 534 | table_name: Table name |
| 535 | |
| 536 | Returns: |
| 537 | Dictionary containing column information |
| 538 | """ |
| 539 | conn_id = f"llm_{secrets.choice(range(1, 9999999))}" |
| 540 | manager = None |
| 541 | |
| 542 | try: |
| 543 | manager, conn = _get_connection(sid, did, conn_id) |
| 544 | status, error = _connect_readonly(manager, conn, conn_id) |
| 545 | if not status: |
| 546 | raise DatabaseToolError(f"Connection failed: {error}", |
| 547 | code="CONNECTION_ERROR") |
| 548 | |
| 549 | sversion = manager.sversion or 0 |
| 550 | driver = get_driver(config.PG_DEFAULT_DRIVER) |
| 551 | |
| 552 | # Use qtLiteral for safe SQL escaping |
| 553 | schema_lit = driver.qtLiteral(schema_name, conn) |
| 554 | table_lit = driver.qtLiteral(table_name, conn) |
| 555 | |
| 556 | # Get table OID first |
| 557 | oid_sql = f""" |
| 558 | SELECT c.oid |
| 559 | FROM pg_catalog.pg_class c |
| 560 | JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace |
| 561 | WHERE c.relname = {table_lit} |
| 562 | AND n.nspname = {schema_lit} |
| 563 | """ |
| 564 | |
| 565 | status, _ = conn.execute_void("BEGIN TRANSACTION READ ONLY") |
| 566 | if not status: |
| 567 | raise DatabaseToolError("Failed to start transaction", |
| 568 | code="TRANSACTION_ERROR") |
| 569 | |
| 570 | try: |
| 571 | status, oid_res = conn.execute_dict(oid_sql) |
| 572 | if not status or not oid_res.get('rows'): |
| 573 | raise DatabaseToolError( |
| 574 | f"Table {schema_name}.{table_name} not found", |
| 575 | code="NOT_FOUND" |
| 576 | ) |
no test coverage detected