@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.
Files changed (116) hide show
  1. package/CHANGELOG.md +289 -0
  2. package/README.md +17 -0
  3. package/dist/packages/postgres/src/bulk.d.ts.map +1 -1
  4. package/dist/packages/postgres/src/bulk.js +1 -1
  5. package/dist/packages/postgres/src/bulk.js.map +1 -1
  6. package/dist/packages/postgres/src/capabilities.d.ts +19 -0
  7. package/dist/packages/postgres/src/capabilities.d.ts.map +1 -0
  8. package/dist/packages/postgres/src/capabilities.js +120 -0
  9. package/dist/packages/postgres/src/capabilities.js.map +1 -0
  10. package/dist/packages/postgres/src/catalog/generated/14.d.ts +4 -0
  11. package/dist/packages/postgres/src/catalog/generated/14.d.ts.map +1 -0
  12. package/dist/packages/postgres/src/catalog/generated/14.js +2018 -0
  13. package/dist/packages/postgres/src/catalog/generated/14.js.map +1 -0
  14. package/dist/packages/postgres/src/catalog/generated/15.d.ts +4 -0
  15. package/dist/packages/postgres/src/catalog/generated/15.d.ts.map +1 -0
  16. package/dist/packages/postgres/src/catalog/generated/15.js +2012 -0
  17. package/dist/packages/postgres/src/catalog/generated/15.js.map +1 -0
  18. package/dist/packages/postgres/src/catalog/generated/16.d.ts +4 -0
  19. package/dist/packages/postgres/src/catalog/generated/16.d.ts.map +1 -0
  20. package/dist/packages/postgres/src/catalog/generated/16.js +2012 -0
  21. package/dist/packages/postgres/src/catalog/generated/16.js.map +1 -0
  22. package/dist/packages/postgres/src/catalog/generated/17.d.ts +4 -0
  23. package/dist/packages/postgres/src/catalog/generated/17.d.ts.map +1 -0
  24. package/dist/packages/postgres/src/catalog/generated/17.js +2012 -0
  25. package/dist/packages/postgres/src/catalog/generated/17.js.map +1 -0
  26. package/dist/packages/postgres/src/catalog/generated/18.d.ts +4 -0
  27. package/dist/packages/postgres/src/catalog/generated/18.d.ts.map +1 -0
  28. package/dist/packages/postgres/src/catalog/generated/18.js +2048 -0
  29. package/dist/packages/postgres/src/catalog/generated/18.js.map +1 -0
  30. package/dist/packages/postgres/src/catalog/generated/19.d.ts +4 -0
  31. package/dist/packages/postgres/src/catalog/generated/19.d.ts.map +1 -0
  32. package/dist/packages/postgres/src/catalog/generated/19.js +2048 -0
  33. package/dist/packages/postgres/src/catalog/generated/19.js.map +1 -0
  34. package/dist/packages/postgres/src/catalog/index.d.ts +14 -0
  35. package/dist/packages/postgres/src/catalog/index.d.ts.map +1 -0
  36. package/dist/packages/postgres/src/catalog/index.js +86 -0
  37. package/dist/packages/postgres/src/catalog/index.js.map +1 -0
  38. package/dist/packages/postgres/src/catalog/types.d.ts +46 -0
  39. package/dist/packages/postgres/src/catalog/types.d.ts.map +1 -0
  40. package/dist/packages/postgres/src/catalog/types.js +2 -0
  41. package/dist/packages/postgres/src/catalog/types.js.map +1 -0
  42. package/dist/packages/postgres/src/expression-evidence.d.ts +11 -0
  43. package/dist/packages/postgres/src/expression-evidence.d.ts.map +1 -0
  44. package/dist/packages/postgres/src/expression-evidence.js +33 -0
  45. package/dist/packages/postgres/src/expression-evidence.js.map +1 -0
  46. package/dist/packages/postgres/src/extensions.d.ts +61 -0
  47. package/dist/packages/postgres/src/extensions.d.ts.map +1 -0
  48. package/dist/packages/postgres/src/extensions.js +311 -0
  49. package/dist/packages/postgres/src/extensions.js.map +1 -0
  50. package/dist/packages/postgres/src/index.d.ts +13 -0
  51. package/dist/packages/postgres/src/index.d.ts.map +1 -1
  52. package/dist/packages/postgres/src/index.js +51 -17
  53. package/dist/packages/postgres/src/index.js.map +1 -1
  54. package/dist/packages/postgres/src/parser/index.d.ts +8 -0
  55. package/dist/packages/postgres/src/parser/index.d.ts.map +1 -0
  56. package/dist/packages/postgres/src/parser/index.js +4 -0
  57. package/dist/packages/postgres/src/parser/index.js.map +1 -0
  58. package/dist/packages/postgres/src/parser/parser.d.ts +14 -0
  59. package/dist/packages/postgres/src/parser/parser.d.ts.map +1 -0
  60. package/dist/packages/postgres/src/parser/parser.js +2683 -0
  61. package/dist/packages/postgres/src/parser/parser.js.map +1 -0
  62. package/dist/packages/postgres/src/parser/tokenizer.d.ts +15 -0
  63. package/dist/packages/postgres/src/parser/tokenizer.d.ts.map +1 -0
  64. package/dist/packages/postgres/src/parser/tokenizer.js +470 -0
  65. package/dist/packages/postgres/src/parser/tokenizer.js.map +1 -0
  66. package/dist/packages/postgres/src/parser/types.d.ts +652 -0
  67. package/dist/packages/postgres/src/parser/types.d.ts.map +1 -0
  68. package/dist/packages/postgres/src/parser/types.js +9 -0
  69. package/dist/packages/postgres/src/parser/types.js.map +1 -0
  70. package/dist/packages/postgres/src/parser/walk.d.ts +13 -0
  71. package/dist/packages/postgres/src/parser/walk.d.ts.map +1 -0
  72. package/dist/packages/postgres/src/parser/walk.js +374 -0
  73. package/dist/packages/postgres/src/parser/walk.js.map +1 -0
  74. package/dist/packages/postgres/src/pg.d.ts +35 -4
  75. package/dist/packages/postgres/src/pg.d.ts.map +1 -1
  76. package/dist/packages/postgres/src/pg.js +355 -40
  77. package/dist/packages/postgres/src/pg.js.map +1 -1
  78. package/dist/packages/postgres/src/prepared.d.ts +5 -3
  79. package/dist/packages/postgres/src/prepared.d.ts.map +1 -1
  80. package/dist/packages/postgres/src/prepared.js +23 -15
  81. package/dist/packages/postgres/src/prepared.js.map +1 -1
  82. package/dist/packages/postgres/src/provider.d.ts +149 -11
  83. package/dist/packages/postgres/src/provider.d.ts.map +1 -1
  84. package/dist/packages/postgres/src/provider.js +652 -42
  85. package/dist/packages/postgres/src/provider.js.map +1 -1
  86. package/dist/packages/postgres/src/resolver.d.ts +1 -1
  87. package/dist/packages/postgres/src/resolver.d.ts.map +1 -1
  88. package/dist/packages/postgres/src/resolver.js +2767 -203
  89. package/dist/packages/postgres/src/resolver.js.map +1 -1
  90. package/dist/packages/postgres/src/routing.d.ts.map +1 -1
  91. package/dist/packages/postgres/src/routing.js +1 -1
  92. package/dist/packages/postgres/src/routing.js.map +1 -1
  93. package/dist/packages/postgres/src/runtime-compatibility.d.ts +14 -0
  94. package/dist/packages/postgres/src/runtime-compatibility.d.ts.map +1 -0
  95. package/dist/packages/postgres/src/runtime-compatibility.js +63 -0
  96. package/dist/packages/postgres/src/runtime-compatibility.js.map +1 -0
  97. package/dist/packages/postgres/src/runtime.d.ts +10 -1
  98. package/dist/packages/postgres/src/runtime.d.ts.map +1 -1
  99. package/dist/packages/postgres/src/runtime.js +50 -2
  100. package/dist/packages/postgres/src/runtime.js.map +1 -1
  101. package/dist/packages/postgres/src/semantics.d.ts +1 -1
  102. package/dist/packages/postgres/src/semantics.d.ts.map +1 -1
  103. package/dist/packages/postgres/src/semantics.js +19 -6
  104. package/dist/packages/postgres/src/semantics.js.map +1 -1
  105. package/dist/packages/postgres/src/support.d.ts +29 -0
  106. package/dist/packages/postgres/src/support.d.ts.map +1 -0
  107. package/dist/packages/postgres/src/support.js +45 -0
  108. package/dist/packages/postgres/src/support.js.map +1 -0
  109. package/dist/packages/postgres/src/type-policy.d.ts.map +1 -1
  110. package/dist/packages/postgres/src/type-policy.js +34 -43
  111. package/dist/packages/postgres/src/type-policy.js.map +1 -1
  112. package/dist/packages/postgres/src/type-resolution.d.ts +33 -0
  113. package/dist/packages/postgres/src/type-resolution.d.ts.map +1 -0
  114. package/dist/packages/postgres/src/type-resolution.js +906 -0
  115. package/dist/packages/postgres/src/type-resolution.js.map +1 -0
  116. package/package.json +7 -4
@@ -1,20 +1,22 @@
1
- import { type Query, type QueryRenderSkeleton, type RenderedQuery, type SqlRenderer } from "@typed-sql/core";
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
- skeleton: QueryRenderSkeleton | undefined;
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":"AAAA,OAAO,EAGL,KAAK,KAAK,EACV,KAAK,mBAAmB,EACxB,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,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;CAClC;AAED,UAAU,iBAAiB;IACzB,QAAQ,EAAE,mBAAmB,GAAG,SAAS,CAAC;CAC3C;AAED,MAAM,WAAW,0BAA0B;IACzC,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,IAAI,0BAA0B,CAK7E;AAQD,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
+ {"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 { bindQueryRenderSkeleton, compileQueryRenderSkeleton, } from "@typed-sql/core";
2
- export function createPostgresPreparedQueryState() {
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 = { skeleton: undefined };
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.statementName !== statementName) {
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
- const skeleton = statement.skeleton;
37
+ let physicalName = existing?.statementName;
28
38
  if (rendered === undefined) {
29
- if (skeleton === undefined) {
30
- const compiled = compileQueryRenderSkeleton(query, renderer);
31
- statement.skeleton = compiled.skeleton;
32
- rendered = compiled.rendered;
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,uBAAuB,EACvB,0BAA0B,GAK3B,MAAM,iBAAiB,CAAC;AAyBzB,MAAM,UAAU,gCAAgC;IAC9C,OAAO;QACL,UAAU,EAAE,IAAI,GAAG,EAAE;QACrB,OAAO,EAAE,IAAI,OAAO,EAAE;KACvB,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,aAAqB;IAClD,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACpG,MAAM,IAAI,SAAS,CAAC,mEAAmE,CAAC,CAAC;IAC3F,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,KAAiC,EACjC,QAAqB,EACrB,aAAqB,EACrB,OAAmD;IAEnD,qBAAqB,CAAC,aAAa,CAAC,CAAC;IACrC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,SAAS,CAAC,2BAA2B,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC;IACxG,CAAC;IAED,MAAM,SAAS,GAAsB,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IAC7D,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IAE/C,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAe,EAAsB,EAAE;QAC1D,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QAC/B,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,aAAa,KAAK,aAAa,EAAE,CAAC;YACvE,MAAM,IAAI,SAAS,CACjB,8CAA8C,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,CAC5H,CAAC;QACJ,CAAC;QAED,IAAI,QAAQ,GAAG,QAAQ,EAAE,QAAQ,CAAC;QAClC,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,MAAM,QAAQ,GAAG,0BAA0B,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;gBAC7D,SAAS,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;gBACvC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,QAAQ,GAAG,uBAAuB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QACD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAI,SAAS,CACjB,sBAAsB,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,qDAAqD,CACzG,CAAC;QACJ,CAAC;QAED,IAAI,QAAQ,KAAK,SAAS;YAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,CAAC;QAClF,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;AACnE,CAAC"}
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, SchemaSnapshot } from "@typed-sql/schema";
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: "SELECT current_setting('server_version') AS server_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 = 'f'
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<SchemaSnapshot>;
236
+ introspect(input: SchemaInput): Promise<SchemaSnapshotV2>;
99
237
  }
100
- export declare function introspectPostgres(input: SchemaInput, options?: PostgresSchemaProviderOptions): Promise<SchemaSnapshot>;
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,EAIV,WAAW,EACX,cAAc,EACd,cAAc,EAEf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAA8C,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEvG,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;CAC1C;AAsCD,eAAO,MAAM,sBAAsB;aACjC,OAAO,EAAE,4DAA4D;aACrE,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;GAqBR;aACD,KAAK,EAAE;;;;;;;;GAQN;aACD,OAAO,EAAE;;;;;;;;;;;;GAYR;aACD,SAAS,EAAE;;;;;;;;;;;;;;;;;;GAkBV;CACO,CAAC;AAWX,wBAAsB,kBAAkB,CACtC,QAAQ,GAAE,sBAA4F,GACrG,OAAO,CAAC,oBAAoB,CAAC,CAY/B;AA0CD,qBAAa,sBAAuB,YAAW,cAAc;;IAG3D,YAAY,OAAO,GAAE,6BAAkC,EAEtD;IAEK,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,CA8E5D;CACF;AAED,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,WAAW,EAClB,OAAO,GAAE,6BAAkC,GAC1C,OAAO,CAAC,cAAc,CAAC,CAEzB"}
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"}