@prisma-next/sql-runtime 0.3.0-dev.5 → 0.3.0-dev.52

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 (165) hide show
  1. package/README.md +137 -26
  2. package/dist/exports-BhZqJPVb.mjs +771 -0
  3. package/dist/exports-BhZqJPVb.mjs.map +1 -0
  4. package/dist/index-D59jqEKF.d.mts +159 -0
  5. package/dist/index-D59jqEKF.d.mts.map +1 -0
  6. package/dist/index.d.mts +2 -0
  7. package/dist/index.mjs +3 -0
  8. package/dist/test/utils.d.mts +82 -0
  9. package/dist/test/utils.d.mts.map +1 -0
  10. package/dist/test/utils.mjs +212 -0
  11. package/dist/test/utils.mjs.map +1 -0
  12. package/package.json +32 -25
  13. package/src/codecs/decoding.ts +84 -3
  14. package/src/codecs/encoding.ts +15 -2
  15. package/src/codecs/json-schema-validation.ts +61 -0
  16. package/src/exports/index.ts +14 -6
  17. package/src/lower-sql-plan.ts +8 -8
  18. package/src/plugins/lints.ts +204 -0
  19. package/src/sql-context.ts +385 -98
  20. package/src/sql-family-adapter.ts +9 -5
  21. package/src/sql-marker.ts +2 -2
  22. package/src/sql-runtime.ts +131 -31
  23. package/test/async-iterable-result.test.ts +42 -34
  24. package/test/context.types.test-d.ts +68 -0
  25. package/test/execution-stack.test.ts +166 -0
  26. package/test/json-schema-validation.test.ts +653 -0
  27. package/test/lints.test.ts +330 -0
  28. package/test/parameterized-types.test.ts +539 -0
  29. package/test/sql-context.test.ts +292 -117
  30. package/test/sql-family-adapter.test.ts +7 -6
  31. package/test/sql-runtime.test.ts +218 -30
  32. package/test/utils.ts +80 -51
  33. package/dist/accelerate-EEKAFGN3-P6A6XJWJ.js +0 -137863
  34. package/dist/accelerate-EEKAFGN3-P6A6XJWJ.js.map +0 -1
  35. package/dist/amcheck-24VY6X5V.js +0 -13
  36. package/dist/amcheck-24VY6X5V.js.map +0 -1
  37. package/dist/bloom-VS74NLHT.js +0 -13
  38. package/dist/bloom-VS74NLHT.js.map +0 -1
  39. package/dist/btree_gin-WBC4EAAI.js +0 -13
  40. package/dist/btree_gin-WBC4EAAI.js.map +0 -1
  41. package/dist/btree_gist-UNC6QD3M.js +0 -13
  42. package/dist/btree_gist-UNC6QD3M.js.map +0 -1
  43. package/dist/chunk-3KTOEDFX.js +0 -49
  44. package/dist/chunk-3KTOEDFX.js.map +0 -1
  45. package/dist/chunk-47DZBRQC.js +0 -1280
  46. package/dist/chunk-47DZBRQC.js.map +0 -1
  47. package/dist/chunk-52N6AFZM.js +0 -133
  48. package/dist/chunk-52N6AFZM.js.map +0 -1
  49. package/dist/chunk-7D4SUZUM.js +0 -38
  50. package/dist/chunk-7D4SUZUM.js.map +0 -1
  51. package/dist/chunk-C6I3V3DM.js +0 -455
  52. package/dist/chunk-C6I3V3DM.js.map +0 -1
  53. package/dist/chunk-ECWIHLAT.js +0 -37
  54. package/dist/chunk-ECWIHLAT.js.map +0 -1
  55. package/dist/chunk-EI626SDC.js +0 -105
  56. package/dist/chunk-EI626SDC.js.map +0 -1
  57. package/dist/chunk-UKKOYUGL.js +0 -578
  58. package/dist/chunk-UKKOYUGL.js.map +0 -1
  59. package/dist/chunk-XPLNMXQV.js +0 -1537
  60. package/dist/chunk-XPLNMXQV.js.map +0 -1
  61. package/dist/citext-T7MXGUY7.js +0 -13
  62. package/dist/citext-T7MXGUY7.js.map +0 -1
  63. package/dist/client-5FENX6AW.js +0 -299
  64. package/dist/client-5FENX6AW.js.map +0 -1
  65. package/dist/cube-TFDQBZCI.js +0 -13
  66. package/dist/cube-TFDQBZCI.js.map +0 -1
  67. package/dist/dict_int-AEUOPGWP.js +0 -13
  68. package/dist/dict_int-AEUOPGWP.js.map +0 -1
  69. package/dist/dict_xsyn-DAAYX3FL.js +0 -13
  70. package/dist/dict_xsyn-DAAYX3FL.js.map +0 -1
  71. package/dist/dist-AQ3LWXOX.js +0 -570
  72. package/dist/dist-AQ3LWXOX.js.map +0 -1
  73. package/dist/dist-LBVX6BJW.js +0 -189
  74. package/dist/dist-LBVX6BJW.js.map +0 -1
  75. package/dist/dist-WLKUVDN2.js +0 -5127
  76. package/dist/dist-WLKUVDN2.js.map +0 -1
  77. package/dist/earthdistance-KIGTF4LE.js +0 -13
  78. package/dist/earthdistance-KIGTF4LE.js.map +0 -1
  79. package/dist/file_fdw-5N55UP6I.js +0 -13
  80. package/dist/file_fdw-5N55UP6I.js.map +0 -1
  81. package/dist/fuzzystrmatch-KN3YWBFP.js +0 -13
  82. package/dist/fuzzystrmatch-KN3YWBFP.js.map +0 -1
  83. package/dist/hstore-YX726NKN.js +0 -13
  84. package/dist/hstore-YX726NKN.js.map +0 -1
  85. package/dist/http-exception-FZY2H4OF.js +0 -8
  86. package/dist/http-exception-FZY2H4OF.js.map +0 -1
  87. package/dist/index.js +0 -30
  88. package/dist/index.js.map +0 -1
  89. package/dist/intarray-NKVXNO2D.js +0 -13
  90. package/dist/intarray-NKVXNO2D.js.map +0 -1
  91. package/dist/isn-FTEMJGEV.js +0 -13
  92. package/dist/isn-FTEMJGEV.js.map +0 -1
  93. package/dist/lo-DB7L4NGI.js +0 -13
  94. package/dist/lo-DB7L4NGI.js.map +0 -1
  95. package/dist/logger-WQ7SHNDD.js +0 -68
  96. package/dist/logger-WQ7SHNDD.js.map +0 -1
  97. package/dist/ltree-Z32TZT6W.js +0 -13
  98. package/dist/ltree-Z32TZT6W.js.map +0 -1
  99. package/dist/nodefs-NM46ACH7.js +0 -31
  100. package/dist/nodefs-NM46ACH7.js.map +0 -1
  101. package/dist/opfs-ahp-NJO33LVZ.js +0 -332
  102. package/dist/opfs-ahp-NJO33LVZ.js.map +0 -1
  103. package/dist/pageinspect-YP3IZR4X.js +0 -13
  104. package/dist/pageinspect-YP3IZR4X.js.map +0 -1
  105. package/dist/pg_buffercache-7TD5J2FB.js +0 -13
  106. package/dist/pg_buffercache-7TD5J2FB.js.map +0 -1
  107. package/dist/pg_dump-SG4KYBUB.js +0 -2492
  108. package/dist/pg_dump-SG4KYBUB.js.map +0 -1
  109. package/dist/pg_freespacemap-DZDNCPZK.js +0 -13
  110. package/dist/pg_freespacemap-DZDNCPZK.js.map +0 -1
  111. package/dist/pg_surgery-J2MUEWEP.js +0 -13
  112. package/dist/pg_surgery-J2MUEWEP.js.map +0 -1
  113. package/dist/pg_trgm-7VNQOYS6.js +0 -13
  114. package/dist/pg_trgm-7VNQOYS6.js.map +0 -1
  115. package/dist/pg_visibility-TTSIPHFL.js +0 -13
  116. package/dist/pg_visibility-TTSIPHFL.js.map +0 -1
  117. package/dist/pg_walinspect-KPFHSHRJ.js +0 -13
  118. package/dist/pg_walinspect-KPFHSHRJ.js.map +0 -1
  119. package/dist/proxy-signals-GUDAMDHV.js +0 -39
  120. package/dist/proxy-signals-GUDAMDHV.js.map +0 -1
  121. package/dist/seg-IYVDLE4O.js +0 -13
  122. package/dist/seg-IYVDLE4O.js.map +0 -1
  123. package/dist/src/codecs/decoding.d.ts +0 -4
  124. package/dist/src/codecs/decoding.d.ts.map +0 -1
  125. package/dist/src/codecs/encoding.d.ts +0 -5
  126. package/dist/src/codecs/encoding.d.ts.map +0 -1
  127. package/dist/src/codecs/validation.d.ts +0 -6
  128. package/dist/src/codecs/validation.d.ts.map +0 -1
  129. package/dist/src/exports/index.d.ts +0 -11
  130. package/dist/src/exports/index.d.ts.map +0 -1
  131. package/dist/src/index.d.ts +0 -2
  132. package/dist/src/index.d.ts.map +0 -1
  133. package/dist/src/lower-sql-plan.d.ts +0 -15
  134. package/dist/src/lower-sql-plan.d.ts.map +0 -1
  135. package/dist/src/sql-context.d.ts +0 -65
  136. package/dist/src/sql-context.d.ts.map +0 -1
  137. package/dist/src/sql-family-adapter.d.ts +0 -10
  138. package/dist/src/sql-family-adapter.d.ts.map +0 -1
  139. package/dist/src/sql-marker.d.ts +0 -22
  140. package/dist/src/sql-marker.d.ts.map +0 -1
  141. package/dist/src/sql-runtime.d.ts +0 -25
  142. package/dist/src/sql-runtime.d.ts.map +0 -1
  143. package/dist/tablefunc-EF4RCS7S.js +0 -13
  144. package/dist/tablefunc-EF4RCS7S.js.map +0 -1
  145. package/dist/tcn-3VT5BQYW.js +0 -13
  146. package/dist/tcn-3VT5BQYW.js.map +0 -1
  147. package/dist/test/utils.d.ts +0 -59
  148. package/dist/test/utils.d.ts.map +0 -1
  149. package/dist/test/utils.js +0 -24634
  150. package/dist/test/utils.js.map +0 -1
  151. package/dist/tiny-CW6F4GX6.js +0 -10
  152. package/dist/tiny-CW6F4GX6.js.map +0 -1
  153. package/dist/tsm_system_rows-ES7KNUQH.js +0 -13
  154. package/dist/tsm_system_rows-ES7KNUQH.js.map +0 -1
  155. package/dist/tsm_system_time-76WEIMBG.js +0 -13
  156. package/dist/tsm_system_time-76WEIMBG.js.map +0 -1
  157. package/dist/unaccent-7RYF3R64.js +0 -13
  158. package/dist/unaccent-7RYF3R64.js.map +0 -1
  159. package/dist/utility-Q5A254LJ-J4HTKZPT.js +0 -347
  160. package/dist/utility-Q5A254LJ-J4HTKZPT.js.map +0 -1
  161. package/dist/uuid_ossp-4ETE4FPE.js +0 -13
  162. package/dist/uuid_ossp-4ETE4FPE.js.map +0 -1
  163. package/dist/vector-74GPNV7V.js +0 -13
  164. package/dist/vector-74GPNV7V.js.map +0 -1
  165. package/src/index.ts +0 -1
package/README.md CHANGED
@@ -10,7 +10,7 @@ SQL runtime implementation for Prisma Next.
10
10
 
11
11
  ## Overview
12
12
 
13
- The SQL runtime package implements the SQL family runtime by composing `@prisma-next/runtime-executor` with SQL-specific adapters, drivers, and codecs. It provides the public runtime API for SQL-based databases.
13
+ The SQL runtime package implements the SQL family runtime by composing `@prisma-next/runtime-executor` with SQL-specific adapters, drivers, and codecs. It provides the public runtime API for SQL-based databases, including descriptor-based static context derivation via `SqlStaticContributions` and execution-plane composition via `ExecutionStack`.
14
14
 
15
15
  ## Purpose
16
16
 
@@ -18,6 +18,8 @@ Execute SQL query Plans with deterministic verification, guardrails, and feedbac
18
18
 
19
19
  ## Responsibilities
20
20
 
21
+ - **Execution Stack Composition**: Compose runtime descriptors into a reusable `ExecutionStack`
22
+ - **Descriptor-Based Static Context Derivation**: Build `ExecutionContext` from `SqlStaticContributions` on descriptors without instantiation
21
23
  - **SQL Context Creation**: Create runtime contexts with SQL contracts, adapters, and codecs
22
24
  - **SQL Marker Management**: Provide SQL statements for reading/writing contract markers
23
25
  - **Codec Encoding/Decoding**: Encode parameters and decode rows using SQL codec registries
@@ -27,33 +29,41 @@ Execute SQL query Plans with deterministic verification, guardrails, and feedbac
27
29
 
28
30
  ## Dependencies
29
31
 
32
+ - `@prisma-next/core-execution-plane` - Runtime component descriptor types
30
33
  - `@prisma-next/runtime-executor` - Target-neutral execution engine
31
- - `@prisma-next/sql-contract` - SQL contract types
32
- - `@prisma-next/sql-target` - SQL family interfaces (legacy transitional package)
34
+ - `@prisma-next/sql-contract` - SQL contract types (via `@prisma-next/sql-contract/types`)
33
35
  - `@prisma-next/operations` - Operation registry
34
36
 
35
37
  ## Usage
36
38
 
37
39
  ```typescript
38
- import { createRuntime, createRuntimeContext } from '@prisma-next/sql-runtime';
39
- import { createPostgresAdapter } from '@prisma-next/adapter-postgres';
40
- import { createPostgresDriver } from '@prisma-next/driver-postgres/runtime';
40
+ import postgresAdapter from '@prisma-next/adapter-postgres/runtime';
41
+ import postgresDriver from '@prisma-next/driver-postgres/runtime';
42
+ import pgvector from '@prisma-next/extension-pgvector/runtime';
43
+ import postgresTarget from '@prisma-next/target-postgres/runtime';
44
+ import { instantiateExecutionStack } from '@prisma-next/core-execution-plane/stack';
45
+ import { createExecutionContext, createRuntime, createSqlExecutionStack } from '@prisma-next/sql-runtime';
41
46
 
42
47
  const contract = validateContract<Contract>(contractJson);
43
- const adapter = createPostgresAdapter();
44
-
45
- const context = createRuntimeContext({
46
- contract,
47
- adapter,
48
- extensions: [pgVector()],
48
+ const stack = createSqlExecutionStack({
49
+ target: postgresTarget,
50
+ adapter: postgresAdapter,
51
+ driver: postgresDriver,
52
+ extensionPacks: [pgvector],
49
53
  });
50
54
 
55
+ // Static context (no instantiation needed)
56
+ const context = createExecutionContext({ contract, stack });
57
+
58
+ // Dynamic runtime
59
+ const stackInstance = instantiateExecutionStack(stack);
60
+ const driver = stack.driver.create({ connect: { connectionString: process.env.DATABASE_URL } });
51
61
  const runtime = createRuntime({
52
- adapter,
53
- driver: createPostgresDriver({ connectionString: process.env.DATABASE_URL }),
54
- verify: { mode: 'onFirstUse', requireMarker: false },
62
+ stackInstance,
55
63
  context,
56
- plugins: [budgets(), lints()],
64
+ driver,
65
+ verify: { mode: 'onFirstUse', requireMarker: false },
66
+ plugins: [budgets()],
57
67
  });
58
68
 
59
69
  for await (const row of runtime.execute(plan)) {
@@ -63,22 +73,123 @@ for await (const row of runtime.execute(plan)) {
63
73
 
64
74
  ## Exports
65
75
 
76
+ ### Runtime
77
+
66
78
  - `createRuntime` - Create a SQL runtime instance
67
- - `createRuntimeContext` - Create a SQL runtime context
68
- - `RuntimeContext`, `Extension` - Context types
69
- - `budgets`, `lints` - SQL-compatible plugins (re-exported from runtime-executor)
70
- - `readContractMarker`, `writeContractMarker` - SQL marker statements
71
- - `encodeParams`, `decodeRow` - Codec encoding/decoding utilities
79
+ - `Runtime` - Runtime instance type
80
+ - `CreateRuntimeOptions` - Options for `createRuntime`
81
+ - `RuntimeVerifyOptions` - Verification mode configuration
82
+ - `RuntimeTelemetryEvent`, `TelemetryOutcome` - Telemetry event types
83
+
84
+ ### Context
85
+
86
+ - `createExecutionContext` - Create an execution context from contract + descriptors-only stack
87
+ - `createSqlExecutionStack` - SQL-specific stack factory that preserves descriptor types
88
+ - `ExecutionContext` - Context type for SQL operations
89
+ - `TypeHelperRegistry` - Registry for type helper lookup
90
+
91
+ ### Descriptors & Stack
92
+
93
+ - `SqlStaticContributions` - Interface for descriptor-level static contributions (codecs, operations, parameterized codecs)
94
+ - `SqlRuntimeTargetDescriptor`, `SqlRuntimeAdapterDescriptor`, `SqlRuntimeExtensionDescriptor` - Structural descriptor types requiring `SqlStaticContributions`
95
+ - `SqlRuntimeAdapterInstance`, `SqlRuntimeDriverInstance`, `SqlRuntimeExtensionInstance` - Instance types
96
+ - `SqlExecutionStack` - Descriptors-only stack type for static context creation
97
+ - `SqlExecutionStackWithDriver` - Descriptor stack including driver for runtime instantiation
98
+ - `RuntimeParameterizedCodecDescriptor` - Parameterized codec descriptor type
99
+
100
+ ### Codecs
101
+
72
102
  - `validateCodecRegistryCompleteness` - Codec validation
103
+ - `extractCodecIds` - Extract codec IDs from a contract
104
+ - `validateContractCodecMappings` - Validate contract codec mappings against registry
105
+
106
+ ### SQL Marker
107
+
108
+ - `readContractMarker`, `writeContractMarker` - SQL marker statements
109
+ - `ensureSchemaStatement`, `ensureTableStatement` - DDL statements for marker table setup
110
+ - `SqlStatement` - SQL statement type
111
+
112
+ ### Plan Lowering
113
+
114
+ - `lowerSqlPlan` - SQL plan lowering via adapter
115
+
116
+ ### Plugins
117
+
118
+ - `budgets` - Re-exported from `@prisma-next/runtime-executor` (target-neutral)
119
+ - `lints` - **AST-first lint plugin** (canonical in SQL domain), inspects `plan.ast` when present
120
+ - `BudgetsOptions`, `LintsOptions` - Plugin option types
121
+ - `Plugin`, `PluginContext` - Plugin interface types (from runtime-executor)
122
+ - `AfterExecuteResult` - Plugin hook result type
123
+ - `Log` - Log entry type
124
+
125
+ #### Lints plugin (SQL domain)
126
+
127
+ The `lints` plugin operates on `plan.ast` when it is a SQL `QueryAst`:
128
+
129
+ - **DELETE without WHERE** — blocks execution (configurable severity)
130
+ - **UPDATE without WHERE** — blocks execution (configurable severity)
131
+ - **Unbounded SELECT** — warns/errors when `limit` is missing
132
+ - **SELECT \* intent** — warns/errors when `selectAllIntent` is present
133
+
134
+ When `plan.ast` is missing, the plugin falls back to raw heuristic guardrails (`fallbackWhenAstMissing: 'raw'`) or skips linting (`fallbackWhenAstMissing: 'skip'`). Default is `'raw'`.
135
+
136
+ ```typescript
137
+ import { createRuntime, lints } from '@prisma-next/sql-runtime';
138
+
139
+ const runtime = createRuntime({
140
+ // ...
141
+ plugins: [lints({ severities: { noLimit: 'error' } })],
142
+ });
143
+ ```
73
144
 
74
145
  ## Architecture
75
146
 
76
- The SQL runtime composes runtime-executor with SQL-specific implementations:
147
+ The SQL runtime composes runtime-executor with SQL-specific implementations. Descriptors implement `SqlStaticContributions` so `ExecutionContext` can be derived from the descriptors-only stack without instantiation.
148
+
149
+ 1. **ExecutionStack**: Descriptors-only stack (from `@prisma-next/core-execution-plane`)
150
+ 2. **SqlStaticContributions**: Codecs, operation signatures, and parameterized codecs contributed by each descriptor
151
+ 3. **ExecutionContext**: Built from contract + stack descriptors (no instantiation)
152
+ 4. **ExecutionStackInstance**: Instantiated components used at runtime for execution
153
+ 5. **SqlRuntime**: Wraps `RuntimeCore` and adds SQL-specific encoding/decoding
154
+ 6. **SqlMarker**: Provides SQL statements for marker management
155
+
156
+ ```mermaid
157
+ flowchart LR
158
+ Stack[ExecutionStack] --> Context[ExecutionContext]
159
+ Stack --> StackI[ExecutionStackInstance]
160
+ Stack --> DriverDesc[Driver Descriptor]
161
+ Stack --> AdapterDesc[Adapter Descriptor]
162
+ Stack --> Packs[Extension Packs]
163
+ Context --> Runtime[SqlRuntime]
164
+ Runtime --> Core[RuntimeCore]
165
+ DriverDesc --> DriverInst[Driver Instance]
166
+ AdapterDesc --> AdapterInst[Adapter Instance]
167
+ Runtime --> DriverInst
168
+ ```
169
+
170
+ ## Related Subsystems
171
+
172
+ - **[Query Lanes](../../../../docs/architecture%20docs/subsystems/3.%20Query%20Lanes.md)** — Lane authoring and plan building
173
+ - **[Runtime & Plugin Framework](../../../../docs/architecture%20docs/subsystems/4.%20Runtime%20&%20Plugin%20Framework.md)** — Runtime execution pipeline
174
+ - **[Adapters & Targets](../../../../docs/architecture%20docs/subsystems/5.%20Adapters%20&%20Targets.md)** — Adapter and driver responsibilities
175
+
176
+ ## Related ADRs
177
+
178
+ - [ADR 152 - Execution Plane Descriptors and Instances](../../../../docs/architecture%20docs/adrs/ADR%20152%20-%20Execution%20Plane%20Descriptors%20and%20Instances.md)
179
+
180
+ ## Error Codes
181
+
182
+ The SQL runtime uses stable error codes for programmatic error handling:
183
+
184
+ - `RUNTIME.CONTRACT_FAMILY_MISMATCH` — Contract target family differs from runtime family
185
+ - `RUNTIME.CONTRACT_TARGET_MISMATCH` — Contract target differs from stack target descriptor
186
+ - `RUNTIME.MISSING_EXTENSION_PACK` — Contract requires an extension pack not provided in stack
187
+ - `RUNTIME.DUPLICATE_PARAMETERIZED_CODEC` — Multiple extensions registered same parameterized codec
188
+ - `RUNTIME.TYPE_PARAMS_INVALID` — Type parameters fail codec schema validation
189
+ - `RUNTIME.CODEC_MISSING` — Required codec not found in registry
190
+ - `RUNTIME.DECODE_FAILED` — Row decoding failed
77
191
 
78
- 1. **SqlFamilyAdapter**: Implements `RuntimeFamilyAdapter` for SQL contracts
79
- 2. **SqlRuntime**: Wraps `RuntimeCore` and adds SQL-specific encoding/decoding
80
- 3. **SqlContext**: Creates contexts with SQL contracts, adapters, and codecs
81
- 4. **SqlMarker**: Provides SQL statements for marker management
192
+ All errors follow the repo's error envelope convention with `code`, `category`, `severity`, and optional `details`.
82
193
 
83
194
  ## Testing
84
195