diff --git a/internal/tools/cockroachdb/cockroachdblisttables/cockroachdblisttables.go b/internal/tools/cockroachdb/cockroachdblisttables/cockroachdblisttables.go index fa093a687866..c015a5bfcc45 100644 --- a/internal/tools/cockroachdb/cockroachdblisttables/cockroachdblisttables.go +++ b/internal/tools/cockroachdb/cockroachdblisttables/cockroachdblisttables.go @@ -49,7 +49,7 @@ const listTablesStatement = ` CROSS JOIN desired_relkinds dk WHERE t.relkind = ANY(dk.kinds) - AND (NULLIF(TRIM($1), '') IS NULL OR t.relname = ANY(string_to_array($1,','))) + AND (NULLIF(TRIM($1), '') IS NULL OR t.relname = ANY(regexp_split_to_array(TRIM($1), '\s*,\s*'))) AND ns.nspname NOT IN ('pg_catalog', 'information_schema', 'pg_toast', 'crdb_internal', 'pg_extension') AND ns.nspname NOT LIKE 'pg_temp_%' AND ns.nspname NOT LIKE 'pg_toast_temp_%' ), diff --git a/internal/tools/postgres/postgreslisttables/postgreslisttables.go b/internal/tools/postgres/postgreslisttables/postgreslisttables.go index e8e2e6b7b213..50cbc33a8acf 100644 --- a/internal/tools/postgres/postgreslisttables/postgreslisttables.go +++ b/internal/tools/postgres/postgreslisttables/postgreslisttables.go @@ -48,7 +48,7 @@ const listTablesStatement = ` CROSS JOIN desired_relkinds dk WHERE t.relkind = ANY(dk.kinds) -- Filter by selected table relkinds ('r', 'p') - AND (NULLIF(TRIM($1), '') IS NULL OR t.relname = ANY(string_to_array($1,','))) -- $1 is object_names + AND (NULLIF(TRIM($1), '') IS NULL OR t.relname = ANY(regexp_split_to_array(TRIM($1), '\s*,\s*'))) -- $1 is object_names AND ns.nspname NOT IN ('pg_catalog', 'information_schema', 'pg_toast','google_ml') AND ns.nspname NOT LIKE 'pg_temp_%' AND ns.nspname NOT LIKE 'pg_toast_temp_%' ), diff --git a/tests/tool.go b/tests/tool.go index 48b8e900b86e..9d3ceb18eaf3 100644 --- a/tests/tool.go +++ b/tests/tool.go @@ -1407,6 +1407,13 @@ func RunPostgresListTablesTest(t *testing.T, tableNameParam, tableNameAuth, user wantStatusCode: http.StatusOK, want: fmt.Sprintf("[%s,%s]", getDetailedWant(tableNameAuth, authTableColumns), getDetailedWant(tableNameParam, paramTableColumns)), }, + { + name: "invoke list_tables with multiple table names and surrounding whitespace", + toolName: "list_tables", + args: map[string]any{"table_names": fmt.Sprintf(" %s , %s ", tableNameParam, tableNameAuth)}, + wantStatusCode: http.StatusOK, + want: fmt.Sprintf("[%s,%s]", getDetailedWant(tableNameAuth, authTableColumns), getDetailedWant(tableNameParam, paramTableColumns)), + }, { name: "invoke list_tables with non-existent table", toolName: "list_tables",