From 4e3f38be4fc35601558a9249e4f3525a5754b79d Mon Sep 17 00:00:00 2001 From: Henry Su Date: Thu, 27 Aug 2026 09:59:49 -0500 Subject: [PATCH] fix: apply idsFilter when retrieving a foreign table by id retrieve({ id }) built the filter but never passed it into FOREIGN_TABLES_SQL, so the first foreign table was returned. --- src/lib/PostgresMetaForeignTables.ts | 2 +- test/lib/foreign-tables.ts | 29 ++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/lib/PostgresMetaForeignTables.ts b/src/lib/PostgresMetaForeignTables.ts index e565da434..a955b366d 100644 --- a/src/lib/PostgresMetaForeignTables.ts +++ b/src/lib/PostgresMetaForeignTables.ts @@ -111,7 +111,7 @@ const generateEnrichedForeignTablesSql = ({ limit?: number offset?: number }) => ` -with foreign_tables as (${FOREIGN_TABLES_SQL({ schemaFilter, tableIdentifierFilter, limit, offset })}) +with foreign_tables as (${FOREIGN_TABLES_SQL({ schemaFilter, tableIdentifierFilter, idsFilter, limit, offset })}) ${includeColumns ? `, columns as (${COLUMNS_SQL({ schemaFilter, tableIdentifierFilter, tableIdFilter: idsFilter })})` : ''} select * diff --git a/test/lib/foreign-tables.ts b/test/lib/foreign-tables.ts index 6be2360f1..da4eae045 100644 --- a/test/lib/foreign-tables.ts +++ b/test/lib/foreign-tables.ts @@ -173,3 +173,32 @@ test('retrieve', async () => { } `) }) + +test('retrieve by id returns the matching foreign table among several', async () => { + await pgMeta.query(` + create foreign table public.foreign_table_2 ( + id int8 not null + ) server foreign_server options (schema_name 'public', table_name 'users'); + `) + + try { + const listed = await pgMeta.foreignTables.list({ includeColumns: false }) + const first = listed.data!.find(({ name }) => name === 'foreign_table') + const second = listed.data!.find(({ name }) => name === 'foreign_table_2') + expect(first).toBeTruthy() + expect(second).toBeTruthy() + expect(first!.id).not.toBe(second!.id) + + const retrievedSecond = await pgMeta.foreignTables.retrieve({ id: second!.id }) + expect(retrievedSecond.error).toBeNull() + expect(retrievedSecond.data!.name).toBe('foreign_table_2') + expect(retrievedSecond.data!.id).toBe(second!.id) + + const retrievedFirst = await pgMeta.foreignTables.retrieve({ id: first!.id }) + expect(retrievedFirst.error).toBeNull() + expect(retrievedFirst.data!.name).toBe('foreign_table') + expect(retrievedFirst.data!.id).toBe(first!.id) + } finally { + await pgMeta.query(`drop foreign table if exists public.foreign_table_2`) + } +})