Skip to content

Conversation

mattrossman
Copy link
Contributor

@mattrossman mattrossman commented Aug 26, 2025

Resolves #113

  • Reshapes data in list_tables handler to condense response
    • Redundant fields like schema/table name on every column are removed
    • Fields that are unlikely to be needed for further DB interaction are removed (e.g. IDs, size)
    • Repeated boolean fields are condensed into a sparse list of "options"
    • Relations are condensed into an optional list of "foreign_key_constraints"
    • "primary_keys" are flattened
    • Several fields are now omitted when empty/null
  • Updates test cases

Other chore changes:

  • Updates IDE config to facilitate format-on-save with Biome

Output comparison

Before change
[
  {
    "id": 17165,
    "schema": "public",
    "name": "todos",
    "rls_enabled": true,
    "rls_forced": false,
    "replica_identity": "DEFAULT",
    "bytes": 49152,
    "size": "48 kB",
    "live_rows_estimate": 5,
    "dead_rows_estimate": 10,
    "comment": "Table to manage todo items with details such as title, description, due date, and completion status.",
    "columns": [
      {
        "table_id": 17165,
        "schema": "public",
        "table": "todos",
        "id": "17165.1",
        "ordinal_position": 1,
        "name": "id",
        "default_value": null,
        "data_type": "bigint",
        "format": "int8",
        "is_identity": true,
        "identity_generation": "ALWAYS",
        "is_generated": false,
        "is_nullable": false,
        "is_updatable": true,
        "is_unique": false,
        "enums": [],
        "check": null,
        "comment": null
      },
      {
        "table_id": 17165,
        "schema": "public",
        "table": "todos",
        "id": "17165.2",
        "ordinal_position": 2,
        "name": "title",
        "default_value": null,
        "data_type": "text",
        "format": "text",
        "is_identity": false,
        "identity_generation": null,
        "is_generated": false,
        "is_nullable": false,
        "is_updatable": true,
        "is_unique": false,
        "enums": [],
        "check": null,
        "comment": null
      },
      {
        "table_id": 17165,
        "schema": "public",
        "table": "todos",
        "id": "17165.3",
        "ordinal_position": 3,
        "name": "description",
        "default_value": null,
        "data_type": "text",
        "format": "text",
        "is_identity": false,
        "identity_generation": null,
        "is_generated": false,
        "is_nullable": true,
        "is_updatable": true,
        "is_unique": false,
        "enums": [],
        "check": null,
        "comment": null
      },
      {
        "table_id": 17165,
        "schema": "public",
        "table": "todos",
        "id": "17165.4",
        "ordinal_position": 4,
        "name": "due_date",
        "default_value": null,
        "data_type": "date",
        "format": "date",
        "is_identity": false,
        "identity_generation": null,
        "is_generated": false,
        "is_nullable": true,
        "is_updatable": true,
        "is_unique": false,
        "enums": [],
        "check": null,
        "comment": null
      },
      {
        "table_id": 17165,
        "schema": "public",
        "table": "todos",
        "id": "17165.5",
        "ordinal_position": 5,
        "name": "is_completed",
        "default_value": "false",
        "data_type": "boolean",
        "format": "bool",
        "is_identity": false,
        "identity_generation": null,
        "is_generated": false,
        "is_nullable": true,
        "is_updatable": true,
        "is_unique": false,
        "enums": [],
        "check": null,
        "comment": null
      },
      {
        "table_id": 17165,
        "schema": "public",
        "table": "todos",
        "id": "17165.6",
        "ordinal_position": 6,
        "name": "created_at",
        "default_value": "now()",
        "data_type": "timestamp with time zone",
        "format": "timestamptz",
        "is_identity": false,
        "identity_generation": null,
        "is_generated": false,
        "is_nullable": true,
        "is_updatable": true,
        "is_unique": false,
        "enums": [],
        "check": null,
        "comment": null
      },
      {
        "table_id": 17165,
        "schema": "public",
        "table": "todos",
        "id": "17165.7",
        "ordinal_position": 7,
        "name": "user_id",
        "default_value": "auth.uid()",
        "data_type": "uuid",
        "format": "uuid",
        "is_identity": false,
        "identity_generation": null,
        "is_generated": false,
        "is_nullable": true,
        "is_updatable": true,
        "is_unique": false,
        "enums": [],
        "check": null,
        "comment": null
      },
      {
        "table_id": 17165,
        "schema": "public",
        "table": "todos",
        "id": "17165.8",
        "ordinal_position": 8,
        "name": "project_id",
        "default_value": null,
        "data_type": "bigint",
        "format": "int8",
        "is_identity": false,
        "identity_generation": null,
        "is_generated": false,
        "is_nullable": true,
        "is_updatable": true,
        "is_unique": false,
        "enums": [],
        "check": null,
        "comment": null
      }
    ],
    "primary_keys": [
      {
        "schema": "public",
        "table_name": "todos",
        "name": "id",
        "table_id": 17165
      }
    ],
    "relationships": [
      {
        "id": 17186,
        "constraint_name": "todos_user_id_fkey",
        "source_schema": "public",
        "source_table_name": "todos",
        "source_column_name": "user_id",
        "target_table_schema": "auth",
        "target_table_name": "users",
        "target_column_name": "id"
      },
      {
        "id": 17217,
        "constraint_name": "todos_project_id_fkey",
        "source_schema": "public",
        "source_table_name": "todos",
        "source_column_name": "project_id",
        "target_table_schema": "public",
        "target_table_name": "projects",
        "target_column_name": "id"
      }
    ]
  },
  {
    "id": 17196,
    "schema": "public",
    "name": "projects",
    "rls_enabled": true,
    "rls_forced": false,
    "replica_identity": "DEFAULT",
    "bytes": 32768,
    "size": "32 kB",
    "live_rows_estimate": 1,
    "dead_rows_estimate": 0,
    "comment": null,
    "columns": [
      {
        "table_id": 17196,
        "schema": "public",
        "table": "projects",
        "id": "17196.1",
        "ordinal_position": 1,
        "name": "id",
        "default_value": null,
        "data_type": "bigint",
        "format": "int8",
        "is_identity": true,
        "identity_generation": "ALWAYS",
        "is_generated": false,
        "is_nullable": false,
        "is_updatable": true,
        "is_unique": false,
        "enums": [],
        "check": null,
        "comment": null
      },
      {
        "table_id": 17196,
        "schema": "public",
        "table": "projects",
        "id": "17196.2",
        "ordinal_position": 2,
        "name": "name",
        "default_value": null,
        "data_type": "text",
        "format": "text",
        "is_identity": false,
        "identity_generation": null,
        "is_generated": false,
        "is_nullable": false,
        "is_updatable": true,
        "is_unique": false,
        "enums": [],
        "check": null,
        "comment": null
      },
      {
        "table_id": 17196,
        "schema": "public",
        "table": "projects",
        "id": "17196.3",
        "ordinal_position": 3,
        "name": "description",
        "default_value": null,
        "data_type": "text",
        "format": "text",
        "is_identity": false,
        "identity_generation": null,
        "is_generated": false,
        "is_nullable": true,
        "is_updatable": true,
        "is_unique": false,
        "enums": [],
        "check": null,
        "comment": null
      },
      {
        "table_id": 17196,
        "schema": "public",
        "table": "projects",
        "id": "17196.4",
        "ordinal_position": 4,
        "name": "created_at",
        "default_value": "now()",
        "data_type": "timestamp with time zone",
        "format": "timestamptz",
        "is_identity": false,
        "identity_generation": null,
        "is_generated": false,
        "is_nullable": true,
        "is_updatable": true,
        "is_unique": false,
        "enums": [],
        "check": null,
        "comment": null
      },
      {
        "table_id": 17196,
        "schema": "public",
        "table": "projects",
        "id": "17196.5",
        "ordinal_position": 5,
        "name": "updated_at",
        "default_value": "now()",
        "data_type": "timestamp with time zone",
        "format": "timestamptz",
        "is_identity": false,
        "identity_generation": null,
        "is_generated": false,
        "is_nullable": true,
        "is_updatable": true,
        "is_unique": false,
        "enums": [],
        "check": null,
        "comment": null
      },
      {
        "table_id": 17196,
        "schema": "public",
        "table": "projects",
        "id": "17196.6",
        "ordinal_position": 6,
        "name": "user_id",
        "default_value": "auth.uid()",
        "data_type": "uuid",
        "format": "uuid",
        "is_identity": false,
        "identity_generation": null,
        "is_generated": false,
        "is_nullable": true,
        "is_updatable": true,
        "is_unique": false,
        "enums": [],
        "check": null,
        "comment": null
      }
    ],
    "primary_keys": [
      {
        "schema": "public",
        "table_name": "projects",
        "name": "id",
        "table_id": 17196
      }
    ],
    "relationships": [
      {
        "id": 17206,
        "constraint_name": "projects_user_id_fkey",
        "source_schema": "public",
        "source_table_name": "projects",
        "source_column_name": "user_id",
        "target_table_schema": "auth",
        "target_table_name": "users",
        "target_column_name": "id"
      },
      {
        "id": 17217,
        "constraint_name": "todos_project_id_fkey",
        "source_schema": "public",
        "source_table_name": "todos",
        "source_column_name": "project_id",
        "target_table_schema": "public",
        "target_table_name": "projects",
        "target_column_name": "id"
      }
    ]
  }
]
After change
[
  {
    "schema": "public",
    "name": "todos",
    "rls_enabled": true,
    "rows": 5,
    "columns": [
      {
        "name": "id",
        "data_type": "bigint",
        "format": "int8",
        "options": ["identity", "updatable"],
        "identity_generation": "ALWAYS"
      },
      {
        "name": "title",
        "data_type": "text",
        "format": "text",
        "options": ["updatable"]
      },
      {
        "name": "description",
        "data_type": "text",
        "format": "text",
        "options": ["nullable", "updatable"]
      },
      {
        "name": "due_date",
        "data_type": "date",
        "format": "date",
        "options": ["nullable", "updatable"]
      },
      {
        "name": "is_completed",
        "data_type": "boolean",
        "format": "bool",
        "options": ["nullable", "updatable"],
        "default_value": "false"
      },
      {
        "name": "created_at",
        "data_type": "timestamp with time zone",
        "format": "timestamptz",
        "options": ["nullable", "updatable"],
        "default_value": "now()"
      },
      {
        "name": "user_id",
        "data_type": "uuid",
        "format": "uuid",
        "options": ["nullable", "updatable"],
        "default_value": "auth.uid()"
      },
      {
        "name": "project_id",
        "data_type": "bigint",
        "format": "int8",
        "options": ["nullable", "updatable"]
      }
    ],
    "primary_keys": ["id"],
    "comment": "Table to manage todo items with details such as title, description, due date, and completion status.",
    "foreign_key_constraints": [
      {
        "name": "todos_user_id_fkey",
        "source": "public.todos.user_id",
        "target": "auth.users.id"
      },
      {
        "name": "todos_project_id_fkey",
        "source": "public.todos.project_id",
        "target": "public.projects.id"
      }
    ]
  },
  {
    "schema": "public",
    "name": "projects",
    "rls_enabled": true,
    "rows": 1,
    "columns": [
      {
        "name": "id",
        "data_type": "bigint",
        "format": "int8",
        "options": ["identity", "updatable"],
        "identity_generation": "ALWAYS"
      },
      {
        "name": "name",
        "data_type": "text",
        "format": "text",
        "options": ["updatable"]
      },
      {
        "name": "description",
        "data_type": "text",
        "format": "text",
        "options": ["nullable", "updatable"]
      },
      {
        "name": "created_at",
        "data_type": "timestamp with time zone",
        "format": "timestamptz",
        "options": ["nullable", "updatable"],
        "default_value": "now()"
      },
      {
        "name": "updated_at",
        "data_type": "timestamp with time zone",
        "format": "timestamptz",
        "options": ["nullable", "updatable"],
        "default_value": "now()"
      },
      {
        "name": "user_id",
        "data_type": "uuid",
        "format": "uuid",
        "options": ["nullable", "updatable"],
        "default_value": "auth.uid()"
      }
    ],
    "primary_keys": ["id"],
    "foreign_key_constraints": [
      {
        "name": "projects_user_id_fkey",
        "source": "public.projects.user_id",
        "target": "auth.users.id"
      },
      {
        "name": "todos_project_id_fkey",
        "source": "public.todos.project_id",
        "target": "public.projects.id"
      }
    ]
  }
]

Approx 1,670 tokens -> 552 tokens

Resolves AI-126

@mattrossman mattrossman merged commit adac4a1 into main Aug 26, 2025
1 of 2 checks passed
@mattrossman mattrossman deleted the matt/list-tables-terse branch August 26, 2025 21:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Make list_tables more terse
2 participants