@typed-sql/postgres 2.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +289 -0
- package/README.md +17 -0
- package/dist/packages/postgres/src/bulk.d.ts.map +1 -1
- package/dist/packages/postgres/src/bulk.js +1 -1
- package/dist/packages/postgres/src/bulk.js.map +1 -1
- package/dist/packages/postgres/src/capabilities.d.ts +19 -0
- package/dist/packages/postgres/src/capabilities.d.ts.map +1 -0
- package/dist/packages/postgres/src/capabilities.js +120 -0
- package/dist/packages/postgres/src/capabilities.js.map +1 -0
- package/dist/packages/postgres/src/catalog/generated/14.d.ts +4 -0
- package/dist/packages/postgres/src/catalog/generated/14.d.ts.map +1 -0
- package/dist/packages/postgres/src/catalog/generated/14.js +2018 -0
- package/dist/packages/postgres/src/catalog/generated/14.js.map +1 -0
- package/dist/packages/postgres/src/catalog/generated/15.d.ts +4 -0
- package/dist/packages/postgres/src/catalog/generated/15.d.ts.map +1 -0
- package/dist/packages/postgres/src/catalog/generated/15.js +2012 -0
- package/dist/packages/postgres/src/catalog/generated/15.js.map +1 -0
- package/dist/packages/postgres/src/catalog/generated/16.d.ts +4 -0
- package/dist/packages/postgres/src/catalog/generated/16.d.ts.map +1 -0
- package/dist/packages/postgres/src/catalog/generated/16.js +2012 -0
- package/dist/packages/postgres/src/catalog/generated/16.js.map +1 -0
- package/dist/packages/postgres/src/catalog/generated/17.d.ts +4 -0
- package/dist/packages/postgres/src/catalog/generated/17.d.ts.map +1 -0
- package/dist/packages/postgres/src/catalog/generated/17.js +2012 -0
- package/dist/packages/postgres/src/catalog/generated/17.js.map +1 -0
- package/dist/packages/postgres/src/catalog/generated/18.d.ts +4 -0
- package/dist/packages/postgres/src/catalog/generated/18.d.ts.map +1 -0
- package/dist/packages/postgres/src/catalog/generated/18.js +2048 -0
- package/dist/packages/postgres/src/catalog/generated/18.js.map +1 -0
- package/dist/packages/postgres/src/catalog/generated/19.d.ts +4 -0
- package/dist/packages/postgres/src/catalog/generated/19.d.ts.map +1 -0
- package/dist/packages/postgres/src/catalog/generated/19.js +2048 -0
- package/dist/packages/postgres/src/catalog/generated/19.js.map +1 -0
- package/dist/packages/postgres/src/catalog/index.d.ts +14 -0
- package/dist/packages/postgres/src/catalog/index.d.ts.map +1 -0
- package/dist/packages/postgres/src/catalog/index.js +86 -0
- package/dist/packages/postgres/src/catalog/index.js.map +1 -0
- package/dist/packages/postgres/src/catalog/types.d.ts +46 -0
- package/dist/packages/postgres/src/catalog/types.d.ts.map +1 -0
- package/dist/packages/postgres/src/catalog/types.js +2 -0
- package/dist/packages/postgres/src/catalog/types.js.map +1 -0
- package/dist/packages/postgres/src/expression-evidence.d.ts +11 -0
- package/dist/packages/postgres/src/expression-evidence.d.ts.map +1 -0
- package/dist/packages/postgres/src/expression-evidence.js +33 -0
- package/dist/packages/postgres/src/expression-evidence.js.map +1 -0
- package/dist/packages/postgres/src/extensions.d.ts +61 -0
- package/dist/packages/postgres/src/extensions.d.ts.map +1 -0
- package/dist/packages/postgres/src/extensions.js +311 -0
- package/dist/packages/postgres/src/extensions.js.map +1 -0
- package/dist/packages/postgres/src/index.d.ts +13 -0
- package/dist/packages/postgres/src/index.d.ts.map +1 -1
- package/dist/packages/postgres/src/index.js +51 -17
- package/dist/packages/postgres/src/index.js.map +1 -1
- package/dist/packages/postgres/src/parser/index.d.ts +8 -0
- package/dist/packages/postgres/src/parser/index.d.ts.map +1 -0
- package/dist/packages/postgres/src/parser/index.js +4 -0
- package/dist/packages/postgres/src/parser/index.js.map +1 -0
- package/dist/packages/postgres/src/parser/parser.d.ts +14 -0
- package/dist/packages/postgres/src/parser/parser.d.ts.map +1 -0
- package/dist/packages/postgres/src/parser/parser.js +2683 -0
- package/dist/packages/postgres/src/parser/parser.js.map +1 -0
- package/dist/packages/postgres/src/parser/tokenizer.d.ts +15 -0
- package/dist/packages/postgres/src/parser/tokenizer.d.ts.map +1 -0
- package/dist/packages/postgres/src/parser/tokenizer.js +470 -0
- package/dist/packages/postgres/src/parser/tokenizer.js.map +1 -0
- package/dist/packages/postgres/src/parser/types.d.ts +652 -0
- package/dist/packages/postgres/src/parser/types.d.ts.map +1 -0
- package/dist/packages/postgres/src/parser/types.js +9 -0
- package/dist/packages/postgres/src/parser/types.js.map +1 -0
- package/dist/packages/postgres/src/parser/walk.d.ts +13 -0
- package/dist/packages/postgres/src/parser/walk.d.ts.map +1 -0
- package/dist/packages/postgres/src/parser/walk.js +374 -0
- package/dist/packages/postgres/src/parser/walk.js.map +1 -0
- package/dist/packages/postgres/src/pg.d.ts +35 -4
- package/dist/packages/postgres/src/pg.d.ts.map +1 -1
- package/dist/packages/postgres/src/pg.js +355 -40
- package/dist/packages/postgres/src/pg.js.map +1 -1
- package/dist/packages/postgres/src/prepared.d.ts +5 -3
- package/dist/packages/postgres/src/prepared.d.ts.map +1 -1
- package/dist/packages/postgres/src/prepared.js +23 -15
- package/dist/packages/postgres/src/prepared.js.map +1 -1
- package/dist/packages/postgres/src/provider.d.ts +149 -11
- package/dist/packages/postgres/src/provider.d.ts.map +1 -1
- package/dist/packages/postgres/src/provider.js +652 -42
- package/dist/packages/postgres/src/provider.js.map +1 -1
- package/dist/packages/postgres/src/resolver.d.ts +1 -1
- package/dist/packages/postgres/src/resolver.d.ts.map +1 -1
- package/dist/packages/postgres/src/resolver.js +2767 -203
- package/dist/packages/postgres/src/resolver.js.map +1 -1
- package/dist/packages/postgres/src/routing.d.ts.map +1 -1
- package/dist/packages/postgres/src/routing.js +1 -1
- package/dist/packages/postgres/src/routing.js.map +1 -1
- package/dist/packages/postgres/src/runtime-compatibility.d.ts +14 -0
- package/dist/packages/postgres/src/runtime-compatibility.d.ts.map +1 -0
- package/dist/packages/postgres/src/runtime-compatibility.js +63 -0
- package/dist/packages/postgres/src/runtime-compatibility.js.map +1 -0
- package/dist/packages/postgres/src/runtime.d.ts +10 -1
- package/dist/packages/postgres/src/runtime.d.ts.map +1 -1
- package/dist/packages/postgres/src/runtime.js +50 -2
- package/dist/packages/postgres/src/runtime.js.map +1 -1
- package/dist/packages/postgres/src/semantics.d.ts +1 -1
- package/dist/packages/postgres/src/semantics.d.ts.map +1 -1
- package/dist/packages/postgres/src/semantics.js +19 -6
- package/dist/packages/postgres/src/semantics.js.map +1 -1
- package/dist/packages/postgres/src/support.d.ts +29 -0
- package/dist/packages/postgres/src/support.d.ts.map +1 -0
- package/dist/packages/postgres/src/support.js +45 -0
- package/dist/packages/postgres/src/support.js.map +1 -0
- package/dist/packages/postgres/src/type-policy.d.ts.map +1 -1
- package/dist/packages/postgres/src/type-policy.js +34 -43
- package/dist/packages/postgres/src/type-policy.js.map +1 -1
- package/dist/packages/postgres/src/type-resolution.d.ts +33 -0
- package/dist/packages/postgres/src/type-resolution.d.ts.map +1 -0
- package/dist/packages/postgres/src/type-resolution.js +906 -0
- package/dist/packages/postgres/src/type-resolution.js.map +1 -0
- package/package.json +7 -4
|
@@ -1,20 +1,22 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { PreparedQueryRenderCache, type Query, type RenderedQuery, type SqlRenderer } from "@typed-sql/core";
|
|
2
2
|
export interface PostgresPreparedQueryFactory<Arguments extends readonly unknown[], Row, Params extends readonly unknown[]> {
|
|
3
3
|
(...args: Arguments): Query<Row, Params>;
|
|
4
4
|
readonly statementName: string;
|
|
5
5
|
}
|
|
6
6
|
export interface PostgresPreparedQueryMetadata {
|
|
7
|
+
readonly logicalStatementName: string;
|
|
7
8
|
readonly statementName: string;
|
|
8
9
|
readonly rendered: RenderedQuery;
|
|
9
10
|
}
|
|
10
11
|
interface PreparedStatement {
|
|
11
|
-
|
|
12
|
+
readonly variants: PreparedQueryRenderCache;
|
|
12
13
|
}
|
|
13
14
|
export interface PostgresPreparedQueryState {
|
|
15
|
+
readonly variantCapacity: number;
|
|
14
16
|
readonly statements: Map<string, PreparedStatement>;
|
|
15
17
|
readonly queries: WeakMap<object, PostgresPreparedQueryMetadata>;
|
|
16
18
|
}
|
|
17
|
-
export declare function createPostgresPreparedQueryState(): PostgresPreparedQueryState;
|
|
19
|
+
export declare function createPostgresPreparedQueryState(variantCapacity?: number): PostgresPreparedQueryState;
|
|
18
20
|
export declare function preparePostgresQuery<Arguments extends readonly unknown[], Row, Params extends readonly unknown[]>(state: PostgresPreparedQueryState, renderer: SqlRenderer, statementName: string, factory: (...args: Arguments) => Query<Row, Params>): PostgresPreparedQueryFactory<Arguments, Row, Params>;
|
|
19
21
|
export {};
|
|
20
22
|
//# sourceMappingURL=prepared.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepared.d.ts","sourceRoot":"","sources":["../../../../src/prepared.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prepared.d.ts","sourceRoot":"","sources":["../../../../src/prepared.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,wBAAwB,EACxB,KAAK,KAAK,EACV,KAAK,aAAa,EAClB,KAAK,WAAW,EACjB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,4BAA4B,CAC3C,SAAS,SAAS,SAAS,OAAO,EAAE,EACpC,GAAG,EACH,MAAM,SAAS,SAAS,OAAO,EAAE;IAEjC,CAAC,GAAG,IAAI,EAAE,SAAS,GAAG,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACzC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;CAClC;AAED,UAAU,iBAAiB;IACzB,QAAQ,CAAC,QAAQ,EAAE,wBAAwB,CAAC;CAC7C;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACpD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAC;CAClE;AAED,wBAAgB,gCAAgC,CAC9C,eAAe,SAA4C,GAC1D,0BAA0B,CAQ5B;AAcD,wBAAgB,oBAAoB,CAAC,SAAS,SAAS,SAAS,OAAO,EAAE,EAAE,GAAG,EAAE,MAAM,SAAS,SAAS,OAAO,EAAE,EAC/G,KAAK,EAAE,0BAA0B,EACjC,QAAQ,EAAE,WAAW,EACrB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,SAAS,KAAK,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,GAClD,4BAA4B,CAAC,SAAS,EAAE,GAAG,EAAE,MAAM,CAAC,CAwCtD"}
|
|
@@ -1,10 +1,20 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { DEFAULT_MAX_PREPARED_CARDINALITY_VARIANTS, PreparedQueryRenderCache, } from "@typed-sql/core";
|
|
3
|
+
export function createPostgresPreparedQueryState(variantCapacity = DEFAULT_MAX_PREPARED_CARDINALITY_VARIANTS) {
|
|
4
|
+
// Validate eagerly even when no prepared factory is registered.
|
|
5
|
+
new PreparedQueryRenderCache(variantCapacity);
|
|
3
6
|
return {
|
|
7
|
+
variantCapacity,
|
|
4
8
|
statements: new Map(),
|
|
5
9
|
queries: new WeakMap(),
|
|
6
10
|
};
|
|
7
11
|
}
|
|
12
|
+
function physicalStatementName(statementName, text, primary) {
|
|
13
|
+
if (primary)
|
|
14
|
+
return statementName;
|
|
15
|
+
const fingerprint = createHash("sha256").update(`${statementName}\0${text}`).digest("hex").slice(0, 56);
|
|
16
|
+
return `tsqlv_${fingerprint}`;
|
|
17
|
+
}
|
|
8
18
|
function validateStatementName(statementName) {
|
|
9
19
|
if (typeof statementName !== "string" || statementName.length === 0 || statementName.includes("\0")) {
|
|
10
20
|
throw new TypeError("Prepared statement names must be non-empty and cannot contain NUL");
|
|
@@ -15,31 +25,29 @@ export function preparePostgresQuery(state, renderer, statementName, factory) {
|
|
|
15
25
|
if (state.statements.has(statementName)) {
|
|
16
26
|
throw new TypeError(`Prepared statement name ${JSON.stringify(statementName)} is already registered`);
|
|
17
27
|
}
|
|
18
|
-
const statement = {
|
|
28
|
+
const statement = { variants: new PreparedQueryRenderCache(state.variantCapacity) };
|
|
19
29
|
state.statements.set(statementName, statement);
|
|
20
30
|
const prepared = (...args) => {
|
|
21
31
|
const query = factory(...args);
|
|
22
32
|
const existing = state.queries.get(query);
|
|
23
|
-
if (existing !== undefined && existing.
|
|
33
|
+
if (existing !== undefined && existing.logicalStatementName !== statementName) {
|
|
24
34
|
throw new TypeError(`A query cannot use both prepared statement ${JSON.stringify(existing.statementName)} and ${JSON.stringify(statementName)}`);
|
|
25
35
|
}
|
|
26
36
|
let rendered = existing?.rendered;
|
|
27
|
-
|
|
37
|
+
let physicalName = existing?.statementName;
|
|
28
38
|
if (rendered === undefined) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
rendered = bindQueryRenderSkeleton(query, skeleton);
|
|
39
|
+
const variant = statement.variants.bind(query, renderer);
|
|
40
|
+
rendered = variant?.rendered;
|
|
41
|
+
if (variant !== undefined) {
|
|
42
|
+
physicalName = physicalStatementName(statementName, variant.rendered.text, variant.primary);
|
|
36
43
|
}
|
|
37
44
|
}
|
|
38
|
-
if (rendered === undefined) {
|
|
45
|
+
if (rendered === undefined || physicalName === undefined) {
|
|
39
46
|
throw new TypeError(`Prepared statement ${JSON.stringify(statementName)} must always render the same SQL text and structure`);
|
|
40
47
|
}
|
|
41
|
-
if (existing === undefined)
|
|
42
|
-
state.queries.set(query, { statementName, rendered });
|
|
48
|
+
if (existing === undefined) {
|
|
49
|
+
state.queries.set(query, { logicalStatementName: statementName, statementName: physicalName, rendered });
|
|
50
|
+
}
|
|
43
51
|
return query;
|
|
44
52
|
};
|
|
45
53
|
return Object.freeze(Object.assign(prepared, { statementName }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepared.js","sourceRoot":"","sources":["../../../../src/prepared.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"prepared.js","sourceRoot":"","sources":["../../../../src/prepared.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { SchemaInput, SchemaProvider,
|
|
1
|
+
import type { SchemaInput, SchemaProvider, SchemaSnapshotV2 } from "@typed-sql/schema";
|
|
2
|
+
import { type PostgresExtensionManifest } from "./extensions.js";
|
|
2
3
|
import { type PostgresTypePolicy } from "./type-policy.js";
|
|
3
4
|
export interface PostgresQueryResult<Row> {
|
|
4
5
|
readonly rows: readonly Row[];
|
|
@@ -24,23 +25,60 @@ export interface PostgresSchemaProviderOptions {
|
|
|
24
25
|
readonly pool?: PostgresIntrospectionPool;
|
|
25
26
|
readonly includeSchemas?: readonly string[];
|
|
26
27
|
readonly typePolicy?: PostgresTypePolicy;
|
|
28
|
+
readonly extensionManifests?: readonly PostgresExtensionManifest[];
|
|
27
29
|
}
|
|
28
30
|
export declare const postgresCatalogQueries: {
|
|
29
|
-
readonly version:
|
|
31
|
+
readonly version: `
|
|
32
|
+
SELECT current_setting('server_version') AS server_version,
|
|
33
|
+
current_setting('standard_conforming_strings') AS standard_conforming_strings,
|
|
34
|
+
current_setting('search_path') AS search_path,
|
|
35
|
+
ARRAY(SELECT extname || ':' || extversion FROM pg_catalog.pg_extension ORDER BY extname) AS extensions
|
|
36
|
+
`;
|
|
37
|
+
readonly relations: `
|
|
38
|
+
SELECT
|
|
39
|
+
n.nspname AS schema_name,
|
|
40
|
+
c.relname AS table_name,
|
|
41
|
+
c.relkind AS relation_kind,
|
|
42
|
+
c.relispartition AS is_partition,
|
|
43
|
+
pn.nspname AS partition_parent_schema,
|
|
44
|
+
pc.relname AS partition_parent_table,
|
|
45
|
+
pt.partstrat AS partition_strategy
|
|
46
|
+
FROM pg_catalog.pg_class AS c
|
|
47
|
+
JOIN pg_catalog.pg_namespace AS n ON n.oid = c.relnamespace
|
|
48
|
+
LEFT JOIN pg_catalog.pg_inherits AS inh ON inh.inhrelid = c.oid AND c.relispartition
|
|
49
|
+
LEFT JOIN pg_catalog.pg_class AS pc ON pc.oid = inh.inhparent
|
|
50
|
+
LEFT JOIN pg_catalog.pg_namespace AS pn ON pn.oid = pc.relnamespace
|
|
51
|
+
LEFT JOIN pg_catalog.pg_partitioned_table AS pt ON pt.partrelid = c.oid
|
|
52
|
+
WHERE c.relkind IN ('r', 'p', 'v', 'm', 'f')
|
|
53
|
+
AND n.nspname NOT IN ('pg_catalog', 'information_schema')
|
|
54
|
+
AND n.nspname NOT LIKE 'pg_toast%'
|
|
55
|
+
AND ($1::text[] IS NULL OR n.nspname = ANY($1::text[]))
|
|
56
|
+
ORDER BY n.nspname, c.relname
|
|
57
|
+
`;
|
|
30
58
|
readonly columns: `
|
|
31
59
|
SELECT
|
|
32
60
|
n.nspname AS schema_name,
|
|
33
61
|
c.relname AS table_name,
|
|
34
62
|
a.attname AS column_name,
|
|
63
|
+
(a.attnum - 1) AS column_position,
|
|
64
|
+
c.relkind AS relation_kind,
|
|
35
65
|
format_type(a.atttypid, a.atttypmod) AS database_type,
|
|
66
|
+
'pg:' || a.atttypid::text AS type_identity,
|
|
36
67
|
a.attnotnull AS not_null,
|
|
37
68
|
(t.typcategory = 'A') AS is_array,
|
|
38
|
-
pg_get_expr(ad.adbin, ad.adrelid) AS default_expression
|
|
69
|
+
pg_get_expr(ad.adbin, ad.adrelid) AS default_expression,
|
|
70
|
+
a.attgenerated AS generated_kind,
|
|
71
|
+
a.attidentity AS identity_kind,
|
|
72
|
+
CASE WHEN a.attcollation = 0 THEN NULL ELSE quote_ident(cn.nspname) || '.' || quote_ident(coll.collname) END AS collation_name,
|
|
73
|
+
((pg_relation_is_updatable(c.oid, true) & 8) = 8 AND a.attgenerated = '') AS insertable,
|
|
74
|
+
((pg_relation_is_updatable(c.oid, true) & 4) = 4 AND a.attgenerated = '') AS updatable
|
|
39
75
|
FROM pg_catalog.pg_attribute AS a
|
|
40
76
|
JOIN pg_catalog.pg_class AS c ON c.oid = a.attrelid
|
|
41
77
|
JOIN pg_catalog.pg_namespace AS n ON n.oid = c.relnamespace
|
|
42
78
|
JOIN pg_catalog.pg_type AS t ON t.oid = a.atttypid
|
|
43
79
|
LEFT JOIN pg_catalog.pg_attrdef AS ad ON ad.adrelid = a.attrelid AND ad.adnum = a.attnum
|
|
80
|
+
LEFT JOIN pg_catalog.pg_collation AS coll ON coll.oid = a.attcollation
|
|
81
|
+
LEFT JOIN pg_catalog.pg_namespace AS cn ON cn.oid = coll.collnamespace
|
|
44
82
|
WHERE a.attnum > 0
|
|
45
83
|
AND NOT a.attisdropped
|
|
46
84
|
AND c.relkind IN ('r', 'p', 'v', 'm', 'f')
|
|
@@ -50,7 +88,8 @@ export declare const postgresCatalogQueries: {
|
|
|
50
88
|
ORDER BY n.nspname, c.relname, a.attnum
|
|
51
89
|
`;
|
|
52
90
|
readonly enums: `
|
|
53
|
-
SELECT n.nspname AS schema_name, t.typname AS type_name, e.enumlabel AS enum_label
|
|
91
|
+
SELECT n.nspname AS schema_name, t.typname AS type_name, e.enumlabel AS enum_label,
|
|
92
|
+
e.enumsortorder::double precision AS enum_position
|
|
54
93
|
FROM pg_catalog.pg_type AS t
|
|
55
94
|
JOIN pg_catalog.pg_namespace AS n ON n.oid = t.typnamespace
|
|
56
95
|
JOIN pg_catalog.pg_enum AS e ON e.enumtypid = t.oid
|
|
@@ -62,8 +101,15 @@ export declare const postgresCatalogQueries: {
|
|
|
62
101
|
SELECT
|
|
63
102
|
n.nspname AS schema_name,
|
|
64
103
|
t.typname AS domain_name,
|
|
104
|
+
'pg:' || t.oid::text AS type_identity,
|
|
65
105
|
format_type(t.typbasetype, t.typtypmod) AS database_type,
|
|
66
|
-
t.typnotnull AS not_null
|
|
106
|
+
t.typnotnull AS not_null,
|
|
107
|
+
ARRAY(
|
|
108
|
+
SELECT pg_get_constraintdef(con.oid, true)
|
|
109
|
+
FROM pg_catalog.pg_constraint AS con
|
|
110
|
+
WHERE con.contypid = t.oid
|
|
111
|
+
ORDER BY con.conname
|
|
112
|
+
) AS check_expressions
|
|
67
113
|
FROM pg_catalog.pg_type AS t
|
|
68
114
|
JOIN pg_catalog.pg_namespace AS n ON n.oid = t.typnamespace
|
|
69
115
|
WHERE t.typtype = 'd'
|
|
@@ -75,27 +121,119 @@ export declare const postgresCatalogQueries: {
|
|
|
75
121
|
SELECT
|
|
76
122
|
n.nspname AS schema_name,
|
|
77
123
|
p.proname AS function_name,
|
|
124
|
+
'pg:' || p.oid::text AS routine_identity,
|
|
125
|
+
p.prokind AS routine_kind,
|
|
78
126
|
ARRAY(
|
|
79
127
|
SELECT format_type(argument_oid, NULL)
|
|
80
|
-
FROM unnest(p.proargtypes::oid[]) WITH ORDINALITY AS arguments(argument_oid, position)
|
|
128
|
+
FROM unnest(COALESCE(p.proallargtypes, p.proargtypes::oid[])) WITH ORDINALITY AS arguments(argument_oid, position)
|
|
81
129
|
ORDER BY position
|
|
82
130
|
) AS argument_types,
|
|
131
|
+
COALESCE(p.proargnames, ARRAY[]::text[]) AS argument_names,
|
|
132
|
+
ARRAY(
|
|
133
|
+
SELECT mode::text
|
|
134
|
+
FROM unnest(COALESCE(p.proargmodes, ARRAY[]::"char"[])) WITH ORDINALITY AS modes(mode, position)
|
|
135
|
+
ORDER BY position
|
|
136
|
+
) AS argument_modes,
|
|
137
|
+
p.pronargdefaults AS argument_defaults,
|
|
83
138
|
format_type(p.prorettype, NULL) AS database_return_type,
|
|
84
139
|
p.proretset AS set_returning,
|
|
85
|
-
p.provolatile AS volatility
|
|
140
|
+
p.provolatile AS volatility,
|
|
141
|
+
p.proisstrict AS strict,
|
|
142
|
+
p.proparallel AS parallel_safety
|
|
86
143
|
FROM pg_catalog.pg_proc AS p
|
|
87
144
|
JOIN pg_catalog.pg_namespace AS n ON n.oid = p.pronamespace
|
|
88
|
-
WHERE p.prokind
|
|
145
|
+
WHERE p.prokind IN ('f', 'p', 'a', 'w')
|
|
89
146
|
AND n.nspname NOT IN ('pg_catalog', 'information_schema')
|
|
90
147
|
AND ($1::text[] IS NULL OR n.nspname = ANY($1::text[]))
|
|
91
148
|
ORDER BY n.nspname, p.proname, p.oid
|
|
92
149
|
`;
|
|
150
|
+
readonly constraints: (serverMajor: number) => string;
|
|
151
|
+
readonly indexes: `
|
|
152
|
+
SELECT
|
|
153
|
+
n.nspname AS schema_name,
|
|
154
|
+
c.relname AS table_name,
|
|
155
|
+
ic.relname AS index_name,
|
|
156
|
+
i.indisunique AS unique,
|
|
157
|
+
am.amname AS method,
|
|
158
|
+
ARRAY(
|
|
159
|
+
SELECT CASE WHEN keys.attnum = 0 THEN NULL ELSE a.attname::text END
|
|
160
|
+
FROM unnest(i.indkey::smallint[]) WITH ORDINALITY AS keys(attnum, position)
|
|
161
|
+
LEFT JOIN pg_catalog.pg_attribute AS a ON a.attrelid = i.indrelid AND a.attnum = keys.attnum
|
|
162
|
+
WHERE keys.position <= i.indnkeyatts ORDER BY keys.position
|
|
163
|
+
) AS key_columns,
|
|
164
|
+
ARRAY(
|
|
165
|
+
SELECT CASE WHEN keys.attnum = 0 THEN pg_get_indexdef(i.indexrelid, keys.position::int, true) ELSE NULL END
|
|
166
|
+
FROM unnest(i.indkey::smallint[]) WITH ORDINALITY AS keys(attnum, position)
|
|
167
|
+
WHERE keys.position <= i.indnkeyatts ORDER BY keys.position
|
|
168
|
+
) AS key_expressions,
|
|
169
|
+
ARRAY(SELECT ((i.indoption[position - 1] & 1) = 1) FROM generate_series(1, i.indnkeyatts) AS position)
|
|
170
|
+
AS descending,
|
|
171
|
+
ARRAY(SELECT ((i.indoption[position - 1] & 2) = 2) FROM generate_series(1, i.indnkeyatts) AS position)
|
|
172
|
+
AS nulls_first,
|
|
173
|
+
ARRAY(
|
|
174
|
+
SELECT opc.opcname::text FROM unnest(i.indclass::oid[]) WITH ORDINALITY AS classes(oid, position)
|
|
175
|
+
JOIN pg_catalog.pg_opclass AS opc ON opc.oid = classes.oid ORDER BY classes.position
|
|
176
|
+
) AS operator_classes,
|
|
177
|
+
ARRAY(
|
|
178
|
+
SELECT CASE WHEN collations.oid = 0 THEN NULL ELSE coll.collname::text END
|
|
179
|
+
FROM unnest(i.indcollation::oid[]) WITH ORDINALITY AS collations(oid, position)
|
|
180
|
+
LEFT JOIN pg_catalog.pg_collation AS coll ON coll.oid = collations.oid ORDER BY collations.position
|
|
181
|
+
) AS collations,
|
|
182
|
+
ARRAY(
|
|
183
|
+
SELECT a.attname::text FROM unnest(i.indkey::smallint[]) WITH ORDINALITY AS keys(attnum, position)
|
|
184
|
+
JOIN pg_catalog.pg_attribute AS a ON a.attrelid = i.indrelid AND a.attnum = keys.attnum
|
|
185
|
+
WHERE keys.position > i.indnkeyatts ORDER BY keys.position
|
|
186
|
+
) AS included_columns,
|
|
187
|
+
pg_get_expr(i.indpred, i.indrelid) AS predicate_expression,
|
|
188
|
+
i.indisvalid AS valid
|
|
189
|
+
FROM pg_catalog.pg_index AS i
|
|
190
|
+
JOIN pg_catalog.pg_class AS c ON c.oid = i.indrelid
|
|
191
|
+
JOIN pg_catalog.pg_namespace AS n ON n.oid = c.relnamespace
|
|
192
|
+
JOIN pg_catalog.pg_class AS ic ON ic.oid = i.indexrelid
|
|
193
|
+
JOIN pg_catalog.pg_am AS am ON am.oid = ic.relam
|
|
194
|
+
WHERE n.nspname NOT IN ('pg_catalog', 'information_schema')
|
|
195
|
+
AND ($1::text[] IS NULL OR n.nspname = ANY($1::text[]))
|
|
196
|
+
ORDER BY n.nspname, c.relname, ic.relname
|
|
197
|
+
`;
|
|
198
|
+
readonly composites: `
|
|
199
|
+
SELECT n.nspname AS schema_name, t.typname AS type_name, 'pg:' || t.oid::text AS type_identity,
|
|
200
|
+
a.attname AS field_name, 'pg:' || a.atttypid::text AS field_type_identity,
|
|
201
|
+
format_type(a.atttypid, a.atttypmod) AS field_database_type, a.attnotnull AS field_not_null,
|
|
202
|
+
a.attnum AS field_position
|
|
203
|
+
FROM pg_catalog.pg_type AS t
|
|
204
|
+
JOIN pg_catalog.pg_namespace AS n ON n.oid = t.typnamespace
|
|
205
|
+
JOIN pg_catalog.pg_class AS c ON c.oid = t.typrelid
|
|
206
|
+
JOIN pg_catalog.pg_attribute AS a ON a.attrelid = c.oid AND a.attnum > 0 AND NOT a.attisdropped
|
|
207
|
+
WHERE t.typtype = 'c' AND c.relkind = 'c'
|
|
208
|
+
AND n.nspname NOT IN ('pg_catalog', 'information_schema')
|
|
209
|
+
AND ($1::text[] IS NULL OR n.nspname = ANY($1::text[]))
|
|
210
|
+
ORDER BY n.nspname, t.typname, a.attnum
|
|
211
|
+
`;
|
|
212
|
+
readonly ranges: `
|
|
213
|
+
SELECT n.nspname AS schema_name, t.typname AS type_name, 'pg:' || t.oid::text AS type_identity,
|
|
214
|
+
format_type(t.oid, NULL) AS database_type, 'pg:' || r.rngsubtype::text AS subtype_identity, false AS multirange
|
|
215
|
+
FROM pg_catalog.pg_range AS r
|
|
216
|
+
JOIN pg_catalog.pg_type AS t ON t.oid = r.rngtypid
|
|
217
|
+
JOIN pg_catalog.pg_namespace AS n ON n.oid = t.typnamespace
|
|
218
|
+
WHERE n.nspname NOT IN ('pg_catalog', 'information_schema')
|
|
219
|
+
AND ($1::text[] IS NULL OR n.nspname = ANY($1::text[]))
|
|
220
|
+
UNION ALL
|
|
221
|
+
SELECT n.nspname AS schema_name, t.typname AS type_name, 'pg:' || t.oid::text AS type_identity,
|
|
222
|
+
format_type(t.oid, NULL) AS database_type, 'pg:' || r.rngsubtype::text AS subtype_identity, true AS multirange
|
|
223
|
+
FROM pg_catalog.pg_range AS r
|
|
224
|
+
JOIN pg_catalog.pg_type AS t ON t.oid = r.rngmultitypid
|
|
225
|
+
JOIN pg_catalog.pg_namespace AS n ON n.oid = t.typnamespace
|
|
226
|
+
WHERE r.rngmultitypid <> 0
|
|
227
|
+
AND n.nspname NOT IN ('pg_catalog', 'information_schema')
|
|
228
|
+
AND ($1::text[] IS NULL OR n.nspname = ANY($1::text[]))
|
|
229
|
+
ORDER BY schema_name, type_name
|
|
230
|
+
`;
|
|
93
231
|
};
|
|
94
232
|
export declare function loadPostgresDriver(importer?: PostgresDriverImporter): Promise<PostgresDriverModule>;
|
|
95
|
-
export declare class PostgresSchemaProvider implements SchemaProvider {
|
|
233
|
+
export declare class PostgresSchemaProvider implements SchemaProvider<SchemaSnapshotV2> {
|
|
96
234
|
#private;
|
|
97
235
|
constructor(options?: PostgresSchemaProviderOptions);
|
|
98
|
-
introspect(input: SchemaInput): Promise<
|
|
236
|
+
introspect(input: SchemaInput): Promise<SchemaSnapshotV2>;
|
|
99
237
|
}
|
|
100
|
-
export declare function introspectPostgres(input: SchemaInput, options?: PostgresSchemaProviderOptions): Promise<
|
|
238
|
+
export declare function introspectPostgres(input: SchemaInput, options?: PostgresSchemaProviderOptions): Promise<SchemaSnapshotV2>;
|
|
101
239
|
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../../src/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../../src/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAOV,WAAW,EACX,cAAc,EAEd,gBAAgB,EAEjB,MAAM,mBAAmB,CAAC;AAK3B,OAAO,EAAwC,KAAK,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AACvG,OAAO,EAA8C,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAGvG,MAAM,WAAW,mBAAmB,CAAC,GAAG;IACtC,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,SAAS,OAAO,EAAE,GAC1B,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,2BAA4B,SAAQ,iBAAiB;IACpE,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,IAAI,OAAO,CAAC,2BAA2B,CAAC,CAAC;IAChD,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE;QAAE,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,KAAK,yBAAyB,CAAC;CACjG;AAED,MAAM,MAAM,sBAAsB,GAAG,MAAM,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAEzE,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC;IACpC,QAAQ,CAAC,IAAI,CAAC,EAAE,yBAAyB,CAAC;IAC1C,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,QAAQ,CAAC,UAAU,CAAC,EAAE,kBAAkB,CAAC;IACzC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,yBAAyB,EAAE,CAAC;CACpE;AA8HD,eAAO,MAAM,sBAAsB;aACjC,OAAO,EAAE;;;;;GAKR;aACD,SAAS,EAAE;;;;;;;;;;;;;;;;;;;;GAoBV;aACD,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BR;aACD,KAAK,EAAE;;;;;;;;;GASN;aACD,OAAO,EAAE;;;;;;;;;;;;;;;;;;;GAmBR;aACD,SAAS,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BV;aACD,WAAW,gBAAc,MAAM,KAAG,MAAM;aA8CxC,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CR;aACD,UAAU,EAAE;;;;;;;;;;;;;GAaX;aACD,MAAM,EAAE;;;;;;;;;;;;;;;;;;GAkBP;CACO,CAAC;AA6DX,wBAAsB,kBAAkB,CACtC,QAAQ,GAAE,sBAA4F,GACrG,OAAO,CAAC,oBAAoB,CAAC,CAY/B;AA0CD,qBAAa,sBAAuB,YAAW,cAAc,CAAC,gBAAgB,CAAC;;IAG7E,YAAY,OAAO,GAAE,6BAAkC,EAEtD;IAEK,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAmc9D;CACF;AAED,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,WAAW,EAClB,OAAO,GAAE,6BAAkC,GAC1C,OAAO,CAAC,gBAAgB,CAAC,CAE3B"}
|