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'
4
2
import { 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'
5
5
6
6
export default class PostgresMetaForeignTables {
7
7
query : ( sql : string ) => Promise < PostgresMetaResult < any > >
@@ -37,17 +37,8 @@ export default class PostgresMetaForeignTables {
37
37
offset ?: number
38
38
includeColumns ?: boolean
39
39
} = { } ) : 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 } )
51
42
return await this . query ( sql )
52
43
}
53
44
@@ -69,9 +60,11 @@ export default class PostgresMetaForeignTables {
69
60
schema ?: string
70
61
} ) : Promise < PostgresMetaResult < PostgresForeignTable > > {
71
62
if ( id ) {
72
- const sql = `${ generateEnrichedForeignTablesSql ( {
63
+ const idsFilter = filterByValue ( [ `${ id } ` ] )
64
+ const sql = generateEnrichedForeignTablesSql ( {
73
65
includeColumns : true ,
74
- } ) } where foreign_tables.id = ${ literal ( id ) } ;`
66
+ idsFilter,
67
+ } )
75
68
const { data, error } = await this . query ( sql )
76
69
if ( error ) {
77
70
return { data, error }
@@ -81,11 +74,11 @@ export default class PostgresMetaForeignTables {
81
74
return { data : data [ 0 ] , error }
82
75
}
83
76
} else if ( name ) {
84
- const sql = `${ generateEnrichedForeignTablesSql ( {
77
+ const nameFilter = filterByValue ( [ `${ schema } .${ name } ` ] )
78
+ const sql = generateEnrichedForeignTablesSql ( {
85
79
includeColumns : true ,
86
- } ) } where foreign_tables.name = ${ literal ( name ) } and foreign_tables.schema = ${ literal (
87
- schema
88
- ) } ;`
80
+ tableIdentifierFilter : nameFilter ,
81
+ } )
89
82
const { data, error } = await this . query ( sql )
90
83
if ( error ) {
91
84
return { data, error }
@@ -103,9 +96,23 @@ export default class PostgresMetaForeignTables {
103
96
}
104
97
}
105
98
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 } ) } )` : '' }
109
116
select
110
117
*
111
118
${
0 commit comments