Skip to content

Commit 00def9f

Browse files
committed
feat(lib): support pagination on list
1 parent cc162ba commit 00def9f

11 files changed

+193
-45
lines changed

src/lib/PostgresMetaColumns.ts

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,25 @@ export default class PostgresMetaColumns {
1313
this.metaTables = new PostgresMetaTables(query)
1414
}
1515

16-
async list({ includeSystemSchemas = false } = {}): Promise<PostgresMetaResult<PostgresColumn[]>> {
17-
const sql = includeSystemSchemas
18-
? columnsSql
19-
: `${columnsSql} AND NOT (nc.nspname IN (${DEFAULT_SYSTEM_SCHEMAS.map(literal).join(',')}));`
16+
async list({
17+
includeSystemSchemas = false,
18+
limit,
19+
offset,
20+
}: {
21+
includeSystemSchemas?: boolean
22+
limit?: number
23+
offset?: number
24+
} = {}): Promise<PostgresMetaResult<PostgresColumn[]>> {
25+
let sql = columnsSql
26+
if (!includeSystemSchemas) {
27+
sql = `${sql} AND NOT (nc.nspname IN (${DEFAULT_SYSTEM_SCHEMAS.map(literal).join(',')}))`
28+
}
29+
if (limit) {
30+
sql = `${sql} LIMIT ${limit}`
31+
}
32+
if (offset) {
33+
sql = `${sql} OFFSET ${offset}`
34+
}
2035
return await this.query(sql)
2136
}
2237

src/lib/PostgresMetaConfig.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,20 @@ export default class PostgresMetaConfig {
88
this.query = query
99
}
1010

11-
async list(): Promise<PostgresMetaResult<PostgresConfig[]>> {
12-
return await this.query(configSql)
11+
async list({
12+
limit,
13+
offset,
14+
}: {
15+
limit?: number
16+
offset?: number
17+
} = {}): Promise<PostgresMetaResult<PostgresConfig[]>> {
18+
let sql = configSql
19+
if (limit) {
20+
sql = `${sql} LIMIT ${limit}`
21+
}
22+
if (offset) {
23+
sql = `${sql} OFFSET ${offset}`
24+
}
25+
return await this.query(sql)
1326
}
1427
}

src/lib/PostgresMetaExtensions.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,21 @@ export default class PostgresMetaExtensions {
99
this.query = query
1010
}
1111

12-
async list(): Promise<PostgresMetaResult<PostgresExtension[]>> {
13-
return await this.query(extensionsSql)
12+
async list({
13+
limit,
14+
offset,
15+
}: {
16+
limit?: number
17+
offset?: number
18+
} = {}): Promise<PostgresMetaResult<PostgresExtension[]>> {
19+
let sql = extensionsSql
20+
if (limit) {
21+
sql = `${sql} LIMIT ${limit}`
22+
}
23+
if (offset) {
24+
sql = `${sql} OFFSET ${offset}`
25+
}
26+
return await this.query(sql)
1427
}
1528

1629
async retrieve({ name }: { name: string }): Promise<PostgresMetaResult<PostgresExtension>> {

src/lib/PostgresMetaFunctions.ts

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,25 @@ export default class PostgresMetaFunctions {
1010
this.query = query
1111
}
1212

13-
async list({ includeSystemSchemas = false } = {}): Promise<
14-
PostgresMetaResult<PostgresFunction[]>
15-
> {
16-
const sql = includeSystemSchemas
17-
? enrichedFunctionsSql
18-
: `${enrichedFunctionsSql} WHERE NOT (schema IN (${DEFAULT_SYSTEM_SCHEMAS.map(literal).join(
19-
','
20-
)}));`
13+
async list({
14+
includeSystemSchemas = false,
15+
limit,
16+
offset,
17+
}: {
18+
includeSystemSchemas?: boolean
19+
limit?: number
20+
offset?: number
21+
} = {}): Promise<PostgresMetaResult<PostgresFunction[]>> {
22+
let sql = enrichedFunctionsSql
23+
if (!includeSystemSchemas) {
24+
sql = `${sql} WHERE NOT (schema IN (${DEFAULT_SYSTEM_SCHEMAS.map(literal).join(',')}))`
25+
}
26+
if (limit) {
27+
sql = `${sql} LIMIT ${limit}`
28+
}
29+
if (offset) {
30+
sql = `${sql} OFFSET ${offset}`
31+
}
2132
return await this.query(sql)
2233
}
2334

src/lib/PostgresMetaPolicies.ts

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,25 @@ export default class PostgresMetaPolicies {
1010
this.query = query
1111
}
1212

13-
async list({ includeSystemSchemas = false } = {}): Promise<PostgresMetaResult<PostgresPolicy[]>> {
14-
const sql = includeSystemSchemas
15-
? policiesSql
16-
: `${policiesSql} WHERE NOT (n.nspname IN (${DEFAULT_SYSTEM_SCHEMAS.map(literal).join(
17-
','
18-
)}));`
13+
async list({
14+
includeSystemSchemas = false,
15+
limit,
16+
offset,
17+
}: {
18+
includeSystemSchemas?: boolean
19+
limit?: number
20+
offset?: number
21+
} = {}): Promise<PostgresMetaResult<PostgresPolicy[]>> {
22+
let sql = policiesSql
23+
if (!includeSystemSchemas) {
24+
sql = `${sql} WHERE NOT (n.nspname IN (${DEFAULT_SYSTEM_SCHEMAS.map(literal).join(',')}))`
25+
}
26+
if (limit) {
27+
sql = `${sql} LIMIT ${limit}`
28+
}
29+
if (offset) {
30+
sql = `${sql} OFFSET ${offset}`
31+
}
1932
return await this.query(sql)
2033
}
2134

src/lib/PostgresMetaPublications.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,21 @@ export default class PostgresMetaPublications {
99
this.query = query
1010
}
1111

12-
async list(): Promise<PostgresMetaResult<PostgresPublication[]>> {
13-
return await this.query(publicationsSql)
12+
async list({
13+
limit,
14+
offset,
15+
}: {
16+
limit?: number
17+
offset?: number
18+
}): Promise<PostgresMetaResult<PostgresPublication[]>> {
19+
let sql = publicationsSql
20+
if (limit) {
21+
sql = `${sql} LIMIT ${limit}`
22+
}
23+
if (offset) {
24+
sql = `${sql} OFFSET ${offset}`
25+
}
26+
return await this.query(sql)
1427
}
1528

1629
async retrieve({ id }: { id: number }): Promise<PostgresMetaResult<PostgresPublication>>

src/lib/PostgresMetaRoles.ts

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,18 @@ export default class PostgresMetaRoles {
1111
this.query = query
1212
}
1313

14-
async list({ includeDefaultRoles = false, includeSystemSchemas = false } = {}): Promise<
15-
PostgresMetaResult<PostgresRole[]>
16-
> {
17-
const sql = `
14+
async list({
15+
includeDefaultRoles = false,
16+
includeSystemSchemas = false,
17+
limit,
18+
offset,
19+
}: {
20+
includeDefaultRoles?: boolean
21+
includeSystemSchemas?: boolean
22+
limit?: number
23+
offset?: number
24+
} = {}): Promise<PostgresMetaResult<PostgresRole[]>> {
25+
let sql = `
1826
WITH roles AS (${
1927
includeDefaultRoles
2028
? rolesSql
@@ -29,7 +37,13 @@ SELECT
2937
*,
3038
${coalesceRowsToArray('grants', 'SELECT * FROM grants WHERE grants.grantee = roles.name')}
3139
FROM
32-
roles;`
40+
roles`
41+
if (limit) {
42+
sql = `${sql} LIMIT ${limit}`
43+
}
44+
if (offset) {
45+
sql = `${sql} OFFSET ${offset}`
46+
}
3347
return await this.query(sql)
3448
}
3549

src/lib/PostgresMetaSchemas.ts

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,25 @@ export default class PostgresMetaSchemas {
1515
this.query = query
1616
}
1717

18-
async list({ includeSystemSchemas = false } = {}): Promise<PostgresMetaResult<PostgresSchema[]>> {
19-
const sql = includeSystemSchemas
20-
? schemasSql
21-
: `${schemasSql} AND NOT (n.nspname IN (${DEFAULT_SYSTEM_SCHEMAS.map(literal).join(',')}));`
18+
async list({
19+
includeSystemSchemas = false,
20+
limit,
21+
offset,
22+
}: {
23+
includeSystemSchemas?: boolean
24+
limit?: number
25+
offset?: number
26+
} = {}): Promise<PostgresMetaResult<PostgresSchema[]>> {
27+
let sql = schemasSql
28+
if (!includeSystemSchemas) {
29+
sql = `${sql} AND NOT (n.nspname IN (${DEFAULT_SYSTEM_SCHEMAS.map(literal).join(',')}))`
30+
}
31+
if (limit) {
32+
sql = `${sql} LIMIT ${limit}`
33+
}
34+
if (offset) {
35+
sql = `${sql} OFFSET ${offset}`
36+
}
2237
return await this.query(sql)
2338
}
2439

src/lib/PostgresMetaTables.ts

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,25 @@ export default class PostgresMetaTables {
1818
this.query = query
1919
}
2020

21-
async list({ includeSystemSchemas = false } = {}): Promise<PostgresMetaResult<PostgresTable[]>> {
22-
const sql = includeSystemSchemas
23-
? enrichedTablesSql
24-
: `${enrichedTablesSql} WHERE NOT (schema IN (${DEFAULT_SYSTEM_SCHEMAS.map(literal).join(
25-
','
26-
)}));`
21+
async list({
22+
includeSystemSchemas = false,
23+
limit,
24+
offset,
25+
}: {
26+
includeSystemSchemas?: boolean
27+
limit?: number
28+
offset?: number
29+
} = {}): Promise<PostgresMetaResult<PostgresTable[]>> {
30+
let sql = enrichedTablesSql
31+
if (!includeSystemSchemas) {
32+
sql = `${sql} WHERE NOT (schema IN (${DEFAULT_SYSTEM_SCHEMAS.map(literal).join(',')}))`
33+
}
34+
if (limit) {
35+
sql = `${sql} LIMIT ${limit}`
36+
}
37+
if (offset) {
38+
sql = `${sql} OFFSET ${offset}`
39+
}
2740
return await this.query(sql)
2841
}
2942

src/lib/PostgresMetaTriggers.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,21 @@ export default class PostgresMetaTriggers {
99
this.query = query
1010
}
1111

12-
async list(): Promise<PostgresMetaResult<PostgresTrigger[]>> {
13-
return await this.query(enrichedTriggersSql)
12+
async list({
13+
limit,
14+
offset,
15+
}: {
16+
limit?: number
17+
offset?: number
18+
} = {}): Promise<PostgresMetaResult<PostgresTrigger[]>> {
19+
let sql = enrichedTriggersSql
20+
if (limit) {
21+
sql = `${sql} LIMIT ${limit}`
22+
}
23+
if (offset) {
24+
sql = `${sql} OFFSET ${offset}`
25+
}
26+
return await this.query(sql)
1427
}
1528

1629
async retrieve({ id }: { id: number }): Promise<PostgresMetaResult<PostgresTrigger>>

src/lib/PostgresMetaTypes.ts

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,25 @@ export default class PostgresMetaTypes {
1010
this.query = query
1111
}
1212

13-
async list({ includeSystemSchemas = false } = {}): Promise<PostgresMetaResult<PostgresType[]>> {
14-
const sql = includeSystemSchemas
15-
? typesSql
16-
: `${typesSql} AND NOT (n.nspname IN (${DEFAULT_SYSTEM_SCHEMAS.map(literal).join(',')}));`
13+
async list({
14+
includeSystemSchemas = false,
15+
limit,
16+
offset,
17+
}: {
18+
includeSystemSchemas?: boolean
19+
limit?: number
20+
offset?: number
21+
} = {}): Promise<PostgresMetaResult<PostgresType[]>> {
22+
let sql = typesSql
23+
if (!includeSystemSchemas) {
24+
sql = `${sql} AND NOT (n.nspname IN (${DEFAULT_SYSTEM_SCHEMAS.map(literal).join(',')}))`
25+
}
26+
if (limit) {
27+
sql = `${sql} LIMIT ${limit}`
28+
}
29+
if (offset) {
30+
sql = `${sql} OFFSET ${offset}`
31+
}
1732
return await this.query(sql)
1833
}
1934
}

0 commit comments

Comments
 (0)