1- import { literal } from 'pg-format'
2- import { coalesceRowsToArray , filterByList } from './helpers.js'
3- import { columnsSql , foreignTablesSql } from './sql/index.js'
1+ import { coalesceRowsToArray , filterByList , filterByValue } from './helpers.js'
42import { PostgresMetaResult , PostgresForeignTable } from './types.js'
3+ import { FOREIGN_TABLES_SQL } from './sql/foreign_tables.sql.js'
4+ import { COLUMNS_SQL } from './sql/columns.sql.js'
55
66export default class PostgresMetaForeignTables {
77 query : ( sql : string ) => Promise < PostgresMetaResult < any > >
@@ -37,17 +37,8 @@ export default class PostgresMetaForeignTables {
3737 offset ?: number
3838 includeColumns ?: boolean
3939 } = { } ) : Promise < PostgresMetaResult < PostgresForeignTable [ ] > > {
40- let sql = generateEnrichedForeignTablesSql ( { includeColumns } )
41- const filter = filterByList ( includedSchemas , excludedSchemas )
42- if ( filter ) {
43- sql += ` where schema ${ filter } `
44- }
45- if ( limit ) {
46- sql += ` limit ${ limit } `
47- }
48- if ( offset ) {
49- sql += ` offset ${ offset } `
50- }
40+ const schemaFilter = filterByList ( includedSchemas , excludedSchemas )
41+ const sql = generateEnrichedForeignTablesSql ( { includeColumns, schemaFilter, limit, offset } )
5142 return await this . query ( sql )
5243 }
5344
@@ -69,9 +60,11 @@ export default class PostgresMetaForeignTables {
6960 schema ?: string
7061 } ) : Promise < PostgresMetaResult < PostgresForeignTable > > {
7162 if ( id ) {
72- const sql = `${ generateEnrichedForeignTablesSql ( {
63+ const idsFilter = filterByValue ( [ `${ id } ` ] )
64+ const sql = generateEnrichedForeignTablesSql ( {
7365 includeColumns : true ,
74- } ) } where foreign_tables.id = ${ literal ( id ) } ;`
66+ idsFilter,
67+ } )
7568 const { data, error } = await this . query ( sql )
7669 if ( error ) {
7770 return { data, error }
@@ -81,11 +74,11 @@ export default class PostgresMetaForeignTables {
8174 return { data : data [ 0 ] , error }
8275 }
8376 } else if ( name ) {
84- const sql = `${ generateEnrichedForeignTablesSql ( {
77+ const nameFilter = filterByValue ( [ `${ schema } .${ name } ` ] )
78+ const sql = generateEnrichedForeignTablesSql ( {
8579 includeColumns : true ,
86- } ) } where foreign_tables.name = ${ literal ( name ) } and foreign_tables.schema = ${ literal (
87- schema
88- ) } ;`
80+ tableIdentifierFilter : nameFilter ,
81+ } )
8982 const { data, error } = await this . query ( sql )
9083 if ( error ) {
9184 return { data, error }
@@ -103,9 +96,23 @@ export default class PostgresMetaForeignTables {
10396 }
10497}
10598
106- const generateEnrichedForeignTablesSql = ( { includeColumns } : { includeColumns : boolean } ) => `
107- with foreign_tables as (${ foreignTablesSql } )
108- ${ includeColumns ? `, columns as (${ columnsSql } )` : '' }
99+ const generateEnrichedForeignTablesSql = ( {
100+ includeColumns,
101+ schemaFilter,
102+ idsFilter,
103+ tableIdentifierFilter,
104+ limit,
105+ offset,
106+ } : {
107+ includeColumns : boolean
108+ schemaFilter ?: string
109+ idsFilter ?: string
110+ tableIdentifierFilter ?: string
111+ limit ?: number
112+ offset ?: number
113+ } ) => `
114+ with foreign_tables as (${ FOREIGN_TABLES_SQL ( { schemaFilter, tableIdentifierFilter, limit, offset } ) } )
115+ ${ includeColumns ? `, columns as (${ COLUMNS_SQL ( { schemaFilter, tableIdentifierFilter, tableIdFilter : idsFilter } ) } )` : '' }
109116select
110117 *
111118 ${
0 commit comments