@vibeorm/sql 5.10.0 → 5.11.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/dist/ast.d.ts +217 -0
- package/dist/dialect.d.ts +49 -0
- package/dist/dialects/mysql-json-keys.d.ts +26 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.js +519 -262
- package/dist/index.js.map +9 -8
- package/dist/key-list.d.ts +38 -0
- package/package.json +2 -2
package/dist/index.js.map
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/timestamp-identity.ts", "../src/timestamp-text.ts", "../src/native-enum-parameter.ts", "../src/json-list-parameter.ts", "../src/json-patch.ts", "../src/ast.ts", "../src/json-path.ts", "../src/dialects/external-ownership.ts", "../src/dialects/external-dependents.ts", "../src/params.ts", "../src/sql-bindings.ts", "../src/parameter-snapshot.ts", "../src/sql-input.ts", "../src/result-decoder.ts", "../src/pg-array.ts", "../src/codecs.ts", "../src/sql-handles.ts", "../src/dialects/postgres-physical-catalog.ts", "../src/dialects/postgres-index-keys.ts", "../src/index-columns.ts", "../src/index-expressions.ts", "../src/predicate.ts", "../src/dialects/postgres-index-expressions.ts", "../src/dialects/sqlite-table-definition.ts", "../src/dialects/sqlite-index-expressions.ts", "../src/dialects/mysql-index-expressions.ts", "../src/dialects/mysql-generated-columns.ts", "../src/dialects/sqlite-generated-columns.ts", "../src/dialects/module-dependency.ts", "../src/dialects/migration-replay-coverage.ts", "../src/dialects/migration-shadow.ts", "../src/dialects/migration-shadow-marker.ts", "../src/dialects/test-databases.ts", "../src/module-journal.ts", "../src/capabilities.ts", "../src/identifiers.ts", "../src/dialects/sqlite.ts", "../src/dialects/sqlite-fts.ts", "../src/dialects/sqlite-session.ts", "../src/composable.ts", "../src/expr-fragment.ts", "../src/dialects/sqlite-json-equality.ts", "../src/json-transport.ts", "../src/dialects/diagnostics.ts", "../src/dialects/postgres-diagnostics.ts", "../src/dialects/postgres-rls-readiness.ts", "../src/dialects/postgres-rls.ts", "../src/render.ts", "../src/like.ts", "../src/locks.ts", "../src/date-truncation.ts", "../src/
|
|
3
|
+
"sources": ["../src/timestamp-identity.ts", "../src/timestamp-text.ts", "../src/native-enum-parameter.ts", "../src/json-list-parameter.ts", "../src/json-patch.ts", "../src/ast.ts", "../src/json-path.ts", "../src/dialects/external-ownership.ts", "../src/dialects/external-dependents.ts", "../src/params.ts", "../src/sql-bindings.ts", "../src/parameter-snapshot.ts", "../src/sql-input.ts", "../src/result-decoder.ts", "../src/pg-array.ts", "../src/codecs.ts", "../src/sql-handles.ts", "../src/dialects/postgres-physical-catalog.ts", "../src/dialects/postgres-index-keys.ts", "../src/index-columns.ts", "../src/index-expressions.ts", "../src/predicate.ts", "../src/dialects/postgres-index-expressions.ts", "../src/dialects/sqlite-table-definition.ts", "../src/dialects/sqlite-index-expressions.ts", "../src/dialects/mysql-index-expressions.ts", "../src/dialects/mysql-generated-columns.ts", "../src/dialects/sqlite-generated-columns.ts", "../src/dialects/module-dependency.ts", "../src/dialects/migration-replay-coverage.ts", "../src/dialects/migration-shadow.ts", "../src/dialects/migration-shadow-marker.ts", "../src/dialects/test-databases.ts", "../src/module-journal.ts", "../src/capabilities.ts", "../src/identifiers.ts", "../src/dialects/sqlite.ts", "../src/dialects/sqlite-fts.ts", "../src/dialects/sqlite-session.ts", "../src/composable.ts", "../src/expr-fragment.ts", "../src/dialects/sqlite-json-equality.ts", "../src/dialects/mysql-json-keys.ts", "../src/json-transport.ts", "../src/key-list.ts", "../src/dialects/diagnostics.ts", "../src/dialects/postgres-diagnostics.ts", "../src/dialects/postgres-rls-readiness.ts", "../src/dialects/postgres-rls.ts", "../src/render.ts", "../src/like.ts", "../src/locks.ts", "../src/date-truncation.ts", "../src/query-plan.ts", "../src/exclusion.ts", "../src/dialects/postgres.ts", "../src/dialects/mysql.ts", "../src/dialects/registry.ts", "../src/local-date.ts", "../src/native-types.ts", "../src/generated-columns.ts", "../src/dialects/postgres-generated-columns.ts", "../src/row-rules.ts", "../src/dialects/postgres-row-rules.ts", "../src/dialects/sqlite-row-rules.ts", "../src/dialects/mysql-row-rules.ts", "../src/dialects/postgres-type-identity.ts", "../src/dialects/postgres-default-identity.ts", "../src/dialects/constraint-owned-index.ts", "../src/dialects/mysql-check-probe.ts", "../src/dialects/migration-history.ts", "../src/dialects/sqlite-constraints.ts", "../src/dialects/migration-visibility.ts", "../src/dialects/migration-inventory.ts", "../src/dialects/migration-objects.ts", "../src/dialects/postgres-migration.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"/** Lossless database identity, never an enumerable property or a public Date subtype. */\ntype TimestampIdentity = {\n readonly milliseconds: number;\n readonly text: string;\n readonly numeric: number | undefined;\n /**\n * The exact equality key: given by the decoder, or computed on first use\n * ({@link identityKey}) — a pure function of `milliseconds` and `text`, so\n * computing it later yields the same string (A-02: most decoded Dates never\n * need it, and building it cost more than the parse itself).\n */\n key: string | undefined;\n readonly kind: \"timestamp\" | \"time\" | \"timetz\" | \"sqlite\";\n /**\n * A parameter the MySQL DateTime codec handed on for the adapter to write in\n * its zone with every fraction digit ({@link boundTimestampParameter}); a\n * Date a caller passes is never one.\n */\n readonly bound?: true;\n};\n\nconst identities = new WeakMap<Date, TimestampIdentity>();\n\n/** The canonical timestamp key: the instant's ISO text with the sub-millisecond digits the transport text carried. */\nfunction canonicalKey(params: { milliseconds: number; text: string }): string {\n const fraction = /\\.(\\d+)/.exec(params.text)?.[1] ?? \"\";\n const remainder = fraction.slice(3).replace(/0+$/, \"\");\n const canonical = Date.prototype.toISOString.call(new Date(params.milliseconds)).replace(/(\\.\\d{3})Z$/, `$1${remainder}Z`);\n return `date:${canonical}`;\n}\n\nfunction identityKey(identity: TimestampIdentity): string {\n if (identity.key === undefined) identity.key = canonicalKey({ milliseconds: identity.milliseconds, text: identity.text });\n return identity.key;\n}\n\n/**\n * Retain transport text while the ordinary Date still represents the decoded value.\n * @internal\n */\nexport function rememberTimestampIdentity(params: {\n date: Date;\n text: string;\n numeric?: number;\n key?: string;\n kind?: TimestampIdentity[\"kind\"];\n}): Date {\n const { date, text } = params;\n const milliseconds = Date.prototype.getTime.call(date);\n // An invalid Date has no ISO text: the eager key used to throw its RangeError here, so it still does.\n if (!Number.isFinite(milliseconds)) Date.prototype.toISOString.call(date);\n identities.set(date, {\n milliseconds,\n text,\n numeric: params.numeric,\n key: params.key,\n kind: params.kind ?? \"timestamp\",\n });\n return date;\n}\n\nfunction identityOf(params: { date: Date }): TimestampIdentity | undefined {\n const stored = identities.get(params.date);\n if (stored !== undefined && stored.milliseconds !== Date.prototype.getTime.call(params.date)) {\n identities.delete(params.date);\n return undefined;\n }\n return stored;\n}\n\n/** Exact equality key when available; caller-created/mutated Dates keep millisecond semantics. */\nexport function timestampIdentityKey(params: { date: Date }): string {\n const identity = identityOf(params);\n return identity !== undefined ? identityKey(identity) : `date:${Number.isFinite(Date.prototype.getTime.call(params.date)) ? Date.prototype.toISOString.call(params.date) : \"invalid\"}`;\n}\n\n/** Exact parameter text, valid only for an unchanged decoded Date. */\nexport function timestampIdentityText(params: { date: Date; kind?: TimestampIdentity[\"kind\"] }): string | undefined {\n const identity = identityOf(params);\n return identity !== undefined && (params.kind === undefined || identity.kind === params.kind) ? identity.text : undefined;\n}\n\n/**\n * SQLite legacy integer epochs remain integers rather than being rewritten to ISO text.\n * @internal\n */\nexport function sqliteTimestampIdentityValue(params: { date: Date }): string | number | undefined {\n const identity = identityOf(params);\n return identity?.kind === \"sqlite\" ? identity.numeric ?? identity.text : undefined;\n}\n\n/** Compare retained native identities; SQLite text ordering remains the database's collation. */\nexport function compareTimestampDates(params: { left: Date; right: Date }): -1 | 0 | 1 | null {\n const left = identityOf({ date: params.left });\n const right = identityOf({ date: params.right });\n if (timestampIdentityKey({ date: params.left }) === timestampIdentityKey({ date: params.right })) return 0;\n const rank = (a: number | bigint | string, b: number | bigint | string): -1 | 0 | 1 => a < b ? -1 : a > b ? 1 : 0;\n if (left?.kind === \"sqlite\" || right?.kind === \"sqlite\") {\n return left?.numeric !== undefined && right?.numeric !== undefined ? rank(left.numeric, right.numeric) : null;\n }\n const clock = (identity: TimestampIdentity): readonly [bigint, number] => {\n const [, hours, minutes, seconds, offset] = identityKey(identity).split(\":\");\n const [whole, fraction = \"\"] = seconds!.split(\".\");\n const local = BigInt(Number(hours) * 3600 + Number(minutes) * 60 + Number(whole)) * 1_000_000_000n\n + BigInt(fraction.padEnd(9, \"0\"));\n const zone = Number(offset);\n // PostgreSQL timetz orders unwrapped UTC time, then seconds WEST of UTC.\n return [local - BigInt(zone) * 1_000_000n, -zone];\n };\n if ((left?.kind !== undefined && left.kind !== \"timestamp\") || (right?.kind !== undefined && right.kind !== \"timestamp\")) {\n if (left === undefined || right === undefined || left.kind !== right.kind) return null;\n const a = clock(left);\n const b = clock(right);\n return rank(a[0], b[0]) || rank(a[1], b[1]);\n }\n const milliseconds = rank(Date.prototype.getTime.call(params.left), Date.prototype.getTime.call(params.right));\n if (milliseconds !== 0) return milliseconds;\n const a = /\\.(\\d+)/.exec(left?.text ?? \"\")?.[1]?.slice(3) ?? \"\";\n const b = /\\.(\\d+)/.exec(right?.text ?? \"\")?.[1]?.slice(3) ?? \"\";\n return rank(a.padEnd(Math.max(a.length, b.length), \"0\"), b.padEnd(Math.max(a.length, b.length), \"0\"));\n}\n\n/**\n * A copy of an identity-carrying `date` marked as a bound parameter: the\n * adapter writes it as wall-clock text in its own zone, keeping the\n * sub-millisecond digits a driver `Date` drops. The caller's `Date` is never\n * marked, so a raw statement that binds it keeps the driver's own serialization.\n * @internal\n */\nexport function boundTimestampParameter(params: { date: Date }): Date {\n const identity = identityOf(params);\n const date = new Date(Date.prototype.getTime.call(params.date));\n if (identity !== undefined) identities.set(date, { ...identity, bound: true });\n return date;\n}\n\n/**\n * The database text of a parameter marked by {@link boundTimestampParameter};\n * `undefined` for any other value.\n * @internal\n */\nexport function boundTimestampText(params: { value: unknown }): string | undefined {\n const { value } = params;\n if (!(value instanceof Date)) return undefined;\n const identity = identityOf({ date: value });\n return identity?.bound === true ? identity.text : undefined;\n}\n\n/** Snapshot the value and its valid database identity without sharing mutable state. */\nexport function cloneTimestampDate(params: { date: Date }): Date {\n const date = new Date(Date.prototype.getTime.call(params.date));\n const identity = identityOf(params);\n if (identity !== undefined) identities.set(date, identity);\n return date;\n}\n",
|
|
6
6
|
"/**\n * Char-code decoding of the fixed timestamp text PostgreSQL, MySQL and SQLite\n * print: `YYYY-MM-DD HH:MM:SS[.f]`, with or without an offset.\n *\n * Parsing it by regular expression and `new Date(text)` costs a few hundred\n * nanoseconds per value; the layout is fixed, so one pass over the character\n * codes yields the same instant several times cheaper (node-postgres cells,\n * the `::text` key columns of a keyset page, the join strategy's JSON).\n *\n * This function only ACCEPTS or DECLINES: it returns `undefined` for every\n * text outside the plain form, and the caller then runs its general parser.\n * An accepted text decodes to exactly the instant that parser returns\n * (differential tests in adapter-pg `tests/timestamp-text.test.ts` and\n * `tests/datetime-text-fast-path.test.ts` here).\n */\n\n// Plain (not frozen) module-private arrays: JavaScriptCore reads a frozen\n// array's elements ≈ 2× slower, which cost this parser half its gain.\n\n/** Days per month in a common year; February is checked separately. */\nconst DAYS_IN_MONTH: readonly number[] = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\n/** The digit positions of `YYYY-MM-DD HH:MM:SS`. */\nconst DIGIT_POSITIONS: readonly number[] = [0, 1, 2, 3, 5, 6, 8, 9, 11, 12, 14, 15, 17, 18];\n\n/**\n * Decode `YYYY-MM-DD HH:MM:SS[.f{1,6}]` as a `Date`: zone-less text is read as\n * UTC wall-clock time, zoned text at its offset. Fraction digits beyond the\n * third are truncated.\n *\n * `zoned`: `true` requires `±HH` or `±HH:MM` after the time (PostgreSQL's\n * `timestamptz` text), `false` requires nothing after it (`timestamp`, MySQL\n * `DATETIME`); `\"either\"` also takes a `T` between date and time and a `Z`\n * offset (ISO 8601: the join strategy's JSON, SQLite's stored text).\n *\n * Returns `undefined` — \"use the general parser\" — for anything else: years\n * before 1000 (`Date.UTC` maps 0–99 to 1900–1999), BC dates, `infinity`,\n * offsets with seconds (historic local mean time), date-only text, 7+\n * fraction digits, and out-of-range fields (month 13, February 30, hour 24,\n * second 60).\n */\nexport function parsePlainTimestampText(params: { readonly text: string; readonly zoned: boolean | \"either\" }): Date | undefined {\n const { text, zoned } = params;\n const length = text.length;\n const separator = text.charCodeAt(10);\n if (\n length < 19 ||\n text.charCodeAt(4) !== 45 ||\n text.charCodeAt(7) !== 45 ||\n (separator !== 32 && (zoned !== \"either\" || separator !== 84)) ||\n text.charCodeAt(13) !== 58 ||\n text.charCodeAt(16) !== 58\n ) {\n return undefined;\n }\n for (let position = 0; position < DIGIT_POSITIONS.length; position++) {\n const code = text.charCodeAt(DIGIT_POSITIONS[position] as number);\n if (code < 48 || code > 57) return undefined;\n }\n const year =\n (text.charCodeAt(0) - 48) * 1000 + (text.charCodeAt(1) - 48) * 100 + (text.charCodeAt(2) - 48) * 10 + (text.charCodeAt(3) - 48);\n const month = (text.charCodeAt(5) - 48) * 10 + (text.charCodeAt(6) - 48);\n const day = (text.charCodeAt(8) - 48) * 10 + (text.charCodeAt(9) - 48);\n const hour = (text.charCodeAt(11) - 48) * 10 + (text.charCodeAt(12) - 48);\n const minute = (text.charCodeAt(14) - 48) * 10 + (text.charCodeAt(15) - 48);\n const second = (text.charCodeAt(17) - 48) * 10 + (text.charCodeAt(18) - 48);\n if (year < 1000 || month < 1 || month > 12 || day < 1 || hour > 23 || minute > 59 || second > 59) return undefined;\n if (day > 28) {\n const leap = year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n const days = month === 2 ? (leap ? 29 : 28) : (DAYS_IN_MONTH[month - 1] as number);\n if (day > days) return undefined;\n }\n\n let index = 19;\n let milliseconds = 0;\n if (index < length && text.charCodeAt(index) === 46) {\n index++;\n const start = index;\n while (index < length) {\n const code = text.charCodeAt(index);\n if (code < 48 || code > 57) break;\n if (index - start < 3) milliseconds = milliseconds * 10 + (code - 48);\n index++;\n }\n const digits = index - start;\n if (digits === 0 || digits > 6) return undefined;\n if (digits === 1) milliseconds *= 100;\n else if (digits === 2) milliseconds *= 10;\n }\n\n let offsetMinutes = 0;\n if (zoned === \"either\" && index === length - 1 && text.charCodeAt(index) === 90) {\n index = length;\n } else if (zoned === true || (zoned === \"either\" && index < length)) {\n if (index + 3 > length) return undefined;\n const sign = text.charCodeAt(index);\n if (sign !== 43 && sign !== 45) return undefined;\n const hours1 = text.charCodeAt(index + 1) - 48;\n const hours2 = text.charCodeAt(index + 2) - 48;\n if (hours1 < 0 || hours1 > 9 || hours2 < 0 || hours2 > 9 || hours1 * 10 + hours2 > 23) return undefined;\n offsetMinutes = (hours1 * 10 + hours2) * 60;\n index += 3;\n if (index < length) {\n // `±HH:MM` only; `±HH:MM:SS` (seconds offsets) declines to the general parser.\n if (index + 3 !== length || text.charCodeAt(index) !== 58) return undefined;\n const minutes1 = text.charCodeAt(index + 1) - 48;\n const minutes2 = text.charCodeAt(index + 2) - 48;\n if (minutes1 < 0 || minutes1 > 5 || minutes2 < 0 || minutes2 > 9) return undefined;\n offsetMinutes += minutes1 * 10 + minutes2;\n index = length;\n }\n if (sign === 45) offsetMinutes = -offsetMinutes;\n }\n if (index !== length) return undefined;\n\n return new Date(Date.UTC(year, month - 1, day, hour, minute, second, milliseconds) - offsetMinutes * 60_000);\n}\n",
|
|
7
7
|
"import type { QualifiedSqlName } from \"@vibeorm/schema\";\n\nconst NATIVE_ENUM_ARRAY_PARAMETER: unique symbol = Symbol(\"vibeorm.nativeEnumArrayParameter\");\n\n/** Encoded enum-array text plus its immutable physical type; never passed to a driver. */\nexport type NativeEnumArrayParameter = {\n readonly [NATIVE_ENUM_ARRAY_PARAMETER]: true;\n readonly value: string;\n readonly type: QualifiedSqlName;\n};\n\n/** Attach a typed native enum identity to centralized codec output, without re-encoding values. */\nexport function nativeEnumArrayParameter(params: { value: string; type: QualifiedSqlName }): NativeEnumArrayParameter {\n return { [NATIVE_ENUM_ARRAY_PARAMETER]: true, value: params.value, type: params.type };\n}\n\n/** Narrow the internal typed parameter before collecting its plain wire value. */\nexport function isNativeEnumArrayParameter(value: unknown): value is NativeEnumArrayParameter {\n return typeof value === \"object\" && value !== null && NATIVE_ENUM_ARRAY_PARAMETER in value;\n}\n",
|
|
8
8
|
"const JSON_LIST_PARAMETER: unique symbol = Symbol(\"vibeorm.jsonListParameter\");\n\n/**\n * The element type of a postgres Json LIST column: `jsonb[]` by default,\n * `json[]` for `Json[] @db.Json`. Comparison sites (`has`, `hasEvery`,\n * `hasSome`, `equals`) render a `json` operand and its column as jsonb —\n * `json` has no equality operator; write sites (`push`) keep `json`.\n */\nexport type JsonListStorage = \"jsonb\" | \"json\";\n\n/**\n * A Json LIST parameter — one element's JSON text (`has`, `push` of one\n * element) or a whole list of JSON texts (`hasEvery`, `hasSome`, `equals`,\n * `push` of an array) — plus the column's element type. Never passed to a\n * driver: the ParamCollector collects the plain value and renders\n * `$n::text::jsonb` (or `$n::text::jsonb[]` for a whole list).\n *\n * Why it exists: an OID-typed driver (bun:sql with named statements) resolves\n * the parameter's postgres type and re-serializes the JS value AS that type. A\n * pre-stringified JSON element bound into a slot the server infers as `jsonb`\n * (`$n = ANY(\"col\")`, `array_append(\"col\", $n)`) arrives DOUBLE-ENCODED, and\n * `has: { a: 1 }` then matches nothing (live-proven on Bun 1.4.3). The `::text`\n * pin makes every driver send the text and the SERVER parse it — the same\n * trap `JsonParamCell` closes for Json columns.\n */\nexport type JsonListParameter = {\n readonly [JSON_LIST_PARAMETER]: true;\n readonly value: string | readonly string[];\n readonly storage: JsonListStorage;\n};\n\n/** Attach the json/jsonb element type to an encoded Json list operand, without re-encoding it. */\nexport function jsonListParameter(params: { value: string | readonly string[]; storage: JsonListStorage }): JsonListParameter {\n return { [JSON_LIST_PARAMETER]: true, value: params.value, storage: params.storage };\n}\n\n/** Narrow the internal typed parameter before collecting its plain wire value. */\nexport function isJsonListParameter(value: unknown): value is JsonListParameter {\n return typeof value === \"object\" && value !== null && JSON_LIST_PARAMETER in value;\n}\n",
|
|
9
9
|
"/**\n * JSON key-level update: an ordered list of `set` / `remove` steps applied to\n * ONE Json column in ONE assignment, without reading the document first.\n *\n * Semantics (identical on every dialect):\n * - `set` replaces or adds the member at its path and creates missing\n * intermediate objects; a SQL NULL column starts from `{}`.\n * - `remove` deletes the member; an absent member (or an absent container on\n * the way) is a no-op, and a SQL NULL column stays NULL.\n * - Every container a step passes through must be an object or absent. An\n * array, a scalar or JSON `null` there refuses the write.\n *\n * The steps are folded at build time into one write tree, so the SQL reads\n * only the ORIGINAL column, never an earlier step's result: its text grows\n * linearly with the steps. A container whose value an earlier `set` wrote is\n * known here and checked in JavaScript ({@link planJsonPatch} reports the\n * conflict before any SQL); every other container is checked in the statement\n * against the original document, and a failed check fails the statement on\n * purpose with a marker the client maps back to a typed error:\n * `__vibe_veto:json_patch:<nonce>:<check index>:<found type>`.\n */\n\nimport { internalError } from \"@vibeorm/schema\";\nimport { CHAIN_VETO_PREFIX } from \"./ast.ts\";\nimport type { SqlDialect } from \"./dialect.ts\";\nimport { jsonPathString } from \"./json-path.ts\";\nimport type { ParamCollector } from \"./params.ts\";\n\n// ─── Marker ───────────────────────────────────────────────────────\n\n/** One step of a JSON patch; `value` is the JSON text the Json codec wrote. */\nexport type JsonPatchStep =\n | { readonly set: readonly string[]; readonly value: string }\n | { readonly remove: readonly string[] };\n\n/**\n * An UPDATE set value that patches a Json column in place. Recognised\n * structurally inside `UpdateStatement.set` and conflict updates, with the\n * same discipline as the other set markers: the Json codec stringifies JSON\n * payloads before they reach the AST, so a document is never mistaken for it.\n */\nexport type JsonPatchOperation = {\n readonly __jsonPatch: true;\n readonly steps: readonly JsonPatchStep[];\n /** Per-call value bound into the refusal marker; the client maps only the markers it issued. */\n readonly nonce: string;\n /** `json` for a postgres `json` column (`Json @db.Json`): patched through jsonb, stored as json. */\n readonly storage?: \"json\";\n};\n\n/** The veto token a refused patch carries after {@link CHAIN_VETO_PREFIX}. */\nconst JSON_PATCH_VETO_TOKEN = \"json_patch\";\n\n/** Narrow an UPDATE set value to a {@link JsonPatchOperation}. */\nexport function isJsonPatchOperation(value: unknown): value is JsonPatchOperation {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return false;\n if (!Object.hasOwn(value, \"__jsonPatch\")) return false;\n const keys = Object.keys(value);\n if (keys.some((key) => key !== \"__jsonPatch\" && key !== \"steps\" && key !== \"nonce\" && key !== \"storage\")) return false;\n const candidate = value as { __jsonPatch: unknown; steps: unknown; nonce: unknown; storage?: unknown };\n return candidate.__jsonPatch === true && Array.isArray(candidate.steps) && candidate.steps.length > 0 &&\n typeof candidate.nonce === \"string\" && (candidate.storage === undefined || candidate.storage === \"json\");\n}\n\n// ─── Fold ─────────────────────────────────────────────────────────\n\n/** JSON types a container can hold instead of an object. */\nexport type JsonPatchFoundType = \"array\" | \"string\" | \"number\" | \"boolean\" | \"null\";\n\n/** A container of the ORIGINAL document that must be an object or absent; `step` is the first step that passes through it. */\nexport type JsonPatchCheck = { readonly path: readonly string[]; readonly step: number };\n\n/** A step that passes through a non-object value an earlier `set` of the same patch wrote. */\nexport type JsonPatchConflict = { readonly step: number; readonly path: readonly string[]; readonly found: JsonPatchFoundType };\n\n/** {@link planJsonPatch}: the in-statement checks in render order, or the conflict known before any SQL. */\nexport type JsonPatchPlan = { readonly checks: readonly JsonPatchCheck[] } | { readonly conflict: JsonPatchConflict };\n\ntype EditNode = { readonly kind: \"edit\"; create: boolean; readonly children: Map<string, PatchNode> };\ntype ReplaceNode = { readonly kind: \"replace\"; text: string; parsed?: unknown };\ntype PatchNode = EditNode | ReplaceNode | { readonly kind: \"delete\" };\ntype Folded = { readonly root: EditNode; readonly checks: readonly JsonPatchCheck[] } | { readonly conflict: JsonPatchConflict };\n\nconst editNode = (): EditNode => ({ kind: \"edit\", create: false, children: new Map() });\n\nfunction isJsonObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction foundType(value: unknown): JsonPatchFoundType {\n if (value === null) return \"null\";\n if (Array.isArray(value)) return \"array\";\n switch (typeof value) {\n case \"string\":\n return \"string\";\n case \"number\":\n return \"number\";\n case \"boolean\":\n return \"boolean\";\n }\n throw internalError({ message: \"a parsed JSON value has no JSON type\" });\n}\n\n/** Own-property write: `__proto__` is an ordinary member name in JSON. */\nfunction defineMember(params: { container: Record<string, unknown>; key: string; value: unknown }): void {\n Object.defineProperty(params.container, params.key, { value: params.value, enumerable: true, writable: true, configurable: true });\n}\n\n/**\n * Apply the rest of a step inside a value the patch already knows (an earlier\n * `set` wrote it). Mirrors the SQL semantics exactly.\n */\nfunction applyKnown(params: { value: unknown; rest: readonly string[]; step: JsonPatchStep; at: readonly string[]; index: number }): JsonPatchConflict | undefined {\n const { rest, step, index } = params;\n let container = params.value;\n for (let depth = 0; depth < rest.length; depth++) {\n if (!isJsonObject(container)) return { step: index, path: [...params.at, ...rest.slice(0, depth)], found: foundType(container) };\n const key = rest[depth] as string;\n if (depth === rest.length - 1) {\n if (\"set\" in step) defineMember({ container, key, value: JSON.parse(step.value) as unknown });\n else delete container[key];\n return undefined;\n }\n if (!Object.hasOwn(container, key)) {\n if (!(\"set\" in step)) return undefined;\n defineMember({ container, key, value: {} });\n }\n container = container[key];\n }\n return undefined;\n}\n\nfunction fold(steps: readonly JsonPatchStep[]): Folded {\n const root = editNode();\n const checks: JsonPatchCheck[] = [];\n const checked = new Set<string>();\n for (let index = 0; index < steps.length; index++) {\n const step = steps[index] as JsonPatchStep;\n const setting = \"set\" in step;\n const path = setting ? step.set : step.remove;\n if (path.length === 0) throw internalError({ message: \"a JSON patch step needs a non-empty path\" });\n let node = root;\n for (let depth = 0; depth < path.length; depth++) {\n const signature = JSON.stringify(path.slice(0, depth));\n if (!checked.has(signature)) {\n checked.add(signature);\n checks.push({ path: path.slice(0, depth), step: index });\n }\n if (setting) node.create = true;\n const key = path[depth] as string;\n if (depth === path.length - 1) {\n node.children.set(key, setting ? { kind: \"replace\", text: step.value } : { kind: \"delete\" });\n break;\n }\n let child = node.children.get(key);\n if (child === undefined) {\n child = editNode();\n node.children.set(key, child);\n }\n if (child.kind === \"edit\") {\n node = child;\n continue;\n }\n if (child.kind === \"delete\") {\n // Removed by an earlier step: absent now. A remove below it is a no-op;\n // a set starts the member again from `{}`.\n if (!setting) break;\n child = { kind: \"replace\", text: \"{}\", parsed: {} };\n node.children.set(key, child);\n }\n child.parsed ??= JSON.parse(child.text) as unknown;\n const conflict = applyKnown({ value: child.parsed, rest: path.slice(depth + 1), step, at: path.slice(0, depth + 1), index });\n if (conflict !== undefined) return { conflict };\n break;\n }\n }\n return { root, checks };\n}\n\n/**\n * Fold a patch's steps: the checks the statement runs on the original\n * document (index = the check index its refusal marker carries), or the\n * conflict an earlier `set` of the same patch makes certain.\n */\nexport function planJsonPatch(params: { steps: readonly JsonPatchStep[] }): JsonPatchPlan {\n const folded = fold(params.steps);\n return \"conflict\" in folded ? { conflict: folded.conflict } : { checks: folded.checks };\n}\n\nconst textOf = (node: ReplaceNode): string => (node.parsed === undefined ? node.text : JSON.stringify(node.parsed));\n\n/** The members an edit node writes: values and creating edits (pure-remove subtrees ride the deletes). */\nfunction writtenMembers(node: EditNode): [string, ReplaceNode | EditNode][] {\n const out: [string, ReplaceNode | EditNode][] = [];\n for (const [key, child] of node.children) {\n if (child.kind === \"replace\" || (child.kind === \"edit\" && child.create)) out.push([key, child]);\n }\n return out;\n}\n\n/** Every removed member under the edit nodes, in step order of first appearance. */\nfunction deletedPaths(params: { node: EditNode; path: readonly string[] }): string[][] {\n const out: string[][] = [];\n for (const [key, child] of params.node.children) {\n if (child.kind === \"delete\") out.push([...params.path, key]);\n else if (child.kind === \"edit\") out.push(...deletedPaths({ node: child, path: [...params.path, key] }));\n }\n return out;\n}\n\n// ─── Rendering ────────────────────────────────────────────────────\n\nconst VETO_TEXT = `${CHAIN_VETO_PREFIX}${JSON_PATCH_VETO_TOKEN}:`;\n\n/**\n * The patched value of one Json column — `CASE WHEN <a container is not an\n * object> THEN <fail on purpose> … ELSE <patched document> END` — where `read`\n * is the column as the assignment reads it (qualified in a conflict update).\n * Every placeholder is collected in text order.\n * @internal\n */\nexport function renderJsonPatch(params: { dialect: SqlDialect; patch: JsonPatchOperation; read: string; collector: ParamCollector }): string {\n const folded = fold(params.patch.steps);\n if (\"conflict\" in folded) {\n throw internalError({ message: \"a JSON patch whose steps conflict reached the renderer; the query builder refuses it\" });\n }\n switch (params.dialect.jsonPathMode) {\n case \"operators\":\n return renderPostgresPatch({ ...params, ...folded });\n case \"sqliteExtract\":\n return renderSqlitePatch({ ...params, ...folded });\n case \"mysqlExtract\":\n return renderMysqlPatch({ ...params, ...folded });\n }\n}\n\ntype RenderInput = {\n readonly patch: JsonPatchOperation;\n readonly read: string;\n readonly collector: ParamCollector;\n readonly root: EditNode;\n readonly checks: readonly JsonPatchCheck[];\n};\n\n/**\n * PostgreSQL: `jsonb_build_object` merged with `||` per edited object, `#-`\n * per removed member. Every container on a rendered path is checked to be an\n * object, so `#>` and `#-` read an integer-like key as a member name, never\n * as an array index. The refusal casts a marker to integer (SQLSTATE 22P02);\n * `concat` is STABLE and reads the row, so the planner never folds it.\n */\nfunction renderPostgresPatch(params: RenderInput): string {\n const { patch, read, collector } = params;\n const json = patch.storage === \"json\";\n const typeOf = json ? \"json_typeof\" : \"jsonb_typeof\";\n const at = (source: string, path: readonly string[]): string =>\n path.length === 0 ? source : `${source} #> ${collector.add([...path])}::text[]`;\n const arms = params.checks.map((check, index) => {\n const condition = `${typeOf}(${at(read, check.path)}) <> 'object'`;\n const marker = collector.add(`${patch.nonce}:${index}`);\n return `WHEN ${condition} THEN to_jsonb(CAST(concat('${VETO_TEXT}', ${marker}::text, ':', ${typeOf}(${at(read, check.path)})) AS integer))`;\n });\n const source = json ? `${read}::jsonb` : read;\n const build = (node: EditNode, path: readonly string[]): string => {\n const base = at(source, path);\n const start = node.create ? `COALESCE(${base}, '{}'::jsonb)` : base;\n const members = writtenMembers(node);\n if (members.length === 0) return start;\n const pairs = members.map(([key, child]) => {\n const name = `${collector.add(key)}::text`;\n return `${name}, ${child.kind === \"replace\" ? `${collector.add(textOf(child))}::text::jsonb` : build(child, [...path, key])}`;\n });\n return `(${start} || jsonb_build_object(${pairs.join(\", \")}))`;\n };\n let result = build(params.root, []);\n const deletes = deletedPaths({ node: params.root, path: [] });\n if (deletes.length > 0) result = `(${result}${deletes.map((path) => ` #- ${collector.add(path)}::text[]`).join(\"\")})`;\n const value = `CASE ${arms.join(\" \")} ELSE ${result} END`;\n return json ? `(${value})::json` : value;\n}\n\n/**\n * SQLite: `json_set` per edited object (values wrapped in `json()` so text is\n * read as JSON), `json_remove` for the removed members. The refusal is a bad\n * JSON path, whose error message quotes the marker.\n */\nfunction renderSqlitePatch(params: RenderInput): string {\n const { patch, read, collector } = params;\n const typeOf = (path: readonly string[]): string =>\n path.length === 0 ? `json_type(${read})` : `json_type(${read}, ${collector.add(jsonPathString(path))})`;\n const arms = params.checks.map((check, index) => {\n const condition = `${typeOf(check.path)} <> 'object'`;\n const marker = collector.add(`${patch.nonce}:${index}`);\n return `WHEN ${condition} THEN json_extract('{}', '${VETO_TEXT}' || ${marker} || ':' || ${typeOf(check.path)})`;\n });\n const build = (node: EditNode, path: readonly string[]): string => {\n const base = path.length === 0 ? read : `json_extract(${read}, ${collector.add(jsonPathString(path))})`;\n const start = node.create ? `COALESCE(${base}, '{}')` : base;\n const members = writtenMembers(node);\n if (members.length === 0) return start;\n const pairs = members.map(([key, child]) => {\n const member = collector.add(jsonPathString([key]));\n return `${member}, json(${child.kind === \"replace\" ? collector.add(textOf(child)) : build(child, [...path, key])})`;\n });\n return `json_set(${start}, ${pairs.join(\", \")})`;\n };\n let result = build(params.root, []);\n const deletes = deletedPaths({ node: params.root, path: [] });\n if (deletes.length > 0) result = `json_remove(${result}, ${deletes.map((path) => collector.add(jsonPathString(path))).join(\", \")})`;\n return `CASE ${arms.join(\" \")} ELSE ${result} END`;\n}\n\n/**\n * MySQL: `JSON_SET` per edited object (it adds a member only to an existing\n * object, so missing ones start from `JSON_OBJECT()`), `JSON_REMOVE` for the\n * removed members. The refusal is `UUID_TO_BIN` of the marker (error 1411,\n * which quotes the value); `JSON_ARRAY` keeps the CASE's type JSON.\n */\nfunction renderMysqlPatch(params: RenderInput): string {\n const { patch, read, collector } = params;\n const at = (path: readonly string[]): string =>\n path.length === 0 ? read : `JSON_EXTRACT(${read}, ${collector.add(jsonPathString(path))})`;\n const arms = params.checks.map((check, index) => {\n const condition = `JSON_TYPE(${at(check.path)}) <> 'OBJECT'`;\n const marker = collector.add(`${patch.nonce}:${index}`);\n return `WHEN ${condition} THEN JSON_ARRAY(UUID_TO_BIN(CONCAT('${VETO_TEXT}', ${marker}, ':', JSON_TYPE(${at(check.path)}))))`;\n });\n const build = (node: EditNode, path: readonly string[]): string => {\n const base = at(path);\n const start = node.create ? `COALESCE(${base}, JSON_OBJECT())` : base;\n const members = writtenMembers(node);\n if (members.length === 0) return start;\n const pairs = members.map(([key, child]) => {\n const member = collector.add(jsonPathString([key]));\n return `${member}, ${child.kind === \"replace\" ? `CAST(${collector.add(textOf(child))} AS JSON)` : build(child, [...path, key])}`;\n });\n return `JSON_SET(${start}, ${pairs.join(\", \")})`;\n };\n let result = build(params.root, []);\n const deletes = deletedPaths({ node: params.root, path: [] });\n if (deletes.length > 0) result = `JSON_REMOVE(${result}, ${deletes.map((path) => collector.add(jsonPathString(path))).join(\", \")})`;\n return `CASE ${arms.join(\" \")} ELSE ${result} END`;\n}\n\n// ─── Refusal markers ──────────────────────────────────────────────\n\n/** A refusal marker found in a database error message: the nonce, the check index, and the container's type as the database spelled it. */\nexport type JsonPatchVeto = { readonly nonce: string; readonly check: number; readonly found: string };\n\n/** The JSON patch refusal a database error message quotes, or `undefined`. */\nexport function jsonPatchVetoOf(params: { message: string }): JsonPatchVeto | undefined {\n const start = params.message.indexOf(VETO_TEXT);\n if (start < 0) return undefined;\n const match = /^([0-9a-f]+):(\\d+):([A-Za-z]+)/.exec(params.message.slice(start + VETO_TEXT.length));\n if (match === null) return undefined;\n return { nonce: match[1] as string, check: Number(match[2]), found: match[3] as string };\n}\n",
|
|
10
|
-
"import type { NativeEnumArrayParameter } from \"./native-enum-parameter.ts\";\nimport type { JsonListParameter } from \"./json-list-parameter.ts\";\nimport type { SqlFragment } from \"./composable.ts\";\nimport type { RlsReadinessQuery } from \"./dialects/postgres-rls-readiness.ts\";\n/**\n * The SQL AST — the small statement language the runtime and migrate packages\n * build and dialects render.\n *\n * Deliberately minimal at P0 (single-table statements, no joins/subqueries);\n * grows with the runtime in P2/P3. Every shape added here needs a catalog case\n * (tests/catalog/cases.ts) in the same change.\n */\n\nimport type {\n AdvisoryLockMode,\n DateTruncationStorage,\n DateTruncationUnit,\n RlsContextIR,\n RowLockStrength,\n RowLockWaitPolicy,\n ScalarType,\n SchemaIR,\n SqlFragmentSpec,\n} from \"@vibeorm/schema\";\n\n// ─── References ───────────────────────────────────────────────────\n\n/** A column reference, optionally table-qualified. */\nexport type ColRef = {\n readonly table?: string;\n readonly name: string;\n /**\n * Projection-only wire transform. `jsonText` uses the dialect's JSON text\n * projection to preserve SQL NULL versus the JSON document `null` before\n * driver parsing, without converting a postgres `json` column to `jsonb`.\n * `castText` renders a dialect text cast and preserves `alias ?? name`,\n * including timestamp identity before driver Date truncation. PostgreSQL\n * uses `\"col\"::text`; SQLite/MySQL use CAST AS TEXT/CHAR. `encodeBase64`\n * is postgres-only and renders `encode(\"col\", 'base64')`.\n * `encodeArrayBase64` is postgres-only and renders\n * `encode(array_send(\"col\"), 'base64')` — a `bytea[]` column's binary array\n * form (dimensions, NULL elements, raw element bytes) as base64: faithful\n * whatever the session's `bytea_output`, keeping a NULL column (`NULL`), an\n * empty array and NULL elements distinct (5.0 lane V; the lateral subselect's\n * `Bytes[]` form, decoded by the runtime's JSON-transport plan). Other users:\n * the lateral subselect (SQL review B3: raw `to_jsonb` would ship BigInt/Decimal as float64 JSON\n * numbers and Bytes as `\\x` hex text), and every row projection of a\n * `Float[]`/`Json[]` column (bun:sql's array parser refuses float arrays\n * printed with an exponent and json arrays holding integers beyond int32;\n * the runtime parses the array literal text itself). Never set on\n * filter/order refs.\n */\n readonly transform?: \"castText\" | \"encodeBase64\" | \"encodeArrayBase64\" | \"jsonText\";\n /**\n * Comparison/order/aggregate cast, sqlite Decimal only (SQL review B4):\n * Decimal stores as exact TEXT there and text comparison is lexicographic —\n * compare, ORDER BY and aggregate sites render `CAST(\"col\" AS REAL)` (with\n * NUMBER operands) instead. Never set on projections or GROUP BY keys, so\n * storage and read-back stay the exact text.\n */\n readonly castReal?: boolean;\n /** Native enum order key through a scalar subquery: MySQL reads its member index, other dialects keep the column. */\n readonly enumOrdinal?: true;\n /**\n * Order/distinct/compare cast, postgres `json` columns only (`Json @db.Json`,\n * release-3.0 D3): `json` has no ordering or equality operator, so ORDER BY,\n * DISTINCT ON and comparison sites render `\"col\"::jsonb` (`\"col\"::jsonb[]`\n * for a `json[]` list column) — the order and distinctness of a jsonb\n * column. Never set on projections, so read-back keeps the stored text.\n */\n readonly castJsonb?: \"jsonb\" | \"jsonb[]\";\n /**\n * Calendar truncation of a timestamp column, for a `groupBy` date key. The\n * reference renders as the start of its period in a named time zone\n * (`date_trunc('day', \"col\", 'Europe/Oslo')`; see `renderDateTruncation`),\n * in the column's own SQL type. Set on the projection, GROUP BY and ORDER BY\n * refs of one key, which then repeat the identical expression text\n * (PostgreSQL matches GROUP BY expressions by structure); a projection keeps\n * `alias ?? name` as its output name. Never set on filter refs. Dialects\n * without the `dateTruncation` capability refuse it when rendering.\n */\n readonly truncate?: DateTruncation;\n /**\n * A `groupBy` expression key read from the column ({@link GroupKeyExpression}):\n * the text at a JSON path, or a string's leading characters. Like\n * {@link ColRef.truncate} it is set on the projection (with `alias`, the\n * key's result name), GROUP BY and ORDER BY refs of one key, which repeat\n * the identical text: every operand is a validated literal, never a bound\n * parameter, so PostgreSQL and MySQL match the GROUP BY expression.\n */\n readonly groupKey?: GroupKeyExpression;\n /**\n * The first non-NULL of these references — `COALESCE(\"a\", \"b\")` — instead\n * of the column `name`: the value of an `orderBy: { _coalesce: … }` term.\n * Each member renders as its own reference, casts included (a sqlite\n * Decimal member as `CAST(… AS REAL)`, a mysql native enum as its member\n * index). Set on ORDER BY and comparison refs only. `name` is then\n * {@link COALESCE_REF_NAME}, never a column of a table, so a reader that\n * looks a column up by name finds none.\n */\n readonly coalesce?: readonly ColRef[];\n /**\n * Projection alias: renders `ref AS \"alias\"`. PROJECTION-ONLY — filter,\n * order and correlation refs never set it (the renderer ignores it outside\n * a projection list). Used by the single-statement M2M join to expose the\n * join table's parent-key column under a reserved name (`__vibe_parent`).\n */\n readonly alias?: string;\n};\n\n/**\n * The `name` of a {@link ColRef.coalesce} reference. The `__vibe_` column\n * prefix is reserved by schema validation, so no model column carries it.\n */\nexport const COALESCE_REF_NAME: string = \"__vibe_coalesce\";\n\n/** A {@link ColRef.coalesce} reference over `members`. */\nexport function coalesceRef(params: { members: readonly ColRef[] }): ColRef {\n return { name: COALESCE_REF_NAME, coalesce: params.members };\n}\n\n/** A {@link ColRef.truncate} request: the calendar unit, the zone that defines the calendar, and the column's storage form. */\nexport type DateTruncation = {\n readonly unit: DateTruncationUnit;\n /** A time-zone name (`\"Europe/Oslo\"`, `\"UTC\"`), rendered as a string literal after a strict character check. */\n readonly timeZone: string;\n readonly storage: DateTruncationStorage;\n};\n\n/**\n * A {@link ColRef.groupKey} expression.\n *\n * - `jsonPathText`: the text at an object-key path of a JSON column — a JSON\n * string unquoted, a number or boolean in its JSON spelling, JSON `null` and\n * a missing path SQL NULL, an object or array its JSON text. Each step reads\n * an object member only. `storage: \"json\"` marks a postgres `json` column,\n * read through jsonb like the JSON filters.\n * - `prefix`: the first `length` characters of a string column.\n */\nexport type GroupKeyExpression =\n | { readonly kind: \"jsonPathText\"; readonly path: readonly string[]; readonly storage?: \"json\" }\n | { readonly kind: \"prefix\"; readonly length: number };\n\nexport type TableRef = {\n readonly name: string;\n /** Explicit fixed PostgreSQL placement; absence preserves existing SQL. */\n readonly namespace?: string;\n readonly alias?: string;\n};\n\n// ─── Aggregates ───────────────────────────────────────────────────\n\n/** Aggregate functions applied to one column. */\nexport type AggFn = \"count\" | \"avg\" | \"sum\" | \"min\" | \"max\";\n\n/** Reference to an aggregate expression: `COUNT(*)` or `FN(\"col\")`. */\nexport type AggRef =\n | { readonly fn: \"countAll\"; readonly filter?: SqlExpr }\n | {\n readonly fn: AggFn;\n readonly column: ColRef;\n /** Native enum MIN/MAX: projections and HAVING return the database label; order keys keep its ordinal. */\n readonly enumOrder?: \"value\" | \"ordinal\";\n /**\n * Aggregate only the rows the predicate admits: `AGG(x) FILTER (WHERE …)`\n * or `AGG(CASE WHEN … THEN x END)` per the dialect's\n * `filteredAggregates` capability. Its parameters bind each time the\n * aggregate renders (projection, HAVING, ORDER BY), in text order.\n */\n readonly filter?: SqlExpr;\n };\n\n/**\n * One aggregate projection: `FN(\"col\") AS \"alias\"`. The alias is part of the\n * catalog contract — the runtime derives result keys from it deterministically\n * (`_count___all`, `_avg__score`), never by parsing the SQL text back.\n */\nexport type AggSelect = {\n readonly agg: AggRef;\n readonly alias: string;\n /** Projection-only result cast; native aggregate comparisons and ordering stay typed. */\n readonly castText?: true;\n};\n\n// ─── JSON filters ─────────────────────────────────────────────────\n\n/**\n * JSON path predicates (Prisma's Json filter surface). `not` is `equals` with\n * `negate` — there is no separate op. `exists` takes a boolean `value`: the\n * member at the path (object keys only) is present (its value may be JSON\n * `null`) or, for `false`, the document is present and the member is not; a\n * SQL NULL column is unknown for both. Which ops a dialect can express is\n * declared on `SqlDialect.supportedJsonOps` and enforced at render time too.\n */\nexport type JsonFilterOp =\n | \"equals\"\n | \"exists\"\n | \"string_contains\"\n | \"string_starts_with\"\n | \"string_ends_with\"\n | \"array_contains\"\n | \"array_starts_with\"\n | \"array_ends_with\";\n\n// ─── Expressions ──────────────────────────────────────────────────\n\nexport type ComparisonOp = \"eq\" | \"ne\" | \"gt\" | \"gte\" | \"lt\" | \"lte\";\n\n/**\n * The column facts one member of a {@link SqlExpr} `keyList` tuple needs to\n * bind exactly like the equality `\"col\" = $n` would. Postgres binds each\n * member as ONE typed array (`$n::<element type>[]`), so it needs the\n * column's element type: the declared native type without its modifier\n * (`timestamptz`, never `timestamptz(3)` — a typmod cast would round\n * `.1234` onto a stored `.123` that `=` does not match), `bpchar` for\n * `char(n)`, `citext`, the enum's own type. MySQL needs to know a time-of-day\n * member (`SqlDialect.timeOfDayInStrategy`); SQLite needs nothing.\n */\nexport type KeyListMember = {\n /** The column's scalar type; `\"Enum\"` for an enum column. */\n readonly type: ScalarType | \"Enum\";\n /** The declared `@db.*` native type, verbatim (`VarChar(191)`, `Uuid`, `Timestamptz(3)`). */\n readonly nativeType?: string;\n /**\n * A database-stored (native) enum's type: `namespace` qualifies it, absence\n * resolves it through the search path like the statement's table. Absent on\n * a string-stored enum, whose column is text.\n */\n readonly enumType?: { readonly namespace?: string; readonly name: string };\n /** A time-of-day column (`@db.Time(n)` / `@db.Timetz(n)`). */\n readonly timeOfDay?: boolean;\n};\n\nexport type SqlExpr =\n | { readonly kind: \"composed\"; readonly fragment: SqlFragment }\n | { readonly kind: \"cmp\"; readonly op: ComparisonOp; readonly column: ColRef; readonly value: unknown }\n /** Column-to-column comparison — the correlation predicate of EXISTS/lateral subqueries. */\n | { readonly kind: \"cmpCol\"; readonly op: ComparisonOp; readonly left: ColRef; readonly right: ColRef }\n | { readonly kind: \"isNull\"; readonly column: ColRef; readonly negate?: boolean }\n | {\n readonly kind: \"inArray\";\n readonly column: ColRef;\n readonly values: readonly unknown[];\n readonly negate?: boolean;\n /**\n * The column holds a time of day (`@db.Time(n)` / `@db.Timetz(n)`): the\n * dialect renders the membership per `SqlDialect.timeOfDayInStrategy`.\n */\n readonly timeOfDay?: boolean;\n }\n /**\n * ORDERED-TUPLE membership: `(\"a\", \"b\") IN ((?, ?), (?, ?))`. The composite\n * relation predicate — `\"a\" IN (…) AND \"b\" IN (…)` is a Cartesian SUPERSET\n * and is never a substitute. Renders per `SqlDialect.tupleInStrategy`:\n * a native row-value `IN` where the dialect has row constructors, else an OR\n * of COMPLETE conjunctions. Arity 1 is expressed as {@link SqlExpr} `inArray`\n * instead, so single-key relations keep their existing SQL.\n */\n | {\n readonly kind: \"tupleIn\";\n /** Ordered tuple columns; `rows[i][j]` binds to `columns[j]`. */\n readonly columns: readonly ColRef[];\n /** Candidate tuples — every row carries exactly `columns.length` values. */\n readonly rows: readonly (readonly unknown[])[];\n readonly negate?: boolean;\n }\n /**\n * KEY-LIST membership — the public `where: { IN: [{ a, b }, …] }` filter:\n * rows whose ordered tuple of column values equals one of `rows`, with\n * semi-join semantics (a repeated tuple never repeats a result row). Renders\n * per `SqlDialect.keyListStrategy`: postgres binds one typed ARRAY per\n * member, `(\"a\", \"b\") IN (SELECT * FROM unnest($1::int8[], $2::text[]))`,\n * so the text and the planning cost stay constant however long the list is\n * (an OR of 1 000 conjunctions planned in 114 ms on PGlite, 2 ms on\n * postgres 18; the unnest form in 0.1–0.2 ms on both). A `DateTime` member\n * without a declared native type switches postgres to the row-constructor\n * list of untyped parameters (`keyListBindsUntypedRows`: the column may be a\n * zone-less `timestamp`). MySQL renders the row-constructor list, SQLite\n * `IN (VALUES …)`. Each member compares under the column's own type and\n * collation, exactly like `\"col\" = $n`.\n *\n * An empty `rows` renders `1 = 0` (matches nothing, like an empty\n * `inArray`). The runtime emits arity 1 as `inArray` instead, so a\n * one-field key list keeps the scalar `in` SQL.\n */\n | {\n readonly kind: \"keyList\";\n /** Ordered tuple columns (compare references); `rows[i][j]` binds to `columns[j]`. */\n readonly columns: readonly ColRef[];\n /** How each member binds, in column order — see {@link KeyListMember}. */\n readonly members: readonly KeyListMember[];\n /** Encoded candidate tuples, each exactly `columns.length` long; may repeat. */\n readonly rows: readonly (readonly unknown[])[];\n }\n /**\n * ROW-VALUE comparison: `(\"a\", \"b\") > ($1, $2)` — the keyset seek (D-01).\n * SQL compares row values left to right, each pair with that column's own\n * operator, affinity and collation, which is exactly the OR expansion\n * `\"a\" > $1 OR (\"a\" = $2 AND \"b\" > $3)` when no member is NULL — and an\n * index on `(a, b)` bounds it as one range (PostgreSQL `Index Cond: ROW(…) >\n * ROW(…)`, SQLite `SEARCH … (a>?)`). A NULL member makes the comparison\n * UNKNOWN as soon as the scan reaches it, so the runtime emits it only over\n * non-null keys and values. Renders on every dialect (each has row\n * constructors); whether the runtime emits it is\n * `SqlDialect.keysetSeekStrategy`.\n */\n | {\n readonly kind: \"rowCompare\";\n readonly op: \"gt\" | \"gte\" | \"lt\" | \"lte\";\n /** Ordered row members (compare references); `values[i]` binds to `columns[i]`. */\n readonly columns: readonly ColRef[];\n /** Encoded values, exactly `columns.length` of them. */\n readonly values: readonly unknown[];\n }\n /**\n * SUBQUERY membership: `\"id\" IN (SELECT …)`, or the row-value form\n * `(\"a\", \"b\") IN (SELECT …)` for a composite key — the key-first `distinct`\n * page on PostgreSQL (D-04). The subquery projects exactly `columns.length`\n * columns and shares the statement's parameter sequence. MySQL refuses a\n * `LIMIT` directly inside an `IN` subquery (error 1235), so the renderer\n * refuses that pair there with `VIBE_UNSUPPORTED_CAPABILITY`.\n */\n | {\n readonly kind: \"inSelect\";\n /** The tested columns, in the subquery's projection order. */\n readonly columns: readonly ColRef[];\n readonly select: SelectStatement;\n /** The subquery yields at most one row: one column, rendered `\"fk\" = (SELECT …)`. */\n readonly single?: true;\n }\n | {\n readonly kind: \"like\";\n readonly column: ColRef;\n /** Pre-built pattern (see like.ts helpers for escaping). */\n readonly pattern: string;\n readonly insensitive?: boolean;\n /**\n * The column carries an explicit case-insensitive collation (@collation\n * `…_ci`, board #36): an insensitive match renders as PLAIN `LIKE` — the\n * collation already folds case, and skipping LOWER() keeps the column\n * indexable. Set by the builder for mysql only.\n */\n readonly ciCollation?: boolean;\n readonly negate?: boolean;\n }\n /**\n * Case-SENSITIVE string match (`mode: \"strict\"`, board #20). `value` is the\n * RAW operand — pattern building happens at render time because escaping\n * differs per strategy (LIKE's `%`/`_`/`\\` vs GLOB's `*`/`?`/`[`). Renders\n * per `SqlDialect.strictMatchStrategy`: plain `=`/`LIKE` on postgres\n * (already byte-sensitive — a deliberate, documented no-op), `=`/`GLOB` on\n * sqlite, `= CAST(? AS BINARY)`/`LIKE CAST(? AS BINARY)` on mysql. The\n * non-native forms defeat plain indexes; docs/dialect-notes.md carries the\n * cost and the functional/`_bin`-index mitigation.\n */\n | {\n readonly kind: \"strictMatch\";\n readonly column: ColRef;\n readonly op: \"equals\" | \"contains\" | \"startsWith\" | \"endsWith\";\n readonly value: string;\n readonly negate?: boolean;\n }\n | { readonly kind: \"and\"; readonly operands: readonly SqlExpr[] }\n | { readonly kind: \"or\"; readonly operands: readonly SqlExpr[] }\n | { readonly kind: \"not\"; readonly operand: SqlExpr }\n /**\n * Correlated subquery test: `[NOT] EXISTS (SELECT …)`. The inner select\n * correlates to the outer scope through table-qualified `cmpCol` predicates;\n * its parameters merge into the statement's single parameter sequence in\n * render order. Relation filters (`some`/`every`/`none`/`is`/`isNot`)\n * compile to this shape.\n */\n | { readonly kind: \"exists\"; readonly select: SelectStatement; readonly negate?: boolean }\n /** Aggregate comparison — the HAVING predicate: `COUNT(\"col\") > $n`. */\n | { readonly kind: \"aggCmp\"; readonly op: ComparisonOp; readonly agg: AggRef; readonly value: unknown }\n /**\n * Scalar-list membership: `$n = ANY(\"col\")` — Prisma's `has`. Postgres only\n * (`capabilities.scalarArrays`); other dialects refuse at render time.\n */\n | { readonly kind: \"arrayHas\"; readonly column: ColRef; readonly value: unknown; readonly negate?: boolean }\n /** Scalar-list superset: `\"col\" @> $n` (one array param) — Prisma's `hasEvery`. Postgres only. */\n | { readonly kind: \"arrayContainsAll\"; readonly column: ColRef; readonly values: readonly unknown[] | string | NativeEnumArrayParameter | JsonListParameter }\n /** Scalar-list overlap: `\"col\" && $n` (one array param) — Prisma's `hasSome`. Postgres only. */\n | { readonly kind: \"arrayOverlaps\"; readonly column: ColRef; readonly values: readonly unknown[] | string | NativeEnumArrayParameter | JsonListParameter }\n /**\n * Scalar-list emptiness via `array_length(\"col\", 1) IS [NOT] NULL` — the v1\n * semantics kept deliberately: `empty: true` matches NULL **and** empty\n * arrays, `empty: false` matches only rows with at least one element.\n */\n | { readonly kind: \"arrayIsEmpty\"; readonly column: ColRef; readonly empty: boolean }\n /**\n * JSON path predicate. The path is always BOUND as a parameter (a `text[]`\n * on postgres, a `$.a.b[0]` path string on sqlite/mysql) — path segments\n * never become SQL text. `value` is the RAW JS operand; each dialect decides\n * its wire form (JSON.stringify for jsonb/json comparisons, LIKE patterns\n * for the string ops). `insensitive` applies to the string ops only.\n */\n | {\n readonly kind: \"jsonFilter\";\n readonly column: ColRef;\n readonly path: readonly (string | number)[];\n readonly op: JsonFilterOp;\n readonly value: unknown;\n readonly insensitive?: boolean;\n readonly negate?: boolean;\n /**\n * The column's postgres type: absent (or `jsonb`) for the default\n * `jsonb`, `json` for `Json @db.Json`. Postgres defines `=`, `<>` and\n * `@>` for jsonb only, so on a `json` column every op casts the\n * EXTRACTED value to jsonb (the string ops then read it as text), which\n * gives a jsonb column's answer. Sqlite and mysql have one JSON type\n * and ignore it.\n */\n readonly storage?: \"jsonb\" | \"json\";\n }\n /**\n * A bound extension fragment: literal text, bound parameters and quoted\n * identifiers in order (extensions.md §3 sql plane — trgm operators, rank\n * and distance terms). Parameters flow through the shared ParamCollector,\n * identifiers through dialect.quoteIdent — never hand-written.\n */\n | { readonly kind: \"fragment\"; readonly fragment: SqlFragmentSpec }\n /** Escape hatch for dialect-reviewed fragments. Text only — no parameters. */\n | { readonly kind: \"raw\"; readonly text: string };\n\n// ─── Projections ──────────────────────────────────────────────────\n\n/**\n * An aggregate projection.\n *\n * `countAll` renders `COUNT(*)`. The alias matters for portability: postgres\n * names the bare column `count`, sqlite and mysql name it `COUNT(*)` — callers\n * that must read the value back always pass an alias. Combined with a\n * non-empty `columns` list (grouped counts, `SELECT \"fk\", COUNT(*) … GROUP\n * BY \"fk\"`), it renders AFTER the columns.\n *\n * `one` renders the constant `1` — the conventional EXISTS projection; it\n * cannot be combined with a column list.\n *\n * `exists` asks whether the statement's own FROM and WHERE match a row:\n * `SELECT EXISTS (SELECT 1 FROM … WHERE …) AS \"alias\"` — one row, one\n * boolean-valued column (PostgreSQL `boolean`, SQLite and MySQL `0`/`1`). It\n * takes no column list, aggregate, grouping, order, paging, lock or join.\n */\nexport type SelectExpr =\n | { readonly kind: \"countAll\"; readonly alias?: string }\n | { readonly kind: \"one\" }\n | { readonly kind: \"exists\"; readonly alias: string };\n\n// ─── SET operations ───────────────────────────────────────────────\n\n/** Arithmetic applied to a column's current value in an UPDATE ... SET. */\nexport type SetOperator = \"increment\" | \"decrement\" | \"multiply\" | \"divide\";\n\n/**\n * An atomic update expression: `\"col\" = \"col\" <op> $n`.\n *\n * Recognised structurally inside `UpdateStatement.set`, so the marker key is\n * deliberately unlikely (`__op`). Three layers keep a user's JSON payload from\n * ever being mistaken for one: the Json codec stringifies JSON values before\n * they reach the AST, the query builder only emits this shape for numeric\n * fields, and {@link isSetOperation} demands only the documented marker keys.\n */\nexport type SetOperation = {\n readonly __op: SetOperator;\n readonly value: number | string | bigint;\n /** Decimal arithmetic needs a REAL operand on SQLite, even for integral text. */\n readonly numericType?: \"Decimal\";\n};\n\nconst SET_OPERATORS: readonly string[] = [\"increment\", \"decrement\", \"multiply\", \"divide\"];\n\n/** Narrow an UPDATE set value to an atomic {@link SetOperation}. */\nexport function isSetOperation(value: unknown): value is SetOperation {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return false;\n // Answered before the keys are listed: a `Bytes` value has one own key per byte.\n if (!Object.hasOwn(value, \"__op\")) return false;\n const keys = Object.keys(value);\n if (!keys.includes(\"__op\") || !keys.includes(\"value\")) return false;\n const candidate = value as { __op: unknown; value: unknown; numericType?: unknown };\n if (keys.length !== 2 && !(keys.length === 3 && keys.includes(\"numericType\") && candidate.numericType === \"Decimal\")) return false;\n return (\n typeof candidate.__op === \"string\" &&\n SET_OPERATORS.includes(candidate.__op) &&\n ((typeof candidate.value === \"number\" && Number.isFinite(candidate.value)) ||\n typeof candidate.value === \"string\" || typeof candidate.value === \"bigint\")\n );\n}\n\n/**\n * A scalar-list update expression (Prisma's `{ push: … }` on list columns):\n * `append` is one element (`\"col\" = array_append(\"col\", $n)`), `concat` an\n * array of elements (`\"col\" = \"col\" || $n`). Postgres only — the query builder\n * gates on `capabilities.scalarArrays` at build time and the renderer refuses\n * too. Same structural-marker discipline as {@link SetOperation}: the key is\n * unlikely, the shape exact, and Json payloads are stringified before they\n * could ever reach an UPDATE set.\n */\nexport type ListSetOperation = {\n readonly __listOp: \"append\" | \"concat\";\n readonly value: unknown;\n};\n\nconst LIST_SET_OPERATORS: readonly string[] = [\"append\", \"concat\"];\n\n/** Narrow an UPDATE set value to a {@link ListSetOperation}. */\nexport function isListSetOperation(value: unknown): value is ListSetOperation {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return false;\n // Answered before the keys are listed: a `Bytes` value has one own key per byte.\n if (!Object.hasOwn(value, \"__listOp\")) return false;\n const keys = Object.keys(value);\n if (keys.length !== 2 || !keys.includes(\"__listOp\") || !keys.includes(\"value\")) return false;\n const candidate = value as { __listOp: unknown };\n return typeof candidate.__listOp === \"string\" && LIST_SET_OPERATORS.includes(candidate.__listOp);\n}\n\n/**\n * Database-clock marker: renders the DIALECT's `now()` expression — plus an\n * optional offset in seconds (fractional OK) bound as a parameter — instead of binding a\n * client-side timestamp. Flows as a VALUES cell, an UPDATE SET value, or a\n * comparison operand; the runtime's public `dbNow()` sentinel compiles to\n * this marker for DateTime fields (leases, TTLs — anything that must trust\n * the database's clock, never the process's). Same structural-marker\n * discipline as {@link SetOperation}: unlikely key, exact shape.\n */\nexport type DbNowMarker = {\n readonly __dbNow: true;\n readonly offsetSeconds: number;\n};\n\n/** Build a {@link DbNowMarker}; `offsetSeconds` is finite seconds — fractional is legal (lease TTLs arrive as ttlMs / 1000). */\nexport function dbNowMarker(params: { offsetSeconds: number }): DbNowMarker {\n return { __dbNow: true, offsetSeconds: params.offsetSeconds };\n}\n\n/** Narrow a value to a {@link DbNowMarker}. */\nexport function isDbNowMarker(value: unknown): value is DbNowMarker {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return false;\n // A-05: every object cell (each Date of a createMany) is asked; one own-key\n // test rejects them before the key list is built.\n if (!Object.hasOwn(value, \"__dbNow\")) return false;\n const keys = Object.keys(value);\n if (keys.length !== 2 || !keys.includes(\"__dbNow\") || !keys.includes(\"offsetSeconds\")) return false;\n const candidate = value as { __dbNow: unknown; offsetSeconds: unknown };\n return (\n candidate.__dbNow === true &&\n typeof candidate.offsetSeconds === \"number\" &&\n Number.isFinite(candidate.offsetSeconds)\n );\n}\n\n// ─── Ordering ─────────────────────────────────────────────────────\n\n/** ORDER BY a column, with optional NULLS placement (native or emulated per dialect). */\nexport type OrderByColumn = {\n readonly column: ColRef;\n readonly direction: \"asc\" | \"desc\";\n /** NULLS placement; rendered natively or emulated per dialect. */\n readonly nulls?: \"first\" | \"last\";\n};\n\n/** ORDER BY an aggregate expression — grouped selects ordering by `COUNT(\"col\")`. */\nexport type OrderByAggregate = {\n readonly agg: AggRef;\n readonly direction: \"asc\" | \"desc\";\n};\n\n/**\n * ORDER BY a correlated scalar subquery — relation orderBy\n * (`orderBy: { posts: { _count: \"desc\" } }` → `(SELECT COUNT(*) …)`,\n * `orderBy: { posts: { _max: { createdAt: \"desc\" } } }` → `(SELECT MAX(…) …)`,\n * `orderBy: { author: { email: \"asc\" } }` → `(SELECT \"email\" …)`).\n * Portable: all three dialects order by scalar subqueries. The subquery\n * correlates to the outer scope through table-qualified `cmpCol` predicates,\n * exactly like `exists`; its parameters merge into the statement's single\n * sequence in render order.\n *\n * `nulls` places the NULL a missing to-one row or a parent without related\n * rows (under MIN/MAX/AVG/SUM) sorts as. Without it, NULL sorts at the\n * engine's native position. Postgres and sqlite render `NULLS FIRST|LAST`;\n * mysql renders the bare term when its native placement already matches, and\n * otherwise a leading `(<subquery>) IS NULL` term — the subquery then renders\n * twice and its parameters bind twice, in text order.\n */\nexport type OrderBySubquery = {\n readonly select: SelectStatement;\n /** A count behind a missing to-one row is zero, not NULL. */\n readonly coalesce?: 0;\n readonly direction: \"asc\" | \"desc\";\n readonly nulls?: \"first\" | \"last\";\n};\n\nexport type OrderTerm = OrderByColumn | OrderByAggregate | OrderBySubquery;\n\n// ─── Statements ───────────────────────────────────────────────────\n\n/**\n * One `LEFT JOIN LATERAL (…) AS alias ON true` clause aggregating a correlated\n * subquery into a single JSON value per outer row — the \"join\" relation-loading\n * strategy (postgres/pglite, and MySQL 8.0.14+ since lane J; gated on\n * `capabilities.lateralJoin` and rendered through `SqlDialect.lateralJson`).\n * MySQL renders positional rows only (`JSON_ARRAY`, `JSON_ARRAYAGG`, `ON\n * true`); its aggregate cannot order, so an ordered list level carries a\n * `select.rowNumber` without partition — rendered as the row's last slot.\n *\n * Renders (agg `jsonArray`):\n * `LEFT JOIN LATERAL (SELECT COALESCE(json_agg(to_json(\"__sub\".*)), '[]'::json)\n * AS \"columnAlias\" FROM (<select>) AS \"__sub\") AS \"alias\" ON true`\n * and (agg `jsonObject`):\n * `LEFT JOIN LATERAL (SELECT to_json(\"__sub\".*) AS \"columnAlias\"\n * FROM (<select>) AS \"__sub\") AS \"alias\" ON true`\n *\n * `to_json` over a subselect (not `json_build_object`) sidesteps postgres's\n * 100-argument function limit on wide models (v1 lesson); `json` rather than\n * `jsonb` because the value is transport only — jsonb's binary build + re-\n * serialization cost 2–3.7× the server time for identical decoded values.\n * The inner select's ORDER BY drives the aggregate's element order. Consumers\n * must run the codec table over the parsed JSON children: `to_json` turns\n * timestamps into strings and loses BigInt-ness (LEARNINGS).\n */\nexport type LateralJoin = {\n /** Join alias (`__lat_0`) — the outer projection selects `alias.columnAlias`. */\n readonly alias: string;\n /**\n * Column the aggregated JSON value is exposed under (`__rel_posts`). An\n * `aggregate` lateral exposes one column per entry of its select's\n * `aggregates` instead, under each entry's alias.\n */\n readonly columnAlias: string;\n /**\n * jsonArray: many rows; jsonObject: one row or NULL; count: a scalar COUNT(*)\n * lateral; aggregate: one ungrouped row of `aggregates` (no columns), which\n * an aggregate without GROUP BY returns even over zero rows.\n */\n readonly agg: \"jsonArray\" | \"jsonObject\" | \"count\" | \"aggregate\";\n /**\n * Object output is the SQL-layer default. Positional rows follow the exact\n * select.columns order, using explicit output names (never SELECT *).\n * Above JSON_TRANSPORT.chunkSize, a row is an array of fixed-size chunks;\n * the final chunk may be shorter. Scalar/list/Json field values stay in one\n * slot. Consumers must use the SAME projection to decode the payload.\n */\n readonly rowFormat?: \"object\" | \"positional\";\n /**\n * Positional rows only: output names of `select.columns` the subselect\n * projects for the statement's own use (an order key the aggregate's ORDER\n * BY reads, a key a nested lateral correlates on) but the JSON row leaves\n * out. The row is the remaining columns in `select.columns` order.\n */\n readonly hidden?: readonly string[];\n /** The correlated child select — may reference outer columns via table-qualified refs. */\n readonly select: SelectStatement;\n};\n\n/**\n * One scalar subquery in a projection. The builder guarantees a single column\n * and at most one row. Hidden sort values stay inside derived tables rather\n * than becoming result fields. `coalesce` preserves a count across a missing\n * to-one hop.\n */\nexport type ScalarSubquery = {\n readonly alias: string;\n readonly select: SelectStatement;\n readonly coalesce?: 0;\n};\n\n/**\n * One correlated scalar `COUNT(*)` projected into a select list:\n * `(SELECT COUNT(*) FROM … WHERE <correlation>) AS \"alias\"` — the relation\n * `_count` of the round-trip campaign's R-03b, which saves the separate grouped\n * count statement. Portable: postgres, sqlite and mysql all evaluate a\n * correlated scalar subquery once per output row; the runtime wraps a paged\n * root in a derived table first, so the subqueries run only for the page.\n * The select must be ONE ungrouped `COUNT(*)` (`columns: []`, `selectExpr`\n * countAll, no grouping, paging, distinct or lock) — anything else is refused\n * at render. Its parameters join the statement's single sequence in text order\n * (the select list renders before FROM).\n */\nexport type CountSubquery = {\n /** Output column the count is exposed under (`__vibe_count_0`). */\n readonly alias: string;\n /** The correlated count select — references outer columns via table-qualified refs. */\n readonly select: SelectStatement;\n};\n\n/**\n * One `INNER JOIN \"table\" AS alias ON left = right [AND …]` clause — plain\n * equality joins only, portable across all dialects. Added for the\n * single-statement implicit-M2M load (child rows joined to their join-table\n * membership rows); extra join-table columns project through the statement's\n * `columns` list with a table qualifier + `alias`.\n */\nexport type InnerJoin = {\n readonly table: TableRef;\n /** Equality pairs ANDed into the ON clause; never empty. */\n readonly on: readonly { readonly left: ColRef; readonly right: ColRef }[];\n};\n\n// ─── Fix lane Q2 (D-03): derived-table LEFT JOIN ───\n\n/**\n * One `LEFT JOIN (<select>) AS \"alias\" ON \"alias\".\"k\" = \"outer\".\"c\" [AND …]`\n * clause — portable, equality ON pairs only. Built for the to-one relation\n * `orderBy` (`orderBy: { author: { email: \"asc\" } }`): the target's key and\n * sort columns ride a derived table under RESERVED aliases (`__vibe_ok0`,\n * `__vibe_ov0`), so the outer statement's unqualified column names can never\n * become ambiguous, and the outer ORDER BY names `\"alias\".\"__vibe_ov0\"`.\n * Every engine merges such a derived table into a plain join (measured:\n * postgres pulls it up into a hash/nested-loop left join, sqlite flattens it,\n * mysql merges it), so the planner may hash-join instead of evaluating a\n * correlated subquery per candidate row.\n *\n * The builder emits it only for links that match AT MOST ONE target row, so\n * the join keeps the parent row count. The derived select must alias every\n * projected column; its parameters (none today) join the statement's single\n * sequence where the clause renders (after `keyTable`, before\n * `lateralJoins`). A statement with a `rowLock` refuses it: postgres rejects\n * FOR UPDATE on the nullable side of an outer join, and mysql would lock the\n * joined rows too.\n */\nexport type LeftJoin = {\n /** Derived-table alias (`__ord1`). */\n readonly alias: string;\n /** The derived table — every projected column carries an `alias`. */\n readonly select: SelectStatement;\n /** Equality pairs ANDed into the ON clause; never empty. */\n readonly on: readonly { readonly left: ColRef; readonly right: ColRef }[];\n};\n\n/**\n * How one member of a {@link KeyTableJoin} tuple binds inside the derived\n * table. `value` binds the parameter as it is: it stays COERCIBLE, so a text\n * column's OWN collation decides `=` — the equality `col IN (?, …)` uses.\n * `integer` and `decimal` cast the parameter into the column's numeric family:\n * BigInt and Decimal values travel as strings, and a derived-table string\n * compared with a numeric column goes through a double (measured on mysql:\n * `9007199254740993` matched `9007199254740992`).\n *\n * `integer` renders `CAST(? AS SIGNED)`. `decimal` renders\n * `CAST(? AS DECIMAL(65, scale))` with the tested column's own scale: 65 is\n * MySQL's maximum precision, so the cast holds every value a\n * `DECIMAL(p, scale)` column can hold. A fixed `DECIMAL(65,30)` held only 35\n * integer digits and clipped a `Decimal(65, 0)` key onto its maximum, which\n * matched nothing (review finding 1); the column's own precision would clip a\n * wider value onto the column's maximum and pair it with a row it does not\n * equal (measured: `CAST('100000' AS DECIMAL(5,0))` is `99999`). `scale` is\n * 0–30, MySQL's range.\n *\n * `citext` (postgres only) renders `CAST($n AS citext)`: a postgres `citext`\n * key compares case-insensitively, and a bare VALUES parameter would be\n * `text`, whose `=` against a citext column is the case-sensitive text\n * operator. A VALUES cell has no column to infer a type from, so every member\n * of a postgres key table binds typed: `citext`, `text` (`CAST($n AS text)`,\n * a text or varchar column) or `integer` (`CAST($n AS bigint)`, exact against\n * any integer column) — any other member refuses on postgres. `text` is\n * postgres-only; mysql binds text members as `value`.\n */\nexport type KeyTableMember =\n | { readonly kind: \"value\" }\n | { readonly kind: \"integer\" }\n | { readonly kind: \"decimal\"; readonly scale: number }\n /** MySQL-only lossless temporal operands in mixed collation-aware key tuples. */\n | { readonly kind: \"timestamp\" }\n | { readonly kind: \"time\" }\n | { readonly kind: \"citext\" }\n | { readonly kind: \"text\" };\n\n/**\n * The batch's key tuples as a derived table, each tagged with its ORDINAL\n * (row `i` carries `i`), INNER JOINed on the tested columns — mysql:\n * `INNER JOIN (VALUES ROW(?, 0), ROW(?, 1)) AS \\`alias\\` (\\`__vibe_k0\\`, \\`ordinal\\`)\n * ON col = \\`alias\\`.\\`__vibe_k0\\``; postgres only over `citext` members\n * (`(VALUES (CAST($1 AS citext), 0), …)`, release 3.0 nested writes).\n * Member columns are named `__vibe_k<i>` (a reserved prefix, so unqualified\n * child columns never collide with them).\n *\n * Why it exists (EPIC R): a relation load used to stitch children to parents\n * by comparing decoded keys in JavaScript, while mysql's collations equate\n * spellings (`acme` = `Acme` = `ACME`, `cafe` = `Café`, `x ` = `x`) that\n * JavaScript keeps apart — the foreign key and the `IN` filter accepted the\n * child, the stitch dropped it. Joined this way the DATABASE pairs every child\n * row with every batch key it considers equal, and the projected ordinal names\n * the key; the join is also the membership filter.\n */\nexport type KeyTableJoin = {\n /** Derived-table alias (`__vibe_keys`); the ordinal projects as `alias.ordinalAlias`. */\n readonly alias: string;\n /** The statement's columns, compared member by member (`=`), in tuple order. */\n readonly columns: readonly ColRef[];\n /** How each member binds, in tuple order — see {@link KeyTableMember}. */\n readonly members: readonly KeyTableMember[];\n /** Encoded key tuples; never empty, each as long as `columns`. */\n readonly rows: readonly (readonly unknown[])[];\n /** Output name of the ordinal column. */\n readonly ordinalAlias: string;\n};\n\n/**\n * A `ROW_NUMBER() OVER (PARTITION BY … [ORDER BY …]) AS \"alias\"` projection,\n * appended after `columns` — the distinct emulation on dialects without\n * `DISTINCT ON` (sqlite ≥3.25, mysql ≥8.0 both have window functions): the\n * outer statement filters `alias = 1` on the derived table, restoring\n * SQL-side take/skip and bounded transfer (N10).\n */\nexport type RowNumberProjection = {\n readonly partitionBy: readonly ColRef[];\n /** Intra-partition order picking the representative row; may be empty. */\n readonly orderBy: readonly OrderTerm[];\n readonly alias: string;\n};\n\n// ─── Fix lane Q1 (round 3, DB-01): per-key page ──────────────────\n\n/**\n * A PER-KEY PAGE of one child table as a derived-table FROM\n * (`SelectStatement.keyPage`): for every listed key tuple, the child rows\n * whose key columns equal it, ordered by `select.orderBy` and cut by\n * `select.limit`/`select.offset` — each key's OWN page, plus a rank column\n * (`rankAlias`) that orders the rows inside their key. The paged include's\n * `ROW_NUMBER() OVER (PARTITION BY key …)` window returns the same rows but\n * numbers EVERY child of every listed key first; this form reads one page of\n * primary keys per key through an index on (key columns, order columns),\n * then each page row once by its primary key.\n *\n * Rendered per `SqlDialect.keyPageStrategy`:\n * - `lateral` (postgres): `unnest($1::<type>[], …) AS \"__vibe_keys\"\n * (\"__vibe_k0\", …) CROSS JOIN LATERAL (SELECT <identity>, ROW_NUMBER() OVER\n * (PARTITION BY <key> ORDER BY <order>) AS <rank> FROM <table> WHERE <key> =\n * \"__vibe_keys\".\"__vibe_k<i>\" … ORDER BY <order> LIMIT … OFFSET …) AS\n * \"__vibe_ids\" INNER JOIN <table> AS \"__vibe_page\" ON <identity> pairs`.\n * - `inLimit` (sqlite, which has no LATERAL): the key tuples as `(VALUES …)`\n * (columns `column1`, `column2`, …, as SQLite names a VALUES clause's\n * columns) joined to `<table> AS \"__vibe_page\"` ON `(<identity>) IN (SELECT\n * <identity> … WHERE <key> = \"__vibe_keys\".\"column<i>\" … ORDER BY … LIMIT …)`,\n * the rank re-derived over the fetched page (`ROW_NUMBER() OVER (PARTITION\n * BY <key> ORDER BY <order>)`): its values differ from the window's, its\n * order inside a key does not.\n * - `window` (mysql): refused with `VIBE_UNSUPPORTED_CAPABILITY` — measured\n * no gain there; the runtime keeps the window.\n *\n * The caller guarantees what makes the page equal to the window's: the order\n * is total inside a key (the identity columns are among the key and order\n * columns), the key tuples are distinct and compare exactly (no folding\n * collation). Members bind like the key-list filter's (`KeyListMember`).\n */\nexport type KeyPage = {\n /** How each key member binds, in member order (postgres: one typed array each). */\n readonly members: readonly KeyListMember[];\n /** Encoded, distinct key tuples; never empty, each `members.length` long. */\n readonly rows: readonly (readonly unknown[])[];\n /** The child columns each key member equals, in member order (unqualified). */\n readonly keyColumns: readonly ColRef[];\n /** The child's primary-key columns (unqualified) — each page row is read once by them. */\n readonly identity: readonly ColRef[];\n /**\n * ONE key's page: the child `table` (no alias), the projected `columns`\n * (unqualified; transforms and aliases render as usual), an optional extra\n * `where`, the non-empty `orderBy` (plain column terms), `limit`/`offset`.\n * Any other member is refused.\n */\n readonly select: SelectStatement;\n /** Output name of the rank column. */\n readonly rankAlias: string;\n};\n\n/**\n * Statement-count pass EPIC 4 (round-3 ST-07): bound key tuples as the FROM\n * of a select (`SelectStatement.fromKeys`) — a derived table named\n * `table.name` whose columns are `columns`, one row per tuple. The write\n * follow-up puts it where the parent table would be: the find path's laterals\n * correlate to `\"<table.name>\".\"<column>\"` exactly as over the table, but read\n * the RETURNED key values instead of the parent row (a deleted row, or a\n * native-RLS parent whose SELECT policy the per-relation loads never met).\n *\n * Renders where `SqlDialect.keyListStrategy` is `unnest` (postgres) as the\n * typed form of a `VALUES` list — one array per column, typed like the\n * key-list filter's members (`postgresKeyListElementType`), so the text does\n * not depend on the tuple count: `FROM unnest($1::text[], $2::int4[]) AS\n * \"Post\" (\"id\", \"authorId\")`. A `DateTime` member without a declared native\n * type (`keyListBindsUntypedRows`) and every other dialect refuse with\n * `VIBE_UNSUPPORTED_CAPABILITY` — those dialects have no lateral joins either.\n */\nexport type KeyRows = {\n /** Output column names of the derived table, in member order. */\n readonly columns: readonly string[];\n /** How each column binds, in column order — see {@link KeyListMember}. */\n readonly members: readonly KeyListMember[];\n /** Encoded tuples; never empty, each exactly `columns.length` long. */\n readonly rows: readonly (readonly unknown[])[];\n};\n\n/**\n * `GROUP BY GROUPING SETS (…)` over a select's `groupBy` columns. Each set\n * lists indexes into `groupBy`; `()` is the grand total. The projection gains\n * `CASE GROUPING(<every groupBy column>) WHEN <mask> THEN <set index> … END AS\n * \"<indexAlias>\"` after the aggregates, so a row names the set that produced\n * it, and an ORDER BY term may name `indexAlias` as a bare column (an output\n * column). Dialect `groupingSets` capability: `\"groupingSets\"` renders any\n * list, `\"rollup\"` only the rollup chain of `groupBy` in order (`GROUP BY a,\n * b WITH ROLLUP`), `\"none\"` refuses.\n */\nexport type GroupingSets = {\n readonly sets: readonly (readonly number[])[];\n readonly indexAlias: string;\n};\n\nexport type SelectStatement = {\n readonly kind: \"select\";\n readonly table: TableRef;\n /** Empty array renders as `SELECT *` (unless `selectExpr` replaces it). */\n readonly columns: readonly ColRef[];\n /**\n * Aggregate projection. Replaces the column list when `columns` is empty;\n * a `countAll` with columns renders after them (grouped counts).\n */\n readonly selectExpr?: SelectExpr;\n /**\n * Aliased aggregate projections (`AVG(\"col\") AS \"_avg__col\"`), rendered\n * after `columns` — the aggregate/groupBy/count-select shapes. Cannot be\n * combined with `selectExpr`.\n */\n readonly aggregates?: readonly AggSelect[];\n /** Correlated `COUNT(*)` subqueries, rendered after `aggregates` — see {@link CountSubquery}. */\n readonly countSubqueries?: readonly CountSubquery[];\n /** Scalar values projected after count subqueries and before a row number. */\n readonly scalarSubqueries?: readonly ScalarSubquery[];\n /**\n * `SELECT DISTINCT ON (cols)` — postgres only (`capabilities.distinctOn`;\n * other dialects refuse at render time and the runtime emulates client-side\n * instead). ORDER BY must lead with these columns; the query builder\n * guarantees that arrangement.\n */\n readonly distinctOn?: readonly ColRef[];\n /**\n * Plain `SELECT DISTINCT` over the whole projection — every dialect. The\n * query builder sets it only where it returns exactly the rows its\n * `ROW_NUMBER()` distinct emulation would (sqlite/mysql, value-exact keys,\n * projection equal to the distinct fields); never together with\n * `distinctOn` (the renderer refuses the pair).\n */\n readonly distinct?: true;\n /**\n * Derived-table FROM: renders `FROM (<fromSelect>) AS \"<table.name>\"` —\n * `table.name` is the subquery ALIAS and `table.alias` must be unset. Used\n * by aggregate-over-a-subset shapes (`aggregate({ take, skip, orderBy })`).\n */\n readonly fromSelect?: SelectStatement;\n /** Lateral JSON-aggregation joins — postgres and MySQL 8.0.14+, see {@link LateralJoin}. */\n readonly lateralJoins?: readonly LateralJoin[];\n /** Plain equality INNER JOINs — portable, see {@link InnerJoin}. */\n readonly innerJoins?: readonly InnerJoin[];\n /** Key-table join, rendered after `innerJoins` — mysql only, see {@link KeyTableJoin}. */\n readonly keyTable?: KeyTableJoin;\n /** Fix lane Q2 (D-03): derived-table LEFT JOINs, rendered after `keyTable` — see {@link LeftJoin}. */\n readonly leftJoins?: readonly LeftJoin[];\n /** ROW_NUMBER window projection — see {@link RowNumberProjection}. */\n readonly rowNumber?: RowNumberProjection;\n /**\n * Fix lane Q1 (DB-01): derived-table FROM over a per-key page — renders\n * `FROM (<per-key page>) AS \"<table.name>\"` like `fromSelect` (and never\n * together with it); see {@link KeyPage}.\n */\n readonly keyPage?: KeyPage;\n /**\n * Fix lane Q2 (round 3, DB-07): derived-table FROM over a `UNION ALL` of\n * branch selects — renders `FROM (SELECT * FROM (<branch 0>) AS\n * \"__vibe_u0\" UNION ALL SELECT * FROM (<branch 1>) AS \"__vibe_u1\" …) AS\n * \"<table.name>\"`. Each branch keeps its own ORDER BY and LIMIT: wrapped in\n * its own derived table, a limited branch is valid on all three engines\n * (SQLite refuses ORDER BY/LIMIT on a bare compound member). At least two\n * branches; each a plain `SELECT <columns> FROM <table> [WHERE] [ORDER BY]\n * [LIMIT]` projecting the same output names in the same order; never\n * together with `fromSelect`, `keyPage` or a `table.alias`. Parameters bind\n * branch by branch, in text order.\n */\n readonly fromUnion?: readonly SelectStatement[];\n /**\n * Statement-count pass EPIC 4 (ST-07): derived-table FROM over bound key\n * tuples, named `table.name` with the listed column names — see\n * {@link KeyRows}. Never together with `fromSelect`, `keyPage`, `fromUnion`,\n * a `table.alias` or a `rowLock`.\n */\n readonly fromKeys?: KeyRows;\n readonly where?: SqlExpr;\n readonly groupBy?: readonly ColRef[];\n /** Grouping sets over `groupBy` — see {@link GroupingSets}. */\n readonly groupingSets?: GroupingSets;\n /** HAVING predicate — grouped selects; may contain `aggCmp` expressions. */\n readonly having?: SqlExpr;\n readonly orderBy?: readonly OrderTerm[];\n readonly limit?: number;\n readonly offset?: number;\n /**\n * Row-locking read (`SELECT … FOR UPDATE SKIP LOCKED`) — see {@link RowLock}.\n * The internal read-before-write overlays (dialects without RETURNING) set\n * the plain `{ strength: \"update\", wait: \"wait\" }` lock. Rendered only where\n * the dialect names the clause (`dialect.rowLockSyntax`); sqlite has none and\n * needs none — its write transactions already exclude each other.\n */\n readonly rowLock?: RowLock;\n};\n\n/**\n * The lock a locking read takes: one strength, one wait policy. Both members\n * are REQUIRED here — defaulting happens once, in the query builder, so the\n * rendered SQL is a function of the AST alone.\n *\n * `of` narrows the lock to named FROM items (`FOR UPDATE OF \"Parent\"`). The\n * join relation strategy needs it: its statement also reads child rows through\n * `LEFT JOIN LATERAL` subqueries, and an unnarrowed clause is refused by\n * postgres (\"FOR UPDATE is not allowed with aggregate functions\", from the\n * children's `json_agg`). With `of` naming the statement's own table only the\n * parent rows are locked. Each name must be the statement's table alias, or its\n * unqualified table name when it has no alias — the only FROM item the AST\n * names; the renderer refuses anything else. Dialects without a locking-read\n * clause render nothing, as for a lock without `of`.\n */\nexport type RowLock = {\n readonly strength: RowLockStrength;\n readonly wait: RowLockWaitPolicy;\n readonly of?: readonly string[];\n};\n\n/**\n * Sentinel VALUES cell: render the `DEFAULT` keyword instead of a placeholder\n * (M4) — a heterogeneous createMany row that omits a field lets the COLUMN\n * default apply (or NULL on a defaultless nullable column), exactly like a\n * single-row insert that omits it. Postgres/mysql only\n * (`dialect.rowDefaultKeyword`); sqlite groups rows instead.\n */\nexport const SQL_DEFAULT_CELL: { readonly __sqlDefault: true } = Object.freeze({ __sqlDefault: true });\n\n/**\n * Sentinel update-arm cell: the column keeps its current value —\n * `` `col` = `table`.`col` `` (V8, the insert-if-missing upsert). Valid only in\n * an {@link OnConflictUpdate} `update` set, where MySQL's `ON DUPLICATE KEY\n * UPDATE` needs at least one assignment: a self-assignment changes nothing on a\n * duplicate and, unlike `INSERT IGNORE`, leaves every other error an error.\n * Refused in a plain UPDATE's SET list.\n */\nexport const SQL_KEEP_CELL: { readonly __sqlKeep: true } = Object.freeze({ __sqlKeep: true });\n\n/** Is this update cell the {@link SQL_KEEP_CELL} sentinel? */\nexport function isSqlKeepCell(value: unknown): boolean {\n return value === SQL_KEEP_CELL;\n}\n\n/** Is this VALUES cell the {@link SQL_DEFAULT_CELL} sentinel? */\nexport function isSqlDefaultCell(value: unknown): boolean {\n return value === SQL_DEFAULT_CELL;\n}\n\n/**\n * VALUES/SET cell carrying a Json column's parameter (the codec's JSON text).\n *\n * Why it exists: OID-typed drivers (bun:sql) resolve each parameter's postgres\n * type and re-serialize the JS value AS that type — a pre-stringified Json\n * param bound straight into a bare jsonb slot arrives DOUBLE-ENCODED (a jsonb\n * string holding the document; live-proven on Bun 1.3.14). The postgres\n * renderer pins the parameter's type instead (`$n::text::jsonb`,\n * `SqlDialect.jsonParamCast`), so every driver sends the text through and the\n * SERVER parses it; text-param drivers (node-postgres, pglite) are unaffected.\n * Sqlite/mysql render the bare placeholder — their Json transport is already\n * plain text. The COLLECTED parameter is the plain text either way: this\n * wrapper never crosses the wire.\n *\n * `storage: \"json\"` marks a postgres `json` column (`Json @db.Json`): the cell\n * renders `$n::text::json`, so the column stores the text as written (key\n * order and spelling kept) instead of jsonb's normalized text (release-3.0\n * D3). Absent = jsonb; dialects without a param cast ignore it.\n */\nexport type JsonParamCell = { readonly __jsonParam: true; readonly text: string; readonly storage?: \"json\" };\n\n/** Wrap a Json column's encoded (stringified) parameter for cast-site rendering. */\nexport function jsonParamCell(params: { text: string; storage?: \"json\" }): JsonParamCell {\n return params.storage === \"json\" ? { __jsonParam: true, text: params.text, storage: \"json\" } : { __jsonParam: true, text: params.text };\n}\n\n/** Is this VALUES/SET cell a {@link JsonParamCell}? */\nexport function isJsonParamCell(value: unknown): value is JsonParamCell {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as { __jsonParam?: unknown }).__jsonParam === true\n );\n}\n\n/**\n * Reference to the row PROPOSED for insertion, inside an upsert's update arm:\n * `excluded.\"col\"` on postgres/sqlite, `` `new`.`col` `` on mysql's row-alias\n * form (`SqlDialect.excludedRowRef`). It is a COLUMN REFERENCE, not a\n * parameter — it names the value already bound in this statement's VALUES\n * list, which is what lets ONE batched upsert write each conflicting row's own\n * incoming values without binding them a second time.\n */\nexport type ExcludedRef = { readonly __excluded: true; readonly column: string };\n\n/** Reference the incoming row's `column` from inside an upsert update arm. */\nexport function excludedRef(params: { column: string }): ExcludedRef {\n return { __excluded: true, column: params.column };\n}\n\n/** Is this SET cell an {@link ExcludedRef}? */\nexport function isExcludedRef(value: unknown): value is ExcludedRef {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as { __excluded?: unknown }).__excluded === true\n );\n}\n\n/**\n * One RETURNING column: a bare column name renders `\"col\"`; `castText` renders\n * a dialect text cast (postgres `::text`, sqlite `CAST AS TEXT`) for lossless\n * transport, including timestamps and postgres arrays. `jsonText`\n * applies the dialect's JSON text projection, as {@link ColRef.transform} does\n * for SELECT. Dialects without RETURNING still omit the clause and flag it.\n */\nexport type ReturningColumn =\n | string\n | { readonly name: string; readonly castText: true }\n | { readonly name: string; readonly transform: \"jsonText\" }\n | CaptureReturningColumn\n | OtherRowReturningColumn\n | ServerVersionReturningColumn;\n\n/**\n * The server's `server_version_num` as text, exposed as `alias`:\n * `pg_catalog.current_setting('server_version_num') AS \"alias\"`. Rides a write\n * whose client does not know the server version yet, so the next statement can\n * take the form that version allows without a read of its own. Dialects with\n * the `rowCapture` capability only (the version decides whether it applies).\n */\nexport type ServerVersionReturningColumn = {\n readonly serverVersion: true;\n readonly alias: string;\n};\n\n/**\n * A RETURNING column read from a row OTHER than the one the statement wrote,\n * exposed as `alias` and projected like the written row's own column\n * (`projection`), so one codec decodes both:\n *\n * - `from: \"old\"` — the row as it was before the statement (capability\n * `rowCapture`, PostgreSQL 18): `old.\"col\" AS \"alias\"`, NULL in every column\n * for a row the statement inserted;\n * - `from: { source }` — the joined source of an `UPDATE … FROM` by its alias\n * (capability `returningReadsJoinedSource`): `\"source\".\"col\" AS \"alias\"`.\n */\nexport type OtherRowReturningColumn = {\n readonly from: \"old\" | { readonly source: string };\n readonly name: string;\n readonly alias: string;\n readonly projection?: \"castText\" | \"jsonText\";\n};\n\n/**\n * A row-capture RETURNING column (`$transaction(…, { capture })`, dialects with\n * the `rowCapture` capability: PostgreSQL 18, where RETURNING names the row\n * before the statement `old` and the row after it `new`):\n *\n * - `\"old\"` / `\"new\"`: `old.\"col\"::text AS \"alias\"` / `new.\"col\"::text AS \"alias\"`,\n * the value as text so every type survives exactly (`old` is all NULL for an\n * inserted row, `new` for a deleted one);\n * - `\"inserted\"`: `(old.\"col\" IS NULL) AS \"alias\"` — the arm of an `INSERT …\n * ON CONFLICT DO UPDATE` row, true when it was inserted (`col` must be a\n * column no stored row holds NULL in: a primary-key column);\n * - `\"old\"` / `\"new\"` with `hop`: the related row's column, read in the same\n * statement — `(SELECT \"__vibe_h\".\"col\"::text FROM \"Related\" AS \"__vibe_h\"\n * WHERE \"__vibe_h\".\"id\" = new.\"relatedId\") AS \"alias\"` (see {@link CaptureHop});\n * - `\"key\"`: `old.\"col\" AS \"alias\"` in the column's own type, for a chain's\n * {@link CaptureCascade} to match child rows on;\n * - `\"cascade\"` ({@link CaptureCascadeReturningColumn}): the images of the\n * child rows a referential action of this row changes.\n */\nexport type CaptureReturningColumn =\n | {\n readonly capture: \"old\" | \"new\" | \"inserted\" | \"key\";\n readonly name: string;\n readonly alias: string;\n /** With `\"old\"` / `\"new\"`: read `name` from the related row instead of this one. */\n readonly hop?: CaptureHop;\n }\n | CaptureCascadeReturningColumn;\n\n/**\n * A to-one hop of a capture cell: the row of `table` whose `on[i].target`\n * columns equal the reading row's `on[i].source` columns. The target columns\n * must be a unique key (a scalar subquery that found two rows would fail the\n * statement); no row, or a NULL source column, reads NULL.\n */\nexport type CaptureHop = {\n readonly table: TableRef;\n readonly on: readonly { readonly target: string; readonly source: string }[];\n};\n\n/** One cell of a {@link CaptureCascade} image: a child column, or a column of its related row. */\nexport type CaptureCell = {\n readonly name: string;\n readonly hop?: CaptureHop;\n};\n\n/**\n * The distinct images of the child rows of `table` whose `on[i].child` columns\n * equal a written parent row's `on[i].parent` columns: `(SELECT\n * array_agg(\"__vibe_i\")::text FROM (SELECT DISTINCT ARRAY[<cells>] AS \"__vibe_i\"\n * FROM \"Child\" AS \"__vibe_c\" WHERE <match> LIMIT $n) AS \"__vibe_d\")`, NULL when\n * no child matched. Read inside the parent's statement, whose snapshot still\n * holds the rows its foreign keys' referential actions remove or rewrite at\n * the statement's end. `limit` is bound as a parameter.\n */\nexport type CaptureCascade = {\n readonly table: TableRef;\n readonly on: readonly { readonly child: string; readonly parent: string }[];\n readonly cells: readonly CaptureCell[];\n readonly limit: number;\n};\n\n/**\n * A per-row {@link CaptureCascade} in RETURNING: `parent` columns are read from\n * `old.` (`\"__vibe_c\".\"child\" = old.\"parent\"`).\n */\nexport type CaptureCascadeReturningColumn = {\n readonly capture: \"cascade\";\n readonly alias: string;\n readonly cascade: CaptureCascade;\n};\n\n/** The column name a {@link ReturningColumn} exposes in the result row. */\nexport function returningColumnName(column: ReturningColumn): string {\n return typeof column === \"string\" ? column : \"capture\" in column || \"from\" in column || \"serverVersion\" in column ? column.alias : column.name;\n}\n\n/** Is this RETURNING column read from another row ({@link OtherRowReturningColumn})? */\nexport function isOtherRowReturningColumn(column: ReturningColumn): column is OtherRowReturningColumn {\n return typeof column !== \"string\" && \"from\" in column;\n}\n\n/** Is this RETURNING column a row-capture column ({@link CaptureReturningColumn})? */\nexport function isCaptureReturningColumn(column: ReturningColumn): column is CaptureReturningColumn {\n return typeof column !== \"string\" && \"capture\" in column;\n}\n\nexport type InsertStatement = {\n readonly kind: \"insert\";\n readonly table: TableRef;\n readonly columns: readonly string[];\n /** Row values aligned to `columns` — deterministic parameter order. */\n readonly rows: readonly (readonly unknown[])[];\n /** Upsert clause: ON CONFLICT (pg/sqlite) or ON DUPLICATE KEY (mysql). */\n readonly onConflict?: OnConflictClause;\n /** Rendered as RETURNING where the dialect supports it, else omitted+flagged. */\n readonly returning?: readonly ReturningColumn[];\n /**\n * Bind the rows as ONE typed array per column instead of one parameter per\n * value (`SqlDialect.bulkInsertForm` `\"unnest\"`, postgres): `INSERT INTO t\n * (\"a\", \"b\") SELECT \"c1\", \"c2\" FROM unnest($1::text[], $2::int4[]) WITH\n * ORDINALITY AS \"__vibe_rows\" (\"c1\", \"c2\", \"ord\") ORDER BY \"ord\"`. The text\n * is the same for 2 rows and for 3 000, and the statement binds one parameter\n * per column. `ORDER BY \"ord\"` keeps input order (sequence values, the\n * `ON CONFLICT DO NOTHING` winner).\n *\n * One entry per column, in `columns` order: the column's DECLARED type facts\n * (see {@link KeyListMember}; a `Json` entry names its storage through\n * `nativeType`). Each array binds the BASE type (`varchar`, never\n * `varchar(191)` — an explicit modifier cast truncates silently), so the\n * INSERT's own assignment applies the column's length and precision exactly\n * as it does for a VALUES parameter. `rows` stays row-major: the renderer\n * transposes it. Every cell is a plain value, SQL NULL or a\n * {@link JsonParamCell} — never `DEFAULT` or the database clock (the query\n * builder keeps VALUES for those; the renderer refuses them).\n */\n readonly unnest?: readonly KeyListMember[];\n};\n\n/** Conflicting rows are updated with these column values. */\nexport type OnConflictUpdate = {\n /** Conflict target columns (ignored by the mysql form). */\n readonly columns: readonly string[];\n /**\n * Named-constraint target: `ON CONFLICT ON CONSTRAINT \"name\" DO UPDATE`.\n * Postgres only; replaces the column-list target when present.\n */\n readonly constraint?: string;\n /**\n * Partial-index arbiter predicate, RAW SQL: `ON CONFLICT (cols) WHERE pred\n * DO UPDATE …` (postgres/sqlite; requires `columns`). Raw for the same\n * reason {@link OnConflictDoNothing.conflictWhere} is — both engines match\n * the clause against the index's OWN stored predicate structurally, so a\n * bound parameter could never match and the text mirrors the schema\n * declaration byte-for-byte. Mysql's ODKU names no target and refuses it.\n */\n readonly conflictWhere?: string;\n readonly update: Readonly<Record<string, unknown>>;\n /**\n * Guard on the update arm, BOUND parameters: `ON CONFLICT (…) DO UPDATE SET\n * … WHERE <guard>` — the conflicting row is updated (and returned) only when\n * the guard admits it; otherwise the statement writes and returns nothing.\n * Postgres has both the target row and `excluded` in scope there, so every\n * column ref must carry `table` (the target table's name), exactly as the\n * SET self-references do. Needs the `conflictUpdateWhere` capability:\n * mysql's ODKU has no WHERE and refuses it (`VIBE_UNSUPPORTED_CAPABILITY`).\n */\n readonly updateWhere?: SqlExpr;\n /**\n * Skip-unchanged guard: the conflicting row is updated only when at least\n * one of these columns' stored value differs, NULL counting as a value,\n * from the value its `update` assignment would write (each column must have\n * one). Rendered as the first member of the update arm's `WHERE`, AND-ed\n * with {@link OnConflictUpdate.updateWhere}; a skipped row writes nothing\n * and returns nothing. On ON DUPLICATE KEY UPDATE (no WHERE) the columns it\n * leaves out are assigned first, keeping their stored value when nothing\n * else would change, and the dialect itself skips the unchanged row.\n * Needs `upsertSkipUnchanged`.\n */\n readonly skipUnchanged?: readonly UnchangedColumn[];\n /**\n * The table's native row-security predicate, RAW SQL without parameters\n * (the managed policy's check, columns qualified by the target table's\n * name). With a guard on the arm ({@link OnConflictUpdate.updateWhere} or\n * {@link OnConflictUpdate.skipUnchanged}) the arm's `WHERE` becomes\n * `(<policy>) IS NOT TRUE OR (<guard>)`: PostgreSQL evaluates that `WHERE`\n * before its row-security check of the conflicting row, so a row the policy\n * hides must always take the update path and fail that check, whatever its\n * values. Ignored when the arm has no guard; refused by a dialect without\n * `nativeRowLevelSecurity`.\n */\n readonly rowPolicy?: string;\n /**\n * MySQL only, a single-row statement: the duplicate arm also runs\n * `` `column` = IF(LAST_INSERT_ID(flag), `t`.`column`, `t`.`column`) `` (a\n * self-assignment, rendered last), so the statement reports `flag` as its\n * insert id exactly when the row took the update arm — the one signal that\n * tells an inserted row from an unchanged one when the driver reports no\n * `Duplicates:` info. `flag` is a decimal literal.\n */\n readonly duplicateFlag?: { readonly column: string; readonly flag: string };\n /**\n * MySQL only (`upsertForm: \"onDuplicateKey\"`): append\n * `` `col` = LAST_INSERT_ID(`col`) `` to the update list so the UPDATE arm\n * records the addressed row's key — without it `LAST_INSERT_ID()` is stale\n * on the update arm and the read-back can resolve a wrong, unrelated row\n * (SQL review B2, live-proven on 8.4). Only meaningful for integer keys.\n */\n readonly lastInsertIdColumn?: string;\n};\n\n/**\n * One column a skip-unchanged conflict arm compares. `json`: a Json column,\n * compared as `jsonb` on postgres (its `json` type has no equality operator;\n * `\"list\"` for a Json list).\n */\nexport type UnchangedColumn = {\n readonly column: string;\n readonly json?: \"scalar\" | \"list\";\n /**\n * A column whose SQL equality can be coarser than \"the stored value would\n * not change\"; the renderer compares it exactly where the dialect needs it.\n * See {@link UnchangedExactness}.\n */\n readonly bytes?: UnchangedExactness;\n /**\n * A text column the schema declares with a folding type or collation\n * (`citext`, a `@collation` that is not byte-ordered): its equality may call\n * `'x'` and `'X'` equal on any dialect, not only under MySQL's default.\n */\n readonly folds?: true;\n /** The column is a list of `bytes`'s kind (a postgres array). */\n readonly list?: true;\n};\n\n/**\n * Why a compared column's own equality may call two different stored values\n * equal:\n * - `\"text\"`: a text column; MySQL's default `_ai_ci` collation folds case\n * and accents (and see `folds`).\n * - `\"decimal\"`: a Decimal column without a declared scale (PostgreSQL's bare\n * `numeric` keeps `1.50` and `1.5` apart, its equality does not).\n * - `\"float\"`: a float column (`-0` equals `0`).\n * - `\"other\"`: a Json or list column, or a text-like column of another\n * declared type, compared by its bytes on MySQL.\n */\nexport type UnchangedExactness = \"text\" | \"decimal\" | \"float\" | \"other\";\n\n/**\n * Conflicting rows are skipped (`createMany({ skipDuplicates: true })`).\n * An empty/absent target means \"any conflict\" — the mysql form\n * (`ON DUPLICATE KEY UPDATE k = t.k`, dialect `doNothingForm:\n * \"duplicateKeyKeep\"`) can only express that, so it ignores a bare `columns`\n * target (documented degradation) and REFUSES the refined targets below.\n */\nexport type OnConflictDoNothing = {\n /**\n * MySQL form only (`duplicateKeyKeep`): the column the duplicate arm assigns\n * to itself (`` `k` = `t`.`k` ``, a no-op). Absent = the first inserted\n * column; an all-default row (no column) must name one.\n */\n readonly keepColumn?: string;\n /**\n * MySQL form only, single-row statements: a decimal literal S (digits only).\n * The keep assignment becomes `` `k` = IF(LAST_INSERT_ID(S), `t`.`k`, `t`.`k`) ``,\n * so a skipped duplicate reports S as the statement's insert id (an inserted\n * row reports its own id, or 0) — the exact skipped verdict that the\n * affected count cannot give with CLIENT_FOUND_ROWS (an unchanged duplicate\n * counts 1, like an insert). The builder picks S unequal to the row's\n * explicit AUTO_INCREMENT value.\n */\n readonly duplicateFlag?: string;\n readonly columns?: readonly string[];\n /**\n * Partial-index target predicate, RAW SQL: `ON CONFLICT (cols) WHERE pred\n * DO NOTHING` (postgres/sqlite; requires `columns`). Raw — and rendered\n * verbatim — because BOTH engines match the clause against the index's OWN\n * stored predicate structurally: a bound parameter could never match, so\n * the text mirrors the schema declaration's `where:` string byte-for-byte.\n */\n readonly conflictWhere?: string;\n /** Named-constraint target (`ON CONSTRAINT \"name\"`) — postgres only. */\n readonly constraint?: string;\n readonly doNothing: true;\n};\n\nexport type OnConflictClause = OnConflictUpdate | OnConflictDoNothing;\n\nexport type UpdateStatement = {\n readonly kind: \"update\";\n readonly table: TableRef;\n /** The target's alias; required with {@link UpdateStatement.from}, where two relations are in scope. */\n readonly alias?: string;\n /**\n * A joined source: `UPDATE … FROM` on PostgreSQL/SQLite (its `on` AND-ed\n * before `where`), `UPDATE … JOIN … ON` on MySQL. A\n * {@link SourceColumnRef} set value reads its columns.\n */\n readonly from?: UpdateSource;\n /**\n * Column → parameter value, or an atomic {@link SetOperation}. As a\n * {@link ChainStep} only (statement-maxx lane C3), a value may be a\n * {@link StepColumnRef} to an EARLIER step: `\"col\" = (SELECT \"c\" FROM\n * \"step\")` — the step must return at most one row (an owner resolved by a\n * unique where, or an owner INSERT of one row).\n */\n readonly set: Readonly<Record<string, unknown>>;\n readonly where?: SqlExpr;\n readonly returning?: readonly ReturningColumn[];\n};\n\nexport type DeleteStatement = {\n readonly kind: \"delete\";\n readonly table: TableRef;\n readonly where?: SqlExpr;\n readonly returning?: readonly ReturningColumn[];\n};\n\n/** Native RLS DDL, kept distinct from ordinary row-query expressions. */\nexport type RlsEnableStatement = { readonly kind: \"rlsEnable\"; readonly table: string };\nexport type RlsForceStatement = { readonly kind: \"rlsForce\"; readonly table: string };\n/** Disable native row policy enforcement on a physical table. */\nexport type RlsDisableStatement = { readonly kind: \"rlsDisable\"; readonly table: string };\n/** Remove forced owner enforcement on a physical table. */\nexport type RlsNoForceStatement = { readonly kind: \"rlsNoForce\"; readonly table: string };\n/** Drop the managed policy by default, or the supplied policy name. */\nexport type RlsDropPolicyStatement = { readonly kind: \"rlsDropPolicy\"; readonly table: string; readonly policyName?: string };\nexport type RlsPolicyStatement = {\n readonly kind: \"rlsPolicy\";\n readonly schema: SchemaIR;\n readonly model: string;\n /** Probe policies use a distinct identity without changing the predicate. */\n readonly policyName?: string;\n /** Only the probe target may be temporary; parent relations always remain public. */\n readonly targetSchema?: \"public\" | \"pg_temp\";\n};\n\n/** Values are validated/serialized by runtime; null is the absent setting sentinel. */\nexport type RlsContextStatement = {\n readonly kind: \"rlsContext\";\n readonly context: RlsContextIR;\n readonly values: Readonly<Record<string, string | null>>;\n /** PGlite: bind this trusted runtime role first, in the same statement. */\n readonly role?: string;\n /** Switch the transaction to READ ONLY in the same statement, after the claims. */\n readonly readOnly?: boolean;\n /** Report the backend as `\"backendPid\"` / `\"backendStart\"` text columns. */\n readonly backend?: boolean;\n};\n\n/** Trusted pre-existing PGlite execution role; never a request-supplied principal. */\nexport type RlsRoleStatement = { readonly kind: \"rlsRole\"; readonly role: string };\n\n// ─── Advisory locks ───────────────────────────────────────────────\n\n/**\n * An advisory lock's key: a lock space the APPLICATION defines, so a resource\n * with no row of its own can still be locked.\n *\n * Two forms, exactly as PostgreSQL offers them, and they are DIFFERENT lock\n * spaces — holding `{ classId: 11, objectId: 22 }` does not block the single\n * key `11 * 2^32 + 22` (probe-verified on PostgreSQL 18.6). Pick one form per\n * resource family and stay in it.\n */\nexport type AdvisoryLockKey =\n | { readonly key: bigint }\n | { readonly classId: number; readonly objectId: number };\n\n/**\n * Take a TRANSACTION-scoped advisory lock. Released by commit and by rollback\n * (including `ROLLBACK TO SAVEPOINT` when it was taken after the savepoint —\n * probe-verified), never by an explicit unlock call, so no leak can outlive the\n * transaction on a pooled connection.\n *\n * `wait: \"nowait\"` renders the `pg_try_advisory_xact_lock*` family, whose single\n * boolean column says whether the lock was taken; `\"wait\"` renders the blocking\n * family, which returns void.\n */\nexport type AdvisoryLockStatement = {\n readonly kind: \"advisoryLock\";\n readonly mode: AdvisoryLockMode;\n readonly wait: \"wait\" | \"nowait\";\n readonly key: AdvisoryLockKey;\n};\n\n/** An ordered set of transaction-scoped bigint advisory locks. */\nexport type AdvisoryLocksStatement = {\n readonly kind: \"advisoryLocks\";\n readonly keys: readonly bigint[];\n readonly mode: AdvisoryLockMode;\n};\n\n/** The column an advisory try-lock projects its verdict into. */\nexport const ADVISORY_LOCK_RESULT_COLUMN: string = \"acquired\";\n\n// ─── Statement chains ────────────────────────────────────────────────\n\n/**\n * A cell of an {@link InsertSelectStatement} that reads a column of an EARLIER\n * chain step: `\"step\".\"column\"`. A column reference, not a parameter — the\n * value comes from the step's rows inside the same statement (a child row\n * taking its parent's key from the parent step, round-trip campaign EPIC F).\n * The step must be named in the insert's `from` list.\n */\nexport type StepColumnRef = { readonly __stepColumn: true; readonly step: string; readonly column: string };\n\n/** Reference `column` of the earlier chain step `step` from an INSERT … SELECT cell. */\nexport function stepColumnRef(params: { step: string; column: string }): StepColumnRef {\n return { __stepColumn: true, step: params.step, column: params.column };\n}\n\n/** The joined relation of an {@link UpdateStatement}: its table, alias and join condition. */\nexport type UpdateSource = UpdateTableSource | UpdateSelectSource;\n\n/** A joined table: `FROM \"table\" AS alias` (`updateMany({ from })`). */\nexport type UpdateTableSource = { readonly table: TableRef; readonly alias: string; readonly on: SqlExpr };\n\n/**\n * A joined subquery: `FROM (SELECT …) AS alias`, PostgreSQL only. With a\n * locking read of the target table it is the row as it was before the write,\n * and an {@link OtherRowReturningColumn} `from: { source: alias }` returns its\n * values (`update({ previous })`, capability `returningReadsJoinedSource`).\n */\nexport type UpdateSelectSource = { readonly select: SelectStatement; readonly alias: string; readonly on: SqlExpr };\n\n/** An UPDATE set value read from the joined source's `column` (`UPDATE … FROM`). */\nexport type SourceColumnRef = { readonly __sourceColumn: true; readonly column: string };\n\n/** Read `column` of an {@link UpdateStatement}'s joined source as a set value. */\nexport function sourceColumnRef(params: { column: string }): SourceColumnRef {\n return Object.freeze({ __sourceColumn: true, column: params.column });\n}\n\n/** Is this UPDATE set value a {@link SourceColumnRef}? */\nexport function isSourceColumnRef(value: unknown): value is SourceColumnRef {\n if (typeof value !== \"object\" || value === null) return false;\n const candidate = value as { __sourceColumn?: unknown; column?: unknown };\n return candidate.__sourceColumn === true && typeof candidate.column === \"string\" && Object.keys(value).length === 2;\n}\n\n/** Is this INSERT … SELECT cell a {@link StepColumnRef}? */\nexport function isStepColumnRef(value: unknown): value is StepColumnRef {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as { __stepColumn?: unknown }).__stepColumn === true\n );\n}\n\n/**\n * `INSERT INTO t (cols) SELECT <cells> [FROM \"step\", …] [WHERE <expr>]\n * [RETURNING …]` — an INSERT whose ONE row is a SELECT list instead of a\n * VALUES row, so a WHERE can veto the write inside the statement and cells can\n * read earlier steps. Valid ONLY as a {@link ChainStep} statement.\n *\n * Cells take the same forms as a VALUES cell — a codec-encoded value, a\n * {@link JsonParamCell}, a {@link DbNowMarker} — plus {@link StepColumnRef}.\n * The {@link SQL_DEFAULT_CELL} is refused: `DEFAULT` is not allowed in a SELECT\n * list; an omitted column takes its default by being absent from `columns`.\n *\n * Parameter typing (O-03, probed on PostgreSQL): a bare parameter in this\n * one-row SELECT list takes the TARGET column's type, exactly as in VALUES.\n */\nexport type InsertSelectStatement = {\n readonly kind: \"insertSelect\";\n readonly table: TableRef;\n readonly columns: readonly string[];\n /** One cell per column, aligned to `columns` — deterministic parameter order. */\n readonly cells: readonly unknown[];\n /** Earlier chain steps the SELECT reads FROM, in order (absent: a one-row SELECT without FROM). */\n readonly from?: readonly string[];\n /**\n * Several source rows (round-trip campaign EPIC F): the SELECT reads them\n * from a derived table `alias`, joined after the `from` steps, and the\n * `cells` read its columns through `stepColumnRef({ step: alias, column })`.\n * See {@link ChainRowSource} for how the rows are typed.\n */\n readonly source?: ChainRowSource;\n readonly where?: SqlExpr;\n /**\n * `ON CONFLICT (<columns>) DO NOTHING` (statement-maxx lane C2): a row whose\n * conflict target already exists is skipped and not returned — the implicit\n * many-to-many join INSERT, where re-connecting an existing pair is a no-op.\n * Postgres form only (the chain renders nowhere else); at least one column.\n */\n readonly conflictDoNothing?: { readonly columns: readonly string[] };\n readonly returning?: readonly ReturningColumn[];\n};\n\n/**\n * Rows an {@link InsertSelectStatement} inserts, as ONE derived table:\n * `(SELECT <cols> FROM (VALUES (<typed NULL row>), ($1, $2), …) AS \"alias\"\n * (<cols>) OFFSET 1) AS \"alias\"`.\n *\n * Why the typed NULL row (review O-03): a bare parameter outside the INSERT's\n * own VALUES has no type, and PostgreSQL resolves an all-parameter column of a\n * VALUES list or UNION in FROM as `text` (\"column is of type integer but\n * expression is of type text\"). The first row is one `(SELECT \"col\" FROM\n * <typedBy> WHERE FALSE)` per column — a NULL of the TARGET column's exact\n * type (enums, `numeric(p,s)`, `varchar(n)`, domains and arrays included) —\n * so every parameter below takes that type, with no cast map anywhere;\n * `OFFSET 1` drops the row. (A `UNION ALL` of one-row SELECTs types the same\n * way but costs ~10× the planning time at 1000 rows — EPIC F shape gate.)\n *\n * Cells take the VALUES forms: a codec-encoded value, a {@link JsonParamCell}\n * or a {@link DbNowMarker}; the DEFAULT cell is refused (a homogeneous row set\n * omits the column instead). A cell carrying its OWN type (the Json cast, the\n * clock) must agree with the column's type under VALUES' common-type rules,\n * which are stricter than INSERT's assignment casts — the builder keeps such\n * columns out (EPIC F eligibility). Rows are read in list order, which is the\n * order the INSERT consumes them.\n */\nexport type ChainRowSource = {\n readonly alias: string;\n /** The table whose columns type the rows — normally the INSERT's own table. */\n readonly typedBy: TableRef;\n readonly columns: readonly string[];\n /** At least one row, each aligned to `columns`. */\n readonly rows: readonly (readonly unknown[])[];\n};\n\n/** What one chain step may be: a read, or a data-modifying statement with RETURNING. */\nexport type ChainStepStatement =\n | SelectStatement\n | InsertStatement\n | InsertSelectStatement\n | UpdateStatement\n | DeleteStatement;\n\n/**\n * One named step: rendered `\"name\" AS (<statement>)`. Later steps and the\n * result read it as a table (`FROM \"name\"`, `EXISTS (SELECT 1 FROM \"name\" …)`,\n * a {@link StepColumnRef}). A data-modifying step contributes the rows its\n * RETURNING list names.\n */\nexport type ChainStep = {\n readonly name: string;\n readonly statement: ChainStepStatement;\n};\n\n/**\n * The chain's final SELECT: the rows of `rowsFrom` (in that order, `UNION\n * ALL`), each projecting `columns`.\n *\n * `verdict` adds one column `alias` = `expr` to every row, AND guarantees a\n * row: when the `rowsFrom` steps return nothing, the result is exactly ONE\n * verdict row whose `columns` are all NULL. A caller recognizes it by NULL in\n * a column the steps never return as NULL (a primary key). Accounting\n * consequence: such a statement returns one row per written row OR one\n * verdict row — a caller that counts returned rows as row changes must undo a\n * verdict-row outcome (the upsert fold always rolls it back).\n */\nexport type ChainResult = {\n /** Both lists may be empty for a tally-only result: one count row, no model values. */\n readonly rowsFrom: readonly string[];\n readonly columns: readonly string[];\n readonly verdict?: { readonly alias: string; readonly expr: SqlExpr };\n /**\n * In-statement vetoes (round-trip campaign EPIC F), checked in order: when\n * `step` returned no row (fewer than `minRows`, EPIC W), the STATEMENT FAILS — so the database undoes every\n * effect of every step, trigger writes included — with an error whose\n * message carries `__vibe_veto:<token>:<nonce>:` ({@link CHAIN_VETO_PREFIX},\n * {@link chainVetoToken}). Requires `tally`: the veto is the tally column's\n * guard, so it is evaluated exactly once, on the one guaranteed result row.\n */\n readonly veto?: readonly ChainVeto[];\n /**\n * A step whose rows every veto depends on: when it returned no row, no veto\n * is checked and the statement succeeds, answering the one guaranteed row\n * with NULL columns and the tally (rendered as the first CASE arm, `WHEN NOT\n * EXISTS (SELECT 1 FROM \"step\") THEN <tally>`). A nested write whose\n * missing parent is an answer, not an error, gates its children's vetoes on\n * the parent step this way. Requires `tally` and at least one veto.\n */\n readonly vetoGate?: string;\n /**\n * One column `alias` on every result row: the number of rows the listed\n * data-modifying steps returned (their RETURNING rows = their direct\n * effects). Guarantees one row like `verdict`. Row-change accounting reads\n * it instead of counting result rows (effect `writeTally`).\n */\n readonly tally?: ChainTally;\n /**\n * Row capture ({@link ChainCapture}): per captured data-modifying step, its\n * row count and its distinct before and after images, on every result row\n * (uncorrelated scalar subqueries, evaluated once). Needs the dialect's\n * `rowCapture` capability. Rendered after every other result column, so\n * their bound limits come last.\n */\n readonly capture?: readonly ChainCapture[];\n};\n\n/**\n * One captured step of a chain ({@link ChainResult.capture}). Result columns,\n * `<alias>` being this entry's alias:\n *\n * - `<alias>_n`: `(SELECT count(*) FROM \"step\")`;\n * - `<alias>_i` (with `inserted`): the rows whose arm marker is true;\n * - `<alias>_b` / `<alias>_a` (with `before` / `after`): `(SELECT\n * array_agg(\"__vibe_i\")::text FROM (SELECT DISTINCT ARRAY[\"c0\", \"c1\"] AS\n * \"__vibe_i\" FROM \"step\" LIMIT $n) AS \"__vibe_d\")` — a two-dimensional text\n * array literal of at most `limit` distinct images, NULL when the step\n * returned no row. With `inserted`, both read the update arm's rows only\n * (`WHERE NOT` the marker), and `_a` is left out with `insertedOnly`;\n * - `<alias>_ia` (with `inserted` and `after`): the insert arm's after images\n * (`WHERE` the marker), so an upsert's after images arrive per arm.\n *\n * `before` / `after` name columns the step RETURNS (its\n * {@link CaptureReturningColumn} aliases), in image order. `limit` is bound once.\n */\nexport type ChainCapture = {\n readonly step: string;\n readonly alias: string;\n /** The step's `\"inserted\"` arm-marker column, for an `INSERT … ON CONFLICT DO UPDATE` step. */\n readonly inserted?: string;\n /** With `inserted`: images of inserted rows only — `<alias>_ia`, no `<alias>_a`. */\n readonly insertedOnly?: true;\n readonly before?: readonly string[];\n readonly after?: readonly string[];\n /** The most distinct images one image column returns: a positive safe integer, bound as a parameter. */\n readonly limit: number;\n /**\n * Child images of the step's rows, one result column `<alias>_c<j>` each: a\n * {@link CaptureCascade} whose `parent` columns name columns the step\n * RETURNS, matched by `EXISTS (SELECT 1 FROM \"step\" AS \"__vibe_k\" WHERE\n * \"__vibe_k\".\"parent\" = \"__vibe_c\".\"child\")`.\n */\n readonly cascades?: readonly CaptureCascade[];\n};\n\n/**\n * Fail the statement when `step` returned no row; `token` names the veto in the\n * error. `nonce` is bound as a PARAMETER into the marker (never SQL text): a\n * per-call random value the caller requires back in the error, so a user value\n * that merely looks like a marker is never read as a veto.\n *\n * `minRows` (EPIC W) makes the veto count-sensitive: the statement fails when\n * `step` returned FEWER rows than that (a multi-row INSERT a trigger shortened).\n * Omitted or 1 = \"no row\". A positive safe integer, rendered as SQL text.\n * `exactRows` instead requires equality, including zero. It is a nonnegative\n * safe integer and cannot combine with `minRows`.\n */\nexport type ChainVeto = { readonly step: string; readonly token: string; readonly nonce: string; readonly minRows?: number; readonly exactRows?: number };\n\n/** Count the RETURNING rows of `steps` into the result column `alias`. */\nexport type ChainTally = { readonly alias: string; readonly steps: readonly string[] };\n\n/** Marker every chain veto error message carries, followed by `<token>:<nonce>:`. */\nexport const CHAIN_VETO_PREFIX: string = \"__vibe_veto:\";\n\n/** Allowed veto tokens: lower-case words — they are rendered into SQL text. */\nexport const CHAIN_VETO_TOKEN_PATTERN: RegExp = /^[a-z][a-z0-9_]*$/;\n\n/**\n * The veto token a database error message carries for this `nonce`, or\n * `undefined`. Matches the marker anywhere in the text, so a localized server\n * message (`lc_messages`) still yields it: the marker is the invalid VALUE the\n * message quotes. A marker without the caller's nonce is not a veto.\n */\nexport function chainVetoToken(params: { message: string; nonce: string }): string | undefined {\n const { message, nonce } = params;\n if (nonce === \"\") return undefined;\n for (let start = message.indexOf(CHAIN_VETO_PREFIX); start >= 0; start = message.indexOf(CHAIN_VETO_PREFIX, start + 1)) {\n const rest = message.slice(start + CHAIN_VETO_PREFIX.length);\n const match = /^([a-z][a-z0-9_]*):/.exec(rest);\n if (match !== null && rest.startsWith(`${nonce}:`, match[0].length)) return match[1];\n }\n return undefined;\n}\n\n/**\n * ONE statement made of an ordered chain of named steps — reads (a locked\n * probe) and data-modifying statements with RETURNING — ending in a final\n * SELECT over them (round-trip campaign EPIC 4, reused by EPIC F). Renders as\n * `WITH \"a\" AS (…), \"b\" AS (…) SELECT …` on a dialect whose\n * `statementChain` strategy names the form (postgres); every other dialect\n * refuses at render time (`VIBE_UNSUPPORTED_CAPABILITY`) — callers gate on\n * the strategy first and keep their multi-statement path there.\n *\n * PostgreSQL semantics the builder relies on: every step sees ONE snapshot\n * (a step never sees another step's writes — only its RETURNING rows), steps\n * that reference a step run after it, and the statement is atomic: an error in\n * any step undoes every step's effects, trigger writes included.\n */\nexport type ChainStatement = {\n readonly kind: \"chain\";\n readonly steps: readonly ChainStep[];\n readonly result: ChainResult;\n};\n\nexport type SqlStatement = SelectStatement | InsertStatement | UpdateStatement | DeleteStatement |\n RlsEnableStatement | RlsForceStatement | RlsDisableStatement | RlsNoForceStatement | RlsDropPolicyStatement |\n RlsPolicyStatement | RlsContextStatement | RlsRoleStatement | AdvisoryLockStatement | AdvisoryLocksStatement | ChainStatement;\n\n/** Readiness statements remain distinct from application queries. */\nexport type RlsReadinessStatement = { readonly kind: \"rlsReadiness\"; readonly query: RlsReadinessQuery; readonly searchPath?: string };\n/** Temporary clone lifecycle surrounding a desired-policy probe. */\nexport type RlsProbeTableStatement = { readonly kind: \"rlsProbeTable\"; readonly table: string; readonly action: \"create\" | \"drop\" };\n/** Migration transaction-local policy search-path scope. */\nexport type RlsPolicyPathStatement = { readonly kind: \"rlsPolicyPath\"; readonly stage: \"save\" | \"empty\" | \"restore\" };\n",
|
|
10
|
+
"import type { NativeEnumArrayParameter } from \"./native-enum-parameter.ts\";\nimport type { JsonListParameter } from \"./json-list-parameter.ts\";\nimport type { SqlFragment } from \"./composable.ts\";\nimport type { RlsReadinessQuery } from \"./dialects/postgres-rls-readiness.ts\";\n/**\n * The SQL AST — the small statement language the runtime and migrate packages\n * build and dialects render.\n *\n * Deliberately minimal at P0 (single-table statements, no joins/subqueries);\n * grows with the runtime in P2/P3. Every shape added here needs a catalog case\n * (tests/catalog/cases.ts) in the same change.\n */\n\nimport type {\n AdvisoryLockMode,\n DateTruncationStorage,\n DateTruncationUnit,\n RlsContextIR,\n RowLockStrength,\n RowLockWaitPolicy,\n ScalarType,\n SchemaIR,\n SqlFragmentSpec,\n} from \"@vibeorm/schema\";\n\n// ─── References ───────────────────────────────────────────────────\n\n/** A column reference, optionally table-qualified. */\nexport type ColRef = {\n readonly table?: string;\n readonly name: string;\n /**\n * Projection-only wire transform. `jsonText` uses the dialect's JSON text\n * projection to preserve SQL NULL versus the JSON document `null` before\n * driver parsing, without converting a postgres `json` column to `jsonb`.\n * `castText` renders a dialect text cast and preserves `alias ?? name`,\n * including timestamp identity before driver Date truncation. PostgreSQL\n * uses `\"col\"::text`; SQLite/MySQL use CAST AS TEXT/CHAR. `encodeBase64`\n * is postgres-only and renders `encode(\"col\", 'base64')`.\n * `encodeArrayBase64` is postgres-only and renders\n * `encode(array_send(\"col\"), 'base64')` — a `bytea[]` column's binary array\n * form (dimensions, NULL elements, raw element bytes) as base64: faithful\n * whatever the session's `bytea_output`, keeping a NULL column (`NULL`), an\n * empty array and NULL elements distinct (5.0 lane V; the lateral subselect's\n * `Bytes[]` form, decoded by the runtime's JSON-transport plan). Other users:\n * the lateral subselect (SQL review B3: raw `to_jsonb` would ship BigInt/Decimal as float64 JSON\n * numbers and Bytes as `\\x` hex text), and every row projection of a\n * `Float[]`/`Json[]` column (bun:sql's array parser refuses float arrays\n * printed with an exponent and json arrays holding integers beyond int32;\n * the runtime parses the array literal text itself). Never set on\n * filter/order refs.\n */\n readonly transform?: \"castText\" | \"encodeBase64\" | \"encodeArrayBase64\" | \"jsonText\";\n /**\n * Comparison/order/aggregate cast, sqlite Decimal only (SQL review B4):\n * Decimal stores as exact TEXT there and text comparison is lexicographic —\n * compare, ORDER BY and aggregate sites render `CAST(\"col\" AS REAL)` (with\n * NUMBER operands) instead. Never set on projections or GROUP BY keys, so\n * storage and read-back stay the exact text.\n */\n readonly castReal?: boolean;\n /** Native enum order key through a scalar subquery: MySQL reads its member index, other dialects keep the column. */\n readonly enumOrdinal?: true;\n /**\n * Order/distinct/compare cast, postgres `json` columns only (`Json @db.Json`,\n * release-3.0 D3): `json` has no ordering or equality operator, so ORDER BY,\n * DISTINCT ON and comparison sites render `\"col\"::jsonb` (`\"col\"::jsonb[]`\n * for a `json[]` list column) — the order and distinctness of a jsonb\n * column. Never set on projections, so read-back keeps the stored text.\n */\n readonly castJsonb?: \"jsonb\" | \"jsonb[]\";\n /**\n * Calendar truncation of a timestamp column, for a `groupBy` date key. The\n * reference renders as the start of its period in a named time zone\n * (`date_trunc('day', \"col\", 'Europe/Oslo')`; see `renderDateTruncation`),\n * in the column's own SQL type. Set on the projection, GROUP BY and ORDER BY\n * refs of one key, which then repeat the identical expression text\n * (PostgreSQL matches GROUP BY expressions by structure); a projection keeps\n * `alias ?? name` as its output name. Never set on filter refs. Dialects\n * without the `dateTruncation` capability refuse it when rendering.\n */\n readonly truncate?: DateTruncation;\n /**\n * A `groupBy` expression key read from the column ({@link GroupKeyExpression}):\n * the text at a JSON path, or a string's leading characters. Like\n * {@link ColRef.truncate} it is set on the projection (with `alias`, the\n * key's result name), GROUP BY and ORDER BY refs of one key, which repeat\n * the identical text: every operand is a validated literal, never a bound\n * parameter, so PostgreSQL and MySQL match the GROUP BY expression.\n */\n readonly groupKey?: GroupKeyExpression;\n /**\n * The first non-NULL of these references — `COALESCE(\"a\", \"b\")` — instead\n * of the column `name`: the value of an `orderBy: { _coalesce: … }` term.\n * Each member renders as its own reference, casts included (a sqlite\n * Decimal member as `CAST(… AS REAL)`, a mysql native enum as its member\n * index). Set on ORDER BY and comparison refs only. `name` is then\n * {@link COALESCE_REF_NAME}, never a column of a table, so a reader that\n * looks a column up by name finds none.\n */\n readonly coalesce?: readonly ColRef[];\n /**\n * Projection alias: renders `ref AS \"alias\"`. PROJECTION-ONLY — filter,\n * order and correlation refs never set it (the renderer ignores it outside\n * a projection list). Used by the single-statement M2M join to expose the\n * join table's parent-key column under a reserved name (`__vibe_parent`).\n */\n readonly alias?: string;\n};\n\n/**\n * The `name` of a {@link ColRef.coalesce} reference. The `__vibe_` column\n * prefix is reserved by schema validation, so no model column carries it.\n */\nexport const COALESCE_REF_NAME: string = \"__vibe_coalesce\";\n\n/** A {@link ColRef.coalesce} reference over `members`. */\nexport function coalesceRef(params: { members: readonly ColRef[] }): ColRef {\n return { name: COALESCE_REF_NAME, coalesce: params.members };\n}\n\n/** A {@link ColRef.truncate} request: the calendar unit, the zone that defines the calendar, and the column's storage form. */\nexport type DateTruncation = {\n readonly unit: DateTruncationUnit;\n /** A time-zone name (`\"Europe/Oslo\"`, `\"UTC\"`), rendered as a string literal after a strict character check. */\n readonly timeZone: string;\n readonly storage: DateTruncationStorage;\n};\n\n/**\n * A {@link ColRef.groupKey} expression.\n *\n * - `jsonPathText`: the text at an object-key path of a JSON column — a JSON\n * string unquoted, a number or boolean in its JSON spelling, JSON `null` and\n * a missing path SQL NULL, an object or array its JSON text. Each step reads\n * an object member only. `storage: \"json\"` marks a postgres `json` column,\n * read through jsonb like the JSON filters.\n * - `prefix`: the first `length` characters of a string column.\n */\nexport type GroupKeyExpression =\n | { readonly kind: \"jsonPathText\"; readonly path: readonly string[]; readonly storage?: \"json\" }\n | { readonly kind: \"prefix\"; readonly length: number };\n\nexport type TableRef = {\n readonly name: string;\n /** Explicit fixed PostgreSQL placement; absence preserves existing SQL. */\n readonly namespace?: string;\n readonly alias?: string;\n};\n\n// ─── Aggregates ───────────────────────────────────────────────────\n\n/** Aggregate functions applied to one column. */\nexport type AggFn = \"count\" | \"avg\" | \"sum\" | \"min\" | \"max\";\n\n/** Reference to an aggregate expression: `COUNT(*)` or `FN(\"col\")`. */\nexport type AggRef =\n | { readonly fn: \"countAll\"; readonly filter?: SqlExpr }\n | {\n readonly fn: AggFn;\n readonly column: ColRef;\n /** Native enum MIN/MAX: projections and HAVING return the database label; order keys keep its ordinal. */\n readonly enumOrder?: \"value\" | \"ordinal\";\n /**\n * Aggregate only the rows the predicate admits: `AGG(x) FILTER (WHERE …)`\n * or `AGG(CASE WHEN … THEN x END)` per the dialect's\n * `filteredAggregates` capability. Its parameters bind each time the\n * aggregate renders (projection, HAVING, ORDER BY), in text order.\n */\n readonly filter?: SqlExpr;\n };\n\n/**\n * One aggregate projection: `FN(\"col\") AS \"alias\"`. The alias is part of the\n * catalog contract — the runtime derives result keys from it deterministically\n * (`_count___all`, `_avg__score`), never by parsing the SQL text back.\n */\nexport type AggSelect = {\n readonly agg: AggRef;\n readonly alias: string;\n /** Projection-only result cast; native aggregate comparisons and ordering stay typed. */\n readonly castText?: true;\n};\n\n// ─── JSON filters ─────────────────────────────────────────────────\n\n/**\n * JSON path predicates (Prisma's Json filter surface). `not` is `equals` with\n * `negate` — there is no separate op. `exists` takes a boolean `value`: the\n * member at the path (object keys only) is present (its value may be JSON\n * `null`) or, for `false`, the document is present and the member is not; a\n * SQL NULL column is unknown for both. Which ops a dialect can express is\n * declared on `SqlDialect.supportedJsonOps` and enforced at render time too.\n */\nexport type JsonFilterOp =\n | \"equals\"\n | \"exists\"\n | \"string_contains\"\n | \"string_starts_with\"\n | \"string_ends_with\"\n | \"array_contains\"\n | \"array_starts_with\"\n | \"array_ends_with\";\n\n// ─── Expressions ──────────────────────────────────────────────────\n\nexport type ComparisonOp = \"eq\" | \"ne\" | \"gt\" | \"gte\" | \"lt\" | \"lte\";\n\n/**\n * The column facts one member of a {@link SqlExpr} `keyList` tuple needs to\n * bind exactly like the equality `\"col\" = $n` would. Postgres binds each\n * member as ONE typed array (`$n::<element type>[]`), so it needs the\n * column's element type: the declared native type without its modifier\n * (`timestamptz`, never `timestamptz(3)` — a typmod cast would round\n * `.1234` onto a stored `.123` that `=` does not match), `bpchar` for\n * `char(n)`, `citext`, the enum's own type. MySQL needs to know a time-of-day\n * member (`SqlDialect.timeOfDayInStrategy`); SQLite needs nothing.\n */\nexport type KeyListMember = {\n /** The column's scalar type; `\"Enum\"` for an enum column. */\n readonly type: ScalarType | \"Enum\";\n /** The declared `@db.*` native type, verbatim (`VarChar(191)`, `Uuid`, `Timestamptz(3)`). */\n readonly nativeType?: string;\n /**\n * A database-stored (native) enum's type: `namespace` qualifies it, absence\n * resolves it through the search path like the statement's table. Absent on\n * a string-stored enum, whose column is text.\n */\n readonly enumType?: { readonly namespace?: string; readonly name: string };\n /** A time-of-day column (`@db.Time(n)` / `@db.Timetz(n)`). */\n readonly timeOfDay?: boolean;\n};\n\nexport type SqlExpr =\n | { readonly kind: \"composed\"; readonly fragment: SqlFragment }\n | { readonly kind: \"cmp\"; readonly op: ComparisonOp; readonly column: ColRef; readonly value: unknown }\n /** Column-to-column comparison — the correlation predicate of EXISTS/lateral subqueries. */\n | { readonly kind: \"cmpCol\"; readonly op: ComparisonOp; readonly left: ColRef; readonly right: ColRef }\n | { readonly kind: \"isNull\"; readonly column: ColRef; readonly negate?: boolean }\n | {\n readonly kind: \"inArray\";\n readonly column: ColRef;\n readonly values: readonly unknown[];\n readonly negate?: boolean;\n /**\n * The column holds a time of day (`@db.Time(n)` / `@db.Timetz(n)`): the\n * dialect renders the membership per `SqlDialect.timeOfDayInStrategy`.\n */\n readonly timeOfDay?: boolean;\n }\n /**\n * ORDERED-TUPLE membership: `(\"a\", \"b\") IN ((?, ?), (?, ?))`. The composite\n * relation predicate — `\"a\" IN (…) AND \"b\" IN (…)` is a Cartesian SUPERSET\n * and is never a substitute. Renders per `SqlDialect.tupleInStrategy`:\n * a native row-value `IN` where the dialect has row constructors, else an OR\n * of COMPLETE conjunctions. Arity 1 is expressed as {@link SqlExpr} `inArray`\n * instead, so single-key relations keep their existing SQL.\n */\n | {\n readonly kind: \"tupleIn\";\n /** Ordered tuple columns; `rows[i][j]` binds to `columns[j]`. */\n readonly columns: readonly ColRef[];\n /** Candidate tuples — every row carries exactly `columns.length` values. */\n readonly rows: readonly (readonly unknown[])[];\n readonly negate?: boolean;\n }\n /**\n * KEY-LIST membership — the public `where: { IN: [{ a, b }, …] }` filter:\n * rows whose ordered tuple of column values equals one of `rows`, with\n * semi-join semantics (a repeated tuple never repeats a result row). Renders\n * per `SqlDialect.keyListStrategy`: postgres binds one typed ARRAY per\n * member, `(\"a\", \"b\") IN (SELECT * FROM unnest($1::int8[], $2::text[]))`,\n * so the text and the planning cost stay constant however long the list is\n * (an OR of 1 000 conjunctions planned in 114 ms on PGlite, 2 ms on\n * postgres 18; the unnest form in 0.1–0.2 ms on both). A `DateTime` member\n * without a declared native type switches postgres to the row-constructor\n * list of untyped parameters (`keyListBindsUntypedRows`: the column may be a\n * zone-less `timestamp`). MySQL renders the row-constructor list, SQLite\n * `IN (VALUES …)`. Each member compares under the column's own type and\n * collation, exactly like `\"col\" = $n`.\n *\n * An empty `rows` renders `1 = 0` (matches nothing, like an empty\n * `inArray`). The runtime emits arity 1 as `inArray` instead, so a\n * one-field key list keeps the scalar `in` SQL.\n */\n | {\n readonly kind: \"keyList\";\n /** Ordered tuple columns (compare references); `rows[i][j]` binds to `columns[j]`. */\n readonly columns: readonly ColRef[];\n /** How each member binds, in column order — see {@link KeyListMember}. */\n readonly members: readonly KeyListMember[];\n /** Encoded candidate tuples, each exactly `columns.length` long; may repeat. */\n readonly rows: readonly (readonly unknown[])[];\n }\n /**\n * ROW-VALUE comparison: `(\"a\", \"b\") > ($1, $2)` — the keyset seek (D-01).\n * SQL compares row values left to right, each pair with that column's own\n * operator, affinity and collation, which is exactly the OR expansion\n * `\"a\" > $1 OR (\"a\" = $2 AND \"b\" > $3)` when no member is NULL — and an\n * index on `(a, b)` bounds it as one range (PostgreSQL `Index Cond: ROW(…) >\n * ROW(…)`, SQLite `SEARCH … (a>?)`). A NULL member makes the comparison\n * UNKNOWN as soon as the scan reaches it, so the runtime emits it only over\n * non-null keys and values. Renders on every dialect (each has row\n * constructors); whether the runtime emits it is\n * `SqlDialect.keysetSeekStrategy`.\n */\n | {\n readonly kind: \"rowCompare\";\n readonly op: \"gt\" | \"gte\" | \"lt\" | \"lte\";\n /** Ordered row members (compare references); `values[i]` binds to `columns[i]`. */\n readonly columns: readonly ColRef[];\n /** Encoded values, exactly `columns.length` of them. */\n readonly values: readonly unknown[];\n }\n /**\n * SUBQUERY membership: `\"id\" IN (SELECT …)`, or the row-value form\n * `(\"a\", \"b\") IN (SELECT …)` for a composite key — the key-first `distinct`\n * page on PostgreSQL (D-04). The subquery projects exactly `columns.length`\n * columns and shares the statement's parameter sequence. MySQL refuses a\n * `LIMIT` directly inside an `IN` subquery (error 1235), so the renderer\n * refuses that pair there with `VIBE_UNSUPPORTED_CAPABILITY`.\n */\n | {\n readonly kind: \"inSelect\";\n /** The tested columns, in the subquery's projection order. */\n readonly columns: readonly ColRef[];\n readonly select: SelectStatement;\n /** The subquery yields at most one row: one column, rendered `\"fk\" = (SELECT …)`. */\n readonly single?: true;\n }\n | {\n readonly kind: \"like\";\n readonly column: ColRef;\n /** Pre-built pattern (see like.ts helpers for escaping). */\n readonly pattern: string;\n readonly insensitive?: boolean;\n /**\n * The column carries an explicit case-insensitive collation (@collation\n * `…_ci`, board #36): an insensitive match renders as PLAIN `LIKE` — the\n * collation already folds case, and skipping LOWER() keeps the column\n * indexable. Set by the builder for mysql only.\n */\n readonly ciCollation?: boolean;\n readonly negate?: boolean;\n }\n /**\n * Case-SENSITIVE string match (`mode: \"strict\"`, board #20). `value` is the\n * RAW operand — pattern building happens at render time because escaping\n * differs per strategy (LIKE's `%`/`_`/`\\` vs GLOB's `*`/`?`/`[`). Renders\n * per `SqlDialect.strictMatchStrategy`: plain `=`/`LIKE` on postgres\n * (already byte-sensitive — a deliberate, documented no-op), `=`/`GLOB` on\n * sqlite, `= CAST(? AS BINARY)`/`LIKE CAST(? AS BINARY)` on mysql. The\n * non-native forms defeat plain indexes; docs/dialect-notes.md carries the\n * cost and the functional/`_bin`-index mitigation.\n */\n | {\n readonly kind: \"strictMatch\";\n readonly column: ColRef;\n readonly op: \"equals\" | \"contains\" | \"startsWith\" | \"endsWith\";\n readonly value: string;\n readonly negate?: boolean;\n }\n | { readonly kind: \"and\"; readonly operands: readonly SqlExpr[] }\n | { readonly kind: \"or\"; readonly operands: readonly SqlExpr[] }\n | { readonly kind: \"not\"; readonly operand: SqlExpr }\n /**\n * Correlated subquery test: `[NOT] EXISTS (SELECT …)`. The inner select\n * correlates to the outer scope through table-qualified `cmpCol` predicates;\n * its parameters merge into the statement's single parameter sequence in\n * render order. Relation filters (`some`/`every`/`none`/`is`/`isNot`)\n * compile to this shape.\n */\n | { readonly kind: \"exists\"; readonly select: SelectStatement; readonly negate?: boolean }\n /** Aggregate comparison — the HAVING predicate: `COUNT(\"col\") > $n`. */\n | { readonly kind: \"aggCmp\"; readonly op: ComparisonOp; readonly agg: AggRef; readonly value: unknown }\n /**\n * Scalar-list membership: `$n = ANY(\"col\")` — Prisma's `has`. Postgres only\n * (`capabilities.scalarArrays`); other dialects refuse at render time.\n */\n | { readonly kind: \"arrayHas\"; readonly column: ColRef; readonly value: unknown; readonly negate?: boolean }\n /** Scalar-list superset: `\"col\" @> $n` (one array param) — Prisma's `hasEvery`. Postgres only. */\n | { readonly kind: \"arrayContainsAll\"; readonly column: ColRef; readonly values: readonly unknown[] | string | NativeEnumArrayParameter | JsonListParameter }\n /** Scalar-list overlap: `\"col\" && $n` (one array param) — Prisma's `hasSome`. Postgres only. */\n | { readonly kind: \"arrayOverlaps\"; readonly column: ColRef; readonly values: readonly unknown[] | string | NativeEnumArrayParameter | JsonListParameter }\n /**\n * Scalar-list emptiness via `array_length(\"col\", 1) IS [NOT] NULL` — the v1\n * semantics kept deliberately: `empty: true` matches NULL **and** empty\n * arrays, `empty: false` matches only rows with at least one element.\n */\n | { readonly kind: \"arrayIsEmpty\"; readonly column: ColRef; readonly empty: boolean }\n /**\n * JSON path predicate. The path is always BOUND as a parameter (a `text[]`\n * on postgres, a `$.a.b[0]` path string on sqlite/mysql) — path segments\n * never become SQL text. `value` is the RAW JS operand; each dialect decides\n * its wire form (JSON.stringify for jsonb/json comparisons, LIKE patterns\n * for the string ops). `insensitive` applies to the string ops only.\n */\n | {\n readonly kind: \"jsonFilter\";\n readonly column: ColRef;\n readonly path: readonly (string | number)[];\n readonly op: JsonFilterOp;\n readonly value: unknown;\n readonly insensitive?: boolean;\n readonly negate?: boolean;\n /**\n * The column's postgres type: absent (or `jsonb`) for the default\n * `jsonb`, `json` for `Json @db.Json`. Postgres defines `=`, `<>` and\n * `@>` for jsonb only, so on a `json` column every op casts the\n * EXTRACTED value to jsonb (the string ops then read it as text), which\n * gives a jsonb column's answer. Sqlite and mysql have one JSON type\n * and ignore it.\n */\n readonly storage?: \"jsonb\" | \"json\";\n }\n /**\n * A bound extension fragment: literal text, bound parameters and quoted\n * identifiers in order (extensions.md §3 sql plane — trgm operators, rank\n * and distance terms). Parameters flow through the shared ParamCollector,\n * identifiers through dialect.quoteIdent — never hand-written.\n */\n | { readonly kind: \"fragment\"; readonly fragment: SqlFragmentSpec }\n /** Escape hatch for dialect-reviewed fragments. Text only — no parameters. */\n | { readonly kind: \"raw\"; readonly text: string };\n\n// ─── Projections ──────────────────────────────────────────────────\n\n/**\n * An aggregate projection.\n *\n * `countAll` renders `COUNT(*)`. The alias matters for portability: postgres\n * names the bare column `count`, sqlite and mysql name it `COUNT(*)` — callers\n * that must read the value back always pass an alias. Combined with a\n * non-empty `columns` list (grouped counts, `SELECT \"fk\", COUNT(*) … GROUP\n * BY \"fk\"`), it renders AFTER the columns.\n *\n * `one` renders the constant `1` — the conventional EXISTS projection; it\n * cannot be combined with a column list.\n *\n * `exists` asks whether the statement's own FROM and WHERE match a row:\n * `SELECT EXISTS (SELECT 1 FROM … WHERE …) AS \"alias\"` — one row, one\n * boolean-valued column (PostgreSQL `boolean`, SQLite and MySQL `0`/`1`). It\n * takes no column list, aggregate, grouping, order, paging, lock or join.\n */\nexport type SelectExpr =\n | { readonly kind: \"countAll\"; readonly alias?: string }\n | { readonly kind: \"one\" }\n | { readonly kind: \"exists\"; readonly alias: string };\n\n// ─── SET operations ───────────────────────────────────────────────\n\n/** Arithmetic applied to a column's current value in an UPDATE ... SET. */\nexport type SetOperator = \"increment\" | \"decrement\" | \"multiply\" | \"divide\";\n\n/**\n * An atomic update expression: `\"col\" = \"col\" <op> $n`.\n *\n * Recognised structurally inside `UpdateStatement.set`, so the marker key is\n * deliberately unlikely (`__op`). Three layers keep a user's JSON payload from\n * ever being mistaken for one: the Json codec stringifies JSON values before\n * they reach the AST, the query builder only emits this shape for numeric\n * fields, and {@link isSetOperation} demands only the documented marker keys.\n */\nexport type SetOperation = {\n readonly __op: SetOperator;\n readonly value: number | string | bigint;\n /** Decimal arithmetic needs a REAL operand on SQLite, even for integral text. */\n readonly numericType?: \"Decimal\";\n};\n\nconst SET_OPERATORS: readonly string[] = [\"increment\", \"decrement\", \"multiply\", \"divide\"];\n\n/** Narrow an UPDATE set value to an atomic {@link SetOperation}. */\nexport function isSetOperation(value: unknown): value is SetOperation {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return false;\n // Answered before the keys are listed: a `Bytes` value has one own key per byte.\n if (!Object.hasOwn(value, \"__op\")) return false;\n const keys = Object.keys(value);\n if (!keys.includes(\"__op\") || !keys.includes(\"value\")) return false;\n const candidate = value as { __op: unknown; value: unknown; numericType?: unknown };\n if (keys.length !== 2 && !(keys.length === 3 && keys.includes(\"numericType\") && candidate.numericType === \"Decimal\")) return false;\n return (\n typeof candidate.__op === \"string\" &&\n SET_OPERATORS.includes(candidate.__op) &&\n ((typeof candidate.value === \"number\" && Number.isFinite(candidate.value)) ||\n typeof candidate.value === \"string\" || typeof candidate.value === \"bigint\")\n );\n}\n\n/**\n * A scalar-list update expression (Prisma's `{ push: … }` on list columns):\n * `append` is one element (`\"col\" = array_append(\"col\", $n)`), `concat` an\n * array of elements (`\"col\" = \"col\" || $n`). Postgres only — the query builder\n * gates on `capabilities.scalarArrays` at build time and the renderer refuses\n * too. Same structural-marker discipline as {@link SetOperation}: the key is\n * unlikely, the shape exact, and Json payloads are stringified before they\n * could ever reach an UPDATE set.\n */\nexport type ListSetOperation = {\n readonly __listOp: \"append\" | \"concat\";\n readonly value: unknown;\n};\n\nconst LIST_SET_OPERATORS: readonly string[] = [\"append\", \"concat\"];\n\n/** Narrow an UPDATE set value to a {@link ListSetOperation}. */\nexport function isListSetOperation(value: unknown): value is ListSetOperation {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return false;\n // Answered before the keys are listed: a `Bytes` value has one own key per byte.\n if (!Object.hasOwn(value, \"__listOp\")) return false;\n const keys = Object.keys(value);\n if (keys.length !== 2 || !keys.includes(\"__listOp\") || !keys.includes(\"value\")) return false;\n const candidate = value as { __listOp: unknown };\n return typeof candidate.__listOp === \"string\" && LIST_SET_OPERATORS.includes(candidate.__listOp);\n}\n\n/**\n * Database-clock marker: renders the DIALECT's `now()` expression — plus an\n * optional offset in seconds (fractional OK) bound as a parameter — instead of binding a\n * client-side timestamp. Flows as a VALUES cell, an UPDATE SET value, or a\n * comparison operand; the runtime's public `dbNow()` sentinel compiles to\n * this marker for DateTime fields (leases, TTLs — anything that must trust\n * the database's clock, never the process's). Same structural-marker\n * discipline as {@link SetOperation}: unlikely key, exact shape.\n */\nexport type DbNowMarker = {\n readonly __dbNow: true;\n readonly offsetSeconds: number;\n};\n\n/** Build a {@link DbNowMarker}; `offsetSeconds` is finite seconds — fractional is legal (lease TTLs arrive as ttlMs / 1000). */\nexport function dbNowMarker(params: { offsetSeconds: number }): DbNowMarker {\n return { __dbNow: true, offsetSeconds: params.offsetSeconds };\n}\n\n/** Narrow a value to a {@link DbNowMarker}. */\nexport function isDbNowMarker(value: unknown): value is DbNowMarker {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return false;\n // A-05: every object cell (each Date of a createMany) is asked; one own-key\n // test rejects them before the key list is built.\n if (!Object.hasOwn(value, \"__dbNow\")) return false;\n const keys = Object.keys(value);\n if (keys.length !== 2 || !keys.includes(\"__dbNow\") || !keys.includes(\"offsetSeconds\")) return false;\n const candidate = value as { __dbNow: unknown; offsetSeconds: unknown };\n return (\n candidate.__dbNow === true &&\n typeof candidate.offsetSeconds === \"number\" &&\n Number.isFinite(candidate.offsetSeconds)\n );\n}\n\n// ─── Ordering ─────────────────────────────────────────────────────\n\n/** ORDER BY a column, with optional NULLS placement (native or emulated per dialect). */\nexport type OrderByColumn = {\n readonly column: ColRef;\n readonly direction: \"asc\" | \"desc\";\n /** NULLS placement; rendered natively or emulated per dialect. */\n readonly nulls?: \"first\" | \"last\";\n};\n\n/** ORDER BY an aggregate expression — grouped selects ordering by `COUNT(\"col\")`. */\nexport type OrderByAggregate = {\n readonly agg: AggRef;\n readonly direction: \"asc\" | \"desc\";\n};\n\n/**\n * ORDER BY a correlated scalar subquery — relation orderBy\n * (`orderBy: { posts: { _count: \"desc\" } }` → `(SELECT COUNT(*) …)`,\n * `orderBy: { posts: { _max: { createdAt: \"desc\" } } }` → `(SELECT MAX(…) …)`,\n * `orderBy: { author: { email: \"asc\" } }` → `(SELECT \"email\" …)`).\n * Portable: all three dialects order by scalar subqueries. The subquery\n * correlates to the outer scope through table-qualified `cmpCol` predicates,\n * exactly like `exists`; its parameters merge into the statement's single\n * sequence in render order.\n *\n * `nulls` places the NULL a missing to-one row or a parent without related\n * rows (under MIN/MAX/AVG/SUM) sorts as. Without it, NULL sorts at the\n * engine's native position. Postgres and sqlite render `NULLS FIRST|LAST`;\n * mysql renders the bare term when its native placement already matches, and\n * otherwise a leading `(<subquery>) IS NULL` term — the subquery then renders\n * twice and its parameters bind twice, in text order.\n */\nexport type OrderBySubquery = {\n readonly select: SelectStatement;\n /** A count behind a missing to-one row is zero, not NULL. */\n readonly coalesce?: 0;\n readonly direction: \"asc\" | \"desc\";\n readonly nulls?: \"first\" | \"last\";\n};\n\nexport type OrderTerm = OrderByColumn | OrderByAggregate | OrderBySubquery;\n\n// ─── Statements ───────────────────────────────────────────────────\n\n/**\n * One `LEFT JOIN LATERAL (…) AS alias ON true` clause aggregating a correlated\n * subquery into a single JSON value per outer row — the \"join\" relation-loading\n * strategy (postgres/pglite, and MySQL 8.0.14+ since lane J; gated on\n * `capabilities.lateralJoin` and rendered through `SqlDialect.lateralJson`).\n * MySQL renders positional rows only (`JSON_ARRAY`, `JSON_ARRAYAGG`, `ON\n * true`); its aggregate cannot order, so an ordered list level carries a\n * `select.rowNumber` without partition — rendered as the row's last slot.\n *\n * Renders (agg `jsonArray`):\n * `LEFT JOIN LATERAL (SELECT COALESCE(json_agg(to_json(\"__sub\".*)), '[]'::json)\n * AS \"columnAlias\" FROM (<select>) AS \"__sub\") AS \"alias\" ON true`\n * and (agg `jsonObject`):\n * `LEFT JOIN LATERAL (SELECT to_json(\"__sub\".*) AS \"columnAlias\"\n * FROM (<select>) AS \"__sub\") AS \"alias\" ON true`\n *\n * `to_json` over a subselect (not `json_build_object`) sidesteps postgres's\n * 100-argument function limit on wide models (v1 lesson); `json` rather than\n * `jsonb` because the value is transport only — jsonb's binary build + re-\n * serialization cost 2–3.7× the server time for identical decoded values.\n * The inner select's ORDER BY drives the aggregate's element order. Consumers\n * must run the codec table over the parsed JSON children: `to_json` turns\n * timestamps into strings and loses BigInt-ness (LEARNINGS).\n */\nexport type LateralJoin = {\n /** Join alias (`__lat_0`) — the outer projection selects `alias.columnAlias`. */\n readonly alias: string;\n /**\n * Column the aggregated JSON value is exposed under (`__rel_posts`). An\n * `aggregate` lateral exposes one column per entry of its select's\n * `aggregates` instead, under each entry's alias.\n */\n readonly columnAlias: string;\n /**\n * jsonArray: many rows; jsonObject: one row or NULL; count: a scalar COUNT(*)\n * lateral; aggregate: one ungrouped row of `aggregates` (no columns), which\n * an aggregate without GROUP BY returns even over zero rows.\n */\n readonly agg: \"jsonArray\" | \"jsonObject\" | \"count\" | \"aggregate\";\n /**\n * Object output is the SQL-layer default. Positional rows follow the exact\n * select.columns order, using explicit output names (never SELECT *).\n * Above JSON_TRANSPORT.chunkSize, a row is an array of fixed-size chunks;\n * the final chunk may be shorter. Scalar/list/Json field values stay in one\n * slot. Consumers must use the SAME projection to decode the payload.\n */\n readonly rowFormat?: \"object\" | \"positional\";\n /**\n * Positional rows only: output names of `select.columns` the subselect\n * projects for the statement's own use (an order key the aggregate's ORDER\n * BY reads, a key a nested lateral correlates on) but the JSON row leaves\n * out. The row is the remaining columns in `select.columns` order.\n */\n readonly hidden?: readonly string[];\n /**\n * `jsonObject` laterals only: output names of `select.columns` the lateral\n * exposes as typed columns of its own beside the JSON value (`\"alias\".\"name\"`\n * in the outer scope). The outer statement reads a key of the row from them\n * without parsing the JSON; they are SQL NULL when the lateral finds no row.\n */\n readonly expose?: readonly string[];\n /** The correlated child select — may reference outer columns via table-qualified refs. */\n readonly select: SelectStatement;\n};\n\n/**\n * One scalar subquery in a projection. The builder guarantees a single column\n * and at most one row. Hidden sort values stay inside derived tables rather\n * than becoming result fields. `coalesce` preserves a count across a missing\n * to-one hop.\n */\nexport type ScalarSubquery = {\n readonly alias: string;\n readonly select: SelectStatement;\n readonly coalesce?: 0;\n};\n\n/**\n * One correlated scalar `COUNT(*)` projected into a select list:\n * `(SELECT COUNT(*) FROM … WHERE <correlation>) AS \"alias\"` — the relation\n * `_count` of the round-trip campaign's R-03b, which saves the separate grouped\n * count statement. Portable: postgres, sqlite and mysql all evaluate a\n * correlated scalar subquery once per output row; the runtime wraps a paged\n * root in a derived table first, so the subqueries run only for the page.\n * The select must be ONE ungrouped `COUNT(*)` (`columns: []`, `selectExpr`\n * countAll, no grouping, paging, distinct or lock) — anything else is refused\n * at render. Its parameters join the statement's single sequence in text order\n * (the select list renders before FROM).\n */\nexport type CountSubquery = {\n /** Output column the count is exposed under (`__vibe_count_0`). */\n readonly alias: string;\n /** The correlated count select — references outer columns via table-qualified refs. */\n readonly select: SelectStatement;\n};\n\n/**\n * One `INNER JOIN \"table\" AS alias ON left = right [AND …]` clause — plain\n * equality joins only, portable across all dialects. Added for the\n * single-statement implicit-M2M load (child rows joined to their join-table\n * membership rows); extra join-table columns project through the statement's\n * `columns` list with a table qualifier + `alias`.\n */\nexport type InnerJoin = {\n readonly table: TableRef;\n /** Equality pairs ANDed into the ON clause; never empty. */\n readonly on: readonly { readonly left: ColRef; readonly right: ColRef }[];\n};\n\n// ─── Fix lane Q2 (D-03): derived-table LEFT JOIN ───\n\n/**\n * One `LEFT JOIN (<select>) AS \"alias\" ON \"alias\".\"k\" = \"outer\".\"c\" [AND …]`\n * clause — portable, equality ON pairs only. Built for the to-one relation\n * `orderBy` (`orderBy: { author: { email: \"asc\" } }`): the target's key and\n * sort columns ride a derived table under RESERVED aliases (`__vibe_ok0`,\n * `__vibe_ov0`), so the outer statement's unqualified column names can never\n * become ambiguous, and the outer ORDER BY names `\"alias\".\"__vibe_ov0\"`.\n * Every engine merges such a derived table into a plain join (measured:\n * postgres pulls it up into a hash/nested-loop left join, sqlite flattens it,\n * mysql merges it), so the planner may hash-join instead of evaluating a\n * correlated subquery per candidate row.\n *\n * The builder emits it only for links that match AT MOST ONE target row, so\n * the join keeps the parent row count. The derived select must alias every\n * projected column; its parameters (none today) join the statement's single\n * sequence where the clause renders (after `keyTable`, before\n * `lateralJoins`). A statement with a `rowLock` refuses it: postgres rejects\n * FOR UPDATE on the nullable side of an outer join, and mysql would lock the\n * joined rows too.\n */\nexport type LeftJoin = {\n /** Derived-table alias (`__ord1`). */\n readonly alias: string;\n /** The derived table — every projected column carries an `alias`. */\n readonly select: SelectStatement;\n /** Equality pairs ANDed into the ON clause; never empty. */\n readonly on: readonly { readonly left: ColRef; readonly right: ColRef }[];\n};\n\n/**\n * How one member of a {@link KeyTableJoin} tuple binds inside the derived\n * table. `value` binds the parameter as it is: it stays COERCIBLE, so a text\n * column's OWN collation decides `=` — the equality `col IN (?, …)` uses.\n * `integer` and `decimal` cast the parameter into the column's numeric family:\n * BigInt and Decimal values travel as strings, and a derived-table string\n * compared with a numeric column goes through a double (measured on mysql:\n * `9007199254740993` matched `9007199254740992`).\n *\n * `integer` renders `CAST(? AS SIGNED)`. `decimal` renders\n * `CAST(? AS DECIMAL(65, scale))` with the tested column's own scale: 65 is\n * MySQL's maximum precision, so the cast holds every value a\n * `DECIMAL(p, scale)` column can hold. A fixed `DECIMAL(65,30)` held only 35\n * integer digits and clipped a `Decimal(65, 0)` key onto its maximum, which\n * matched nothing (review finding 1); the column's own precision would clip a\n * wider value onto the column's maximum and pair it with a row it does not\n * equal (measured: `CAST('100000' AS DECIMAL(5,0))` is `99999`). `scale` is\n * 0–30, MySQL's range.\n *\n * `citext` (postgres only) renders `CAST($n AS citext)`: a postgres `citext`\n * key compares case-insensitively, and a bare VALUES parameter would be\n * `text`, whose `=` against a citext column is the case-sensitive text\n * operator. A VALUES cell has no column to infer a type from, so every member\n * of a postgres key table binds typed: `citext`, `text` (`CAST($n AS text)`,\n * a text or varchar column) or `integer` (`CAST($n AS bigint)`, exact against\n * any integer column) — any other member refuses on postgres. `text` is\n * postgres-only; mysql binds text members as `value`.\n */\nexport type KeyTableMember =\n | { readonly kind: \"value\" }\n | { readonly kind: \"integer\" }\n | { readonly kind: \"decimal\"; readonly scale: number }\n /** MySQL-only lossless temporal operands in mixed collation-aware key tuples. */\n | { readonly kind: \"timestamp\" }\n | { readonly kind: \"time\" }\n | { readonly kind: \"citext\" }\n | { readonly kind: \"text\" };\n\n/**\n * The batch's key tuples as a derived table, each tagged with its ORDINAL\n * (row `i` carries `i`), INNER JOINed on the tested columns — mysql:\n * `INNER JOIN (VALUES ROW(?, 0), ROW(?, 1)) AS \\`alias\\` (\\`__vibe_k0\\`, \\`ordinal\\`)\n * ON col = \\`alias\\`.\\`__vibe_k0\\``; postgres only over `citext` members\n * (`(VALUES (CAST($1 AS citext), 0), …)`, release 3.0 nested writes).\n * Member columns are named `__vibe_k<i>` (a reserved prefix, so unqualified\n * child columns never collide with them).\n *\n * Why it exists (EPIC R): a relation load used to stitch children to parents\n * by comparing decoded keys in JavaScript, while mysql's collations equate\n * spellings (`acme` = `Acme` = `ACME`, `cafe` = `Café`, `x ` = `x`) that\n * JavaScript keeps apart — the foreign key and the `IN` filter accepted the\n * child, the stitch dropped it. Joined this way the DATABASE pairs every child\n * row with every batch key it considers equal, and the projected ordinal names\n * the key; the join is also the membership filter.\n */\nexport type KeyTableJoin = {\n /** Derived-table alias (`__vibe_keys`); the ordinal projects as `alias.ordinalAlias`. */\n readonly alias: string;\n /** The statement's columns, compared member by member (`=`), in tuple order. */\n readonly columns: readonly ColRef[];\n /** How each member binds, in tuple order — see {@link KeyTableMember}. */\n readonly members: readonly KeyTableMember[];\n /** Encoded key tuples; never empty, each as long as `columns`. */\n readonly rows: readonly (readonly unknown[])[];\n /** Output name of the ordinal column. */\n readonly ordinalAlias: string;\n};\n\n/**\n * A `ROW_NUMBER() OVER (PARTITION BY … [ORDER BY …]) AS \"alias\"` projection,\n * appended after `columns` — the distinct emulation on dialects without\n * `DISTINCT ON` (sqlite ≥3.25, mysql ≥8.0 both have window functions): the\n * outer statement filters `alias = 1` on the derived table, restoring\n * SQL-side take/skip and bounded transfer (N10).\n */\nexport type RowNumberProjection = {\n readonly partitionBy: readonly ColRef[];\n /** Intra-partition order picking the representative row; may be empty. */\n readonly orderBy: readonly OrderTerm[];\n readonly alias: string;\n};\n\n/**\n * One window column of a select, rendered after `rowNumber`\n * (`SelectStatement.windows`). Together the two kinds let a statement say\n * which of its rows is the first to hold a key:\n *\n * - `ordinal`: `ROW_NUMBER() OVER ([ORDER BY …]) AS \"alias\"`, the row's\n * position among the rows of its query level, in `orderBy`, or in the order\n * the rows arrive when `orderBy` is empty (`OVER ()`).\n * - `firstOrdinal`: `MIN(<ordinal>) OVER (PARTITION BY …) AS \"alias\"`, the\n * smallest `ordinal` among the rows that share the partition columns. The\n * database's own equality groups them (NULLs together), whatever the\n * column's type or collation.\n *\n * A window is computed before the `ORDER BY` and `LIMIT` of its own query\n * level: number a page one level outside the select that cuts it.\n */\nexport type WindowColumn =\n | { readonly kind: \"ordinal\"; readonly alias: string; readonly orderBy: readonly OrderTerm[] }\n | { readonly kind: \"firstOrdinal\"; readonly alias: string; readonly ordinal: ColRef; readonly partitionBy: readonly ColRef[] };\n\n/**\n * One column of a `SelectStatement.fromRow`: an outer column under the name\n * the row gives it.\n */\nexport type RowSourceColumn = { readonly column: ColRef; readonly alias: string };\n\n// ─── Common table expressions and keys read from built JSON ───────\n\n/**\n * One common table expression of a select (`SelectStatement.with`):\n * `\"name\" AS [MATERIALIZED] (<select>)`. `materialized` pins the table to one\n * evaluation whatever the number of references: required when two readers\n * must see the same rows of a select whose rows are numbered in arrival\n * order.\n */\nexport type CommonTable = {\n readonly name: string;\n readonly select: SelectStatement;\n readonly materialized?: true;\n};\n\n/**\n * The place of one value in a positional JSON row ({@link LateralJoin}\n * `rowFormat: \"positional\"`): its index among the row's `width` values. A row\n * wider than `JSON_TRANSPORT.chunkSize` is an array of chunks, so the renderer\n * needs both numbers to address the value.\n */\nexport type JsonSlot = { readonly index: number; readonly width: number };\n\n/**\n * One step of a walk through JSON a statement built: into one value of a\n * positional row, or over every element of a list.\n */\nexport type JsonStep = { readonly kind: \"slot\"; readonly slot: JsonSlot } | { readonly kind: \"elements\" };\n\n/**\n * One key column of a {@link JsonKeys} source: `token` is the output name of\n * the key's text as the JSON rows hold it (at `slot` of the row the walk\n * ends at), `alias` the output name of the same key cast back to the\n * column's own type (`member`, typed like a key-list member).\n */\nexport type JsonKeyColumn = {\n readonly slot: JsonSlot;\n readonly token: string;\n readonly alias: string;\n readonly member: KeyListMember;\n};\n\n/**\n * The distinct keys of the rows a JSON walk reaches, as a derived-table FROM\n * (`SelectStatement.fromJsonKeys`). `source` is a JSON column of a common\n * table of the statement (`source.table` names it); `steps` walk from that\n * value to positional rows, each of which holds the text of its key columns\n * in the slots `keys` name. Renders on PostgreSQL as\n *\n * `(SELECT \"__vibe_k\".\"<token>\", CAST(\"__vibe_k\".\"<token>\" AS <type>) AS \"<alias>\"\n * FROM (SELECT DISTINCT <row> ->> <slot> AS \"<token>\"\n * FROM json_array_elements((SELECT json_agg(<list>) FROM \"<table>\" AS \"__vibe_s\" WHERE <list> IS NOT NULL))\n * AS \"__vibe_d0\"(\"value\")\n * CROSS JOIN LATERAL json_array_elements(\"__vibe_d0\".\"value\") AS \"__vibe_e0\"(\"value\")) AS \"__vibe_k\")\n * AS \"<table.name>\"`\n *\n * Each list on the way is read through ONE value that holds that level's\n * lists of every row (an uncorrelated `json_agg`, planned once), and a\n * second list on the way wraps the first walk the same way. PostgreSQL\n * estimates every `json_array_elements` call at 100 rows whatever it reads:\n * walked row by row, the estimate is rows x 100 per list on the way, and two\n * lists over 2 000 rows were priced past the cost where the server's JIT\n * compiler optimizes (measured: 249 ms against 94 ms with JIT off). Read\n * through one value, each list on the way is 100 x 100 rows at any depth and\n * any row count. The price: that one value holds a level's lists of the whole\n * statement, so it is bound by PostgreSQL's 1 GB limit on a single value.\n *\n * The database groups the keys by their text and types each one from that\n * text with the key-list's base types (`postgresKeyListElementType`), so the\n * laterals joined to the derived table compare `child.\"fk\" = \"<table.name>\".\"<alias>\"`\n * under the column's own operator and index. A row the walk does not reach\n * (a missing to-one, an empty list) contributes nothing or a NULL key.\n * Needs the `sharedListDictionary` capability; never together with another\n * FROM form, a `table.alias` or a `rowLock`.\n */\nexport type JsonKeys = {\n readonly source: ColRef;\n readonly steps: readonly JsonStep[];\n readonly keys: readonly JsonKeyColumn[];\n};\n\n/**\n * The rows of a common table, read back through arrays, as a FROM\n * (`SelectStatement.fromTableArrays`): `columns` of the table `source`, each\n * under the output name `alias`, in the order of the column `orderBy`.\n * Renders on PostgreSQL as\n *\n * `(SELECT array_agg(\"<source>\".\"<name>\" ORDER BY \"<source>\".\"<orderBy>\") AS \"__vibe_a0\", …\n * FROM \"<source>\") AS \"__vibe_a\"\n * CROSS JOIN LATERAL unnest(\"__vibe_a\".\"__vibe_a0\", …) AS \"<table.name>\"(\"<alias>\", …)`\n *\n * It returns the rows a plain read of the table would, typed as the table's\n * columns (no text on the way), and exists for two things the plain read\n * does not give. The estimate: PostgreSQL expects 10 rows from `unnest` of an\n * array it cannot see, while it expects one row per input row from a table\n * grouped by a key it can trace to a unique column, and every lateral joined\n * to the rows is priced once per expected row (measured: 20 000 rows of 10\n * keys priced at 3.1 million against 129 000, which decides whether the\n * server's JIT compiler runs). The order: laterals joined to the rows read\n * their tables in `orderBy` order, not in a hash table's (measured: the same\n * 20 000 index lookups in 440 ms against 1 066 ms). Needs the `carrierRows`\n * capability on a dialect whose `lateralJson.carriedLists` is `\"firstRow\"`;\n * never together with another FROM form, a `table.alias` or a `rowLock`.\n */\nexport type TableArrays = {\n readonly source: string;\n readonly columns: readonly { readonly name: string; readonly alias: string }[];\n readonly orderBy: string;\n};\n\n/**\n * A JSON list a statement returns on its first row only\n * (`SelectStatement.firstRowLists`): `list` describes the list as a\n * `jsonArray` lateral does (its select, row format and column alias; the join\n * alias is unused), `ordinal` is the statement's row ordinal (see\n * {@link WindowColumn} `ordinal`). Renders as a projection:\n *\n * `CASE WHEN <ordinal> = 1 THEN (SELECT COALESCE(json_agg(<row>), '[]'::json)\n * FROM (<list.select>) AS \"__sub\") END AS \"<list.columnAlias>\"`\n *\n * The select must not read the statement's own row: an uncorrelated scalar\n * subquery is planned and costed once and runs once, when the first row asks\n * for it. A lateral gated on the ordinal returns the same rows, but\n * PostgreSQL prices it once per row of the statement (measured: 500 rows\n * priced the list 500 times, the estimate passed `jit_above_cost` and the\n * statement spent 100 ms compiling against 5 ms running). Every other row\n * holds SQL NULL. Needs the `sharedListDictionary` capability.\n */\nexport type FirstRowList = { readonly ordinal: ColRef; readonly list: LateralJoin };\n\n// ─── Fix lane Q1 (round 3, DB-01): per-key page ──────────────────\n\n/**\n * A PER-KEY PAGE of one child table as a derived-table FROM\n * (`SelectStatement.keyPage`): for every listed key tuple, the child rows\n * whose key columns equal it, ordered by `select.orderBy` and cut by\n * `select.limit`/`select.offset` — each key's OWN page, plus a rank column\n * (`rankAlias`) that orders the rows inside their key. The paged include's\n * `ROW_NUMBER() OVER (PARTITION BY key …)` window returns the same rows but\n * numbers EVERY child of every listed key first; this form reads one page of\n * primary keys per key through an index on (key columns, order columns),\n * then each page row once by its primary key.\n *\n * Rendered per `SqlDialect.keyPageStrategy`:\n * - `lateral` (postgres): `unnest($1::<type>[], …) AS \"__vibe_keys\"\n * (\"__vibe_k0\", …) CROSS JOIN LATERAL (SELECT <identity>, ROW_NUMBER() OVER\n * (PARTITION BY <key> ORDER BY <order>) AS <rank> FROM <table> WHERE <key> =\n * \"__vibe_keys\".\"__vibe_k<i>\" … ORDER BY <order> LIMIT … OFFSET …) AS\n * \"__vibe_ids\" INNER JOIN <table> AS \"__vibe_page\" ON <identity> pairs`.\n * - `inLimit` (sqlite, which has no LATERAL): the key tuples as `(VALUES …)`\n * (columns `column1`, `column2`, …, as SQLite names a VALUES clause's\n * columns) joined to `<table> AS \"__vibe_page\"` ON `(<identity>) IN (SELECT\n * <identity> … WHERE <key> = \"__vibe_keys\".\"column<i>\" … ORDER BY … LIMIT …)`,\n * the rank re-derived over the fetched page (`ROW_NUMBER() OVER (PARTITION\n * BY <key> ORDER BY <order>)`): its values differ from the window's, its\n * order inside a key does not.\n * - `window` (mysql): refused with `VIBE_UNSUPPORTED_CAPABILITY` — measured\n * no gain there; the runtime keeps the window.\n *\n * The caller guarantees what makes the page equal to the window's: the order\n * is total inside a key (the identity columns are among the key and order\n * columns), the key tuples are distinct and compare exactly (no folding\n * collation). Members bind like the key-list filter's (`KeyListMember`).\n */\nexport type KeyPage = {\n /** How each key member binds, in member order (postgres: one typed array each). */\n readonly members: readonly KeyListMember[];\n /** Encoded, distinct key tuples; never empty, each `members.length` long. */\n readonly rows: readonly (readonly unknown[])[];\n /** The child columns each key member equals, in member order (unqualified). */\n readonly keyColumns: readonly ColRef[];\n /** The child's primary-key columns (unqualified) — each page row is read once by them. */\n readonly identity: readonly ColRef[];\n /**\n * ONE key's page: the child `table` (no alias), the projected `columns`\n * (unqualified; transforms and aliases render as usual), an optional extra\n * `where`, the non-empty `orderBy` (plain column terms), `limit`/`offset`.\n * Any other member is refused.\n */\n readonly select: SelectStatement;\n /** Output name of the rank column. */\n readonly rankAlias: string;\n};\n\n/**\n * Statement-count pass EPIC 4 (round-3 ST-07): bound key tuples as the FROM\n * of a select (`SelectStatement.fromKeys`) — a derived table named\n * `table.name` whose columns are `columns`, one row per tuple. The write\n * follow-up puts it where the parent table would be: the find path's laterals\n * correlate to `\"<table.name>\".\"<column>\"` exactly as over the table, but read\n * the RETURNED key values instead of the parent row (a deleted row, or a\n * native-RLS parent whose SELECT policy the per-relation loads never met).\n *\n * Renders where `SqlDialect.keyListStrategy` is `unnest` (postgres) as the\n * typed form of a `VALUES` list — one array per column, typed like the\n * key-list filter's members (`postgresKeyListElementType`), so the text does\n * not depend on the tuple count: `FROM unnest($1::text[], $2::int4[]) AS\n * \"Post\" (\"id\", \"authorId\")`. A `DateTime` member without a declared native\n * type (`keyListBindsUntypedRows`) and every other dialect refuse with\n * `VIBE_UNSUPPORTED_CAPABILITY` — those dialects have no lateral joins either.\n */\nexport type KeyRows = {\n /** Output column names of the derived table, in member order. */\n readonly columns: readonly string[];\n /** How each column binds, in column order — see {@link KeyListMember}. */\n readonly members: readonly KeyListMember[];\n /** Encoded tuples; never empty, each exactly `columns.length` long. */\n readonly rows: readonly (readonly unknown[])[];\n};\n\n/**\n * `GROUP BY GROUPING SETS (…)` over a select's `groupBy` columns. Each set\n * lists indexes into `groupBy`; `()` is the grand total. The projection gains\n * `CASE GROUPING(<every groupBy column>) WHEN <mask> THEN <set index> … END AS\n * \"<indexAlias>\"` after the aggregates, so a row names the set that produced\n * it, and an ORDER BY term may name `indexAlias` as a bare column (an output\n * column). Dialect `groupingSets` capability: `\"groupingSets\"` renders any\n * list, `\"rollup\"` only the rollup chain of `groupBy` in order (`GROUP BY a,\n * b WITH ROLLUP`), `\"none\"` refuses.\n */\nexport type GroupingSets = {\n readonly sets: readonly (readonly number[])[];\n readonly indexAlias: string;\n};\n\nexport type SelectStatement = {\n readonly kind: \"select\";\n /**\n * Common table expressions, rendered ahead of the select (`WITH a AS (…),\n * b AS (…) SELECT …`) and bound first, in order. The statement and the\n * tables after it read a table by its name as a plain `table`. Only on the\n * outermost select of a statement; needs the `sharedListDictionary`\n * capability. See {@link CommonTable}.\n */\n readonly with?: readonly CommonTable[];\n readonly table: TableRef;\n /** Empty array renders as `SELECT *` (unless `selectExpr` replaces it). */\n readonly columns: readonly ColRef[];\n /**\n * Aggregate projection. Replaces the column list when `columns` is empty;\n * a `countAll` with columns renders after them (grouped counts).\n */\n readonly selectExpr?: SelectExpr;\n /**\n * Aliased aggregate projections (`AVG(\"col\") AS \"_avg__col\"`), rendered\n * after `columns` — the aggregate/groupBy/count-select shapes. Cannot be\n * combined with `selectExpr`.\n */\n readonly aggregates?: readonly AggSelect[];\n /** Correlated `COUNT(*)` subqueries, rendered after `aggregates` — see {@link CountSubquery}. */\n readonly countSubqueries?: readonly CountSubquery[];\n /** Scalar values projected after count subqueries and before a row number. */\n readonly scalarSubqueries?: readonly ScalarSubquery[];\n /**\n * `SELECT DISTINCT ON (cols)` — postgres only (`capabilities.distinctOn`;\n * other dialects refuse at render time and the runtime emulates client-side\n * instead). ORDER BY must lead with these columns; the query builder\n * guarantees that arrangement.\n */\n readonly distinctOn?: readonly ColRef[];\n /**\n * Plain `SELECT DISTINCT` over the whole projection — every dialect. The\n * query builder sets it only where it returns exactly the rows its\n * `ROW_NUMBER()` distinct emulation would (sqlite/mysql, value-exact keys,\n * projection equal to the distinct fields); never together with\n * `distinctOn` (the renderer refuses the pair).\n */\n readonly distinct?: true;\n /**\n * Derived-table FROM: renders `FROM (<fromSelect>) AS \"<table.name>\"` —\n * `table.name` is the subquery ALIAS and `table.alias` must be unset. Used\n * by aggregate-over-a-subset shapes (`aggregate({ take, skip, orderBy })`).\n */\n readonly fromSelect?: SelectStatement;\n /** Lateral JSON-aggregation joins — postgres and MySQL 8.0.14+, see {@link LateralJoin}. */\n readonly lateralJoins?: readonly LateralJoin[];\n /** Plain equality INNER JOINs — portable, see {@link InnerJoin}. */\n readonly innerJoins?: readonly InnerJoin[];\n /** Key-table join, rendered after `innerJoins` — mysql only, see {@link KeyTableJoin}. */\n readonly keyTable?: KeyTableJoin;\n /** Fix lane Q2 (D-03): derived-table LEFT JOINs, rendered after `keyTable` — see {@link LeftJoin}. */\n readonly leftJoins?: readonly LeftJoin[];\n /** ROW_NUMBER window projection — see {@link RowNumberProjection}. */\n readonly rowNumber?: RowNumberProjection;\n /** Window columns, rendered after `rowNumber` — see {@link WindowColumn}. */\n readonly windows?: readonly WindowColumn[];\n /** JSON lists of the first row, rendered after `windows` — see {@link FirstRowList}. */\n readonly firstRowLists?: readonly FirstRowList[];\n /**\n * Every column of the statement's FROM, ahead of the other projections:\n * `SELECT \"<from>\".*, …`. With `fromSelect` and an empty `columns` list (a\n * level that adds window columns to the level below it re-exposes that\n * level's columns without naming each one again), or over a common table\n * of the statement's own `with`, read under `table.alias ?? table.name`,\n * where the other projections follow it.\n */\n readonly allColumns?: true;\n /**\n * Derived-table FROM of exactly ONE row built from outer columns: renders\n * `FROM (SELECT <column> AS \"<alias>\", …) AS \"<table.name>\"`. Inside a\n * lateral it gives outer values the column names of a table row, so the\n * laterals joined to it correlate as they would to that table's row\n * (`child.\"fk\" = \"<table.name>\".\"id\"`) and the table is not read again.\n * Needs the `carrierRows` capability; never together with `fromSelect`,\n * `keyPage`, `fromUnion`, `fromKeys`, a `table.alias` or a `rowLock`.\n */\n readonly fromRow?: readonly RowSourceColumn[];\n /**\n * Derived-table FROM over the distinct, typed keys of a JSON walk, named\n * `table.name` — see {@link JsonKeys}.\n */\n readonly fromJsonKeys?: JsonKeys;\n /**\n * FROM over the rows of a common table read back through arrays, named\n * `table.name` — see {@link TableArrays}.\n */\n readonly fromTableArrays?: TableArrays;\n /**\n * Fix lane Q1 (DB-01): derived-table FROM over a per-key page — renders\n * `FROM (<per-key page>) AS \"<table.name>\"` like `fromSelect` (and never\n * together with it); see {@link KeyPage}.\n */\n readonly keyPage?: KeyPage;\n /**\n * Fix lane Q2 (round 3, DB-07): derived-table FROM over a `UNION ALL` of\n * branch selects — renders `FROM (SELECT * FROM (<branch 0>) AS\n * \"__vibe_u0\" UNION ALL SELECT * FROM (<branch 1>) AS \"__vibe_u1\" …) AS\n * \"<table.name>\"`. Each branch keeps its own ORDER BY and LIMIT: wrapped in\n * its own derived table, a limited branch is valid on all three engines\n * (SQLite refuses ORDER BY/LIMIT on a bare compound member). At least two\n * branches; each a plain `SELECT <columns> FROM <table> [WHERE] [ORDER BY]\n * [LIMIT]` projecting the same output names in the same order; never\n * together with `fromSelect`, `keyPage` or a `table.alias`. Parameters bind\n * branch by branch, in text order.\n */\n readonly fromUnion?: readonly SelectStatement[];\n /**\n * Statement-count pass EPIC 4 (ST-07): derived-table FROM over bound key\n * tuples, named `table.name` with the listed column names — see\n * {@link KeyRows}. Never together with `fromSelect`, `keyPage`, `fromUnion`,\n * a `table.alias` or a `rowLock`.\n */\n readonly fromKeys?: KeyRows;\n readonly where?: SqlExpr;\n readonly groupBy?: readonly ColRef[];\n /** Grouping sets over `groupBy` — see {@link GroupingSets}. */\n readonly groupingSets?: GroupingSets;\n /** HAVING predicate — grouped selects; may contain `aggCmp` expressions. */\n readonly having?: SqlExpr;\n readonly orderBy?: readonly OrderTerm[];\n readonly limit?: number;\n readonly offset?: number;\n /**\n * Row-locking read (`SELECT … FOR UPDATE SKIP LOCKED`) — see {@link RowLock}.\n * The internal read-before-write overlays (dialects without RETURNING) set\n * the plain `{ strength: \"update\", wait: \"wait\" }` lock. Rendered only where\n * the dialect names the clause (`dialect.rowLockSyntax`); sqlite has none and\n * needs none — its write transactions already exclude each other.\n */\n readonly rowLock?: RowLock;\n};\n\n/**\n * The lock a locking read takes: one strength, one wait policy. Both members\n * are REQUIRED here — defaulting happens once, in the query builder, so the\n * rendered SQL is a function of the AST alone.\n *\n * `of` narrows the lock to named FROM items (`FOR UPDATE OF \"Parent\"`). The\n * join relation strategy needs it: its statement also reads child rows through\n * `LEFT JOIN LATERAL` subqueries, and an unnarrowed clause is refused by\n * postgres (\"FOR UPDATE is not allowed with aggregate functions\", from the\n * children's `json_agg`). With `of` naming the statement's own table only the\n * parent rows are locked. Each name must be the statement's table alias, or its\n * unqualified table name when it has no alias — the only FROM item the AST\n * names; the renderer refuses anything else. Dialects without a locking-read\n * clause render nothing, as for a lock without `of`.\n */\nexport type RowLock = {\n readonly strength: RowLockStrength;\n readonly wait: RowLockWaitPolicy;\n readonly of?: readonly string[];\n};\n\n/**\n * Sentinel VALUES cell: render the `DEFAULT` keyword instead of a placeholder\n * (M4) — a heterogeneous createMany row that omits a field lets the COLUMN\n * default apply (or NULL on a defaultless nullable column), exactly like a\n * single-row insert that omits it. Postgres/mysql only\n * (`dialect.rowDefaultKeyword`); sqlite groups rows instead.\n */\nexport const SQL_DEFAULT_CELL: { readonly __sqlDefault: true } = Object.freeze({ __sqlDefault: true });\n\n/**\n * Sentinel update-arm cell: the column keeps its current value —\n * `` `col` = `table`.`col` `` (V8, the insert-if-missing upsert). Valid only in\n * an {@link OnConflictUpdate} `update` set, where MySQL's `ON DUPLICATE KEY\n * UPDATE` needs at least one assignment: a self-assignment changes nothing on a\n * duplicate and, unlike `INSERT IGNORE`, leaves every other error an error.\n * Refused in a plain UPDATE's SET list.\n */\nexport const SQL_KEEP_CELL: { readonly __sqlKeep: true } = Object.freeze({ __sqlKeep: true });\n\n/** Is this update cell the {@link SQL_KEEP_CELL} sentinel? */\nexport function isSqlKeepCell(value: unknown): boolean {\n return value === SQL_KEEP_CELL;\n}\n\n/** Is this VALUES cell the {@link SQL_DEFAULT_CELL} sentinel? */\nexport function isSqlDefaultCell(value: unknown): boolean {\n return value === SQL_DEFAULT_CELL;\n}\n\n/**\n * VALUES/SET cell carrying a Json column's parameter (the codec's JSON text).\n *\n * Why it exists: OID-typed drivers (bun:sql) resolve each parameter's postgres\n * type and re-serialize the JS value AS that type — a pre-stringified Json\n * param bound straight into a bare jsonb slot arrives DOUBLE-ENCODED (a jsonb\n * string holding the document; live-proven on Bun 1.3.14). The postgres\n * renderer pins the parameter's type instead (`$n::text::jsonb`,\n * `SqlDialect.jsonParamCast`), so every driver sends the text through and the\n * SERVER parses it; text-param drivers (node-postgres, pglite) are unaffected.\n * Sqlite/mysql render the bare placeholder — their Json transport is already\n * plain text. The COLLECTED parameter is the plain text either way: this\n * wrapper never crosses the wire.\n *\n * `storage: \"json\"` marks a postgres `json` column (`Json @db.Json`): the cell\n * renders `$n::text::json`, so the column stores the text as written (key\n * order and spelling kept) instead of jsonb's normalized text (release-3.0\n * D3). Absent = jsonb; dialects without a param cast ignore it.\n */\nexport type JsonParamCell = { readonly __jsonParam: true; readonly text: string; readonly storage?: \"json\" };\n\n/** Wrap a Json column's encoded (stringified) parameter for cast-site rendering. */\nexport function jsonParamCell(params: { text: string; storage?: \"json\" }): JsonParamCell {\n return params.storage === \"json\" ? { __jsonParam: true, text: params.text, storage: \"json\" } : { __jsonParam: true, text: params.text };\n}\n\n/** Is this VALUES/SET cell a {@link JsonParamCell}? */\nexport function isJsonParamCell(value: unknown): value is JsonParamCell {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as { __jsonParam?: unknown }).__jsonParam === true\n );\n}\n\n/**\n * Reference to the row PROPOSED for insertion, inside an upsert's update arm:\n * `excluded.\"col\"` on postgres/sqlite, `` `new`.`col` `` on mysql's row-alias\n * form (`SqlDialect.excludedRowRef`). It is a COLUMN REFERENCE, not a\n * parameter — it names the value already bound in this statement's VALUES\n * list, which is what lets ONE batched upsert write each conflicting row's own\n * incoming values without binding them a second time.\n */\nexport type ExcludedRef = { readonly __excluded: true; readonly column: string };\n\n/** Reference the incoming row's `column` from inside an upsert update arm. */\nexport function excludedRef(params: { column: string }): ExcludedRef {\n return { __excluded: true, column: params.column };\n}\n\n/** Is this SET cell an {@link ExcludedRef}? */\nexport function isExcludedRef(value: unknown): value is ExcludedRef {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as { __excluded?: unknown }).__excluded === true\n );\n}\n\n/**\n * One RETURNING column: a bare column name renders `\"col\"`; `castText` renders\n * a dialect text cast (postgres `::text`, sqlite `CAST AS TEXT`) for lossless\n * transport, including timestamps and postgres arrays. `jsonText`\n * applies the dialect's JSON text projection, as {@link ColRef.transform} does\n * for SELECT. Dialects without RETURNING still omit the clause and flag it.\n */\nexport type ReturningColumn =\n | string\n | { readonly name: string; readonly castText: true }\n | { readonly name: string; readonly transform: \"jsonText\" }\n | CaptureReturningColumn\n | OtherRowReturningColumn\n | ServerVersionReturningColumn;\n\n/**\n * The server's `server_version_num` as text, exposed as `alias`:\n * `pg_catalog.current_setting('server_version_num') AS \"alias\"`. Rides a write\n * whose client does not know the server version yet, so the next statement can\n * take the form that version allows without a read of its own. Dialects with\n * the `rowCapture` capability only (the version decides whether it applies).\n */\nexport type ServerVersionReturningColumn = {\n readonly serverVersion: true;\n readonly alias: string;\n};\n\n/**\n * A RETURNING column read from a row OTHER than the one the statement wrote,\n * exposed as `alias` and projected like the written row's own column\n * (`projection`), so one codec decodes both:\n *\n * - `from: \"old\"` — the row as it was before the statement (capability\n * `rowCapture`, PostgreSQL 18): `old.\"col\" AS \"alias\"`, NULL in every column\n * for a row the statement inserted;\n * - `from: { source }` — the joined source of an `UPDATE … FROM` by its alias\n * (capability `returningReadsJoinedSource`): `\"source\".\"col\" AS \"alias\"`.\n */\nexport type OtherRowReturningColumn = {\n readonly from: \"old\" | { readonly source: string };\n readonly name: string;\n readonly alias: string;\n readonly projection?: \"castText\" | \"jsonText\";\n};\n\n/**\n * A row-capture RETURNING column (`$transaction(…, { capture })`, dialects with\n * the `rowCapture` capability: PostgreSQL 18, where RETURNING names the row\n * before the statement `old` and the row after it `new`):\n *\n * - `\"old\"` / `\"new\"`: `old.\"col\"::text AS \"alias\"` / `new.\"col\"::text AS \"alias\"`,\n * the value as text so every type survives exactly (`old` is all NULL for an\n * inserted row, `new` for a deleted one);\n * - `\"inserted\"`: `(old.\"col\" IS NULL) AS \"alias\"` — the arm of an `INSERT …\n * ON CONFLICT DO UPDATE` row, true when it was inserted (`col` must be a\n * column no stored row holds NULL in: a primary-key column);\n * - `\"old\"` / `\"new\"` with `hop`: the related row's column, read in the same\n * statement — `(SELECT \"__vibe_h\".\"col\"::text FROM \"Related\" AS \"__vibe_h\"\n * WHERE \"__vibe_h\".\"id\" = new.\"relatedId\") AS \"alias\"` (see {@link CaptureHop});\n * - `\"key\"`: `old.\"col\" AS \"alias\"` in the column's own type, for a chain's\n * {@link CaptureCascade} to match child rows on;\n * - `\"cascade\"` ({@link CaptureCascadeReturningColumn}): the images of the\n * child rows a referential action of this row changes.\n */\nexport type CaptureReturningColumn =\n | {\n readonly capture: \"old\" | \"new\" | \"inserted\" | \"key\";\n readonly name: string;\n readonly alias: string;\n /** With `\"old\"` / `\"new\"`: read `name` from the related row instead of this one. */\n readonly hop?: CaptureHop;\n }\n | CaptureCascadeReturningColumn;\n\n/**\n * A to-one hop of a capture cell: the row of `table` whose `on[i].target`\n * columns equal the reading row's `on[i].source` columns. The target columns\n * must be a unique key (a scalar subquery that found two rows would fail the\n * statement); no row, or a NULL source column, reads NULL.\n */\nexport type CaptureHop = {\n readonly table: TableRef;\n readonly on: readonly { readonly target: string; readonly source: string }[];\n};\n\n/** One cell of a {@link CaptureCascade} image: a child column, or a column of its related row. */\nexport type CaptureCell = {\n readonly name: string;\n readonly hop?: CaptureHop;\n};\n\n/**\n * The distinct images of the child rows of `table` whose `on[i].child` columns\n * equal a written parent row's `on[i].parent` columns: `(SELECT\n * array_agg(\"__vibe_i\")::text FROM (SELECT DISTINCT ARRAY[<cells>] AS \"__vibe_i\"\n * FROM \"Child\" AS \"__vibe_c\" WHERE <match> LIMIT $n) AS \"__vibe_d\")`, NULL when\n * no child matched. Read inside the parent's statement, whose snapshot still\n * holds the rows its foreign keys' referential actions remove or rewrite at\n * the statement's end. `limit` is bound as a parameter.\n */\nexport type CaptureCascade = {\n readonly table: TableRef;\n readonly on: readonly { readonly child: string; readonly parent: string }[];\n readonly cells: readonly CaptureCell[];\n readonly limit: number;\n};\n\n/**\n * A per-row {@link CaptureCascade} in RETURNING: `parent` columns are read from\n * `old.` (`\"__vibe_c\".\"child\" = old.\"parent\"`).\n */\nexport type CaptureCascadeReturningColumn = {\n readonly capture: \"cascade\";\n readonly alias: string;\n readonly cascade: CaptureCascade;\n};\n\n/** The column name a {@link ReturningColumn} exposes in the result row. */\nexport function returningColumnName(column: ReturningColumn): string {\n return typeof column === \"string\" ? column : \"capture\" in column || \"from\" in column || \"serverVersion\" in column ? column.alias : column.name;\n}\n\n/** Is this RETURNING column read from another row ({@link OtherRowReturningColumn})? */\nexport function isOtherRowReturningColumn(column: ReturningColumn): column is OtherRowReturningColumn {\n return typeof column !== \"string\" && \"from\" in column;\n}\n\n/** Is this RETURNING column a row-capture column ({@link CaptureReturningColumn})? */\nexport function isCaptureReturningColumn(column: ReturningColumn): column is CaptureReturningColumn {\n return typeof column !== \"string\" && \"capture\" in column;\n}\n\nexport type InsertStatement = {\n readonly kind: \"insert\";\n readonly table: TableRef;\n readonly columns: readonly string[];\n /** Row values aligned to `columns` — deterministic parameter order. */\n readonly rows: readonly (readonly unknown[])[];\n /** Upsert clause: ON CONFLICT (pg/sqlite) or ON DUPLICATE KEY (mysql). */\n readonly onConflict?: OnConflictClause;\n /** Rendered as RETURNING where the dialect supports it, else omitted+flagged. */\n readonly returning?: readonly ReturningColumn[];\n /**\n * Bind the rows as ONE typed array per column instead of one parameter per\n * value (`SqlDialect.bulkInsertForm` `\"unnest\"`, postgres): `INSERT INTO t\n * (\"a\", \"b\") SELECT \"c1\", \"c2\" FROM unnest($1::text[], $2::int4[]) WITH\n * ORDINALITY AS \"__vibe_rows\" (\"c1\", \"c2\", \"ord\") ORDER BY \"ord\"`. The text\n * is the same for 2 rows and for 3 000, and the statement binds one parameter\n * per column. `ORDER BY \"ord\"` keeps input order (sequence values, the\n * `ON CONFLICT DO NOTHING` winner).\n *\n * One entry per column, in `columns` order: the column's DECLARED type facts\n * (see {@link KeyListMember}; a `Json` entry names its storage through\n * `nativeType`). Each array binds the BASE type (`varchar`, never\n * `varchar(191)` — an explicit modifier cast truncates silently), so the\n * INSERT's own assignment applies the column's length and precision exactly\n * as it does for a VALUES parameter. `rows` stays row-major: the renderer\n * transposes it. Every cell is a plain value, SQL NULL or a\n * {@link JsonParamCell} — never `DEFAULT` or the database clock (the query\n * builder keeps VALUES for those; the renderer refuses them).\n */\n readonly unnest?: readonly KeyListMember[];\n};\n\n/** Conflicting rows are updated with these column values. */\nexport type OnConflictUpdate = {\n /** Conflict target columns (ignored by the mysql form). */\n readonly columns: readonly string[];\n /**\n * Named-constraint target: `ON CONFLICT ON CONSTRAINT \"name\" DO UPDATE`.\n * Postgres only; replaces the column-list target when present.\n */\n readonly constraint?: string;\n /**\n * Partial-index arbiter predicate, RAW SQL: `ON CONFLICT (cols) WHERE pred\n * DO UPDATE …` (postgres/sqlite; requires `columns`). Raw for the same\n * reason {@link OnConflictDoNothing.conflictWhere} is — both engines match\n * the clause against the index's OWN stored predicate structurally, so a\n * bound parameter could never match and the text mirrors the schema\n * declaration byte-for-byte. Mysql's ODKU names no target and refuses it.\n */\n readonly conflictWhere?: string;\n readonly update: Readonly<Record<string, unknown>>;\n /**\n * Guard on the update arm, BOUND parameters: `ON CONFLICT (…) DO UPDATE SET\n * … WHERE <guard>` — the conflicting row is updated (and returned) only when\n * the guard admits it; otherwise the statement writes and returns nothing.\n * Postgres has both the target row and `excluded` in scope there, so every\n * column ref must carry `table` (the target table's name), exactly as the\n * SET self-references do. Needs the `conflictUpdateWhere` capability:\n * mysql's ODKU has no WHERE and refuses it (`VIBE_UNSUPPORTED_CAPABILITY`).\n */\n readonly updateWhere?: SqlExpr;\n /**\n * Skip-unchanged guard: the conflicting row is updated only when at least\n * one of these columns' stored value differs, NULL counting as a value,\n * from the value its `update` assignment would write (each column must have\n * one). Rendered as the first member of the update arm's `WHERE`, AND-ed\n * with {@link OnConflictUpdate.updateWhere}; a skipped row writes nothing\n * and returns nothing. On ON DUPLICATE KEY UPDATE (no WHERE) the columns it\n * leaves out are assigned first, keeping their stored value when nothing\n * else would change, and the dialect itself skips the unchanged row.\n * Needs `upsertSkipUnchanged`.\n */\n readonly skipUnchanged?: readonly UnchangedColumn[];\n /**\n * The table's native row-security predicate, RAW SQL without parameters\n * (the managed policy's check, columns qualified by the target table's\n * name). With a guard on the arm ({@link OnConflictUpdate.updateWhere} or\n * {@link OnConflictUpdate.skipUnchanged}) the arm's `WHERE` becomes\n * `(<policy>) IS NOT TRUE OR (<guard>)`: PostgreSQL evaluates that `WHERE`\n * before its row-security check of the conflicting row, so a row the policy\n * hides must always take the update path and fail that check, whatever its\n * values. Ignored when the arm has no guard; refused by a dialect without\n * `nativeRowLevelSecurity`.\n */\n readonly rowPolicy?: string;\n /**\n * MySQL only, a single-row statement: the duplicate arm also runs\n * `` `column` = IF(LAST_INSERT_ID(flag), `t`.`column`, `t`.`column`) `` (a\n * self-assignment, rendered last), so the statement reports `flag` as its\n * insert id exactly when the row took the update arm — the one signal that\n * tells an inserted row from an unchanged one when the driver reports no\n * `Duplicates:` info. `flag` is a decimal literal.\n */\n readonly duplicateFlag?: { readonly column: string; readonly flag: string };\n /**\n * MySQL only (`upsertForm: \"onDuplicateKey\"`): append\n * `` `col` = LAST_INSERT_ID(`col`) `` to the update list so the UPDATE arm\n * records the addressed row's key — without it `LAST_INSERT_ID()` is stale\n * on the update arm and the read-back can resolve a wrong, unrelated row\n * (SQL review B2, live-proven on 8.4). Only meaningful for integer keys.\n */\n readonly lastInsertIdColumn?: string;\n};\n\n/**\n * One column a skip-unchanged conflict arm compares. `json`: a Json column,\n * compared as `jsonb` on postgres (its `json` type has no equality operator;\n * `\"list\"` for a Json list).\n */\nexport type UnchangedColumn = {\n readonly column: string;\n readonly json?: \"scalar\" | \"list\";\n /**\n * A column whose SQL equality can be coarser than \"the stored value would\n * not change\"; the renderer compares it exactly where the dialect needs it.\n * See {@link UnchangedExactness}.\n */\n readonly bytes?: UnchangedExactness;\n /**\n * A text column the schema declares with a folding type or collation\n * (`citext`, a `@collation` that is not byte-ordered): its equality may call\n * `'x'` and `'X'` equal on any dialect, not only under MySQL's default.\n */\n readonly folds?: true;\n /** The column is a list of `bytes`'s kind (a postgres array). */\n readonly list?: true;\n};\n\n/**\n * Why a compared column's own equality may call two different stored values\n * equal:\n * - `\"text\"`: a text column; MySQL's default `_ai_ci` collation folds case\n * and accents (and see `folds`).\n * - `\"decimal\"`: a Decimal column without a declared scale (PostgreSQL's bare\n * `numeric` keeps `1.50` and `1.5` apart, its equality does not).\n * - `\"float\"`: a float column (`-0` equals `0`).\n * - `\"other\"`: a Json or list column, or a text-like column of another\n * declared type, compared by its bytes on MySQL.\n */\nexport type UnchangedExactness = \"text\" | \"decimal\" | \"float\" | \"other\";\n\n/**\n * Conflicting rows are skipped (`createMany({ skipDuplicates: true })`).\n * An empty/absent target means \"any conflict\" — the mysql form\n * (`ON DUPLICATE KEY UPDATE k = t.k`, dialect `doNothingForm:\n * \"duplicateKeyKeep\"`) can only express that, so it ignores a bare `columns`\n * target (documented degradation) and REFUSES the refined targets below.\n */\nexport type OnConflictDoNothing = {\n /**\n * MySQL form only (`duplicateKeyKeep`): the column the duplicate arm assigns\n * to itself (`` `k` = `t`.`k` ``, a no-op). Absent = the first inserted\n * column; an all-default row (no column) must name one.\n */\n readonly keepColumn?: string;\n /**\n * MySQL form only, single-row statements: a decimal literal S (digits only).\n * The keep assignment becomes `` `k` = IF(LAST_INSERT_ID(S), `t`.`k`, `t`.`k`) ``,\n * so a skipped duplicate reports S as the statement's insert id (an inserted\n * row reports its own id, or 0) — the exact skipped verdict that the\n * affected count cannot give with CLIENT_FOUND_ROWS (an unchanged duplicate\n * counts 1, like an insert). The builder picks S unequal to the row's\n * explicit AUTO_INCREMENT value.\n */\n readonly duplicateFlag?: string;\n readonly columns?: readonly string[];\n /**\n * Partial-index target predicate, RAW SQL: `ON CONFLICT (cols) WHERE pred\n * DO NOTHING` (postgres/sqlite; requires `columns`). Raw — and rendered\n * verbatim — because BOTH engines match the clause against the index's OWN\n * stored predicate structurally: a bound parameter could never match, so\n * the text mirrors the schema declaration's `where:` string byte-for-byte.\n */\n readonly conflictWhere?: string;\n /** Named-constraint target (`ON CONSTRAINT \"name\"`) — postgres only. */\n readonly constraint?: string;\n readonly doNothing: true;\n};\n\nexport type OnConflictClause = OnConflictUpdate | OnConflictDoNothing;\n\nexport type UpdateStatement = {\n readonly kind: \"update\";\n readonly table: TableRef;\n /** The target's alias; required with {@link UpdateStatement.from}, where two relations are in scope. */\n readonly alias?: string;\n /**\n * A joined source: `UPDATE … FROM` on PostgreSQL/SQLite (its `on` AND-ed\n * before `where`), `UPDATE … JOIN … ON` on MySQL. A\n * {@link SourceColumnRef} set value reads its columns.\n */\n readonly from?: UpdateSource;\n /**\n * Column → parameter value, or an atomic {@link SetOperation}. As a\n * {@link ChainStep} only (statement-maxx lane C3), a value may be a\n * {@link StepColumnRef} to an EARLIER step: `\"col\" = (SELECT \"c\" FROM\n * \"step\")` — the step must return at most one row (an owner resolved by a\n * unique where, or an owner INSERT of one row).\n */\n readonly set: Readonly<Record<string, unknown>>;\n readonly where?: SqlExpr;\n readonly returning?: readonly ReturningColumn[];\n};\n\nexport type DeleteStatement = {\n readonly kind: \"delete\";\n readonly table: TableRef;\n readonly where?: SqlExpr;\n readonly returning?: readonly ReturningColumn[];\n};\n\n/** Native RLS DDL, kept distinct from ordinary row-query expressions. */\nexport type RlsEnableStatement = { readonly kind: \"rlsEnable\"; readonly table: string };\nexport type RlsForceStatement = { readonly kind: \"rlsForce\"; readonly table: string };\n/** Disable native row policy enforcement on a physical table. */\nexport type RlsDisableStatement = { readonly kind: \"rlsDisable\"; readonly table: string };\n/** Remove forced owner enforcement on a physical table. */\nexport type RlsNoForceStatement = { readonly kind: \"rlsNoForce\"; readonly table: string };\n/** Drop the managed policy by default, or the supplied policy name. */\nexport type RlsDropPolicyStatement = { readonly kind: \"rlsDropPolicy\"; readonly table: string; readonly policyName?: string };\nexport type RlsPolicyStatement = {\n readonly kind: \"rlsPolicy\";\n readonly schema: SchemaIR;\n readonly model: string;\n /** Probe policies use a distinct identity without changing the predicate. */\n readonly policyName?: string;\n /** Only the probe target may be temporary; parent relations always remain public. */\n readonly targetSchema?: \"public\" | \"pg_temp\";\n};\n\n/** Values are validated/serialized by runtime; null is the absent setting sentinel. */\nexport type RlsContextStatement = {\n readonly kind: \"rlsContext\";\n readonly context: RlsContextIR;\n readonly values: Readonly<Record<string, string | null>>;\n /** PGlite: bind this trusted runtime role first, in the same statement. */\n readonly role?: string;\n /** Switch the transaction to READ ONLY in the same statement, after the claims. */\n readonly readOnly?: boolean;\n /** Report the backend as `\"backendPid\"` / `\"backendStart\"` text columns. */\n readonly backend?: boolean;\n};\n\n/** Trusted pre-existing PGlite execution role; never a request-supplied principal. */\nexport type RlsRoleStatement = { readonly kind: \"rlsRole\"; readonly role: string };\n\n// ─── Advisory locks ───────────────────────────────────────────────\n\n/**\n * An advisory lock's key: a lock space the APPLICATION defines, so a resource\n * with no row of its own can still be locked.\n *\n * Two forms, exactly as PostgreSQL offers them, and they are DIFFERENT lock\n * spaces — holding `{ classId: 11, objectId: 22 }` does not block the single\n * key `11 * 2^32 + 22` (probe-verified on PostgreSQL 18.6). Pick one form per\n * resource family and stay in it.\n */\nexport type AdvisoryLockKey =\n | { readonly key: bigint }\n | { readonly classId: number; readonly objectId: number };\n\n/**\n * Take a TRANSACTION-scoped advisory lock. Released by commit and by rollback\n * (including `ROLLBACK TO SAVEPOINT` when it was taken after the savepoint —\n * probe-verified), never by an explicit unlock call, so no leak can outlive the\n * transaction on a pooled connection.\n *\n * `wait: \"nowait\"` renders the `pg_try_advisory_xact_lock*` family, whose single\n * boolean column says whether the lock was taken; `\"wait\"` renders the blocking\n * family, which returns void.\n */\nexport type AdvisoryLockStatement = {\n readonly kind: \"advisoryLock\";\n readonly mode: AdvisoryLockMode;\n readonly wait: \"wait\" | \"nowait\";\n readonly key: AdvisoryLockKey;\n};\n\n/** An ordered set of transaction-scoped bigint advisory locks. */\nexport type AdvisoryLocksStatement = {\n readonly kind: \"advisoryLocks\";\n readonly keys: readonly bigint[];\n readonly mode: AdvisoryLockMode;\n};\n\n/** The column an advisory try-lock projects its verdict into. */\nexport const ADVISORY_LOCK_RESULT_COLUMN: string = \"acquired\";\n\n// ─── Statement chains ────────────────────────────────────────────────\n\n/**\n * A cell of an {@link InsertSelectStatement} that reads a column of an EARLIER\n * chain step: `\"step\".\"column\"`. A column reference, not a parameter — the\n * value comes from the step's rows inside the same statement (a child row\n * taking its parent's key from the parent step, round-trip campaign EPIC F).\n * The step must be named in the insert's `from` list.\n */\nexport type StepColumnRef = { readonly __stepColumn: true; readonly step: string; readonly column: string };\n\n/** Reference `column` of the earlier chain step `step` from an INSERT … SELECT cell. */\nexport function stepColumnRef(params: { step: string; column: string }): StepColumnRef {\n return { __stepColumn: true, step: params.step, column: params.column };\n}\n\n/** The joined relation of an {@link UpdateStatement}: its table, alias and join condition. */\nexport type UpdateSource = UpdateTableSource | UpdateSelectSource;\n\n/** A joined table: `FROM \"table\" AS alias` (`updateMany({ from })`). */\nexport type UpdateTableSource = { readonly table: TableRef; readonly alias: string; readonly on: SqlExpr };\n\n/**\n * A joined subquery: `FROM (SELECT …) AS alias`, PostgreSQL only. With a\n * locking read of the target table it is the row as it was before the write,\n * and an {@link OtherRowReturningColumn} `from: { source: alias }` returns its\n * values (`update({ previous })`, capability `returningReadsJoinedSource`).\n */\nexport type UpdateSelectSource = { readonly select: SelectStatement; readonly alias: string; readonly on: SqlExpr };\n\n/** An UPDATE set value read from the joined source's `column` (`UPDATE … FROM`). */\nexport type SourceColumnRef = { readonly __sourceColumn: true; readonly column: string };\n\n/** Read `column` of an {@link UpdateStatement}'s joined source as a set value. */\nexport function sourceColumnRef(params: { column: string }): SourceColumnRef {\n return Object.freeze({ __sourceColumn: true, column: params.column });\n}\n\n/** Is this UPDATE set value a {@link SourceColumnRef}? */\nexport function isSourceColumnRef(value: unknown): value is SourceColumnRef {\n if (typeof value !== \"object\" || value === null) return false;\n const candidate = value as { __sourceColumn?: unknown; column?: unknown };\n return candidate.__sourceColumn === true && typeof candidate.column === \"string\" && Object.keys(value).length === 2;\n}\n\n/** Is this INSERT … SELECT cell a {@link StepColumnRef}? */\nexport function isStepColumnRef(value: unknown): value is StepColumnRef {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as { __stepColumn?: unknown }).__stepColumn === true\n );\n}\n\n/**\n * `INSERT INTO t (cols) SELECT <cells> [FROM \"step\", …] [WHERE <expr>]\n * [RETURNING …]` — an INSERT whose ONE row is a SELECT list instead of a\n * VALUES row, so a WHERE can veto the write inside the statement and cells can\n * read earlier steps. Valid ONLY as a {@link ChainStep} statement.\n *\n * Cells take the same forms as a VALUES cell — a codec-encoded value, a\n * {@link JsonParamCell}, a {@link DbNowMarker} — plus {@link StepColumnRef}.\n * The {@link SQL_DEFAULT_CELL} is refused: `DEFAULT` is not allowed in a SELECT\n * list; an omitted column takes its default by being absent from `columns`.\n *\n * Parameter typing (O-03, probed on PostgreSQL): a bare parameter in this\n * one-row SELECT list takes the TARGET column's type, exactly as in VALUES.\n */\nexport type InsertSelectStatement = {\n readonly kind: \"insertSelect\";\n readonly table: TableRef;\n readonly columns: readonly string[];\n /** One cell per column, aligned to `columns` — deterministic parameter order. */\n readonly cells: readonly unknown[];\n /** Earlier chain steps the SELECT reads FROM, in order (absent: a one-row SELECT without FROM). */\n readonly from?: readonly string[];\n /**\n * Several source rows (round-trip campaign EPIC F): the SELECT reads them\n * from a derived table `alias`, joined after the `from` steps, and the\n * `cells` read its columns through `stepColumnRef({ step: alias, column })`.\n * See {@link ChainRowSource} for how the rows are typed.\n */\n readonly source?: ChainRowSource;\n readonly where?: SqlExpr;\n /**\n * `ON CONFLICT (<columns>) DO NOTHING` (statement-maxx lane C2): a row whose\n * conflict target already exists is skipped and not returned — the implicit\n * many-to-many join INSERT, where re-connecting an existing pair is a no-op.\n * Postgres form only (the chain renders nowhere else); at least one column.\n */\n readonly conflictDoNothing?: { readonly columns: readonly string[] };\n readonly returning?: readonly ReturningColumn[];\n};\n\n/**\n * Rows an {@link InsertSelectStatement} inserts, as ONE derived table:\n * `(SELECT <cols> FROM (VALUES (<typed NULL row>), ($1, $2), …) AS \"alias\"\n * (<cols>) OFFSET 1) AS \"alias\"`.\n *\n * Why the typed NULL row (review O-03): a bare parameter outside the INSERT's\n * own VALUES has no type, and PostgreSQL resolves an all-parameter column of a\n * VALUES list or UNION in FROM as `text` (\"column is of type integer but\n * expression is of type text\"). The first row is one `(SELECT \"col\" FROM\n * <typedBy> WHERE FALSE)` per column — a NULL of the TARGET column's exact\n * type (enums, `numeric(p,s)`, `varchar(n)`, domains and arrays included) —\n * so every parameter below takes that type, with no cast map anywhere;\n * `OFFSET 1` drops the row. (A `UNION ALL` of one-row SELECTs types the same\n * way but costs ~10× the planning time at 1000 rows — EPIC F shape gate.)\n *\n * Cells take the VALUES forms: a codec-encoded value, a {@link JsonParamCell}\n * or a {@link DbNowMarker}; the DEFAULT cell is refused (a homogeneous row set\n * omits the column instead). A cell carrying its OWN type (the Json cast, the\n * clock) must agree with the column's type under VALUES' common-type rules,\n * which are stricter than INSERT's assignment casts — the builder keeps such\n * columns out (EPIC F eligibility). Rows are read in list order, which is the\n * order the INSERT consumes them.\n */\nexport type ChainRowSource = {\n readonly alias: string;\n /** The table whose columns type the rows — normally the INSERT's own table. */\n readonly typedBy: TableRef;\n readonly columns: readonly string[];\n /** At least one row, each aligned to `columns`. */\n readonly rows: readonly (readonly unknown[])[];\n};\n\n/** What one chain step may be: a read, or a data-modifying statement with RETURNING. */\nexport type ChainStepStatement =\n | SelectStatement\n | InsertStatement\n | InsertSelectStatement\n | UpdateStatement\n | DeleteStatement;\n\n/**\n * One named step: rendered `\"name\" AS (<statement>)`. Later steps and the\n * result read it as a table (`FROM \"name\"`, `EXISTS (SELECT 1 FROM \"name\" …)`,\n * a {@link StepColumnRef}). A data-modifying step contributes the rows its\n * RETURNING list names.\n */\nexport type ChainStep = {\n readonly name: string;\n readonly statement: ChainStepStatement;\n};\n\n/**\n * The chain's final SELECT: the rows of `rowsFrom` (in that order, `UNION\n * ALL`), each projecting `columns`.\n *\n * `verdict` adds one column `alias` = `expr` to every row, AND guarantees a\n * row: when the `rowsFrom` steps return nothing, the result is exactly ONE\n * verdict row whose `columns` are all NULL. A caller recognizes it by NULL in\n * a column the steps never return as NULL (a primary key). Accounting\n * consequence: such a statement returns one row per written row OR one\n * verdict row — a caller that counts returned rows as row changes must undo a\n * verdict-row outcome (the upsert fold always rolls it back).\n */\nexport type ChainResult = {\n /** Both lists may be empty for a tally-only result: one count row, no model values. */\n readonly rowsFrom: readonly string[];\n readonly columns: readonly string[];\n readonly verdict?: { readonly alias: string; readonly expr: SqlExpr };\n /**\n * In-statement vetoes (round-trip campaign EPIC F), checked in order: when\n * `step` returned no row (fewer than `minRows`, EPIC W), the STATEMENT FAILS — so the database undoes every\n * effect of every step, trigger writes included — with an error whose\n * message carries `__vibe_veto:<token>:<nonce>:` ({@link CHAIN_VETO_PREFIX},\n * {@link chainVetoToken}). Requires `tally`: the veto is the tally column's\n * guard, so it is evaluated exactly once, on the one guaranteed result row.\n */\n readonly veto?: readonly ChainVeto[];\n /**\n * A step whose rows every veto depends on: when it returned no row, no veto\n * is checked and the statement succeeds, answering the one guaranteed row\n * with NULL columns and the tally (rendered as the first CASE arm, `WHEN NOT\n * EXISTS (SELECT 1 FROM \"step\") THEN <tally>`). A nested write whose\n * missing parent is an answer, not an error, gates its children's vetoes on\n * the parent step this way. Requires `tally` and at least one veto.\n */\n readonly vetoGate?: string;\n /**\n * One column `alias` on every result row: the number of rows the listed\n * data-modifying steps returned (their RETURNING rows = their direct\n * effects). Guarantees one row like `verdict`. Row-change accounting reads\n * it instead of counting result rows (effect `writeTally`).\n */\n readonly tally?: ChainTally;\n /**\n * Row capture ({@link ChainCapture}): per captured data-modifying step, its\n * row count and its distinct before and after images, on every result row\n * (uncorrelated scalar subqueries, evaluated once). Needs the dialect's\n * `rowCapture` capability. Rendered after every other result column, so\n * their bound limits come last.\n */\n readonly capture?: readonly ChainCapture[];\n};\n\n/**\n * One captured step of a chain ({@link ChainResult.capture}). Result columns,\n * `<alias>` being this entry's alias:\n *\n * - `<alias>_n`: `(SELECT count(*) FROM \"step\")`;\n * - `<alias>_i` (with `inserted`): the rows whose arm marker is true;\n * - `<alias>_b` / `<alias>_a` (with `before` / `after`): `(SELECT\n * array_agg(\"__vibe_i\")::text FROM (SELECT DISTINCT ARRAY[\"c0\", \"c1\"] AS\n * \"__vibe_i\" FROM \"step\" LIMIT $n) AS \"__vibe_d\")` — a two-dimensional text\n * array literal of at most `limit` distinct images, NULL when the step\n * returned no row. With `inserted`, both read the update arm's rows only\n * (`WHERE NOT` the marker), and `_a` is left out with `insertedOnly`;\n * - `<alias>_ia` (with `inserted` and `after`): the insert arm's after images\n * (`WHERE` the marker), so an upsert's after images arrive per arm.\n *\n * `before` / `after` name columns the step RETURNS (its\n * {@link CaptureReturningColumn} aliases), in image order. `limit` is bound once.\n */\nexport type ChainCapture = {\n readonly step: string;\n readonly alias: string;\n /** The step's `\"inserted\"` arm-marker column, for an `INSERT … ON CONFLICT DO UPDATE` step. */\n readonly inserted?: string;\n /** With `inserted`: images of inserted rows only — `<alias>_ia`, no `<alias>_a`. */\n readonly insertedOnly?: true;\n readonly before?: readonly string[];\n readonly after?: readonly string[];\n /** The most distinct images one image column returns: a positive safe integer, bound as a parameter. */\n readonly limit: number;\n /**\n * Child images of the step's rows, one result column `<alias>_c<j>` each: a\n * {@link CaptureCascade} whose `parent` columns name columns the step\n * RETURNS, matched by `EXISTS (SELECT 1 FROM \"step\" AS \"__vibe_k\" WHERE\n * \"__vibe_k\".\"parent\" = \"__vibe_c\".\"child\")`.\n */\n readonly cascades?: readonly CaptureCascade[];\n};\n\n/**\n * Fail the statement when `step` returned no row; `token` names the veto in the\n * error. `nonce` is bound as a PARAMETER into the marker (never SQL text): a\n * per-call random value the caller requires back in the error, so a user value\n * that merely looks like a marker is never read as a veto.\n *\n * `minRows` (EPIC W) makes the veto count-sensitive: the statement fails when\n * `step` returned FEWER rows than that (a multi-row INSERT a trigger shortened).\n * Omitted or 1 = \"no row\". A positive safe integer, rendered as SQL text.\n * `exactRows` instead requires equality, including zero. It is a nonnegative\n * safe integer and cannot combine with `minRows`.\n */\nexport type ChainVeto = { readonly step: string; readonly token: string; readonly nonce: string; readonly minRows?: number; readonly exactRows?: number };\n\n/** Count the RETURNING rows of `steps` into the result column `alias`. */\nexport type ChainTally = { readonly alias: string; readonly steps: readonly string[] };\n\n/** Marker every chain veto error message carries, followed by `<token>:<nonce>:`. */\nexport const CHAIN_VETO_PREFIX: string = \"__vibe_veto:\";\n\n/** Allowed veto tokens: lower-case words — they are rendered into SQL text. */\nexport const CHAIN_VETO_TOKEN_PATTERN: RegExp = /^[a-z][a-z0-9_]*$/;\n\n/**\n * The veto token a database error message carries for this `nonce`, or\n * `undefined`. Matches the marker anywhere in the text, so a localized server\n * message (`lc_messages`) still yields it: the marker is the invalid VALUE the\n * message quotes. A marker without the caller's nonce is not a veto.\n */\nexport function chainVetoToken(params: { message: string; nonce: string }): string | undefined {\n const { message, nonce } = params;\n if (nonce === \"\") return undefined;\n for (let start = message.indexOf(CHAIN_VETO_PREFIX); start >= 0; start = message.indexOf(CHAIN_VETO_PREFIX, start + 1)) {\n const rest = message.slice(start + CHAIN_VETO_PREFIX.length);\n const match = /^([a-z][a-z0-9_]*):/.exec(rest);\n if (match !== null && rest.startsWith(`${nonce}:`, match[0].length)) return match[1];\n }\n return undefined;\n}\n\n/**\n * ONE statement made of an ordered chain of named steps — reads (a locked\n * probe) and data-modifying statements with RETURNING — ending in a final\n * SELECT over them (round-trip campaign EPIC 4, reused by EPIC F). Renders as\n * `WITH \"a\" AS (…), \"b\" AS (…) SELECT …` on a dialect whose\n * `statementChain` strategy names the form (postgres); every other dialect\n * refuses at render time (`VIBE_UNSUPPORTED_CAPABILITY`) — callers gate on\n * the strategy first and keep their multi-statement path there.\n *\n * PostgreSQL semantics the builder relies on: every step sees ONE snapshot\n * (a step never sees another step's writes — only its RETURNING rows), steps\n * that reference a step run after it, and the statement is atomic: an error in\n * any step undoes every step's effects, trigger writes included.\n */\nexport type ChainStatement = {\n readonly kind: \"chain\";\n readonly steps: readonly ChainStep[];\n readonly result: ChainResult;\n};\n\nexport type SqlStatement = SelectStatement | InsertStatement | UpdateStatement | DeleteStatement |\n RlsEnableStatement | RlsForceStatement | RlsDisableStatement | RlsNoForceStatement | RlsDropPolicyStatement |\n RlsPolicyStatement | RlsContextStatement | RlsRoleStatement | AdvisoryLockStatement | AdvisoryLocksStatement | ChainStatement;\n\n/** Readiness statements remain distinct from application queries. */\nexport type RlsReadinessStatement = { readonly kind: \"rlsReadiness\"; readonly query: RlsReadinessQuery; readonly searchPath?: string };\n/** Temporary clone lifecycle surrounding a desired-policy probe. */\nexport type RlsProbeTableStatement = { readonly kind: \"rlsProbeTable\"; readonly table: string; readonly action: \"create\" | \"drop\" };\n/** Migration transaction-local policy search-path scope. */\nexport type RlsPolicyPathStatement = { readonly kind: \"rlsPolicyPath\"; readonly stage: \"save\" | \"empty\" | \"restore\" };\n",
|
|
11
11
|
"/**\n * `$.a.b[0]` path string for sqlite/mysql — always bound, never spliced.\n * @internal\n */\nexport function jsonPathString(path: readonly (string | number)[]): string {\n let out = \"$\";\n for (const segment of path) {\n if (typeof segment === \"number\") {\n out += `[${segment}]`;\n } else if (/^[A-Za-z_][A-Za-z0-9_]*$/.test(segment)) {\n out += `.${segment}`;\n } else {\n // A quoted key uses JSON-string escaping in both engines' path syntax:\n // the backslash FIRST, or a key containing one silently matches nothing.\n out += `.\"${segment.replaceAll(\"\\\\\", \"\\\\\\\\\").replaceAll('\"', '\\\\\"')}\"`;\n }\n }\n return out;\n}\n",
|
|
12
12
|
"import { unsupportedCapability } from \"@vibeorm/schema\";\nimport type { SqlDialect } from \"../dialect.ts\";\nimport type { RenderedQuery } from \"../render.ts\";\n\n/** Complete catalog ownership edges, including endpoints outside the migration namespace. */\nexport function renderExternalOwnershipCatalog(params: { dialect: SqlDialect; operation: \"namespaces\" | \"inheritance\" | \"ownedSequences\" | \"foreignKeys\" }): RenderedQuery {\n if (params.dialect.name !== \"postgres\") throw unsupportedCapability({ dialect: params.dialect.name, feature: \"externalObjects\" });\n const scope = \"n.nspname <> 'information_schema' AND n.nspname NOT LIKE 'pg\\\\_%' ESCAPE '\\\\' AND n.nspname NOT IN ('_vibeorm_shadow', '_vibe_shadow')\";\n let text: string;\n switch (params.operation) {\n case \"namespaces\": text = `SELECT n.nspname::text AS namespace, has_schema_privilege(n.oid, 'USAGE') AS visible FROM pg_catalog.pg_namespace n WHERE ${scope} ORDER BY n.nspname`; break;\n case \"inheritance\": text = `SELECT n.nspname::text AS namespace, c.relname::text AS name, pn.nspname::text AS \"parentNamespace\", p.relname::text AS \"parentName\" FROM pg_catalog.pg_inherits i JOIN pg_catalog.pg_class c ON c.oid = i.inhrelid JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace JOIN pg_catalog.pg_class p ON p.oid = i.inhparent JOIN pg_catalog.pg_namespace pn ON pn.oid = p.relnamespace WHERE ${scope} ORDER BY n.nspname, c.relname, pn.nspname, p.relname`; break;\n case \"ownedSequences\": text = `SELECT n.nspname::text AS namespace, s.relname::text AS name, tn.nspname::text AS \"tableNamespace\", t.relname::text AS \"tableName\" FROM pg_catalog.pg_depend d JOIN pg_catalog.pg_class s ON s.oid = d.objid AND s.relkind = 'S' JOIN pg_catalog.pg_namespace n ON n.oid = s.relnamespace JOIN pg_catalog.pg_class t ON t.oid = d.refobjid JOIN pg_catalog.pg_namespace tn ON tn.oid = t.relnamespace WHERE d.classid = 'pg_class'::regclass AND d.refclassid = 'pg_class'::regclass AND d.deptype IN ('a', 'i') AND d.refobjsubid > 0 AND ${scope} ORDER BY n.nspname, s.relname`; break;\n case \"foreignKeys\": text = `SELECT n.nspname::text AS namespace, t.relname::text AS table, rn.nspname::text AS \"refNamespace\", r.relname::text AS \"refTable\", c.conname::text AS name FROM pg_catalog.pg_constraint c JOIN pg_catalog.pg_class t ON t.oid = c.conrelid JOIN pg_catalog.pg_namespace n ON n.oid = t.relnamespace JOIN pg_catalog.pg_class r ON r.oid = c.confrelid JOIN pg_catalog.pg_namespace rn ON rn.oid = r.relnamespace WHERE c.contype = 'f' AND ${scope} ORDER BY n.nspname, t.relname, c.conname`; break;\n }\n return { text, values: [], returning: \"none\" };\n}\n",
|
|
13
13
|
"import { unsupportedCapability } from \"@vibeorm/schema\";\nimport type { SqlDialect } from \"../dialect.ts\";\nimport type { RenderedQuery } from \"../render.ts\";\nimport { ParamCollector } from \"../params.ts\";\n\n/** An application type, relation or column whose planned drop or retype must not break another owner's objects. */\nexport type ExternalDependentTarget =\n | { readonly kind: \"type\" | \"relation\"; readonly namespace: string; readonly name: string }\n | { readonly kind: \"column\"; readonly namespace: string; readonly name: string; readonly column: string };\n\n/**\n * Normal (`deptype = 'n'`) catalog dependents of each target, answered per\n * target position. A target covers its array type; a relation also covers its\n * row type, and a relation or column also covers the sequences it owns\n * (identity and serial), whose dependents are what a drop would break. Each\n * dependent is anchored to its relation (columns, defaults, view rules,\n * triggers, table constraints, policies, composite types) or to its own\n * namespace and name (routines, domains), so ownership can be decided outside\n * SQL. Read-only.\n */\nexport function renderExternalDependents(params: { dialect: SqlDialect; targets: readonly ExternalDependentTarget[] }): RenderedQuery {\n if (params.dialect.name !== \"postgres\") throw unsupportedCapability({ dialect: params.dialect.name, feature: \"externalObjects\" });\n const collector = new ParamCollector(params.dialect);\n const requests = params.targets.map((target, position) => ({ position, kind: target.kind, namespace: target.namespace, name: target.name, column: target.kind === \"column\" ? target.column : null }));\n // Bind serialized JSON as text; a jsonb wire parameter is JSON-encoded again by Bun.\n const request = collector.add(JSON.stringify(requests));\n const text = `WITH request AS (\n SELECT * FROM jsonb_to_recordset(${request}::text::jsonb) AS request(position integer, kind text, namespace text, name text, \"column\" text)\n), target AS (\n SELECT request.position, 'pg_type'::regclass AS classid, t.oid AS objid, NULL::integer AS objsubid FROM request JOIN pg_catalog.pg_namespace n ON n.nspname = request.namespace JOIN pg_catalog.pg_type t ON t.typnamespace = n.oid AND t.typname = request.name WHERE request.kind = 'type'\n UNION ALL SELECT request.position, 'pg_class'::regclass, c.oid, a.attnum::integer FROM request JOIN pg_catalog.pg_namespace n ON n.nspname = request.namespace JOIN pg_catalog.pg_class c ON c.relnamespace = n.oid AND c.relname = request.name LEFT JOIN pg_catalog.pg_attribute a ON request.kind = 'column' AND a.attrelid = c.oid AND a.attname = request.\"column\" AND NOT a.attisdropped WHERE request.kind = 'relation' OR request.kind = 'column' AND a.attnum IS NOT NULL\n), owned AS (\n SELECT position, classid, objid, objsubid FROM target\n UNION SELECT target.position, 'pg_type'::regclass, c.reltype, NULL FROM target JOIN pg_catalog.pg_class c ON c.oid = target.objid WHERE target.classid = 'pg_class'::regclass AND target.objsubid IS NULL AND c.reltype <> 0\n UNION SELECT target.position, 'pg_class'::regclass, s.oid, NULL FROM target JOIN pg_catalog.pg_depend sd ON sd.refclassid = target.classid AND sd.refobjid = target.objid AND (target.objsubid IS NULL OR sd.refobjsubid = target.objsubid) AND sd.classid = 'pg_class'::regclass AND sd.deptype IN ('a', 'i') JOIN pg_catalog.pg_class s ON s.oid = sd.objid AND s.relkind = 'S'\n), referenced AS (\n SELECT position, classid, objid, objsubid FROM owned\n UNION SELECT owned.position, 'pg_type'::regclass, t.typarray, NULL FROM owned JOIN pg_catalog.pg_type t ON t.oid = owned.objid WHERE owned.classid = 'pg_type'::regclass AND t.typarray <> 0\n)\nSELECT DISTINCT referenced.position, dependent.type AS \"dependentType\", dependent.identity AS \"dependentIdentity\", ref.identity AS referenced, d.classid::regclass::text AS \"dependentClass\",\n rn.nspname::text AS \"relationNamespace\", rel.relname::text AS \"relationName\", rel.relkind::text AS \"relationKind\", col.attname::text AS \"columnName\",\n COALESCE(pn.nspname, tn.nspname, dependent.schema)::text AS \"objectNamespace\", COALESCE(p.proname, ty.typname)::text AS \"objectName\"\nFROM referenced\nJOIN pg_catalog.pg_depend d ON d.refclassid = referenced.classid AND d.refobjid = referenced.objid AND (referenced.objsubid IS NULL OR d.refobjsubid = referenced.objsubid) AND d.deptype = 'n'\nCROSS JOIN LATERAL pg_catalog.pg_identify_object(d.classid, d.objid, d.objsubid) dependent\nCROSS JOIN LATERAL pg_catalog.pg_identify_object(d.refclassid, d.refobjid, d.refobjsubid) ref\nLEFT JOIN pg_catalog.pg_class self ON d.classid = 'pg_class'::regclass AND self.oid = d.objid\nLEFT JOIN pg_catalog.pg_index ix ON ix.indexrelid = self.oid\nLEFT JOIN pg_catalog.pg_attrdef ad ON d.classid = 'pg_attrdef'::regclass AND ad.oid = d.objid\nLEFT JOIN pg_catalog.pg_rewrite rw ON d.classid = 'pg_rewrite'::regclass AND rw.oid = d.objid\nLEFT JOIN pg_catalog.pg_trigger tg ON d.classid = 'pg_trigger'::regclass AND tg.oid = d.objid\nLEFT JOIN pg_catalog.pg_constraint con ON d.classid = 'pg_constraint'::regclass AND con.oid = d.objid\nLEFT JOIN pg_catalog.pg_policy pol ON d.classid = 'pg_policy'::regclass AND pol.oid = d.objid\nLEFT JOIN pg_catalog.pg_type ty ON d.classid = 'pg_type'::regclass AND ty.oid = d.objid\nLEFT JOIN pg_catalog.pg_namespace tn ON tn.oid = ty.typnamespace\nLEFT JOIN pg_catalog.pg_proc p ON d.classid = 'pg_proc'::regclass AND p.oid = d.objid\nLEFT JOIN pg_catalog.pg_namespace pn ON pn.oid = p.pronamespace\nLEFT JOIN pg_catalog.pg_class rel ON rel.oid = COALESCE(ix.indrelid, self.oid, ad.adrelid, rw.ev_class, tg.tgrelid, NULLIF(con.conrelid, 0), pol.polrelid, NULLIF(ty.typrelid, 0))\nLEFT JOIN pg_catalog.pg_namespace rn ON rn.oid = rel.relnamespace\nLEFT JOIN pg_catalog.pg_attribute col ON col.attrelid = rel.oid AND col.attnum = CASE WHEN self.oid IS NOT NULL AND d.objsubid > 0 THEN d.objsubid WHEN ad.oid IS NOT NULL THEN ad.adnum END\nORDER BY 1, 2, 3, 4`;\n return { text, values: collector.values, returning: \"none\" };\n}\n",
|
|
@@ -44,20 +44,21 @@
|
|
|
44
44
|
"import { VibeError } from \"@vibeorm/schema\";\nimport type { SqlDialect } from \"./dialect.ts\";\nimport { snapshotSqlValue } from \"./parameter-snapshot.ts\";\nimport { ParamCollector } from \"./params.ts\";\nimport { registerSqlHandleCheck } from \"./sql-handles.ts\";\nimport { isSqlBindingCollector, recordSqlBinding, recordSqlBindingCheck, sqlParameterTransport } from \"./sql-bindings.ts\";\nimport { resultScalarContract } from \"./result-decoder.ts\";\nimport type { ResultDecoder } from \"./result-decoder.ts\";\n\ndeclare const fragmentBrand: unique symbol;\n/** Opaque executable SQL, constructed by sql, never by casting an object. */\nexport type SqlFragment = { readonly [fragmentBrand]: true };\n\ntype Part =\n | string\n | { readonly value: unknown; readonly decoder?: ResultDecoder<unknown> }\n | { readonly ident: readonly string[] }\n | { readonly row: \"existing\" | \"incoming\"; readonly column: string }\n | { readonly greatest: readonly SqlFragment[] };\nconst fragments = new WeakMap<object, readonly Part[]>();\nregisterSqlHandleCheck({ check: (value) => fragments.has(value) });\n\nfunction invalid(message: string): never {\n throw new VibeError({ code: \"VIBE_VALIDATION\", message });\n}\n\nfunction construct(parts: readonly Part[]): SqlFragment {\n const snapshot = Object.freeze([...parts]);\n const fragment = Object.freeze(Object.defineProperty(Object.create(null), \"toJSON\", {\n value: (): { parts: readonly Part[] } => ({ parts: snapshot }),\n })) as SqlFragment;\n fragments.set(fragment, snapshot);\n return fragment;\n}\n\n/** Runtime authenticity check; structural copies are not executable. */\nexport function isSqlFragment(value: unknown): value is SqlFragment {\n return typeof value === \"object\" && value !== null && fragments.has(value);\n}\n\nfunction partsOf(value: SqlFragment): readonly Part[] {\n return fragments.get(value) ?? invalid(\"Expected a constructed SQL fragment\");\n}\n\n/** Whether a fragment holds a greatest node (template interpolation flattens parts). */\nfunction containsGreatest(fragment: SqlFragment): boolean {\n return partsOf(fragment).some((part) => typeof part !== \"string\" && \"greatest\" in part);\n}\n\nfunction identifier(parts: readonly string[]): void {\n if (!Array.isArray(parts) || parts.length === 0 || parts.some((part) => typeof part !== \"string\" || part.length === 0 || part.includes(\"\\0\"))) {\n invalid(\"SQL identifiers require non-empty, NUL-free name components\");\n }\n}\n\n/** The public composition helpers. text is trusted SQL; interpolated strings are values. */\nexport type SqlTag = {\n (strings: TemplateStringsArray, ...values: readonly unknown[]): SqlFragment;\n readonly text: (params: { text: string }) => SqlFragment;\n readonly ident: (params: { parts: readonly string[] }) => SqlFragment;\n readonly value: <T>(params: { value: NoInfer<T>; decoder?: ResultDecoder<T> }) => SqlFragment;\n /**\n * A list: fragments spliced, anything else bound as one value each, joined\n * by `separator` (default `, `). `sql.join(items, separator)` and\n * `sql.join({ items, separator })` are the same call.\n */\n readonly join: {\n (items: readonly unknown[], separator?: SqlFragment): SqlFragment;\n (params: { items: readonly unknown[]; separator?: SqlFragment }): SqlFragment;\n };\n /** Every condition must hold: `(a) AND (b)`, each part in parentheses; `undefined` parts are skipped, and none left is `TRUE`. */\n readonly and: (parts: readonly (SqlFragment | undefined)[]) => SqlFragment;\n /** Any condition may hold: `(a) OR (b)`, each part in parentheses; `undefined` parts are skipped, and none left is `FALSE`. */\n readonly or: (parts: readonly (SqlFragment | undefined)[]) => SqlFragment;\n readonly existing: (params: { column: string }) => SqlFragment;\n readonly incoming: (params: { column: string }) => SqlFragment;\n /** Portable scalar maximum, with NULL ignored (all NULL produces NULL). */\n readonly greatest: (params: { values: readonly [SqlFragment, SqlFragment] }) => SqlFragment;\n};\n\nfunction template(strings: TemplateStringsArray, ...values: readonly unknown[]): SqlFragment {\n if (!Array.isArray(strings) || !Array.isArray(strings.raw) || strings.length !== values.length + 1 || strings.some((text) => typeof text !== \"string\")) {\n invalid(\"Use sql as a template tag\");\n }\n const parts: Part[] = [];\n for (let index = 0; index < strings.length; index++) {\n parts.push(strings[index]!);\n if (index < values.length) {\n const value = values[index];\n if (isSqlFragment(value)) parts.push(...partsOf(value));\n else parts.push(Object.freeze({ value: snapshotSqlValue(value) }));\n }\n }\n return construct(parts);\n}\n\n/** Compose SQL without parameter-offset arithmetic. */\nexport const sql: SqlTag = Object.freeze(Object.assign(template, {\n text: ({ text }: { text: string }): SqlFragment => {\n if (typeof text !== \"string\" || text.includes(\"\\0\")) invalid(\"SQL text must be a NUL-free string\");\n return construct([text]);\n },\n ident: ({ parts }: { parts: readonly string[] }): SqlFragment => {\n identifier(parts);\n return construct([Object.freeze({ ident: Object.freeze([...parts]) })]);\n },\n value: <T>({ value, decoder }: { value: NoInfer<T>; decoder?: ResultDecoder<T> }): SqlFragment =>\n construct([Object.freeze({ value: snapshotSqlValue(value), ...(decoder === undefined ? {} : { decoder }) })]),\n join: (first: readonly unknown[] | { items: readonly unknown[]; separator?: SqlFragment }, second?: SqlFragment): SqlFragment => {\n const positional = Array.isArray(first);\n const items = positional ? first : (first as { items?: unknown } | null | undefined)?.items;\n const separator = positional ? second : (first as { separator?: SqlFragment }).separator;\n if (!Array.isArray(items)) invalid(\"sql.join requires an array: sql.join(items, separator) or sql.join({ items, separator })\");\n if (!positional && second !== undefined) invalid(\"sql.join({ items, separator }) takes the separator inside the object\");\n if (separator !== undefined && !isSqlFragment(separator)) invalid(\"sql.join requires a sql`…` fragment as its separator\");\n const between = separator === undefined ? [\", \"] : partsOf(separator);\n const parts: Part[] = [];\n items.forEach((value, index) => {\n if (index > 0) parts.push(...between);\n parts.push(...(isSqlFragment(value) ? partsOf(value) : [Object.freeze({ value: snapshotSqlValue(value) })]));\n });\n return construct(parts);\n },\n and: (parts: readonly (SqlFragment | undefined)[]): SqlFragment => conditions({ parts, helper: \"sql.and\", operator: \" AND \", empty: \"TRUE\" }),\n or: (parts: readonly (SqlFragment | undefined)[]): SqlFragment => conditions({ parts, helper: \"sql.or\", operator: \" OR \", empty: \"FALSE\" }),\n existing: ({ column }: { column: string }): SqlFragment => {\n identifier([column]);\n return construct([Object.freeze({ row: \"existing\", column })]);\n },\n incoming: ({ column }: { column: string }): SqlFragment => {\n identifier([column]);\n return construct([Object.freeze({ row: \"incoming\", column })]);\n },\n greatest: ({ values }: { values: readonly SqlFragment[] }): SqlFragment => {\n if (!Array.isArray(values) || values.length !== 2 || values.some((value) => !isSqlFragment(value))) invalid(\"sql.greatest requires two SQL fragments\");\n return construct([Object.freeze({ greatest: Object.freeze([...values]) })]);\n },\n}));\n\n/** `sql.and` / `sql.or`: the present parts, each in parentheses, joined by the operator; the identity element when none is present. */\nfunction conditions(params: { parts: unknown; helper: string; operator: string; empty: string }): SqlFragment {\n const { parts, helper } = params;\n if (!Array.isArray(parts)) invalid(`${helper} requires an array of sql\\`…\\` fragments`);\n const present = (parts as readonly unknown[]).filter((part) => part !== undefined);\n if (present.some((part) => !isSqlFragment(part))) invalid(`${helper} takes sql\\`…\\` fragments (or undefined, which is skipped); bind a value inside a fragment`);\n if (present.length === 0) return construct([params.empty]);\n const out: Part[] = [];\n present.forEach((part, index) => {\n out.push(index === 0 ? \"(\" : `)${params.operator}(`, ...partsOf(part as SqlFragment));\n });\n out.push(\")\");\n return construct(out);\n}\n\n/** Render opaque fragments with the enclosing statement's parameter collector. */\nexport function renderSqlFragment(params: {\n dialect: SqlDialect;\n fragment: SqlFragment;\n collector: ParamCollector;\n /** Available only in a conflict update; maps logical names to physical names. */\n conflict?: { readonly table: string; readonly columns?: Readonly<Record<string, string>> };\n}): string {\n const { dialect, collector, conflict } = params;\n const render = (fragment: SqlFragment): string => renderSqlFragment({ ...params, fragment });\n const encode = (part: { readonly value: unknown; readonly decoder?: ResultDecoder<unknown> }): unknown => {\n if (part.value === undefined) invalid(\"SQL parameters cannot be undefined; use null explicitly\");\n // Never expose a fragment's captured values (or an encoder's mutable output)\n // to the driver. This isolation belongs here, not in the shared collector.\n return snapshotSqlValue(part.decoder === undefined ? part.value : part.decoder.encode({ value: snapshotSqlValue(part.value), dialect: dialect.name }));\n };\n const recording = isSqlBindingCollector({ collector });\n const recordValue = (part: { readonly value: unknown; readonly decoder?: ResultDecoder<unknown> }): string => recordSqlBinding({\n collector, source: { kind: \"literal\", value: part.value },\n transport: part.decoder === undefined ? sqlParameterTransport({ value: part.value }) : { kind: \"plain\" },\n encode: ({ value, dialect: target }) => part.decoder === undefined ? value : part.decoder.encode({ value, dialect: target.name }),\n });\n // A frame operand becomes a derived-table column. MySQL types a NULL-bound\n // parameter there as text, which turns the whole maximum into text (\"7\" for\n // 7), so a bare NULL value renders as the NULL literal. MySQL 8.4 also refuses\n // a derived-table select list that holds a nested frame beside a direct outer\n // column reference (ER_ILLEGAL_REFERENCE 1247), so `wrapped-frame` puts every\n // non-NULL operand in its own scalar subquery.\n const frameOperand = (fragment: SqlFragment): string => {\n const parts = partsOf(fragment).filter((part) => part !== \"\");\n const only = parts.length === 1 ? parts[0] : undefined;\n if (recording && only !== undefined && typeof only !== \"string\" && \"value\" in only) {\n if (only.decoder !== undefined && resultScalarContract({ decoder: only.decoder }) === undefined) throw new VibeError({ code: \"VIBE_UNSUPPORTED_CAPABILITY\", message: \"Reusable SQL cannot compile an opaque encoder whose output controls a greatest NULL frame\" });\n if (only.value === null) {\n if (only.decoder !== undefined) recordSqlBindingCheck({ collector, check: () => {\n if (encode({ ...only, value: snapshotSqlValue(only.value) }) !== null) throw new VibeError({ code: \"VIBE_UNSUPPORTED_CAPABILITY\", message: \"Reusable SQL NULL frame encoding changed its declared structure\" });\n } });\n return \"NULL\";\n }\n const text = recordValue(only);\n return dialect.greatestForm === \"wrapped-frame\" ? `(SELECT ${text})` : text;\n }\n const value = only !== undefined && typeof only !== \"string\" && \"value\" in only ? { encoded: encode(only) } : undefined;\n if (value !== undefined && value.encoded === null) return \"NULL\";\n const text = value === undefined ? render(fragment) : collector.add(value.encoded);\n return dialect.greatestForm === \"wrapped-frame\" ? `(SELECT ${text})` : text;\n };\n return partsOf(params.fragment).map((part) => {\n if (typeof part === \"string\") return part;\n if (\"value\" in part) return recording ? recordValue(part) : collector.add(encode(part));\n if (\"ident\" in part) return part.ident.map((name) => dialect.quoteIdent({ name })).join(\".\");\n if (\"row\" in part) {\n if (conflict === undefined) invalid(\"Existing/incoming row references require a conflict update\");\n const name = conflict.columns === undefined ? part.column : conflict.columns[part.column];\n if (name === undefined) invalid(`Unknown conflict-expression field \"${part.column}\"`);\n const ref = dialect.excludedRowRef;\n const qualifier = part.row === \"existing\" ? dialect.quoteIdent({ name: conflict.table })\n : ref.form === \"keyword\" ? ref.name : dialect.quoteIdent({ name: ref.alias });\n return `${qualifier}.${dialect.quoteIdent({ name })}`;\n }\n // Each operand renders once, so nesting stays linear in text and parameters.\n if (dialect.greatestForm === \"native\") return `GREATEST(${part.greatest.map(render).join(\", \")})`;\n // A node whose operands hold no greatest keeps the 2.x CASE form byte for\n // byte (its semantics, result type, collation precedence and aggregate\n // scope). Its repetitions re-render so anonymous placeholders still bind\n // one value each; only these innermost nodes repeat, so nesting stays linear.\n if (!part.greatest.some(containsGreatest)) {\n return render(part.greatest.reduce((left, right) => sql`(CASE WHEN ${left} IS NULL THEN ${right} WHEN ${right} IS NULL THEN ${left} WHEN ${left} >= ${right} THEN ${left} ELSE ${right} END)`));\n }\n const [left, right] = part.greatest.map(frameOperand) as [string, string];\n // The frame binds each operand to a column once; CASE then gives PostgreSQL's\n // NULL-ignoring maximum semantics without repeating operand SQL or values.\n const [a, b, frame] = [\"a\", \"b\", \"g\"].map((name) => dialect.quoteIdent({ name })) as [string, string, string];\n return `(SELECT CASE WHEN ${a} IS NULL THEN ${b} WHEN ${b} IS NULL THEN ${a} WHEN ${a} >= ${b} THEN ${a} ELSE ${b} END FROM (SELECT ${left} AS ${a}, ${right} AS ${b}) AS ${frame})`;\n }).join(\"\");\n}\n\n/** Resolve logical conflict references once, before rendering or executing any row. */\nexport function mapConflictColumns(params: { fragment: SqlFragment; columns: Readonly<Record<string, string>> }): SqlFragment {\n return construct(partsOf(params.fragment).map((part): Part => {\n if (typeof part === \"string\") return part;\n if (\"row\" in part) {\n const column = Object.hasOwn(params.columns, part.column) ? params.columns[part.column] : undefined;\n if (column === undefined) invalid(`Unknown conflict-expression field \"${part.column}\"`);\n return Object.freeze({ ...part, column });\n }\n if (\"greatest\" in part) return Object.freeze({ greatest: Object.freeze(part.greatest.map((fragment) => mapConflictColumns({ ...params, fragment }))) });\n return part;\n }));\n}\n\n/** Render a complete constructed query. */\nexport function compileSql(params: { dialect: SqlDialect; query: SqlFragment }): { text: string; values: unknown[] } {\n const collector = new ParamCollector(params.dialect);\n const text = renderSqlFragment({ dialect: params.dialect, fragment: params.query, collector });\n return { text, values: collector.values };\n}\n\n// ─── Plain templates ────────────────────────────────────────────────\n\n/**\n * A tagged template whose every interpolated value binds as one plain\n * parameter (no fragment, no typed array or JSON-list parameter), captured\n * without building a fragment. Its values are snapshotted when captured, as\n * `sql` snapshots them; `compileSqlTemplate` renders it.\n */\nexport class PlainSqlTemplate {\n readonly strings: TemplateStringsArray;\n readonly values: readonly unknown[];\n constructor(strings: TemplateStringsArray, values: readonly unknown[]) {\n this.strings = strings;\n this.values = values;\n }\n}\n\n/**\n * A plain template's text by strings array, then dialect. Only a frozen\n * strings array is a key: a template literal's is frozen and one object per\n * call site, so its text with plain placeholders never changes; a hand-built\n * array could be edited between calls and is rendered every time.\n */\nconst plainTemplateTexts = new WeakMap<TemplateStringsArray, WeakMap<SqlDialect, string>>();\n\nfunction assertTemplate(strings: TemplateStringsArray, values: readonly unknown[]): void {\n if (!Array.isArray(strings) || !Array.isArray(strings.raw) || strings.length !== values.length + 1 || strings.some((text) => typeof text !== \"string\")) {\n invalid(\"Use sql as a template tag\");\n }\n}\n\n/**\n * What `sql` builds for a template, except that a template whose\n * values all bind as plain parameters comes back as a `PlainSqlTemplate`:\n * the same text and values once compiled, without a fragment per call.\n */\nexport function captureSqlTemplate(params: { strings: TemplateStringsArray; values: readonly unknown[] }): SqlFragment | PlainSqlTemplate {\n const { strings, values } = params;\n for (const value of values) if (isSqlFragment(value)) return template(strings, ...values);\n // A cached text proves its frozen strings array was checked; the value count is checked on every call.\n if (!plainTemplateTexts.has(strings) || strings.length !== values.length + 1) assertTemplate(strings, values);\n const snapshots = values.map((value) => snapshotSqlValue(value));\n let plain = true;\n for (const value of snapshots) if (sqlParameterTransport({ value }).kind !== \"plain\") plain = false;\n if (plain) return new PlainSqlTemplate(strings, snapshots);\n const parts: Part[] = [];\n for (let index = 0; index < strings.length; index++) {\n parts.push(strings[index]!);\n if (index < snapshots.length) parts.push(Object.freeze({ value: snapshots[index] }));\n }\n return construct(parts);\n}\n\n/** `compileSql` over what `captureSqlTemplate` returned. */\nexport function compileSqlTemplate(params: { dialect: SqlDialect; query: SqlFragment | PlainSqlTemplate }): { text: string; values: unknown[] } {\n const { dialect, query } = params;\n if (!(query instanceof PlainSqlTemplate)) return compileSql({ dialect, query });\n const { strings } = query;\n // A fresh copy per compile, as `renderSqlFragment` encodes each value: the\n // driver never holds the captured values.\n const values = query.values.map((value) => snapshotSqlValue(value));\n // Cached only while frozen, and a frozen array stays frozen: a hit needs no check.\n const cached = plainTemplateTexts.get(strings)?.get(dialect);\n if (cached !== undefined) return { text: cached, values };\n const frozen = Object.isFrozen(strings);\n if (!frozen) assertTemplate(strings, query.values);\n let text = strings[0]!;\n for (let index = 1; index < strings.length; index++) text += dialect.placeholder({ index }) + strings[index]!;\n if (frozen) {\n let byDialect = plainTemplateTexts.get(strings);\n if (byDialect === undefined) {\n byDialect = new WeakMap();\n plainTemplateTexts.set(strings, byDialect);\n }\n byDialect.set(dialect, text);\n }\n return { text, values };\n}\n\n/** Whether a nested SQL fragment reads the incoming row (MySQL alias declaration). */\nexport function sqlUsesIncoming(params: { fragment: SqlFragment }): boolean {\n return partsOf(params.fragment).some((part) => typeof part !== \"string\" &&\n ((\"row\" in part && part.row === \"incoming\") || (\"greatest\" in part && part.greatest.some((fragment) => sqlUsesIncoming({ fragment })))));\n}\n",
|
|
45
45
|
"import { unsupportedCapability } from \"@vibeorm/schema\";\nimport type { SqlExpr } from \"./ast.ts\";\nimport { sql } from \"./composable.ts\";\nimport type { SqlFragment } from \"./composable.ts\";\nimport type { SqlDialect } from \"./dialect.ts\";\nimport { ParamCollector } from \"./params.ts\";\nimport { renderExpr } from \"./render.ts\";\nimport { renderSqlParameterTransport, sqlParameterTransport, sqlParameterWireValue } from \"./sql-bindings.ts\";\n\n// NUL never appears in rendered SQL text (`sql.text` refuses it), so it can\n// delimit the slots without colliding with the statement's own characters.\nconst SLOT: RegExp = /\\0(\\d+)\\0/;\n\n/**\n * Hands out a NUL-delimited slot per value instead of a dialect placeholder;\n * a value's transport suffix (an enum-array or JSON-list cast) stays text.\n */\nclass SlotCollector extends ParamCollector {\n private readonly target: SqlDialect;\n readonly slots: unknown[] = [];\n\n constructor(dialect: SqlDialect) {\n super(dialect);\n this.target = dialect;\n }\n\n override add(value: unknown): string {\n const transport = sqlParameterTransport({ value });\n if (transport.kind !== \"plain\" && !this.target.capabilities.scalarArrays) throw unsupportedCapability({ dialect: this.target.name, feature: \"scalarArrays\" });\n const wire = sqlParameterWireValue({ value });\n this.slots.push(Array.isArray(wire) && this.target.capabilities.scalarArrays ? arrayLiteral({ values: wire }) : wire);\n return renderSqlParameterTransport({ dialect: this.target, placeholder: `\\0${this.slots.length - 1}\\0`, transport });\n }\n}\n\nfunction quoteElement(text: string): string {\n return `\"${text.replace(/[\"\\\\]/g, (char) => `\\\\${char}`)}\"`;\n}\n\n/**\n * A scalar list as the PostgreSQL array literal every adapter's ORM path binds\n * (`formatArrayParam`): a raw statement hands a JS array to the driver as it\n * is, and not every driver can spell it for the slot's type (an enum list).\n */\nfunction arrayLiteral(params: { values: readonly unknown[] }): string {\n const elements = params.values.map((value) => {\n if (value === null || value === undefined) return \"NULL\";\n if (typeof value === \"number\" || typeof value === \"bigint\" || typeof value === \"boolean\") return String(value);\n if (value instanceof Date) return quoteElement(value.toISOString());\n if (value instanceof Uint8Array) return quoteElement(`\\\\x${Array.from(value, (byte) => byte.toString(16).padStart(2, \"0\")).join(\"\")}`);\n if (typeof value === \"string\") return quoteElement(value);\n return quoteElement(JSON.stringify(value));\n });\n return `{${elements.join(\",\")}}`;\n}\n\n/**\n * A compiled boolean expression as an opaque fragment for the caller's own\n * statement: the text the dialect renders, every bound value a fragment\n * value, so the enclosing statement numbers the placeholders.\n */\nexport function exprToFragment(params: { dialect: SqlDialect; expr: SqlExpr }): SqlFragment {\n const collector = new SlotCollector(params.dialect);\n const text = renderExpr({ dialect: params.dialect, expr: params.expr, collector });\n const pieces = text.split(SLOT);\n const strings: string[] = [];\n const values: unknown[] = [];\n for (let index = 0; index < pieces.length; index++) {\n const piece = pieces[index] as string;\n if (index % 2 === 0) strings.push(piece);\n else values.push(collector.slots[Number(piece)]);\n }\n const template = Object.assign([...strings], { raw: [...strings] }) as unknown as TemplateStringsArray;\n return sql(template, ...values);\n}\n",
|
|
46
46
|
"import type { SqlDialect } from \"../dialect.ts\";\n\n/**\n * Compare both JSON trees by decoded key/index paths, node type and atomic value.\n * Object order and JSON escape spelling do not matter; array positions do.\n * Container nodes retain empty-object/array distinctions, and multiplicity stops\n * duplicate object members from disappearing as they would in a set difference.\n * SQL NULL remains unknown. The tree input is guarded against non-JSON scalar\n * text even when SQLite evaluates this expression before the outer type guard.\n * @internal\n */\nexport function renderSqliteJsonEquality(params: { dialect: SqlDialect; left: string; right: string }): string {\n const q = (name: string): string => params.dialect.quoteIdent({ name });\n const values = q(\"__vibe_json_values\");\n const tree = q(\"__vibe_json_tree\");\n const paths = q(\"__vibe_json_paths\");\n const child = q(\"__vibe_json_child\");\n const parent = q(\"__vibe_json_parent\");\n const [side, id, parentId, key, type, atom, path] = [\"side\", \"id\", \"parent\", \"key\", \"type\", \"atom\", \"path\"].map(q);\n const left = `${values}.${q(\"left\")}`;\n const right = `${values}.${q(\"right\")}`;\n return `(SELECT CASE WHEN ${left} IS NULL THEN NULL ELSE NOT EXISTS (`\n + `WITH RECURSIVE ${tree} AS (`\n + `SELECT 1 AS ${side}, ${id}, ${parentId}, ${key}, ${type}, ${atom} FROM json_tree(CASE WHEN json_valid(${left}) THEN ${left} ELSE 'null' END) `\n + `UNION ALL SELECT -1 AS ${side}, ${id}, ${parentId}, ${key}, ${type}, ${atom} FROM json_tree(${right})`\n + `), ${paths} (${side}, ${id}, ${path}, ${type}, ${atom}) AS (`\n + `SELECT ${side}, ${id}, json_array(), ${type}, ${atom} FROM ${tree} WHERE ${parentId} IS NULL `\n + `UNION ALL SELECT ${child}.${side}, ${child}.${id}, json_insert(${parent}.${path}, '$[#]', ${child}.${key}), ${child}.${type}, ${child}.${atom} `\n + `FROM ${tree} AS ${child} JOIN ${paths} AS ${parent} ON ${child}.${side} = ${parent}.${side} AND ${child}.${parentId} = ${parent}.${id}`\n + `) SELECT 1 FROM ${paths} GROUP BY ${path}, CASE WHEN ${type} IN ('integer', 'real') THEN 'number' ELSE ${type} END, ${atom} HAVING SUM(${side}) <> 0`\n + `) END FROM (SELECT ${params.left} AS ${q(\"left\")}, ${params.right} AS ${q(\"right\")}) AS ${values})`;\n}\n",
|
|
47
|
+
"/**\n * MySQL's text for the two pieces of a dictionary of shared lists that it\n * cannot share with PostgreSQL: the distinct keys read back out of the JSON a\n * statement built (`SelectStatement.fromJsonKeys`), and a common table that\n * must be evaluated once (`CommonTable.materialized`).\n *\n * Every choice below was measured on MySQL 26.7 (500 roots, 1 000 keys):\n *\n * - A `VARCHAR` column of `JSON_TABLE` takes the CONNECTION's collation with\n * implicit coercibility. Compared with a foreign-key column it fails\n * (`ER_CANT_AGGREGATE_2COLLATIONS`) whenever the two collations differ, and\n * mysql2 connects as `utf8mb4_unicode_ci` while MySQL creates columns as\n * `utf8mb4_0900_ai_ci`.\n * - The same column declared `COLLATE utf8mb4_bin` runs, but the binary\n * collation wins the comparison and the foreign-key index is not used\n * (627 ms against 25 ms).\n * - `JSON_UNQUOTE(<a JSON value>)` is coercible like a bound literal, also\n * through a materialized derived table, so the COLUMN's collation decides\n * the comparison and its index serves it: the key matches its children\n * exactly as `WHERE fk IN (?)` matches them.\n * - `DISTINCT` on a `JSON` column compares the values exactly. On text under\n * `utf8mb4_bin` it pads (`'a'` and `'a '` are one key), which would lose an\n * entry where the key column's own collation does not pad.\n */\n\nimport { internalError } from \"@vibeorm/schema\";\nimport type { CommonTable, JsonKeys, JsonSlot, SelectStatement } from \"../ast.ts\";\nimport type { SqlDialect } from \"../dialect.ts\";\nimport { JSON_TRANSPORT } from \"../json-transport.ts\";\nimport { mysqlJsonKeyTypeOf } from \"../key-list.ts\";\n\nconst SOURCE_ALIAS = \"__vibe_s\";\nconst ROWS_ALIAS = \"__vibe_e\";\nconst SET_ALIAS = \"__vibe_k\";\n\n/** One value of a positional JSON row as a path leg, through its chunk when the row is chunked. */\nfunction slotPath(params: { slot: JsonSlot }): string {\n const { slot } = params;\n if (!Number.isSafeInteger(slot.index) || !Number.isSafeInteger(slot.width) || slot.index < 0 || slot.index >= slot.width) {\n throw internalError({ message: \"a JSON slot must be an index inside its row\" });\n }\n const size = JSON_TRANSPORT.chunkSize;\n return slot.width <= size ? `[${slot.index}]` : `[${Math.floor(slot.index / size)}][${slot.index % size}]`;\n}\n\n/**\n * The distinct keys of a JSON walk, as a derived table:\n *\n * (SELECT JSON_UNQUOTE(`__vibe_k`.`<token>`) AS `<token>`, <typed> AS `<alias>`\n * FROM (SELECT DISTINCT `__vibe_e`.`<token>`\n * FROM `<table>` AS `__vibe_s`\n * JOIN JSON_TABLE(`__vibe_s`.`<column>`, '$[*][2]' COLUMNS (`<token>` JSON PATH '$[1]')) AS `__vibe_e`)\n * AS `__vibe_k`) AS `<table.name>`\n *\n * The row path walks the lists (`[*]`) and the slots on the way; a missing\n * to-one is JSON `null`, where the column path finds nothing and the key is\n * SQL NULL. A to-one whose key column is NULL writes JSON `null` in its key\n * slot, which the column path finds as a value and `JSON_UNQUOTE` would turn\n * into the text `'null'`: it becomes SQL NULL first (`<text>` is\n * `CASE WHEN JSON_TYPE(t) = 'NULL' THEN NULL ELSE JSON_UNQUOTE(t) END`).\n * `<typed>` is the unquoted text for a string key and\n * `CAST(… AS SIGNED | UNSIGNED)` for an integer key; the caller admits no\n * other key type ({@link mysqlJsonKeyTypeOf}).\n * @internal\n */\nexport function renderMysqlJsonKeys(params: { dialect: SqlDialect; statement: SelectStatement; keys: JsonKeys }): string {\n const { dialect, statement, keys } = params;\n const quote = (name: string): string => dialect.quoteIdent({ name });\n const source = quote(SOURCE_ALIAS);\n const rows = quote(ROWS_ALIAS);\n const set = quote(SET_ALIAS);\n const rowPath = `$${keys.steps.map((step) => (step.kind === \"elements\" ? \"[*]\" : slotPath({ slot: step.slot }))).join(\"\")}`;\n const columns = keys.keys.map((key) => `${quote(key.token)} JSON PATH '$${slotPath({ slot: key.slot })}'`);\n const typed = keys.keys.flatMap((key) => {\n const type = mysqlJsonKeyTypeOf({ member: key.member });\n if (type === undefined) {\n throw internalError({ message: \"fromJsonKeys cannot type this key from its JSON text on mysql: only string and integer keys are admitted\" });\n }\n const token = `${set}.${quote(key.token)}`;\n const text = `CASE WHEN JSON_TYPE(${token}) = 'NULL' THEN NULL ELSE JSON_UNQUOTE(${token}) END`;\n const value = type === \"text\" ? text : `CAST(${text} AS ${type === \"signed\" ? \"SIGNED\" : \"UNSIGNED\"})`;\n return [`${text} AS ${quote(key.token)}`, `${value} AS ${quote(key.alias)}`];\n });\n const distinct = keys.keys.map((key) => `${rows}.${quote(key.token)}`);\n const from = `${quote(keys.source.table as string)} AS ${source} JOIN JSON_TABLE(${source}.${quote(keys.source.name)}, '${rowPath}' COLUMNS (${columns.join(\", \")})) AS ${rows}`;\n return `(SELECT ${typed.join(\", \")} FROM (SELECT DISTINCT ${distinct.join(\", \")} FROM ${from}) AS ${set}) AS ${quote(statement.table.name)}`;\n}\n\n/**\n * What follows the select of a common table that must be evaluated once.\n * MySQL has no `MATERIALIZED`: it merges a common table into each reference\n * when it can, which runs the select once per reference and, with a lateral\n * in it, refuses `JSON_TABLE` over its columns (`ER_WRONG_ARGUMENTS`,\n * \"Incorrect arguments to JSON_TABLE\": the argument would depend on the inner\n * side of an outer join). A `LIMIT` makes the table unmergeable, so a select\n * without one gets the largest row count MySQL takes; the plan then reads\n * `Materialize CTE … if needed` once and `(query plan printed elsewhere)` at\n * the other references.\n * @internal\n */\nexport function mysqlPinnedCommonTableSuffix(params: { table: CommonTable }): string {\n const { select } = params.table;\n return params.table.materialized !== true || select.limit !== undefined || select.offset !== undefined ? \"\" : \" LIMIT 18446744073709551615\";\n}\n",
|
|
47
48
|
"import type { ColRef } from \"./ast.ts\";\n\n/** PostgreSQL FUNC_MAX_ARGS: each json_build_array call accepts at most 100 values. */\nexport const JSON_TRANSPORT: Readonly<{ chunkSize: number }> = Object.freeze({ chunkSize: 100 });\n\n/** The name visible through a subselect, matching the projection renderer's alias rules. */\nexport function projectionOutputName(params: { column: ColRef }): string {\n const { column } = params;\n return column.alias ?? column.name;\n}\n",
|
|
49
|
+
"/**\n * Key-list membership (`SqlExpr` `keyList`, the public `where: { IN }`):\n * the postgres element type each member's array binds as.\n *\n * Postgres compares `\"col\" = $n` with the parameter typed as the column's\n * type WITHOUT its modifier (measured on postgres 18.6: `timestamptz(3) =\n * '…00.1234'` matches nothing, `numeric(10,2) = '1.234'` matches nothing,\n * `varchar(3) = 'abcd'` matches nothing). The unnest form must compare the\n * same way, so every member binds as `$n::<base type>[]`: a `timestamptz(3)[]`\n * cast would round `.1234` onto the stored `.123` and match a row `=` does not.\n * The base type also keeps the column's own operator and index: `bpchar` for\n * `char(n)` (pad-insensitive like `=`), `citext` (case-insensitive like `=`;\n * a `text[]` member would compare case-sensitively), the native enum's own\n * type, and text collations resolve to the column's collation, as for `=`.\n */\n\nimport { unsupportedCapability } from \"@vibeorm/schema\";\nimport type { ScalarType } from \"@vibeorm/schema\";\nimport type { KeyListMember } from \"./ast.ts\";\nimport type { SqlDialect } from \"./dialect.ts\";\n\n/** Canonical element type per scalar (the column type when no `@db.*` type is declared). */\nconst SCALAR_ELEMENT_TYPES: Readonly<Record<ScalarType, string | null>> = Object.freeze({\n String: \"text\",\n Boolean: \"bool\",\n Int: \"int4\",\n BigInt: \"int8\",\n Float: \"float8\",\n Decimal: \"numeric\",\n DateTime: \"timestamptz\",\n // Json has no equality operator a key can use; the runtime refuses it first.\n Json: null,\n Bytes: \"bytea\",\n});\n\n/**\n * Declared native base name (lowercase, spaces and modifier removed) → element\n * type. Every Prisma postgres `@db.*` type a key field can carry, plus the\n * catalog spellings `db pull` and hand-written schemas use.\n */\nconst NATIVE_ELEMENT_TYPES: Readonly<Record<string, string>> = Object.freeze({\n text: \"text\",\n varchar: \"varchar\",\n charactervarying: \"varchar\",\n char: \"bpchar\",\n character: \"bpchar\",\n bpchar: \"bpchar\",\n uuid: \"uuid\",\n citext: \"citext\",\n xml: \"xml\",\n inet: \"inet\",\n money: \"money\",\n // Quoted: an unquoted `bit` is the SQL-standard `bit(1)` and refuses `101`.\n bit: \"\\\"bit\\\"\",\n varbit: \"varbit\",\n bitvarying: \"varbit\",\n smallint: \"int2\",\n int2: \"int2\",\n integer: \"int4\",\n int: \"int4\",\n int4: \"int4\",\n bigint: \"int8\",\n int8: \"int8\",\n oid: \"oid\",\n real: \"float4\",\n float4: \"float4\",\n doubleprecision: \"float8\",\n double: \"float8\",\n float8: \"float8\",\n decimal: \"numeric\",\n numeric: \"numeric\",\n boolean: \"bool\",\n bool: \"bool\",\n timestamp: \"timestamp\",\n timestampwithouttimezone: \"timestamp\",\n timestamptz: \"timestamptz\",\n timestampwithtimezone: \"timestamptz\",\n date: \"date\",\n time: \"time\",\n timewithouttimezone: \"time\",\n timetz: \"timetz\",\n timewithtimezone: \"timetz\",\n bytea: \"bytea\",\n});\n\n/**\n * The postgres element type a key-list member's array binds as, or\n * `undefined` when the member has none (Json, or a native type this list does\n * not know). Never throws: a caller deciding whether a key list CAN carry a\n * member (the automatic OR rewrite) asks here; {@link postgresKeyListElementType}\n * is the throwing form the renderer uses.\n */\nexport function postgresKeyListElementTypeOf(params: { dialect: SqlDialect; member: KeyListMember }): string | undefined {\n const { dialect, member } = params;\n if (member.type === \"Enum\") {\n if (member.enumType === undefined) return \"text\";\n const name = dialect.quoteIdent({ name: member.enumType.name });\n return member.enumType.namespace === undefined ? name : `${dialect.quoteIdent({ name: member.enumType.namespace })}.${name}`;\n }\n const native = member.nativeType === undefined\n ? undefined\n : NATIVE_ELEMENT_TYPES[member.nativeType.toLowerCase().replace(/\\([^)]*\\)/g, \"\").replace(/\\s+/g, \"\")];\n const type = member.nativeType === undefined ? SCALAR_ELEMENT_TYPES[member.type] : native;\n return type === null ? undefined : type;\n}\n\n/**\n * The postgres element type a key-list member's array binds as\n * (`$n::<type>[]`), derived from the column's declared type facts.\n *\n * @throws VibeError `VIBE_UNSUPPORTED_CAPABILITY` for a member whose type has\n * no equality a key can use (Json) or a native type this list does not know.\n * @internal\n */\nexport function postgresKeyListElementType(params: { dialect: SqlDialect; member: KeyListMember }): string {\n const { dialect, member } = params;\n const type = postgresKeyListElementTypeOf({ dialect, member });\n if (type === undefined) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: `the key-list filter (IN) on a ${member.type}${member.nativeType === undefined ? \"\" : ` @db.${member.nativeType}`} member`,\n hint: \"IN binds every member as a typed array; filter this field with equality inside OR instead\",\n });\n }\n return type;\n}\n\n/**\n * Whether a key list must bind its rows as a row-value list of UNTYPED\n * parameters, `(a, b) IN (($1, $2), …)`, instead of typed arrays on the\n * `unnest` strategy: some member is a `DateTime` without a declared native\n * type. Its element type would be `timestamptz`, but such a field may sit on\n * a zone-less `timestamp(3)` column (a Prisma-created database;\n * docs/dialect-notes.md \"DateTime without time zone on postgres\"), where\n * `timestamp = timestamptz` converts the column through the session TimeZone\n * and matches other rows than `\"col\" = $n` (an untyped parameter the server\n * types from the column). The row-value list keeps that typing; PostgreSQL\n * plans it like the OR of conjunctions, so its planning grows with the list.\n * Shared by the renderer and the runtime's render-cache walk.\n */\nexport function keyListBindsUntypedRows(params: { members: readonly KeyListMember[] }): boolean {\n return params.members.some((member) => member.type === \"DateTime\" && member.nativeType === undefined);\n}\n\n// ─── Keys read back from JSON (`SelectStatement.fromJsonKeys`) ────────\n\n/** How MySQL types a key it reads back from JSON text; see {@link mysqlJsonKeyTypeOf}. */\nexport type MysqlJsonKeyType = \"text\" | \"signed\" | \"unsigned\";\n\nconst MYSQL_JSON_TEXT_KEY_TYPES: ReadonlySet<string> = new Set([\"varchar\", \"char\", \"character\", \"text\", \"tinytext\", \"mediumtext\", \"longtext\"]);\nconst MYSQL_JSON_INTEGER_KEY_TYPES: ReadonlySet<string> = new Set([\"int\", \"integer\", \"bigint\", \"smallint\", \"tinyint\", \"mediumint\"]);\n\n/**\n * How MySQL turns the text of a key column, read back out of JSON, into a\n * value its foreign-key column compares with through its index, or\n * `undefined` for a key type nobody measured. `\"text\"`: the unquoted JSON\n * string, compared under the column's collation like a bound literal.\n * `\"signed\"` / `\"unsigned\"`: `CAST(… AS SIGNED | UNSIGNED)`, exact over the\n * whole 64-bit range (text against a BIGINT column compares as a double).\n * Dates, decimals, floats, booleans, bytes and enums are not admitted.\n */\nexport function mysqlJsonKeyTypeOf(params: { member: KeyListMember }): MysqlJsonKeyType | undefined {\n const { member } = params;\n const native = member.nativeType?.toLowerCase().replace(/\\([^)]*\\)/g, \"\").replace(/\\s+/g, \"\");\n if (member.type === \"String\") return native === undefined || MYSQL_JSON_TEXT_KEY_TYPES.has(native) ? \"text\" : undefined;\n if (member.type !== \"Int\" && member.type !== \"BigInt\") return undefined;\n if (native === undefined) return \"signed\";\n const unsigned = native.startsWith(\"unsigned\") || native.endsWith(\"unsigned\");\n const base = native.replace(/^unsigned|unsigned$/g, \"\");\n if (!MYSQL_JSON_INTEGER_KEY_TYPES.has(base)) return undefined;\n return unsigned ? \"unsigned\" : \"signed\";\n}\n\n/**\n * Does the token of a key read back from JSON (the key's text, written on the\n * to-one's own row) need a text cast? A key the JSON carries as a number must\n * travel as text, or a 64-bit integer would reach the client rounded; a MySQL\n * string key is text already, and `CAST(… AS CHAR)` would convert it to the\n * CONNECTION's character set, where a `utf8mb3` connection turns every\n * character outside the BMP into `?` and two keys into one.\n */\nexport function jsonKeyTokenCast(params: { dialect: SqlDialect; member: KeyListMember }): boolean {\n const { dialect, member } = params;\n return !(dialect.lateralJson?.keysFromJson === \"jsonTable\" && mysqlJsonKeyTypeOf({ member }) === \"text\");\n}\n\n/**\n * Can `dialect` type every one of `members` from its JSON text, as\n * `SelectStatement.fromJsonKeys` must? PostgreSQL casts the text to the\n * key-list's base type (not a `DateTime` without a declared native type,\n * whose column may be a zone-less `timestamp`); MySQL admits the types of\n * {@link mysqlJsonKeyTypeOf}. The renderer throws for a member this refuses,\n * so the runtime asks here before it builds a dictionary level.\n */\nexport function jsonKeysTyped(params: { dialect: SqlDialect; members: readonly KeyListMember[] }): boolean {\n const { dialect, members } = params;\n if (dialect.lateralJson?.keysFromJson === \"jsonTable\") return members.every((member) => mysqlJsonKeyTypeOf({ member }) !== undefined);\n return !keyListBindsUntypedRows({ members }) && members.every((member) => postgresKeyListElementTypeOf({ dialect, member }) !== undefined);\n}\n\n// ─── Bulk insert (`InsertStatement.unnest`) ───────────────────────────\n\n/**\n * The cast after a bulk-insert column's array placeholder (`$n::<cast>[]`),\n * or `undefined` when the column has none and the insert must keep VALUES.\n * Never throws: the query builder asks here while deciding admission.\n *\n * Every type the key list knows binds its BASE type, exactly as above — the\n * INSERT's assignment then applies the column's modifier (length, precision,\n * rounding) the way it does for a VALUES parameter. Json is the one addition:\n * it binds through a text slot, `text::jsonb` (`text::json` for `@db.Json`),\n * because PostgreSQL has no assignment cast from text to jsonb and bun:sql's\n * named statements would JSON-encode pre-encoded text bound to a jsonb slot\n * (the `JsonParamCell` rule, per element).\n */\nexport function postgresBulkInsertArrayCastOf(params: { dialect: SqlDialect; member: KeyListMember }): string | undefined {\n const { dialect, member } = params;\n if (member.type === \"Json\") return member.nativeType?.trim().toLowerCase() === \"json\" ? \"text::json\" : \"text::jsonb\";\n return postgresKeyListElementTypeOf({ dialect, member });\n}\n\n/**\n * The throwing form of {@link postgresBulkInsertArrayCastOf}, for the renderer.\n *\n * @throws VibeError `VIBE_UNSUPPORTED_CAPABILITY` for a native type the\n * bulk-insert form does not know.\n * @internal\n */\nexport function postgresBulkInsertArrayCast(params: { dialect: SqlDialect; member: KeyListMember }): string {\n const { dialect, member } = params;\n const cast = postgresBulkInsertArrayCastOf({ dialect, member });\n if (cast === undefined) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: `a bulk insert binding a ${member.type}${member.nativeType === undefined ? \"\" : ` @db.${member.nativeType}`} column as a typed array`,\n hint: \"the query builder keeps VALUES for this column type\",\n });\n }\n return cast;\n}\n",
|
|
48
50
|
"import { assertSqlNamespace, unsupportedCapability } from \"@vibeorm/schema\";\nimport type { Dialect } from \"@vibeorm/schema\";\nimport type { SqlDialect } from \"../dialect.ts\";\nimport type { RenderedQuery } from \"../render.ts\";\nimport type { SqlStatement, TableRef } from \"../ast.ts\";\nimport { ParamCollector } from \"../params.ts\";\nimport type { PostgresExplainOptions, PostgresWorkloadQuery } from \"./postgres-diagnostics.ts\";\n\n/** Fixed, parameterless diagnostics whose text never varies. */\nexport type FixedDiagnosticQuery = \"postgresJsonWire\" | \"postgresServerVersion\" | \"sqliteTriggers\";\n\n/** One table of row capture's readiness read: the table as write statements name it, and the columns capture returns. */\nexport type CaptureReadinessTable = { readonly table: TableRef; readonly columns: readonly string[] };\n\n/**\n * Fixed diagnostic queries; execution and result interpretation belong to callers.\n *\n * Four variants, discriminated by `query`:\n * - a fixed transport/catalog probe,\n * - row capture's readiness read over the tables of one spec,\n * - `postgresExplain`, which wraps another statement (EPIC 5),\n * - a read-only PostgreSQL workload/catalog read (EPIC 5).\n */\nexport type DiagnosticStatement =\n | { readonly kind: \"diagnostic\"; readonly query: FixedDiagnosticQuery }\n | { readonly kind: \"diagnostic\"; readonly query: \"postgresCaptureReadiness\"; readonly tables: readonly CaptureReadinessTable[] }\n | {\n readonly kind: \"diagnostic\";\n readonly query: \"postgresExplain\";\n readonly statement: SqlStatement;\n readonly options?: PostgresExplainOptions;\n }\n | {\n readonly kind: \"diagnostic\";\n readonly query: PostgresWorkloadQuery;\n readonly schema?: string;\n readonly table?: string;\n readonly limit?: number;\n readonly key?: string;\n readonly value?: string | null;\n };\n\nconst QUERIES: Readonly<Record<FixedDiagnosticQuery, { readonly dialect: Dialect; readonly text: string }>> = Object.freeze({\n postgresJsonWire: { dialect: \"postgres\", text: `SELECT '{\"__vibeorm\":1}'::jsonb AS \"probe\"` },\n postgresServerVersion: { dialect: \"postgres\", text: `SELECT pg_catalog.current_setting('server_version_num') AS \"serverVersionNum\"` },\n sqliteTriggers: { dialect: \"sqlite\", text: \"SELECT name, tbl_name, sql FROM sqlite_master WHERE type = 'trigger'\" },\n});\n\n/** Render a diagnostic only on the dialect whose transport or catalog it describes. */\nexport function renderDiagnostic(params: { dialect: SqlDialect; query: FixedDiagnosticQuery }): RenderedQuery {\n const query = QUERIES[params.query];\n if (params.dialect.name !== query.dialect) {\n throw unsupportedCapability({ dialect: params.dialect.name, feature: params.query, hint: `this diagnostic requires ${query.dialect}` });\n }\n return { text: query.text, values: [], returning: \"none\" };\n}\n\n/** True for the fixed probes; everything else is the capture readiness read or an EPIC 5 PostgreSQL diagnostic. */\nexport function isFixedDiagnostic(params: { query: DiagnosticStatement[\"query\"] }): params is { query: FixedDiagnosticQuery } {\n return Object.hasOwn(QUERIES, params.query);\n}\n\n// ─── Row capture readiness ────────────────────────────────────────\n\n/**\n * One row per requested table, in request order. `rules`: a rewrite rule on\n * the table (read from `pg_rewrite`: `pg_class.relhasrules` stays true after\n * the last rule is dropped). `rowSecurity`: row-level security applies to the\n * current role (`row_security_active`). `missing` / `unreadable`: requested\n * columns the table lacks, and those the current role may not SELECT, as text\n * array literals (NULL when none).\n */\nconst CAPTURE_READINESS_SQL = `SELECT pg_catalog.current_setting('server_version_num') AS \"serverVersionNum\", t.\"entry\" AS \"entry\", c.oid IS NOT NULL AS \"found\", EXISTS (SELECT 1 FROM pg_catalog.pg_rewrite r WHERE r.ev_class = c.oid) AS \"rules\", COALESCE(pg_catalog.row_security_active(c.oid), false) AS \"rowSecurity\", (SELECT pg_catalog.array_agg(k.name)::text FROM pg_catalog.json_array_elements_text(t.\"columns\") AS k(name) WHERE NOT EXISTS (SELECT 1 FROM pg_catalog.pg_attribute a WHERE a.attrelid = c.oid AND a.attname = k.name AND a.attnum > 0 AND NOT a.attisdropped)) AS \"missing\", (SELECT pg_catalog.array_agg(k.name)::text FROM pg_catalog.json_array_elements_text(t.\"columns\") AS k(name) JOIN pg_catalog.pg_attribute a ON a.attrelid = c.oid AND a.attname = k.name AND a.attnum > 0 AND NOT a.attisdropped WHERE NOT pg_catalog.has_column_privilege(c.oid, a.attnum, 'SELECT')) AS \"unreadable\" FROM pg_catalog.json_to_recordset(%TABLES%::text::json) AS t(\"entry\" integer, \"table\" text, \"columns\" json) LEFT JOIN pg_catalog.pg_class c ON c.oid = pg_catalog.to_regclass(t.\"table\") ORDER BY t.\"entry\"`;\n\n/**\n * Row capture's readiness read (PostgreSQL): the server version, and for each\n * captured table what would make its `RETURNING` change a write's outcome.\n * One statement with one JSON parameter, bound as text and cast by the server\n * (bun:sql re-encodes a parameter it resolves as JSON); `to_regclass` resolves\n * each table from the same quoted name the write statements use\n * (schema-qualified when the model has a namespace, else through `search_path`).\n */\nexport function renderCaptureReadiness(params: { dialect: SqlDialect; tables: readonly CaptureReadinessTable[] }): RenderedQuery {\n const { dialect, tables } = params;\n if (dialect.name !== \"postgres\") {\n throw unsupportedCapability({ dialect: dialect.name, feature: \"postgresCaptureReadiness\", hint: \"row capture reads RETURNING old/new, PostgreSQL 18 or newer\" });\n }\n const entries = tables.map((entry, index) => {\n const { name, namespace } = entry.table;\n if (namespace !== undefined) assertSqlNamespace({ namespace, dialect: dialect.name });\n const relation = dialect.quoteIdent({ name });\n return { entry: index, table: namespace === undefined ? relation : `${dialect.quoteIdent({ name: namespace })}.${relation}`, columns: [...entry.columns] };\n });\n const collector = new ParamCollector(dialect);\n return { text: CAPTURE_READINESS_SQL.replace(\"%TABLES%\", collector.add(JSON.stringify(entries))), values: collector.values, returning: \"none\" };\n}\n",
|
|
49
51
|
"/**\n * PostgreSQL query-diagnostic SQL (EPIC 5).\n *\n * Two kinds of text live here and nowhere else:\n *\n * - the `EXPLAIN` wrapper, which prefixes an already-rendered statement and\n * keeps its placeholders and its parameters intact — a plan is never taken\n * over SQL with values inlined into the text;\n * - read-only catalog and statistics reads used to interpret a plan.\n *\n * What this module deliberately cannot express: `CREATE EXTENSION`,\n * `pg_stat_statements_reset()`, `ALTER SYSTEM`, `SET` outside a caller's own\n * transaction, and `CREATE INDEX`. Diagnostics observe a server; they never\n * change one.\n */\n\nimport { VibeError, unsupportedCapability } from \"@vibeorm/schema\";\nimport type { SqlDialect } from \"../dialect.ts\";\nimport type { RenderedQuery } from \"../render.ts\";\nimport { ParamCollector } from \"../params.ts\";\n\n// ─── EXPLAIN ──────────────────────────────────────────────────────\n\n/**\n * `EXPLAIN` options. `analyze` EXECUTES the statement — the runtime gates it\n * behind an explicit confirmation, refuses writes and multi-statement text,\n * and warns; the renderer only writes the text it is asked for.\n */\nexport type PostgresExplainOptions = {\n /** Run the statement and report observed rows and milliseconds. EXECUTES SQL. */\n readonly analyze?: boolean;\n /** Buffer accounting; only meaningful once the statement actually ran. */\n readonly buffers?: boolean;\n readonly verbose?: boolean;\n readonly settings?: boolean;\n};\n\n/**\n * Wrap a rendered statement in `EXPLAIN (…)`. Option order is fixed so the\n * text is stable and reviewable; `FORMAT JSON` is always present because the\n * parser reads the structured form, never the human text.\n */\nexport function renderPostgresExplain(params: {\n dialect: SqlDialect;\n query: RenderedQuery;\n options?: PostgresExplainOptions;\n}): RenderedQuery {\n const { dialect, query, options } = params;\n requirePostgres({ dialect, feature: \"query plan inspection (EXPLAIN)\" });\n const parts: string[] = [];\n if (options?.analyze === true) parts.push(\"ANALYZE\");\n parts.push(\"FORMAT JSON\");\n if (options?.verbose === true) parts.push(\"VERBOSE\");\n if (options?.buffers === true) parts.push(\"BUFFERS\");\n if (options?.settings === true) parts.push(\"SETTINGS\");\n return { text: `EXPLAIN (${parts.join(\", \")}) ${query.text}`, values: [...query.values], returning: \"none\" };\n}\n\n// ─── Read-only workload and catalog reads ─────────────────────────\n\n/** The closed set of read-only diagnostic reads. Every one of them is a SELECT. */\nexport type PostgresWorkloadQuery =\n | \"planContext\"\n | \"statementExtension\"\n | \"statementInfo\"\n | \"statementSnapshot\"\n | \"indexes\"\n | \"tableStats\"\n | \"sessionBegin\"\n | \"sessionReadOnly\"\n | \"sessionCommit\"\n | \"sessionRollback\"\n | \"setContext\";\n\n/** The exact SQL text of every read-only diagnostic read, for statement-level routing in tests. */\nexport const POSTGRES_DIAGNOSTIC_SQL: Readonly<Record<PostgresWorkloadQuery, string>> = Object.freeze({\n planContext: `SELECT current_user::text AS \"currentUser\", session_user::text AS \"sessionUser\", r.rolsuper AS \"superuser\", r.rolbypassrls AS \"bypassRls\", pg_catalog.current_setting('server_version_num') AS \"serverVersionNum\", pg_catalog.current_database()::text AS \"database\" FROM pg_catalog.pg_roles r WHERE r.rolname = current_user`,\n\n statementExtension: `SELECT (SELECT e.extversion FROM pg_catalog.pg_extension e WHERE e.extname = 'pg_stat_statements') AS \"installedVersion\", EXISTS (SELECT 1 FROM pg_catalog.pg_available_extensions a WHERE a.name = 'pg_stat_statements') AS \"available\", (SELECT n.nspname::text FROM pg_catalog.pg_extension e JOIN pg_catalog.pg_namespace n ON n.oid = e.extnamespace WHERE e.extname = 'pg_stat_statements') AS \"schema\", pg_catalog.current_setting('server_version_num') AS \"serverVersionNum\", pg_catalog.pg_has_role(current_user, 'pg_read_all_stats', 'MEMBER') AS \"readAllStats\", current_user::text AS \"currentUser\"`,\n\n // %SCHEMA% is substituted with dialect.quoteIdent — never with a parameter:\n // the extension's schema is an identifier, and PostgreSQL takes no parameter\n // in a FROM clause.\n statementInfo: `SELECT i.stats_reset::text AS \"statsReset\" FROM %SCHEMA%.pg_stat_statements_info i`,\n\n statementSnapshot: `SELECT s.queryid::text AS \"queryId\", s.query AS \"query\", s.calls AS \"calls\", s.total_exec_time AS \"totalExecTimeMs\", s.mean_exec_time AS \"meanExecTimeMs\", s.min_exec_time AS \"minExecTimeMs\", s.max_exec_time AS \"maxExecTimeMs\", s.rows AS \"rows\", s.shared_blks_hit AS \"sharedBlocksHit\", s.shared_blks_read AS \"sharedBlocksRead\", s.temp_blks_read AS \"tempBlocksRead\", s.temp_blks_written AS \"tempBlocksWritten\" FROM %SCHEMA%.pg_stat_statements s JOIN pg_catalog.pg_database d ON d.oid = s.dbid WHERE d.datname = pg_catalog.current_database() ORDER BY s.total_exec_time DESC LIMIT %LIMIT%`,\n\n indexes: `SELECT i.relname::text AS \"index\", pg_catalog.pg_get_indexdef(x.indexrelid) AS \"definition\", x.indisunique AS \"unique\", x.indisprimary AS \"primary\", x.indisvalid AS \"valid\", pg_catalog.pg_relation_size(x.indexrelid) AS \"indexBytes\" FROM pg_catalog.pg_index x JOIN pg_catalog.pg_class c ON c.oid = x.indrelid JOIN pg_catalog.pg_class i ON i.oid = x.indexrelid JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = %SCHEMA_PARAM% AND c.relname = %TABLE_PARAM% ORDER BY i.relname`,\n\n // Transaction control for a diagnostic session. The plan and the context that\n // shapes it must sit in ONE transaction, and the executing mode runs inside a\n // read-only transaction — defence in depth, NOT a proof of safety (a SELECT\n // can still call a function with side effects).\n sessionBegin: \"BEGIN\",\n sessionReadOnly: \"SET TRANSACTION READ ONLY\",\n sessionCommit: \"COMMIT\",\n sessionRollback: \"ROLLBACK\",\n\n // The same transaction-local settings the client binds for native RLS, with\n // the same `vibeorm.` prefix and the same `is_local = true`: a plan taken\n // under different settings is a plan of a different query.\n setContext: `SELECT pg_catalog.set_config(%KEY%, %VALUE%, true)`,\n\n tableStats: `SELECT c.reltuples::float8 AS \"estimatedRows\", c.relpages::bigint AS \"pages\", pg_catalog.pg_table_size(c.oid) AS \"tableBytes\", c.relrowsecurity AS \"rlsEnabled\", c.relforcerowsecurity AS \"rlsForced\", (SELECT s.last_analyze::text FROM pg_catalog.pg_stat_all_tables s WHERE s.relid = c.oid) AS \"lastAnalyze\", (SELECT s.last_autoanalyze::text FROM pg_catalog.pg_stat_all_tables s WHERE s.relid = c.oid) AS \"lastAutoAnalyze\" FROM pg_catalog.pg_class c JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = %SCHEMA_PARAM% AND c.relname = %TABLE_PARAM%`,\n});\n\n/** Bounds on the workload snapshot; an unbounded diagnostic read is not a diagnostic. */\nexport const POSTGRES_WORKLOAD_LIMITS: { readonly minLimit: number; readonly maxLimit: number } = Object.freeze({\n minLimit: 1,\n maxLimit: 1000,\n});\n\nfunction requirePostgres(params: { dialect: SqlDialect; feature: string }): void {\n if (params.dialect.name !== \"postgres\") {\n throw unsupportedCapability({\n dialect: params.dialect.name,\n feature: params.feature,\n hint: \"plan inspection and workload statistics are PostgreSQL-shaped; portable operation tracing works on every dialect\",\n });\n }\n}\n\n/**\n * Render one read-only diagnostic read. Identifiers (the extension's schema)\n * go through `dialect.quoteIdent`; every value goes through a\n * {@link ParamCollector}, so no caller string is ever concatenated into SQL.\n */\nexport function renderPostgresWorkload(params: {\n dialect: SqlDialect;\n query: PostgresWorkloadQuery;\n /** Extension schema (statementInfo/statementSnapshot) or table schema (indexes/tableStats). */\n schema?: string;\n table?: string;\n limit?: number;\n /** Fully-qualified setting name for `setContext` (the caller applies the prefix). */\n key?: string;\n /** Setting value for `setContext`; `null` binds the empty string, which reads as absent. */\n value?: string | null;\n}): RenderedQuery {\n const { dialect, query, schema, table, limit } = params;\n requirePostgres({ dialect, feature: `the \"${query}\" diagnostic read` });\n const collector = new ParamCollector(dialect);\n let text = POSTGRES_DIAGNOSTIC_SQL[query];\n\n if (query === \"statementInfo\" || query === \"statementSnapshot\") {\n text = text.replace(\"%SCHEMA%\", dialect.quoteIdent({ name: requireArg({ value: schema, name: \"schema\", query }) }));\n }\n if (query === \"statementSnapshot\") {\n const bounded = limit ?? 20;\n if (!Number.isInteger(bounded) || bounded < POSTGRES_WORKLOAD_LIMITS.minLimit || bounded > POSTGRES_WORKLOAD_LIMITS.maxLimit) {\n throw new VibeError({\n code: \"VIBE_CONFIG\",\n message: `workload snapshot limit must be an integer between ${POSTGRES_WORKLOAD_LIMITS.minLimit} and ${POSTGRES_WORKLOAD_LIMITS.maxLimit}, got ${String(limit)}`,\n meta: { limit },\n });\n }\n text = text.replace(\"%LIMIT%\", collector.add(bounded));\n }\n if (query === \"setContext\") {\n text = text\n .replace(\"%KEY%\", collector.add(requireArg({ value: params.key, name: \"key\", query })))\n .replace(\"%VALUE%\", collector.add(params.value ?? \"\"));\n }\n if (query === \"indexes\" || query === \"tableStats\") {\n text = text\n .replace(\"%SCHEMA_PARAM%\", collector.add(requireArg({ value: schema, name: \"schema\", query })))\n .replace(\"%TABLE_PARAM%\", collector.add(requireArg({ value: table, name: \"table\", query })));\n }\n return { text, values: collector.values, returning: \"none\" };\n}\n\nfunction requireArg(params: { value: string | undefined; name: string; query: PostgresWorkloadQuery }): string {\n const { value, name, query } = params;\n if (value === undefined || value.length === 0) {\n throw new VibeError({\n code: \"VIBE_CONFIG\",\n message: `the \"${query}\" diagnostic read requires a ${name}`,\n meta: { query, argument: name },\n });\n }\n return value;\n}\n",
|
|
50
52
|
"/** PostgreSQL readiness catalog reads and temporary-clone DDL. Runtime owns execution order. */\nimport { unsupportedCapability } from \"@vibeorm/schema\";\nimport type { SqlDialect } from \"../dialect.ts\";\nimport type { RenderedQuery } from \"../render.ts\";\nimport { ParamCollector } from \"../params.ts\";\nimport { NATIVE_RLS } from \"./postgres-rls.ts\";\n\n/** Throwaway policy identity; never installed on a live table by readiness. */\nexport const NATIVE_RLS_PROBE_POLICY: \"vibeorm_probe\" = \"vibeorm_probe\";\n\n/** The eight independent catalog reads, folded into one statement by `catalog`. */\nconst CATALOG_READS: {\n readonly identity: string;\n readonly elevatedRoles: string;\n readonly schemaControl: string;\n readonly tables: string;\n readonly policies: string;\n readonly views: string;\n readonly routines: string;\n readonly triggers: string;\n} = Object.freeze({\n identity: `SELECT current_user::text AS \"currentUser\",\n session_user::text AS \"sessionUser\",\n r.rolsuper AS \"super\",\n r.rolbypassrls AS \"bypassRls\",\n r.rolcreatedb AS \"createDb\",\n r.rolcreaterole AS \"createRole\",\n pg_catalog.current_setting('server_version_num') AS \"serverVersionNum\",\n pg_catalog.pg_backend_pid()::text AS \"backendPid\",\n pg_catalog.pg_postmaster_start_time()::text AS \"instanceStart\",\n (SELECT a.backend_start::text FROM pg_catalog.pg_stat_activity a WHERE a.pid = pg_catalog.pg_backend_pid()) AS \"backendStart\",\n pg_catalog.has_database_privilege(current_user, pg_catalog.current_database(), 'TEMP') AS \"tempPrivilege\"\nFROM pg_catalog.pg_roles r\nWHERE r.rolname = current_user`,\n\n // Membership is the RECURSIVE role graph: pg_has_role(..., 'MEMBER') is true\n // for indirect membership and for NOINHERIT roles the runtime could SET ROLE\n // into. Predefined pg_* roles are flagged wholesale — pg_execute_server_program,\n // pg_read_server_files and pg_write_server_files reach the host even with\n // rolbypassrls = false, and pg_database_owner owns the public schema.\n elevatedRoles: `SELECT r.rolname::text AS \"role\",\n r.rolsuper AS \"super\",\n r.rolbypassrls AS \"bypassRls\",\n r.rolcreaterole AS \"createRole\",\n r.rolcreatedb AS \"createDb\"\nFROM pg_catalog.pg_roles r\nWHERE r.rolname <> current_user\n AND pg_catalog.pg_has_role(current_user, r.oid, 'MEMBER')\n AND (r.rolsuper OR r.rolbypassrls OR r.rolcreaterole OR r.rolcreatedb OR r.rolname LIKE 'pg\\\\_%')\nORDER BY r.rolname`,\n\n // Owning the schema means DROP SCHEMA ... CASCADE reaches every protected\n // table inside it; owning the database reaches the schema.\n schemaControl: `SELECT n.nspname::text AS \"schema\",\n pg_catalog.pg_get_userbyid(n.nspowner)::text AS \"owner\",\n pg_catalog.pg_has_role(current_user, n.nspowner, 'MEMBER') AS \"ownerAccess\",\n EXISTS (\n SELECT 1 FROM pg_catalog.pg_roles r\n WHERE pg_catalog.pg_has_role(current_user, r.oid, 'MEMBER')\n AND pg_catalog.has_schema_privilege(r.oid, n.oid, 'CREATE')\n ) AS \"create\",\n pg_catalog.current_database()::text AS \"database\",\n pg_catalog.pg_get_userbyid(d.datdba)::text AS \"databaseOwner\",\n pg_catalog.pg_has_role(current_user, d.datdba, 'MEMBER') AS \"databaseOwnerAccess\"\nFROM pg_catalog.pg_namespace n\nJOIN pg_catalog.pg_database d ON d.datname = pg_catalog.current_database()\nWHERE n.nspname = $1`,\n\n // ownerAccess covers direct ownership, inherited membership and SET ROLE\n // reach alike. TRUNCATE is checked for every role the runtime can reach,\n // because has_table_privilege(current_user, ...) alone misses a privilege\n // held by a NOINHERIT role the runtime may SET ROLE into.\n tables: `SELECT c.relname::text AS \"table\",\n c.relrowsecurity AS \"rlsEnabled\",\n c.relforcerowsecurity AS \"rlsForced\",\n pg_catalog.pg_get_userbyid(c.relowner)::text AS \"owner\",\n pg_catalog.pg_has_role(current_user, c.relowner, 'MEMBER') AS \"ownerAccess\",\n EXISTS (\n SELECT 1 FROM pg_catalog.pg_roles r\n WHERE pg_catalog.pg_has_role(current_user, r.oid, 'MEMBER')\n AND pg_catalog.has_table_privilege(r.oid, c.oid, 'TRUNCATE')\n ) AS \"truncate\"\nFROM pg_catalog.pg_class c\nJOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\nWHERE n.nspname = $1 AND c.relkind IN ('r', 'p')\nORDER BY c.relname`,\n\n policies: `SELECT c.relname::text AS \"table\",\n p.polname::text AS \"name\",\n p.polpermissive AS \"permissive\",\n p.polcmd::text AS \"command\",\n (p.polroles = '{0}'::oid[]) AS \"toPublic\",\n (p.polqual IS NOT NULL) AS \"hasUsing\",\n (p.polwithcheck IS NOT NULL) AS \"hasWithCheck\"\nFROM pg_catalog.pg_policy p\nJOIN pg_catalog.pg_class c ON c.oid = p.polrelid\nJOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\nWHERE n.nspname = $1\nORDER BY c.relname, p.polname`,\n\n // Only objects this role can actually reach are reported.\n views: `SELECT n.nspname::text AS \"schema\",\n c.relname::text AS \"name\",\n pg_catalog.pg_get_userbyid(c.relowner)::text AS \"owner\",\n (c.relkind = 'm') AS \"materialized\",\n (COALESCE((\n SELECT o.option_value FROM pg_catalog.pg_options_to_table(c.reloptions) AS o\n WHERE o.option_name = 'security_invoker'\n ), 'false') = 'true') AS \"securityInvoker\"\nFROM pg_catalog.pg_class c\nJOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\nWHERE n.nspname NOT IN ('pg_catalog', 'information_schema')\n AND c.relkind IN ('v', 'm')\n AND EXISTS (\n SELECT 1 FROM pg_catalog.pg_roles r\n WHERE pg_catalog.pg_has_role(current_user, r.oid, 'MEMBER')\n AND pg_catalog.has_schema_privilege(r.oid, n.oid, 'USAGE')\n AND (pg_catalog.has_table_privilege(r.oid, c.oid, 'SELECT')\n OR pg_catalog.has_any_column_privilege(r.oid, c.oid, 'SELECT'))\n )\nORDER BY n.nspname, c.relname`,\n\n routines: `SELECT n.nspname::text AS \"schema\",\n p.proname::text AS \"name\",\n pg_catalog.pg_get_userbyid(p.proowner)::text AS \"owner\"\nFROM pg_catalog.pg_proc p\nJOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace\nWHERE n.nspname NOT IN ('pg_catalog', 'information_schema')\n AND p.prosecdef\n AND EXISTS (\n SELECT 1 FROM pg_catalog.pg_roles r\n WHERE pg_catalog.pg_has_role(current_user, r.oid, 'MEMBER')\n AND pg_catalog.has_schema_privilege(r.oid, n.oid, 'USAGE')\n AND pg_catalog.has_function_privilege(r.oid, p.oid, 'EXECUTE')\n )\nORDER BY n.nspname, p.proname`,\n\n triggers: `SELECT c.relname::text AS \"table\",\n t.tgname::text AS \"name\",\n f.proname::text AS \"function\",\n pg_catalog.pg_get_userbyid(f.proowner)::text AS \"owner\",\n f.prosecdef AS \"securityDefiner\"\nFROM pg_catalog.pg_trigger t\nJOIN pg_catalog.pg_class c ON c.oid = t.tgrelid\nJOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\nJOIN pg_catalog.pg_proc f ON f.oid = t.tgfoid\nWHERE n.nspname = $1\n AND NOT t.tgisinternal\n AND f.prosecdef\nORDER BY c.relname, t.tgname`,\n});\n\n/**\n * The reads `catalog` folds, in the order their JSON columns appear.\n * @internal\n */\nexport const RLS_READINESS_CATALOG_KEYS: readonly (\"identity\" | \"elevatedRoles\" | \"schemaControl\" | \"tables\" | \"policies\" | \"views\" | \"routines\" | \"triggers\")[] =\n Object.freeze([\"identity\", \"elevatedRoles\", \"schemaControl\", \"tables\", \"policies\", \"views\", \"routines\", \"triggers\"] as const);\n\n/**\n * One statement, eight result sets. Each subquery body is the single-read SQL\n * VERBATIM: same predicates, same privileges, same live catalog, read on the\n * same connection under the same role. Only the transport changes.\n *\n * `json_agg(...)::text` is deliberate. Drivers disagree about `json` (node-pg\n * parses it into JS values, others hand back the text), and a security flag\n * that arrives as the STRING \"false\" is truthy. Casting to text gives one\n * shape everywhere, which the reader parses itself — so a boolean stays a\n * boolean. `json_agg` over zero rows is NULL, which the reader can tell apart\n * from a value it could not read.\n *\n * A second, free property: the eight facts now share ONE snapshot. Under READ\n * COMMITTED eight separate statements each take their own.\n */\nconst COMPOSITE_CATALOG: string = `SELECT\\n${RLS_READINESS_CATALOG_KEYS.map(\n (key) => ` (SELECT json_agg(t)::text FROM (\\n${CATALOG_READS[key]}\\n ) t) AS \"${key}\"`,\n).join(\",\\n\")}`;\n\n/** Read-only catalog SQL; exported for exact statement routing in adapter tests. */\nexport const RLS_READINESS_SQL: {\n readonly identity: string;\n readonly elevatedRoles: string;\n readonly schemaControl: string;\n readonly tables: string;\n readonly policies: string;\n readonly expressions: string;\n readonly views: string;\n readonly routines: string;\n readonly triggers: string;\n readonly catalog: string;\n readonly readSearchPath: string;\n readonly setSearchPath: string;\n} = Object.freeze({\n identity: CATALOG_READS.identity,\n elevatedRoles: CATALOG_READS.elevatedRoles,\n schemaControl: CATALOG_READS.schemaControl,\n tables: CATALOG_READS.tables,\n policies: CATALOG_READS.policies,\n\n // Both sides of the comparison are deparsed by THIS server, in ONE\n // statement, in one transaction, under the same empty search_path.\n expressions: `SELECT c.relname::text AS \"table\",\n p.polname::text AS \"name\",\n (n.nspname <> $1) AS \"probe\",\n pg_catalog.pg_get_expr(p.polqual, p.polrelid) AS \"using\",\n pg_catalog.pg_get_expr(p.polwithcheck, p.polrelid) AS \"withCheck\"\nFROM pg_catalog.pg_policy p\nJOIN pg_catalog.pg_class c ON c.oid = p.polrelid\nJOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\nWHERE (n.nspname = $1 AND p.polname = $2)\n OR (c.relnamespace = pg_catalog.pg_my_temp_schema() AND p.polname = $3)\nORDER BY c.relname, p.polname`,\n\n views: CATALOG_READS.views,\n routines: CATALOG_READS.routines,\n triggers: CATALOG_READS.triggers,\n catalog: COMPOSITE_CATALOG,\n\n readSearchPath: `SELECT pg_catalog.current_setting('search_path') AS \"searchPath\"`,\n setSearchPath: `SELECT pg_catalog.set_config('search_path', $1, true)`,\n});\n\n/** The closed set of catalog queries used by readiness. */\nexport type RlsReadinessQuery = keyof typeof RLS_READINESS_SQL;\n\nfunction requireRls(params: { dialect: SqlDialect }): void {\n if (!params.dialect.capabilities.nativeRowLevelSecurity) {\n throw unsupportedCapability({ dialect: params.dialect.name, feature: \"nativeRowLevelSecurity\" });\n }\n}\n\n/** Parameterized catalog read, or transaction-local search-path setting. */\nexport function renderRlsReadinessQuery(params: {\n dialect: SqlDialect;\n query: RlsReadinessQuery;\n searchPath?: string;\n}): RenderedQuery {\n requireRls(params);\n const values = params.query === \"setSearchPath\" ? [params.searchPath ?? \"\"]\n : [NATIVE_RLS.tableSchema, NATIVE_RLS.policyName, NATIVE_RLS_PROBE_POLICY];\n const collector = new ParamCollector(params.dialect);\n const slots = new Map<string, string>();\n const text = RLS_READINESS_SQL[params.query].replace(/\\$(\\d+)/g, (slot, index: string) => {\n let placeholder = slots.get(slot);\n if (placeholder === undefined) {\n placeholder = collector.add(values[Number(index) - 1]);\n slots.set(slot, placeholder);\n }\n return placeholder;\n });\n return { text, values: collector.values, returning: \"none\" };\n}\n\n/** Clone only physical columns/types, on the same backend and with the same table name. */\nexport function renderRlsProbeTable(params: { dialect: SqlDialect; table: string; action: \"create\" | \"drop\" }): RenderedQuery {\n requireRls(params);\n const name = params.dialect.quoteIdent({ name: params.table });\n const schema = params.dialect.quoteIdent({ name: params.action === \"create\" ? NATIVE_RLS.tableSchema : \"pg_temp\" });\n const text = params.action === \"create\"\n ? `CREATE TEMP TABLE ${name} (LIKE ${schema}.${name}) ON COMMIT DROP`\n : `DROP TABLE ${schema}.${name}`;\n return { text, values: [], returning: \"none\" };\n}\n\n/** Save/empty/restore around migration policy DDL without replacing the operator's path. */\nexport function renderRlsPolicyPath(params: { dialect: SqlDialect; stage: \"save\" | \"empty\" | \"restore\" }): RenderedQuery {\n requireRls(params);\n const text = params.stage === \"save\"\n ? \"SELECT pg_catalog.set_config('vibeorm.rls_saved_search_path', pg_catalog.current_setting('search_path'), true)\"\n : params.stage === \"empty\"\n ? \"SELECT pg_catalog.set_config('search_path', '', true)\"\n : \"SELECT pg_catalog.set_config('search_path', pg_catalog.current_setting('vibeorm.rls_saved_search_path'), true)\";\n return { text, values: [], returning: \"none\" };\n}\n",
|
|
51
53
|
"/** Native RLS text contract. PostgreSQL/PGlite only, with no rewriting fallback. */\nimport { RlsContextError, VibeError, assertNativeRlsAdmission, assertValidSchemaIR, unsupportedCapability, validateRlsContextIR } from \"@vibeorm/schema\";\nimport type { FieldIR, ModelIR, RlsContextIR, RlsContextScalar, SchemaIR } from \"@vibeorm/schema\";\nimport type { SqlDialect } from \"../dialect.ts\";\nimport { ParamCollector } from \"../params.ts\";\nimport type { RenderedQuery } from \"../render.ts\";\n\n/** Managed identity and namespace, shared by migration and readiness checks. */\nexport const NATIVE_RLS: {\n readonly policyName: \"vibeorm_managed\";\n readonly tableSchema: \"public\";\n readonly settingPrefix: \"vibeorm.\";\n readonly parentAlias: \"parent\";\n} = Object.freeze({ policyName: \"vibeorm_managed\", tableSchema: \"public\", settingPrefix: \"vibeorm.\", parentAlias: \"parent\" });\n\nconst COLUMN_TYPES: Readonly<Record<RlsContextScalar, { readonly default: string; readonly native: Readonly<Record<string, string>> }>> = {\n String: { default: \"text\", native: { text: \"text\", varchar: \"varchar\", charactervarying: \"varchar\", uuid: \"uuid\" } },\n Boolean: { default: \"boolean\", native: { boolean: \"boolean\", bool: \"boolean\" } },\n Int: { default: \"integer\", native: { integer: \"integer\", int: \"integer\", int4: \"integer\", smallint: \"smallint\", int2: \"smallint\" } },\n BigInt: { default: \"bigint\", native: { bigint: \"bigint\", int8: \"bigint\" } },\n Float: { default: \"double precision\", native: { doubleprecision: \"double precision\", float8: \"double precision\", real: \"real\", float4: \"real\" } },\n Decimal: { default: \"numeric\", native: { numeric: \"numeric\", decimal: \"numeric\" } },\n DateTime: { default: \"timestamptz\", native: { timestamptz: \"timestamptz\", timestampwithtimezone: \"timestamptz\", timestamp: \"timestamp\", timestampwithouttimezone: \"timestamp\", date: \"date\" } },\n};\n\nfunction requireRls(params: { dialect: SqlDialect }): void {\n if (!params.dialect.capabilities.nativeRowLevelSecurity) {\n throw unsupportedCapability({ dialect: params.dialect.name, feature: \"nativeRowLevelSecurity\" });\n }\n}\n\nfunction identifier(params: { dialect: SqlDialect; name: string }): string {\n if (typeof params.name !== \"string\" || params.name.length === 0 || params.name.includes(\"\\0\") || new TextEncoder().encode(params.name).length > 63) {\n throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"Native RLS identifiers must be nonempty PostgreSQL identifiers of at most 63 bytes\" });\n }\n return params.dialect.quoteIdent({ name: params.name });\n}\n\nfunction tableRef(params: { dialect: SqlDialect; table: string; schema?: \"public\" | \"pg_temp\" }): string {\n if (params.schema !== undefined && params.schema !== \"public\" && params.schema !== \"pg_temp\") {\n throw unsupportedCapability({ dialect: params.dialect.name, feature: \"nativeRowLevelSecurity\", hint: \"Only public tables and temporary policy probes are supported\" });\n }\n return `${identifier({ dialect: params.dialect, name: params.schema ?? NATIVE_RLS.tableSchema })}.${identifier({ dialect: params.dialect, name: params.table })}`;\n}\n\nfunction query(params: { text: string; values?: unknown[] }): RenderedQuery {\n return { text: params.text, values: params.values ?? [], returning: \"none\" };\n}\n\n/** ENABLE is one statement; migrate owns transaction/order and pairs it with FORCE. */\nexport function renderRlsEnable(params: { dialect: SqlDialect; table: string }): RenderedQuery {\n requireRls(params);\n return query({ text: `ALTER TABLE ${tableRef(params)} ENABLE ROW LEVEL SECURITY` });\n}\n\n/** FORCE is separate so migration step ordering stays explicit. */\nexport function renderRlsForce(params: { dialect: SqlDialect; table: string }): RenderedQuery {\n requireRls(params);\n return query({ text: `ALTER TABLE ${tableRef(params)} FORCE ROW LEVEL SECURITY` });\n}\n\n/** DISABLE is separate; migrate owns acknowledgement and teardown ordering. */\nexport function renderRlsDisable({ dialect, table }: { dialect: SqlDialect; table: string }): RenderedQuery {\n requireRls({ dialect });\n return query({ text: `ALTER TABLE ${tableRef({ dialect, table })} DISABLE ROW LEVEL SECURITY` });\n}\n\n/** NO FORCE precedes DISABLE when migrate deliberately removes protection. */\nexport function renderRlsNoForce({ dialect, table }: { dialect: SqlDialect; table: string }): RenderedQuery {\n requireRls({ dialect });\n return query({ text: `ALTER TABLE ${tableRef({ dialect, table })} NO FORCE ROW LEVEL SECURITY` });\n}\n\n/** Drop one named policy; migrate owns child-first dependency ordering. */\nexport function renderRlsDropPolicy({ dialect, table, policyName }: {\n dialect: SqlDialect;\n table: string;\n policyName?: string;\n}): RenderedQuery {\n requireRls({ dialect });\n const name = identifier({ dialect, name: policyName ?? NATIVE_RLS.policyName });\n return query({ text: `DROP POLICY ${name} ON ${tableRef({ dialect, table })}` });\n}\n\n/**\n * Context casts use the physical base type, NOT typmods: varchar(n), numeric(p,s)\n * and timestamp(p) casts can truncate/round another identity into an allowed one.\n * Unknown/user-defined casts refuse rather than splice raw nativeType into SQL.\n */\nexport function renderRlsColumnType(params: { dialect: SqlDialect; field: FieldIR }): string {\n requireRls(params);\n const { field } = params;\n const mapping = typeof field.type === \"string\" && Object.hasOwn(COLUMN_TYPES, field.type)\n ? COLUMN_TYPES[field.type as RlsContextScalar] : undefined;\n if (mapping !== undefined && !field.isList && !field.isUnsupported) {\n if (field.nativeType === undefined) return mapping.default;\n const match = /^([a-z][a-z0-9 ]*)(?:\\(\\s*\\d+(?:\\s*,\\s*\\d+)?\\s*\\))?$/i.exec(field.nativeType.trim());\n const base = match?.[1]?.toLowerCase().replace(/\\s+/g, \"\");\n const native = base !== undefined && Object.hasOwn(mapping.native, base) ? mapping.native[base] : undefined;\n if (native !== undefined) return native;\n }\n throw unsupportedCapability({ dialect: params.dialect.name, feature: \"nativeRowLevelSecurity\", hint: `Unsupported physical ownership type on field ${field.name}` });\n}\n\nfunction protectedModel(params: { dialect: SqlDialect; schema: SchemaIR; model: string }): ModelIR {\n requireRls(params);\n assertNativeRlsAdmission({ schema: params.schema, dialect: params.dialect.name });\n assertValidSchemaIR({ schema: params.schema });\n const model = params.schema.models.find((entry) => entry.name === params.model);\n if (model === undefined || model.rls === undefined || model.rls === \"unprotected\") {\n throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"Native RLS policy rendering requires a protected model\", meta: { model: params.model } });\n }\n return model;\n}\n\n/**\n * Desired predicate only, for drift probes; it is NOT server-canonical deparse.\n * `qualify` names the table a `where` rule's columns are read from, for a\n * statement with another relation in scope (`excluded` in `ON CONFLICT … DO\n * UPDATE`); the policy itself and the drift probes render them bare.\n */\nexport function renderRlsPredicate(params: { dialect: SqlDialect; schema: SchemaIR; model: string; qualify?: string }): string {\n const model = protectedModel(params);\n return predicate({ dialect: params.dialect, schema: params.schema, model, ...(params.qualify === undefined ? {} : { qualify: params.qualify }) });\n}\n\nfunction predicate(params: { dialect: SqlDialect; schema: SchemaIR; model: ModelIR; qualify?: string }): string {\n const { dialect, schema, model } = params;\n const owner = params.qualify === undefined ? \"\" : `${identifier({ dialect, name: params.qualify })}.`;\n const rule = model.rls;\n if (rule === \"deny\") return \"false\";\n if (typeof rule === \"object\" && \"where\" in rule) {\n return Object.entries(rule.where).map(([name, ref]) => {\n const field = model.fields.find((entry) => entry.name === name)!;\n const column = identifier({ dialect, name: field.dbName ?? field.name });\n const physicalType = renderRlsColumnType({ dialect, field });\n // Context keys passed structural validation; SQL literals are declarations,\n // never request values. The empty reset sentinel MUST become SQL NULL.\n return `(${owner}${column} = NULLIF(current_setting('${NATIVE_RLS.settingPrefix}${ref.context}', true), '')::${physicalType})`;\n }).join(\" AND \");\n }\n if (typeof rule === \"object\" && \"through\" in rule) {\n const relation = model.relations.find((entry) => entry.name === rule.through)!;\n const parent = schema.models.find((entry) => entry.name === relation.targetModel)!;\n const alias = identifier({ dialect, name: NATIVE_RLS.parentAlias });\n const child = identifier({ dialect, name: params.qualify ?? model.dbName ?? model.name });\n const join = relation.fields!.map((name, index) => {\n const childField = model.fields.find((field) => field.name === name)!;\n const parentField = parent.fields.find((field) => field.name === relation.references![index])!;\n return `(${alias}.${identifier({ dialect, name: parentField.dbName ?? parentField.name })} = ${child}.${identifier({ dialect, name: childField.dbName ?? childField.name })})`;\n }).join(\" AND \");\n return `EXISTS (SELECT 1 FROM ${tableRef({ dialect, table: parent.dbName ?? parent.name })} AS ${alias} WHERE ${join})`;\n }\n throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"Native RLS requires a protected policy rule\" });\n}\n\n/** One PERMISSIVE ALL/PUBLIC policy with equal existing/proposed-row checks. */\nexport function renderRlsPolicy(params: {\n dialect: SqlDialect;\n schema: SchemaIR;\n model: string;\n policyName?: string;\n targetSchema?: \"public\" | \"pg_temp\";\n}): RenderedQuery {\n const model = protectedModel(params);\n const expression = predicate({ dialect: params.dialect, schema: params.schema, model });\n const name = identifier({ dialect: params.dialect, name: params.policyName ?? NATIVE_RLS.policyName });\n const table = tableRef({ dialect: params.dialect, table: model.dbName ?? model.name, schema: params.targetSchema });\n return query({ text: `CREATE POLICY ${name} ON ${table} AS PERMISSIVE FOR ALL TO PUBLIC USING (${expression}) WITH CHECK (${expression})` });\n}\n\n/**\n * Every declared setting, parameterized in declaration order and transaction-local.\n *\n * Optional parts travel in the SAME statement (statement-count pass, EPIC 1-2);\n * without them the text is exactly the claims statement:\n * - `role` (PGlite): binds the trusted runtime role FIRST, as {@link renderRlsRole} does;\n * - `readOnly`: switches the transaction to READ ONLY after the claims (`$all` on a\n * verified connection; PostgreSQL accepts this switch at any point of a transaction);\n * - `backend`: reports the backend as `\"backendPid\"` / `\"backendStart\"` text columns,\n * the readiness catalog read's own expressions (adapters that name no connection object).\n *\n * A context with zero keys is accepted only when one of these parts is present.\n */\nexport function renderRlsContext(params: {\n dialect: SqlDialect;\n context: RlsContextIR;\n values: Readonly<Record<string, string | null>>;\n role?: string;\n readOnly?: boolean;\n backend?: boolean;\n}): RenderedQuery {\n requireRls(params);\n const extra = params.role !== undefined || params.readOnly === true || params.backend === true;\n if (validateRlsContextIR({ context: params.context }).length !== 0 || (Object.keys(params.context).length === 0 && !extra) ||\n typeof params.values !== \"object\" || params.values === null || Array.isArray(params.values)) {\n throw new RlsContextError({ reason: \"invalid\" });\n }\n const collector = new ParamCollector(params.dialect);\n const parts: string[] = [];\n if (params.role !== undefined) parts.push(`set_config('role', ${collector.add(runtimeRoleOf({ role: params.role }))}, true)`);\n for (const [key, slot] of Object.entries(params.context)) {\n if (!Object.hasOwn(params.values, key)) throw new RlsContextError({ reason: \"missing\", key });\n const value = params.values[key];\n if ((value === null && !slot.nullable) || (value !== null && (typeof value !== \"string\" || value.length === 0 || value.includes(\"\\0\")))) {\n throw new RlsContextError({ reason: \"invalid\", key });\n }\n parts.push(`set_config(${collector.add(`${NATIVE_RLS.settingPrefix}${key}`)}, ${collector.add(value ?? \"\")}, true)`);\n }\n for (const key of Reflect.ownKeys(params.values)) {\n if (typeof key !== \"string\" || !Object.hasOwn(params.context, key)) throw new RlsContextError({ reason: \"invalid\" });\n }\n if (params.readOnly === true) parts.push(\"set_config('transaction_read_only', 'on', true)\");\n if (params.backend === true) {\n parts.push(\n `pg_catalog.pg_backend_pid()::text AS ${identifier({ dialect: params.dialect, name: \"backendPid\" })}`,\n `(SELECT a.backend_start::text FROM pg_catalog.pg_stat_activity a WHERE a.pid = pg_catalog.pg_backend_pid()) AS ${identifier({ dialect: params.dialect, name: \"backendStart\" })}`,\n );\n }\n return query({ text: `SELECT ${parts.join(\", \")}`, values: collector.values });\n}\n\nfunction runtimeRoleOf(params: { role: string }): string {\n if (typeof params.role !== \"string\" || params.role.trim().length === 0 || params.role.includes(\"\\0\")) {\n throw new VibeError({ code: \"VIBE_CONFIG\", message: \"PGlite native RLS requires a trusted nonempty runtime role name\" });\n }\n return params.role;\n}\n\n/** First transaction statement on eligible PGlite only; server roles are login roles. */\nexport function renderRlsRole(params: { dialect: SqlDialect; role: string }): RenderedQuery {\n requireRls(params);\n const role = runtimeRoleOf({ role: params.role });\n const collector = new ParamCollector(params.dialect);\n return query({ text: `SELECT set_config('role', ${collector.add(role)}, true)`, values: collector.values });\n}\n",
|
|
52
|
-
"import { renderSqliteJsonEquality } from \"./dialects/sqlite-json-equality.ts\";\nimport { JSON_TRANSPORT, projectionOutputName } from \"./json-transport.ts\";\nimport { isFixedDiagnostic, renderCaptureReadiness, renderDiagnostic } from \"./dialects/diagnostics.ts\";\nimport type { DiagnosticStatement } from \"./dialects/diagnostics.ts\";\nimport { renderPostgresExplain, renderPostgresWorkload } from \"./dialects/postgres-diagnostics.ts\";\nimport { renderRlsReadinessQuery, renderRlsProbeTable, renderRlsPolicyPath } from \"./dialects/postgres-rls-readiness.ts\";\n/**\n * Statement renderer: SQL AST × dialect → { text, values, returning }.\n *\n * The shared grammar lives here; every dialect divergence goes through an\n * explicit SqlDialect strategy field. Malformed ASTs throw VIBE_INTERNAL —\n * the AST is built by VibeORM code, so a bad shape is always our bug.\n */\n\nimport { assertSqlNamespace, internalError, unsupportedCapability } from \"@vibeorm/schema\";\nimport { isSqlFragment, renderSqlFragment, sqlUsesIncoming } from \"./composable.ts\";\nimport type { SqlFragmentSpec } from \"@vibeorm/schema\";\nimport type { ColRef, JsonParamCell, KeyTableJoin, KeyTableMember, OrderTerm, SqlStatement, RlsReadinessStatement, RlsProbeTableStatement, RlsPolicyPathStatement, SqlExpr, TableRef } from \"./ast.ts\";\nimport type {\n AggFn,\n AggRef,\n ChainResult,\n ChainCapture,\n CaptureCascade,\n CaptureCell,\n CaptureReturningColumn,\n OtherRowReturningColumn,\n ChainRowSource,\n ChainStatement,\n ChainStepStatement,\n DeleteStatement,\n GroupKeyExpression,\n GroupingSets,\n InsertSelectStatement,\n InsertStatement,\n UnchangedColumn,\n KeyListMember,\n KeyPage,\n KeyRows,\n OrderByColumn,\n LateralJoin,\n LeftJoin,\n CountSubquery,\n ReturningColumn,\n SelectExpr,\n SelectStatement,\n SetOperator,\n UpdateStatement,\n} from \"./ast.ts\";\nimport { CHAIN_VETO_PREFIX, CHAIN_VETO_TOKEN_PATTERN, isCaptureReturningColumn, isOtherRowReturningColumn, isDbNowMarker, returningColumnName, isExcludedRef, isJsonParamCell, isListSetOperation, isSetOperation, isSqlDefaultCell, isSqlKeepCell, isSourceColumnRef, isStepColumnRef } from \"./ast.ts\";\nimport type { SqlDialect } from \"./dialect.ts\";\nimport { containsPattern, endsWithPattern, startsWithPattern, strictMatchCollationPrefilter, strictMatchPattern } from \"./like.ts\";\nimport { renderAdvisoryLock, renderAdvisoryLocks, renderRowLockClause } from \"./locks.ts\";\nimport { renderDateTruncation } from \"./date-truncation.ts\";\nimport { ParamCollector } from \"./params.ts\";\nimport { isJsonListParameter, jsonListParameter } from \"./json-list-parameter.ts\";\nimport { jsonPathString } from \"./json-path.ts\";\nimport { isJsonPatchOperation, renderJsonPatch } from \"./json-patch.ts\";\nimport { keyListBindsUntypedRows, postgresBulkInsertArrayCast, postgresKeyListElementType } from \"./key-list.ts\";\nimport { renderRlsContext, renderRlsDisable, renderRlsDropPolicy, renderRlsEnable, renderRlsForce, renderRlsNoForce, renderRlsPolicy, renderRlsRole } from \"./dialects/postgres-rls.ts\";\n\n// ─── Result shape ─────────────────────────────────────────────────\n\nexport type RenderedQuery = {\n readonly text: string;\n readonly values: unknown[];\n /**\n * RETURNING status: \"native\" (rendered), \"omitted\" (requested but the dialect\n * lacks it — caller must re-select), \"none\" (not requested).\n */\n readonly returning: \"native\" | \"omitted\" | \"none\";\n};\n\n// ─── Entry point ──────────────────────────────────────────────────\n\nexport function renderStatement(params: { dialect: SqlDialect; statement: DiagnosticStatement | SqlStatement | RlsReadinessStatement | RlsProbeTableStatement | RlsPolicyPathStatement }): RenderedQuery {\n const { dialect, statement } = params;\n const collector = new ParamCollector(dialect);\n switch (statement.kind) {\n case \"diagnostic\": {\n // EPIC 5: `postgresExplain` wraps another statement, so it renders that\n // one first and keeps its parameters; the read-only workload reads take\n // their own identifiers and bounds. Everything else is a fixed probe.\n if (isFixedDiagnostic(statement)) return renderDiagnostic({ dialect, query: statement.query });\n if (statement.query === \"postgresCaptureReadiness\") return renderCaptureReadiness({ dialect, tables: statement.tables });\n if (statement.query === \"postgresExplain\") {\n return renderPostgresExplain({\n dialect,\n query: renderStatement({ dialect, statement: statement.statement }),\n ...(statement.options === undefined ? {} : { options: statement.options }),\n });\n }\n return renderPostgresWorkload({ dialect, ...statement });\n }\n case \"select\":\n return renderSelect({ dialect, statement, collector });\n case \"advisoryLocks\":\n return renderAdvisoryLocks({ dialect, keys: statement.keys, mode: statement.mode });\n case \"advisoryLock\":\n return renderAdvisoryLock({ dialect, statement, collector });\n case \"insert\":\n return renderInsert({ dialect, statement, collector });\n case \"update\":\n return renderUpdate({ dialect, statement, collector });\n case \"delete\":\n return renderDelete({ dialect, statement, collector });\n case \"chain\":\n return renderChain({ dialect, statement, collector });\n case \"rlsReadiness\": return renderRlsReadinessQuery({ dialect, ...statement });\n case \"rlsProbeTable\": return renderRlsProbeTable({ dialect, ...statement });\n case \"rlsPolicyPath\": return renderRlsPolicyPath({ dialect, ...statement });\n case \"rlsEnable\":\n return renderRlsEnable({ dialect, table: statement.table });\n case \"rlsForce\":\n return renderRlsForce({ dialect, table: statement.table });\n case \"rlsDisable\":\n return renderRlsDisable({ dialect, table: statement.table });\n case \"rlsNoForce\":\n return renderRlsNoForce({ dialect, table: statement.table });\n case \"rlsDropPolicy\":\n return renderRlsDropPolicy({ dialect, table: statement.table, policyName: statement.policyName });\n case \"rlsPolicy\":\n return renderRlsPolicy({ dialect, ...statement });\n case \"rlsContext\":\n return renderRlsContext({ dialect, ...statement });\n case \"rlsRole\":\n return renderRlsRole({ dialect, role: statement.role });\n }\n}\n\n// ─── Shared pieces ────────────────────────────────────────────────\n\nfunction quoteCol(dialect: SqlDialect, column: ColRef): string {\n if (column.coalesce !== undefined) {\n if (column.coalesce.length < 2 || column.coalesce.some((member) => member.coalesce !== undefined)) {\n throw internalError({ message: \"ColRef.coalesce needs two or more plain member references\" });\n }\n return `COALESCE(${column.coalesce.map((member) => quoteCol(dialect, member)).join(\", \")})`;\n }\n const name = dialect.quoteIdent({ name: column.name });\n const ref = column.table === undefined ? name : `${dialect.quoteIdent({ name: column.table })}.${name}`;\n // groupBy date keys: the start of the period, rendered identically at the\n // projection, GROUP BY and ORDER BY sites (refused without the capability).\n if (column.truncate !== undefined) return renderDateTruncation({ dialect, reference: ref, truncation: column.truncate });\n if (column.groupKey !== undefined) return renderGroupKey({ dialect, reference: ref, key: column.groupKey });\n if (column.enumOrdinal === true) return dialect.renderEnumOrdinal({ column: ref });\n // B4: sqlite Decimal compare/order/aggregate sites read the TEXT column as\n // REAL — the builder sets this only there, never on projections.\n if (column.castReal === true) {\n if (dialect.name !== \"sqlite\") {\n throw internalError({ message: \"ColRef.castReal is a sqlite Decimal construct\" });\n }\n return `CAST(${ref} AS REAL)`;\n }\n // D3: postgres `json` order/distinct/compare sites read the column as jsonb.\n if (column.castJsonb !== undefined) {\n if (dialect.name !== \"postgres\") {\n throw internalError({ message: \"ColRef.castJsonb is a postgres json construct\" });\n }\n return `${ref}::${column.castJsonb}`;\n }\n return ref;\n}\n\n/**\n * An ORDER BY / DISTINCT ON column of a SELECT, protected from binding to an\n * OUTPUT column. Postgres, MySQL and SQLite all resolve a bare name in ORDER\n * BY (postgres: DISTINCT ON too) to an output column of that name FIRST. When\n * the projection renames something else to the column's name — a postgres\n * `Float[]`/`Json[]` list read as `\"col\"::text AS \"col\"`, or a projection\n * alias — the bare name would order the TEXT, not the typed column\n * (`{10}` < `{1e-07}` < `{9}`). Such a reference is qualified with the\n * select's FROM name (its alias, or the derived-table name), which only ever\n * names the input column. Qualified references, casts and truncations\n * (`castReal`, `castJsonb`, `truncate` — expressions read input columns, and a\n * truncated key must repeat its GROUP BY text) and plain projections render\n * unchanged. Window ORDER BY (ROW_NUMBER) never sees output names, so it is\n * not passed through here.\n */\nfunction typedOrderRef(params: { statement: SelectStatement; column: ColRef }): ColRef {\n const { statement, column } = params;\n // MySQL and SQLite resolve an output name inside an ORDER BY expression too.\n if (column.coalesce !== undefined) return { ...column, coalesce: column.coalesce.map((member) => typedOrderRef({ statement, column: member })) };\n if (column.table !== undefined || column.castReal === true || column.castJsonb !== undefined || column.truncate !== undefined || column.groupKey !== undefined) return column;\n const renamed = statement.columns.some(\n (projected) => (projected.alias ?? projected.name) === column.name && (projected.transform !== undefined || projected.alias !== undefined),\n );\n return renamed ? { ...column, table: statement.table.alias ?? statement.table.name } : column;\n}\n\n/**\n * The cast a {@link JsonParamCell} renders after its placeholder: the\n * dialect's json param cast (`::text::jsonb` on postgres, empty elsewhere),\n * or `::text::json` for a cell bound for a postgres `json` column — the\n * server parses the text as `json` and stores it as written (D3).\n */\nfunction jsonCellCast(dialect: SqlDialect, cell: JsonParamCell): string {\n if (cell.storage !== \"json\" || dialect.jsonParamCast === \"\") return dialect.jsonParamCast;\n if (dialect.name !== \"postgres\") {\n throw internalError({ message: \"JsonParamCell storage json is a postgres construct\" });\n }\n return \"::text::json\";\n}\n\n/**\n * Projection rendering: a plain reference or its wire transform. JSON text\n * projections use the dialect primitive and keep explicit aliases. Text casts\n * preserve lossless transport on every dialect; both base64 forms remain\n * postgres-only.\n */\nfunction quoteProjection(dialect: SqlDialect, column: ColRef): string {\n if (column.transform === undefined) {\n const base = quoteCol(dialect, column);\n // A truncated key is an expression: it keeps the column's name as output name.\n const alias = column.alias ?? (column.truncate === undefined && column.groupKey === undefined ? undefined : column.name);\n if (alias === undefined) return base;\n return `${base} AS ${dialect.quoteIdent({ name: alias })}`;\n }\n if (column.transform === \"jsonText\") {\n const ref = quoteCol(dialect, column);\n const alias = dialect.quoteIdent({ name: column.alias ?? column.name });\n return `${dialect.jsonTextProjection({ expression: ref })} AS ${alias}`;\n }\n const ref = quoteCol(dialect, column);\n const alias = dialect.quoteIdent({ name: column.alias ?? column.name });\n if (column.transform === \"castText\") return `${textProjection({ dialect, expression: ref })} AS ${alias}`;\n // Lane J: MySQL's lateral subselect ships Bytes as `TO_BASE64` (a newline\n // every 76 characters, which the base64 decoder skips).\n if (column.transform === \"encodeBase64\" && dialect.name === \"mysql\") return `TO_BASE64(${ref}) AS ${alias}`;\n if (dialect.name !== \"postgres\") {\n throw internalError({ message: `${column.transform} is a postgres construct` });\n }\n if (column.transform === \"encodeArrayBase64\") return `encode(array_send(${ref}), 'base64') AS ${alias}`;\n return `encode(${ref}, 'base64') AS ${alias}`;\n}\n\nfunction textProjection(params: { dialect: SqlDialect; expression: string }): string {\n return params.dialect.name === \"postgres\" ? `${params.expression}::text`\n : `CAST(${params.expression} AS ${params.dialect.name === \"mysql\" ? \"CHAR\" : \"TEXT\"})`;\n}\n\n/**\n * A SELECT list rendered exactly as a {@link SelectStatement}'s columns are —\n * plain references and their wire transforms (`\"t\".\"scores\"::text AS\n * \"scores\"`) — for SQL assembled outside the AST (extension statements), so\n * its rows reach the driver in the same formats as `findMany`'s.\n */\nexport function renderProjection(params: { dialect: SqlDialect; columns: readonly ColRef[] }): string {\n const { dialect, columns } = params;\n return columns.map((column) => quoteProjection(dialect, column)).join(\", \");\n}\n\nfunction renderTable(dialect: SqlDialect, table: TableRef): string {\n if (table.namespace !== undefined) assertSqlNamespace({ namespace: table.namespace, dialect: dialect.name });\n const relation = dialect.quoteIdent({ name: table.name });\n const name = table.namespace === undefined ? relation : `${dialect.quoteIdent({ name: table.namespace })}.${relation}`;\n if (table.alias === undefined) return name;\n return `${name} AS ${dialect.quoteIdent({ name: table.alias })}`;\n}\n\nfunction assertCount(value: number, what: string): void {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw internalError({ message: `${what} must be a non-negative integer, got ${value}` });\n }\n}\n\nconst COMPARISON_SQL: Readonly<Record<string, string>> = {\n eq: \"=\",\n ne: \"<>\",\n gt: \">\",\n gte: \">=\",\n lt: \"<\",\n lte: \"<=\",\n};\n\n/**\n * Atomic SET arithmetic. `divide` is plain `/`: integer columns therefore\n * follow each dialect's own integer-division rule (pg/sqlite truncate, mysql\n * promotes to decimal) — pinned by the update-atomic-ops catalog case.\n */\nconst SET_OPERATION_SQL: Readonly<Record<SetOperator, string>> = {\n increment: \"+\",\n decrement: \"-\",\n multiply: \"*\",\n divide: \"/\",\n};\n\nconst AGG_FN_SQL: Readonly<Record<AggFn, string>> = {\n count: \"COUNT\",\n avg: \"AVG\",\n sum: \"SUM\",\n min: \"MIN\",\n max: \"MAX\",\n};\n\n/**\n * `COUNT(*)` / `FN(\"col\")` — shared by projections, HAVING and ORDER BY. A\n * filtered aggregate renders its predicate where it stands, so its parameters\n * bind at every site, in text order.\n */\nfunction renderAggRef(dialect: SqlDialect, agg: AggRef, collector: ParamCollector): string {\n if (agg.filter !== undefined) return renderFilteredAggregate({ dialect, agg, filter: agg.filter, collector });\n if (agg.fn === \"countAll\") return \"COUNT(*)\";\n const column = quoteCol(dialect, agg.column);\n if ((agg.fn === \"min\" || agg.fn === \"max\") && agg.enumOrder !== undefined) {\n return dialect.renderEnumMinMax({ fn: agg.fn, column, result: agg.enumOrder });\n }\n return `${AGG_FN_SQL[agg.fn]}(${column})`;\n}\n\n/**\n * `AGG(x) FILTER (WHERE …)`, or on a `caseWhen` dialect `AGG(CASE WHEN … THEN\n * x END)` — `COUNT(*)` counts `CASE WHEN … THEN 1 END` there. A row the\n * predicate leaves unknown is left out by both forms.\n */\nfunction renderFilteredAggregate(params: { dialect: SqlDialect; agg: AggRef; filter: SqlExpr; collector: ParamCollector }): string {\n const { dialect, agg, filter, collector } = params;\n if (dialect.capabilities.filteredAggregates === \"filterClause\") {\n const { filter: _filter, ...plain } = agg;\n const aggregate = renderAggRef(dialect, plain, collector);\n return `${aggregate} FILTER (WHERE ${renderExpr({ dialect, expr: filter, collector })})`;\n }\n const when = renderExpr({ dialect, expr: filter, collector });\n if (agg.fn === \"countAll\") return `COUNT(CASE WHEN ${when} THEN 1 END)`;\n const column = quoteCol(dialect, agg.column);\n if ((agg.fn === \"min\" || agg.fn === \"max\") && agg.enumOrder !== undefined) {\n return dialect.renderEnumMinMax({ fn: agg.fn, column, result: agg.enumOrder, when });\n }\n return `${AGG_FN_SQL[agg.fn]}(CASE WHEN ${when} THEN ${column} END)`;\n}\n\n/** The longest string prefix a `groupBy` prefix key takes. */\nconst MAX_GROUP_KEY_PREFIX = 1000;\n\n/**\n * A {@link GroupKeyExpression} over `reference`. The path steps and the prefix\n * length render as literals (each site of one key must repeat the identical\n * text), so they are checked again here.\n *\n * - postgres: `(\"col\" -> 'a' ->> 'b')` — `->` with a text key reads an object\n * member only, as the other dialects' quoted paths do; a `json` column\n * converts the extracted value to jsonb (`((\"col\" -> 'a' -> 'b')::jsonb #>>\n * '{}')`) so numbers and objects print as a jsonb column's do;\n * - sqlite: `json_extract` returns JSON booleans as 1/0 and numbers as\n * numbers, so a CASE over `json_type` spells each type as JSON text;\n * - mysql: `JSON_UNQUOTE` of a JSON `null` is the string `'null'`, so a CASE\n * over `JSON_TYPE` maps it to SQL NULL first.\n */\nfunction renderGroupKey(params: { dialect: SqlDialect; reference: string; key: GroupKeyExpression }): string {\n const { dialect, reference, key } = params;\n if (key.kind === \"prefix\") {\n if (!Number.isSafeInteger(key.length) || key.length < 1 || key.length > MAX_GROUP_KEY_PREFIX) {\n throw internalError({ message: `a groupBy prefix length must be an integer from 1 to ${MAX_GROUP_KEY_PREFIX}, got ${String(key.length)}` });\n }\n if (dialect.name === \"sqlite\") return `substr(${reference}, 1, ${key.length})`;\n return `${dialect.name === \"mysql\" ? \"LEFT\" : \"left\"}(${reference}, ${key.length})`;\n }\n if (key.path.length === 0 || key.path.some((step) => typeof step !== \"string\" || step.length === 0 || step.includes(\"\\u0000\"))) {\n throw internalError({ message: \"a groupBy JSON path needs one or more non-empty object keys without NUL characters\" });\n }\n switch (dialect.jsonPathMode) {\n case \"operators\": {\n const steps = key.path.map((step) => dialect.quoteStringLiteral({ value: step }));\n if (key.storage === \"json\") return `((${reference} -> ${steps.join(\" -> \")})::jsonb #>> '{}')`;\n const last = steps.length - 1;\n return `(${reference}${steps.map((step, index) => `${index === last ? \" ->> \" : \" -> \"}${step}`).join(\"\")})`;\n }\n case \"sqliteExtract\": {\n const path = dialect.quoteStringLiteral({ value: jsonPathString(key.path) });\n const extracted = `json_extract(${reference}, ${path})`;\n return `CASE json_type(${reference}, ${path}) WHEN 'text' THEN ${extracted} WHEN 'true' THEN 'true' WHEN 'false' THEN 'false' WHEN 'null' THEN NULL ELSE CAST(${extracted} AS TEXT) END`;\n }\n case \"mysqlExtract\": {\n const extracted = `JSON_EXTRACT(${reference}, ${dialect.quoteStringLiteral({ value: jsonPathString(key.path) })})`;\n return `CASE WHEN JSON_TYPE(${extracted}) = 'NULL' THEN NULL ELSE JSON_UNQUOTE(${extracted}) END`;\n }\n }\n}\n\n/**\n * `GROUP BY …` over grouping sets: `GROUPING SETS ((a, b), (a), ())`, or on a\n * `rollup` dialect `a, b WITH ROLLUP` when the sets are exactly the rollup\n * chain of the keys in order. Anything else is refused.\n */\nfunction renderGroupingSets(params: { dialect: SqlDialect; keys: readonly string[]; grouping: GroupingSets }): string {\n const { dialect, keys, grouping } = params;\n const sets = groupingSetIndexes({ keys, grouping });\n const mode = dialect.capabilities.groupingSets;\n if (mode === \"groupingSets\") {\n return `GROUPING SETS (${sets.map((set) => `(${set.map((index) => keys[index]).join(\", \")})`).join(\", \")})`;\n }\n if (mode === \"rollup\" && isRollupChain({ count: keys.length, sets })) return `${keys.join(\", \")} WITH ROLLUP`;\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: mode === \"rollup\" ? \"groupBy grouping sets other than the rollup of `by` in order\" : \"groupBy grouping sets\",\n hint: mode === \"rollup\"\n ? \"MySQL groups by `WITH ROLLUP` only: list the sets [[a, b], [a], []] for by [a, b], or run one groupBy per set\"\n : \"run one groupBy per grouping set instead\",\n });\n}\n\n/** The sets' member indexes, checked against the key count. */\nfunction groupingSetIndexes(params: { keys: readonly string[]; grouping: GroupingSets }): readonly (readonly number[])[] {\n const { keys, grouping } = params;\n if (grouping.sets.length === 0 || keys.length === 0 || keys.length > 31) {\n throw internalError({ message: \"grouping sets need one or more sets over 1 to 31 groupBy keys\" });\n }\n for (const set of grouping.sets) {\n if (set.some((index) => !Number.isSafeInteger(index) || index < 0 || index >= keys.length)) {\n throw internalError({ message: \"a grouping set names a groupBy key that does not exist\" });\n }\n }\n return grouping.sets;\n}\n\n/**\n * Are `sets` (indexes into `count` grouping keys) exactly the rollup chain\n * `[0..n-1], [0..n-2], …, []`, in any order and with members in any order?\n * The one shape a `rollup` dialect can group by (`GROUP BY … WITH ROLLUP`).\n */\nexport function isRollupChain(params: { count: number; sets: readonly (readonly number[])[] }): boolean {\n const { count, sets } = params;\n if (sets.length !== count + 1) return false;\n const lengths = new Set<number>();\n for (const set of sets) {\n const sorted = [...set].sort((left, right) => left - right);\n if (!sorted.every((index, position) => index === position)) return false;\n lengths.add(set.length);\n }\n return lengths.size === count + 1;\n}\n\n/**\n * `CASE GROUPING(k0, k1, …) WHEN <mask> THEN <set index> … END`: GROUPING sets\n * a key's bit (the rightmost key is the lowest bit) when the row's set leaves\n * the key out, so each set has one mask.\n */\nfunction renderGroupingSetIndex(params: { keys: readonly string[]; grouping: GroupingSets }): string {\n const { keys } = params;\n const sets = groupingSetIndexes(params);\n const branches = sets.map((set, position) => {\n let mask = 0;\n for (let index = 0; index < keys.length; index++) {\n if (!set.includes(index)) mask += 2 ** (keys.length - 1 - index);\n }\n return `WHEN ${mask} THEN ${position}`;\n });\n return `CASE GROUPING(${keys.join(\", \")}) ${branches.join(\" \")} END`;\n}\n\nfunction assertScalarArrays(dialect: SqlDialect, feature: string): void {\n if (dialect.capabilities.scalarArrays) return;\n throw unsupportedCapability({\n dialect: dialect.name,\n feature,\n hint: \"only postgres has native array columns — model the list as a related table instead\",\n });\n}\n\n// ─── Expressions ──────────────────────────────────────────────────\n\n/**\n * Render one boolean expression into SQL text, collecting parameters into the\n * shared collector. Public so extension delegates can AND user `where` trees\n * (compiled by the runtime) into their own statements.\n */\nexport function renderExpr(params: { dialect: SqlDialect; expr: SqlExpr; collector: ParamCollector }): string {\n const { dialect, expr, collector } = params;\n\n switch (expr.kind) {\n case \"cmp\": {\n const op = COMPARISON_SQL[expr.op];\n if (op === undefined) {\n throw internalError({ message: `unknown comparison operator \"${expr.op}\"` });\n }\n // Database-clock operand: the dialect's now() expression, never a param.\n if (isDbNowMarker(expr.value)) {\n return `${quoteCol(dialect, expr.column)} ${op} ${dialect.renderDbNow({ offsetSeconds: expr.value.offsetSeconds, collector })}`;\n }\n const compared = listComparison({ dialect, column: expr.column, value: expr.value, collector });\n return `${compared.column} ${op} ${compared.operand}`;\n }\n\n case \"cmpCol\": {\n const op = COMPARISON_SQL[expr.op];\n if (op === undefined) {\n throw internalError({ message: `unknown comparison operator \"${expr.op}\"` });\n }\n return `${quoteCol(dialect, expr.left)} ${op} ${quoteCol(dialect, expr.right)}`;\n }\n\n case \"isNull\":\n return `${quoteCol(dialect, expr.column)} IS ${expr.negate === true ? \"NOT NULL\" : \"NULL\"}`;\n\n case \"inArray\": {\n if (expr.values.length === 0) {\n // Empty IN matches nothing; empty NOT IN matches everything.\n return expr.negate === true ? \"1 = 1\" : \"1 = 0\";\n }\n const column = quoteCol(dialect, expr.column);\n if (expr.timeOfDay === true && dialect.timeOfDayInStrategy === \"equalities\") {\n const equalities = collector.addMany(expr.values).map((placeholder) => `${column} = ${placeholder}`);\n return `${expr.negate === true ? \"NOT \" : \"\"}(${equalities.join(\" OR \")})`;\n }\n if (dialect.inArrayStrategy === \"any\") {\n const base = `${column} = ANY(${collector.add(Array.isArray(expr.values) ? [...expr.values] : expr.values)})`;\n return expr.negate === true ? `NOT (${base})` : base;\n }\n const placeholders = collector.addMany(expr.values);\n return `${column} ${expr.negate === true ? \"NOT IN\" : \"IN\"} (${placeholders.join(\", \")})`;\n }\n\n case \"tupleIn\": {\n if (expr.columns.length === 0) {\n throw internalError({ message: \"tupleIn needs at least one column\" });\n }\n for (const row of expr.rows) {\n if (row.length !== expr.columns.length) {\n throw internalError({\n message: `tupleIn row has ${row.length} values for ${expr.columns.length} columns`,\n });\n }\n }\n if (expr.rows.length === 0) {\n // Same honesty as inArray: an empty membership matches nothing.\n return expr.negate === true ? \"1 = 1\" : \"1 = 0\";\n }\n const columns = expr.columns.map((column) => quoteCol(dialect, column));\n if (dialect.tupleInStrategy === \"rowValue\") {\n const tuples = expr.rows.map((row) => `(${collector.addMany(row).join(\", \")})`);\n const base = `(${columns.join(\", \")}) IN (${tuples.join(\", \")})`;\n return expr.negate === true ? `NOT (${base})` : base;\n }\n // No row constructors: an OR of COMPLETE conjunctions, never a per-column\n // IN (which would match the Cartesian product of the members).\n const conjunctions = expr.rows.map((row) => {\n const terms = row.map((value, index) => `${columns[index] as string} = ${collector.add(value)}`);\n return terms.length === 1 ? (terms[0] as string) : `(${terms.join(\" AND \")})`;\n });\n const base = conjunctions.length === 1 ? (conjunctions[0] as string) : `(${conjunctions.join(\" OR \")})`;\n return expr.negate === true ? `NOT ${base.startsWith(\"(\") ? base : `(${base})`}` : base;\n }\n\n case \"keyList\":\n return renderKeyList({ dialect, expr, collector });\n\n case \"rowCompare\": {\n // D-01: one row-value comparison; values bind in member order.\n const op = COMPARISON_SQL[expr.op];\n if (op === undefined || expr.columns.length === 0 || expr.values.length !== expr.columns.length) {\n throw internalError({ message: `rowCompare needs a range operator and one value per column (${expr.columns.length} columns, ${expr.values.length} values)` });\n }\n const columns = expr.columns.map((column) => quoteCol(dialect, column));\n const placeholders = expr.values.map((value) => collector.add(value));\n return `(${columns.join(\", \")}) ${op} (${placeholders.join(\", \")})`;\n }\n\n case \"inSelect\": {\n // D-04: the subquery shares the collector, like EXISTS.\n if (expr.columns.length === 0) throw internalError({ message: \"inSelect needs at least one column\" });\n if (dialect.name === \"mysql\" && (expr.select.limit !== undefined || expr.select.offset !== undefined)) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"LIMIT inside an IN subquery\",\n hint: \"mysql refuses LIMIT directly inside an IN subquery (error 1235); wrap the limited select in a derived table\",\n });\n }\n const columns = expr.columns.map((column) => quoteCol(dialect, column));\n if (expr.single === true && columns.length !== 1) throw internalError({ message: \"a single-row inSelect compares exactly one column\" });\n const tested = columns.length === 1 ? (columns[0] as string) : `(${columns.join(\", \")})`;\n const sub = renderSelect({ dialect, statement: expr.select, collector });\n return expr.single === true ? `${tested} = (${sub.text})` : `${tested} IN (${sub.text})`;\n }\n\n case \"like\": {\n const column = quoteCol(dialect, expr.column);\n const placeholder = collector.add(expr.pattern);\n let base: string;\n if (expr.insensitive === true) {\n base =\n dialect.insensitiveLike === \"ilike\"\n ? `${column} ILIKE ${placeholder}`\n : expr.ciCollation === true\n ? // #36: the column's declared `_ci` collation already folds case —\n // plain LIKE keeps the index usable.\n `${column} LIKE ${placeholder}`\n : `LOWER(${column}) LIKE LOWER(${placeholder})`;\n } else {\n base = `${column} LIKE ${placeholder}`;\n }\n if (dialect.likeEscapeClause !== null) {\n base = `${base}${dialect.likeEscapeClause}`;\n }\n return expr.negate === true ? `NOT (${base})` : base;\n }\n\n case \"strictMatch\": {\n const column = quoteCol(dialect, expr.column);\n let base: string;\n if (expr.op === \"equals\") {\n // pg and sqlite `=` are already byte-exact; only mysql's `_ci`\n // collations fold equality and need the BINARY cast.\n base =\n dialect.strictMatchStrategy === \"binary\"\n ? `${column} = CAST(${collector.add(expr.value)} AS BINARY)`\n : `${column} = ${collector.add(expr.value)}`;\n } else {\n const pattern = strictMatchPattern({\n strategy: dialect.strictMatchStrategy,\n op: expr.op,\n value: expr.value,\n });\n if (dialect.strictMatchStrategy === \"glob\") {\n base = `${column} GLOB ${collector.add(pattern)}`;\n } else {\n // Fix lane Q2 (D-06): mysql strict startsWith ANDs the collation\n // LIKE first (same pattern, bound first) — an index-boundable\n // superset of the byte-exact test, so the rows are unchanged.\n const prefilter = strictMatchCollationPrefilter({\n strategy: dialect.strictMatchStrategy,\n op: expr.op,\n negate: expr.negate === true,\n })\n ? `${column} LIKE ${collector.add(pattern)}${dialect.likeEscapeClause ?? \"\"}`\n : null;\n const placeholder = collector.add(pattern);\n base =\n dialect.strictMatchStrategy === \"binary\"\n ? `${column} LIKE CAST(${placeholder} AS BINARY)`\n : `${column} LIKE ${placeholder}`;\n if (dialect.likeEscapeClause !== null) base = `${base}${dialect.likeEscapeClause}`;\n if (prefilter !== null) base = `(${prefilter} AND ${base})`;\n }\n }\n return expr.negate === true ? `NOT (${base})` : base;\n }\n\n case \"and\":\n case \"or\": {\n if (expr.operands.length === 0) {\n // Neutral elements: empty AND is always-true, empty OR always-false.\n return expr.kind === \"and\" ? \"1 = 1\" : \"1 = 0\";\n }\n if (expr.operands.length === 1) {\n return renderExpr({ dialect, expr: expr.operands[0]!, collector });\n }\n const joiner = expr.kind === \"and\" ? \" AND \" : \" OR \";\n const rendered = expr.operands.map((operand) => renderExpr({ dialect, expr: operand, collector }));\n return `(${rendered.join(joiner)})`;\n }\n\n case \"not\":\n return `NOT (${renderExpr({ dialect, expr: expr.operand, collector })})`;\n\n case \"aggCmp\": {\n const op = COMPARISON_SQL[expr.op];\n if (op === undefined) {\n throw internalError({ message: `unknown comparison operator \"${expr.op}\"` });\n }\n return `${renderAggRef(dialect, expr.agg, collector)} ${op} ${collector.add(expr.value)}`;\n }\n\n case \"arrayHas\": {\n assertScalarArrays(dialect, \"the scalar-list filter \\\"has\\\"\");\n const compared = listComparison({ dialect, column: expr.column, value: expr.value, collector });\n const base = `${compared.operand} = ANY(${compared.column})`;\n return expr.negate === true ? `NOT (${base})` : base;\n }\n\n case \"arrayContainsAll\": {\n assertScalarArrays(dialect, \"the scalar-list filter \\\"hasEvery\\\"\");\n const values = Array.isArray(expr.values) ? [...expr.values] : expr.values;\n const compared = listComparison({ dialect, column: expr.column, value: values, collector });\n return `${compared.column} @> ${compared.operand}`;\n }\n\n case \"arrayOverlaps\": {\n assertScalarArrays(dialect, \"the scalar-list filter \\\"hasSome\\\"\");\n const values = Array.isArray(expr.values) ? [...expr.values] : expr.values;\n const compared = listComparison({ dialect, column: expr.column, value: values, collector });\n return `${compared.column} && ${compared.operand}`;\n }\n\n case \"arrayIsEmpty\": {\n assertScalarArrays(dialect, \"the scalar-list filter \\\"isEmpty\\\"\");\n // v1 semantics kept: array_length of NULL and of '{}' are both NULL, so\n // `isEmpty: true` matches NULL **and** empty lists.\n const column = quoteCol(dialect, expr.column);\n return `array_length(${column}, 1) IS ${expr.empty ? \"NULL\" : \"NOT NULL\"}`;\n }\n\n case \"jsonFilter\":\n return renderJsonFilter({ dialect, expr, collector });\n\n case \"exists\": {\n // The subquery shares the statement's collector, so its parameters land\n // in the single sequence exactly where they appear in the text.\n const sub = renderSelect({ dialect, statement: expr.select, collector });\n return `${expr.negate === true ? \"NOT \" : \"\"}EXISTS (${sub.text})`;\n }\n\n case \"composed\":\n return `(${renderSqlFragment({ dialect, fragment: expr.fragment, collector })})`;\n\n case \"fragment\":\n return renderFragment({ dialect, fragment: expr.fragment, collector });\n\n case \"raw\":\n return expr.text;\n }\n}\n\n// ─── Bound fragments (extension SQL plane) ───────────────────\n\n/**\n * Render a neutral bound fragment (extensions.md §3): literal text verbatim,\n * `{ param }` through the collector (single placeholder sequence), `{ ident }`\n * paths through dialect.quoteIdent. Exported so extension delegates can build\n * full statements sharing one collector with core-compiled WHERE trees.\n */\nexport function renderFragment(params: {\n dialect: SqlDialect;\n fragment: SqlFragmentSpec;\n collector: ParamCollector;\n}): string {\n const { dialect, fragment, collector } = params;\n let text = \"\";\n for (const part of fragment.parts) {\n if (typeof part === \"string\") {\n text += part;\n } else if (\"param\" in part) {\n text += collector.add(part.param);\n } else {\n text += part.ident.map((name) => dialect.quoteIdent({ name })).join(\".\");\n }\n }\n return text;\n}\n\n/**\n * Column and operand of a comparison (`cmp`, `has`, `hasEvery`, `hasSome`).\n * A Json-list operand of a `json[]` column (`Json[] @db.Json`) compares as\n * jsonb on both sides — `\"col\"::jsonb[]` against `$n::text::jsonb[]` (or\n * `$n::text::jsonb` for one element) — because `json` has no equality\n * operator at all (\"could not identify an equality operator for type json\").\n * Write sites (`push`) keep the `json` operand. Everything else renders as\n * before. The column side is added first only in text: it binds nothing.\n */\nfunction listComparison(params: {\n dialect: SqlDialect;\n column: ColRef;\n value: unknown;\n collector: ParamCollector;\n}): { readonly column: string; readonly operand: string } {\n const { dialect, column, value, collector } = params;\n if (isJsonListParameter(value) && value.storage === \"json\") {\n return {\n column: `${quoteCol(dialect, column)}::jsonb[]`,\n operand: collector.add(jsonListParameter({ value: value.value, storage: \"jsonb\" })),\n };\n }\n return { column: quoteCol(dialect, column), operand: collector.add(value) };\n}\n\ntype KeyListExpr = Extract<SqlExpr, { kind: \"keyList\" }>;\n\n/**\n * Key-list membership per `SqlDialect.keyListStrategy` (see the `keyList`\n * node): postgres binds one typed array per member and unnests them in a\n * semi-join subquery — except when a member is a `DateTime` without a\n * declared native type ({@link keyListBindsUntypedRows}): then it renders the\n * row-constructor list of untyped parameters, so each member is typed from\n * its column like `\"col\" = $n`; mysql renders the row-constructor list (an OR\n * of complete conjunctions when a member is a time of day and the dialect\n * declares `equalities` for it); sqlite renders `IN (VALUES …)`.\n */\nfunction renderKeyList(params: { dialect: SqlDialect; expr: KeyListExpr; collector: ParamCollector }): string {\n const { dialect, expr, collector } = params;\n const arity = expr.columns.length;\n if (arity === 0) throw internalError({ message: \"keyList needs at least one column\" });\n if (expr.members.length !== arity) {\n throw internalError({ message: `keyList has ${expr.members.length} members for ${arity} columns` });\n }\n for (const row of expr.rows) {\n if (row.length !== arity) throw internalError({ message: `keyList row has ${row.length} values for ${arity} columns` });\n }\n // Same honesty as inArray: an empty key list matches nothing.\n if (expr.rows.length === 0) return \"1 = 0\";\n const columns = expr.columns.map((column) => quoteCol(dialect, column));\n const tuple = arity === 1 ? (columns[0] as string) : `(${columns.join(\", \")})`;\n if (dialect.keyListStrategy === \"unnest\") {\n // Every member's element type first: a member without one (Json, an\n // unknown native type) is refused in either form.\n const types = expr.members.map((member) => postgresKeyListElementType({ dialect, member }));\n if (!keyListBindsUntypedRows({ members: expr.members })) {\n const arrays = types.map((type, index) => `${collector.add(expr.rows.map((row) => row[index]))}::${type}[]`);\n return `${tuple} IN (SELECT * FROM unnest(${arrays.join(\", \")}))`;\n }\n }\n if (dialect.timeOfDayInStrategy === \"equalities\" && expr.members.some((member) => member.timeOfDay === true)) {\n const conjunctions = expr.rows.map((row) => {\n const terms = row.map((value, index) => `${columns[index] as string} = ${collector.add(value)}`);\n return terms.length === 1 ? (terms[0] as string) : `(${terms.join(\" AND \")})`;\n });\n return conjunctions.length === 1 ? (conjunctions[0] as string) : `(${conjunctions.join(\" OR \")})`;\n }\n const tuples = expr.rows.map((row) => `(${collector.addMany(row).join(\", \")})`);\n return dialect.keyListStrategy === \"values\"\n ? `${tuple} IN (VALUES ${tuples.join(\", \")})`\n : `${tuple} IN (${tuples.join(\", \")})`;\n}\n\n// ─── Fix lane Q1 (round 3, DB-01): per-key page ─────────────────────────\n\n/** Key-list source alias of a per-key page; its members are `__vibe_k<i>` on postgres. */\nconst KEY_PAGE_KEYS = \"__vibe_keys\";\n/** Postgres: the lateral page of identity keys. */\nconst KEY_PAGE_IDS = \"__vibe_ids\";\n/** The child table re-read by identity. */\nconst KEY_PAGE_ROWS = \"__vibe_page\";\n\n/** Members of a {@link KeyPage}'s `select` the per-key page renders; any other is a malformed node. */\nconst KEY_PAGE_SELECT_MEMBERS: ReadonlySet<string> = new Set([\"kind\", \"table\", \"columns\", \"where\", \"orderBy\", \"limit\", \"offset\"]);\n\n/**\n * The per-key page (`SelectStatement.keyPage`) per `SqlDialect.keyPageStrategy`\n * — see {@link KeyPage}. Parameters join the shared sequence in text order:\n * the key tuples (FROM), then the page's own `where`.\n */\nfunction renderKeyPage(params: { dialect: SqlDialect; page: KeyPage; collector: ParamCollector }): string {\n const { dialect, page, collector } = params;\n const { select } = page;\n const arity = page.keyColumns.length;\n if (arity === 0 || page.members.length !== arity) {\n throw internalError({ message: `keyPage has ${page.members.length} members for ${arity} key columns` });\n }\n if (page.rows.length === 0) throw internalError({ message: \"keyPage needs at least one key\" });\n for (const row of page.rows) {\n if (row.length !== arity) throw internalError({ message: `keyPage row has ${row.length} values for ${arity} key columns` });\n }\n if (page.identity.length === 0) throw internalError({ message: \"keyPage needs the child's identity columns\" });\n const order = select.orderBy ?? [];\n if (order.length === 0 || order.some((term) => !(\"column\" in term))) {\n throw internalError({ message: \"keyPage needs a non-empty order of plain column terms\" });\n }\n if (select.table.alias !== undefined || Object.keys(select).some((member) => !KEY_PAGE_SELECT_MEMBERS.has(member))) {\n throw internalError({ message: \"keyPage select carries a member the per-key page cannot render\" });\n }\n if (dialect.keyPageStrategy === \"window\") {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a per-key page (keyPage)\",\n hint: \"the runtime keeps the ROW_NUMBER window on this dialect\",\n });\n }\n const pageRef = (column: ColRef): ColRef => ({ ...column, table: KEY_PAGE_ROWS });\n const projection = select.columns.map((column) => quoteProjection(dialect, pageRef(column)));\n const withKey = (keyRef: (index: number) => ColRef): SqlExpr => {\n const equalities: SqlExpr[] = page.keyColumns.map((column, index) => ({ kind: \"cmpCol\", op: \"eq\", left: column, right: keyRef(index) }));\n const operands = select.where === undefined ? equalities : [...equalities, select.where];\n return operands.length === 1 ? (operands[0] as SqlExpr) : { kind: \"and\", operands };\n };\n const keyPage = (where: SqlExpr, rank: boolean): SelectStatement => ({\n kind: \"select\",\n table: select.table,\n columns: page.identity,\n ...(rank ? { rowNumber: { partitionBy: page.keyColumns, orderBy: order, alias: page.rankAlias } } : {}),\n where,\n orderBy: order,\n ...(select.limit === undefined ? {} : { limit: select.limit }),\n ...(select.offset === undefined ? {} : { offset: select.offset }),\n });\n const rows = renderTable(dialect, { ...select.table, alias: KEY_PAGE_ROWS });\n const keyAlias = select.table.name === KEY_PAGE_KEYS ? `${KEY_PAGE_KEYS}_1` : KEY_PAGE_KEYS;\n const keys = dialect.quoteIdent({ name: keyAlias });\n\n if (dialect.keyPageStrategy === \"lateral\") {\n // One typed array per member, exactly the key-list filter's element types.\n if (keyListBindsUntypedRows({ members: page.members })) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a per-key page over a DateTime key without a declared native type\",\n hint: \"the runtime keeps the ROW_NUMBER window for such keys\",\n });\n }\n const types = page.members.map((member) => postgresKeyListElementType({ dialect, member }));\n const arrays = types.map((type, index) => `${collector.add(page.rows.map((row) => row[index]))}::${type}[]`);\n const names = page.keyColumns.map((_, index) => dialect.quoteIdent({ name: `__vibe_k${index}` }));\n const ids = renderSelect({ dialect, statement: keyPage(withKey((index) => ({ table: keyAlias, name: `__vibe_k${index}` })), true), collector });\n const on = page.identity.map((column) => `${quoteCol(dialect, pageRef(column))} = ${quoteCol(dialect, { table: KEY_PAGE_IDS, name: column.name })}`).join(\" AND \");\n const rank = quoteCol(dialect, { table: KEY_PAGE_IDS, name: page.rankAlias });\n return `SELECT ${[...projection, rank].join(\", \")} FROM unnest(${arrays.join(\", \")}) AS ${keys} (${names.join(\", \")}) CROSS JOIN LATERAL (${ids.text}) AS ${dialect.quoteIdent({ name: KEY_PAGE_IDS })} INNER JOIN ${rows} ON ${on}`;\n }\n\n // inLimit: the rank is re-derived over the fetched page — rendered first,\n // it is text order; plain column terms bind nothing.\n const partition = page.keyColumns.map((column) => quoteCol(dialect, pageRef(column))).join(\", \");\n const rankOrder = order.map((term) => renderOrderTerm({ dialect, term: { ...term, column: pageRef((term as OrderByColumn).column) }, collector })).join(\", \");\n const rank = `ROW_NUMBER() OVER (PARTITION BY ${partition} ORDER BY ${rankOrder}) AS ${dialect.quoteIdent({ name: page.rankAlias })}`;\n const tuples = page.rows.map((row) => `(${collector.addMany(row).join(\", \")})`);\n // SQLite names a VALUES clause's columns column1, column2, … (documented).\n const membership = renderExpr({\n dialect,\n expr: { kind: \"inSelect\", columns: page.identity.map(pageRef), select: keyPage(withKey((index) => ({ table: keyAlias, name: `column${index + 1}` })), false) },\n collector,\n });\n return `SELECT ${[...projection, rank].join(\", \")} FROM (VALUES ${tuples.join(\", \")}) AS ${keys} INNER JOIN ${rows} ON ${membership}`;\n}\n\n// ─── Statement-count pass EPIC 4 (ST-07): key rows ───\n\n/**\n * The derived table of `SelectStatement.fromKeys` (see {@link KeyRows}):\n * `unnest($1::<type>[], …) AS \"<name>\" (\"<column>\", …)` — one typed array per\n * column, bound at the FROM position of the shared parameter sequence.\n *\n * @throws VibeError `VIBE_UNSUPPORTED_CAPABILITY` on a dialect without the\n * typed-array key list (`keyListStrategy` other than `unnest`), for a\n * `DateTime` member without a declared native type, and for a member type\n * the key list does not know.\n */\nfunction renderKeyRows(params: { dialect: SqlDialect; statement: SelectStatement; keys: KeyRows; collector: ParamCollector }): string {\n const { dialect, statement, keys, collector } = params;\n if (statement.fromSelect !== undefined || statement.keyPage !== undefined || statement.fromUnion !== undefined || statement.table.alias !== undefined) {\n throw internalError({ message: \"fromKeys uses table.name as the derived-table alias — fromSelect, keyPage, fromUnion and table.alias must be unset\" });\n }\n // A lock over bound key rows would lock nothing.\n if (statement.rowLock !== undefined) throw internalError({ message: \"a locking read cannot read from key rows\" });\n const arity = keys.columns.length;\n if (arity === 0 || keys.members.length !== arity) {\n throw internalError({ message: `fromKeys has ${keys.members.length} members for ${arity} columns` });\n }\n if (keys.rows.length === 0) throw internalError({ message: \"fromKeys needs at least one key row\" });\n for (const row of keys.rows) {\n if (row.length !== arity) throw internalError({ message: `fromKeys row has ${row.length} values for ${arity} columns` });\n }\n if (dialect.keyListStrategy !== \"unnest\" || keyListBindsUntypedRows({ members: keys.members })) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: dialect.keyListStrategy !== \"unnest\" ? \"a key-rows FROM (fromKeys)\" : \"a key-rows FROM over a DateTime key without a declared native type\",\n hint: \"the runtime keeps the per-relation loads for this write\",\n });\n }\n const types = keys.members.map((member) => postgresKeyListElementType({ dialect, member }));\n const arrays = types.map((type, index) => `${collector.add(keys.rows.map((row) => row[index]))}::${type}[]`);\n const names = keys.columns.map((name) => dialect.quoteIdent({ name }));\n return `unnest(${arrays.join(\", \")}) AS ${dialect.quoteIdent({ name: statement.table.name })} (${names.join(\", \")})`;\n}\n\n// ─── Fix lane Q2 (round 3, DB-07): union page ───\n\n/** Members a {@link SelectStatement.fromUnion} branch may carry; any other is a malformed node. */\nconst UNION_BRANCH_MEMBERS: ReadonlySet<string> = new Set([\"kind\", \"table\", \"columns\", \"where\", \"orderBy\", \"limit\"]);\n\n/**\n * The `UNION ALL` of a union page (`SelectStatement.fromUnion`), each branch\n * in its own derived table `\"__vibe_u<i>\"` — see the field's docs. Branches\n * render (and bind) in order.\n */\nfunction renderUnionPage(params: { dialect: SqlDialect; statement: SelectStatement; collector: ParamCollector }): string {\n const { dialect, statement, collector } = params;\n const branches = statement.fromUnion ?? [];\n if (branches.length < 2) throw internalError({ message: \"fromUnion needs at least two branches\" });\n if (statement.fromSelect !== undefined || statement.keyPage !== undefined || statement.table.alias !== undefined) {\n throw internalError({ message: \"fromUnion uses table.name as the derived-table alias — fromSelect, keyPage and table.alias must be unset\" });\n }\n // A lock over a derived union would not lock the base rows the branches read.\n if (statement.rowLock !== undefined) throw internalError({ message: \"a locking read cannot read from a union page\" });\n const outputNames = (branch: SelectStatement): string => branch.columns.map((column) => column.alias ?? column.name).join(\"\\u0000\");\n const names = outputNames(branches[0] as SelectStatement);\n return branches\n .map((branch, index) => {\n if (branch.columns.length === 0 || Object.keys(branch).some((member) => !UNION_BRANCH_MEMBERS.has(member))) {\n throw internalError({ message: \"a fromUnion branch must be a plain SELECT <columns> FROM <table> [WHERE] [ORDER BY] [LIMIT]\" });\n }\n if (outputNames(branch) !== names) throw internalError({ message: \"fromUnion branches must project the same output names in the same order\" });\n const inner = renderSelect({ dialect, statement: branch, collector });\n return `SELECT * FROM (${inner.text}) AS ${dialect.quoteIdent({ name: `__vibe_u${index}` })}`;\n })\n .join(\" UNION ALL \");\n}\n\ntype JsonFilterExpr = Extract<SqlExpr, { kind: \"jsonFilter\" }>;\n\nfunction jsonStringPattern(params: { expr: JsonFilterExpr }): string {\n const { expr } = params;\n if (typeof expr.value !== \"string\") {\n throw internalError({ message: `json ${expr.op} expects a string operand` });\n }\n if (expr.op === \"string_contains\") return containsPattern({ raw: expr.value });\n if (expr.op === \"string_starts_with\") return startsWithPattern({ raw: expr.value });\n return endsWithPattern({ raw: expr.value });\n}\n\n/** Case-[in]sensitive LIKE over an extracted-text expression, per dialect. */\nfunction renderJsonLike(params: {\n dialect: SqlDialect;\n target: string;\n expr: JsonFilterExpr;\n collector: ParamCollector;\n}): string {\n const { dialect, target, expr, collector } = params;\n const placeholder = collector.add(jsonStringPattern({ expr }));\n let base: string;\n if (expr.insensitive === true) {\n base =\n dialect.insensitiveLike === \"ilike\"\n ? `${target} ILIKE ${placeholder}`\n : `LOWER(${target}) LIKE LOWER(${placeholder})`;\n } else {\n base = `${target} LIKE ${placeholder}`;\n }\n if (dialect.likeEscapeClause !== null) base = `${base}${dialect.likeEscapeClause}`;\n return expr.negate === true ? `NOT (${base})` : base;\n}\n\n/**\n * Member presence as a three-valued predicate: TRUE or FALSE for a present\n * document, NULL for a SQL NULL column, so `NOT` keeps NULL columns out (the\n * rule every other path filter follows).\n */\nfunction renderJsonExists(params: { present: string; column: string; exists: boolean }): string {\n const { present, column, exists } = params;\n return `CASE WHEN ${present} THEN ${exists ? \"TRUE\" : \"FALSE\"} WHEN ${column} IS NOT NULL THEN ${exists ? \"FALSE\" : \"TRUE\"} END`;\n}\n\n/**\n * One JSON path predicate, per dialect strategy. The path is BOUND: a `text[]`\n * parameter on postgres (cast so string-literal array forms work too), a\n * `$.a.b` path string elsewhere. Values bind as JSON text for json/jsonb\n * comparisons and as LIKE patterns for the string ops.\n */\nfunction renderJsonFilter(params: {\n dialect: SqlDialect;\n expr: JsonFilterExpr;\n collector: ParamCollector;\n}): string {\n const { dialect, expr, collector } = params;\n if (!dialect.supportedJsonOps.includes(expr.op)) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: `the json filter \"${expr.op}\"`,\n hint: `this dialect can express: ${dialect.supportedJsonOps.join(\", \")}`,\n });\n }\n const cmp = expr.negate === true ? \"<>\" : \"=\";\n\n if (dialect.jsonPathMode === \"operators\") {\n const column = quoteCol(dialect, expr.column);\n const pathParam = `${collector.add(expr.path.map(String))}::text[]`;\n // A `json` column (`Json @db.Json`) has no `=`, `<>` or `@>` — postgres\n // defines them for jsonb only (SQLSTATE 42883 `json = jsonb`). The\n // value-comparing ops cast the EXTRACTED value, not the column: the\n // result is jsonb equality and containment, a jsonb column's semantics\n // (json navigation also takes the LAST of duplicate keys), and only the\n // sub-value is converted — ~40% faster than casting the whole document\n // on 20,000 4-KB rows (PostgreSQL 18.6). The string ops read the same\n // jsonb value as text (`#>> '{}'`): json's own `#>>` returns the STORED\n // spelling of a non-string value (`1e2`, `[1, 2]`, both duplicate keys)\n // where a jsonb column reads `100`, `[1, 2]` and the last key. For a\n // string value both forms return the same unescaped text.\n const extracted = expr.storage === \"json\" ? `(${column} #> ${pathParam})::jsonb` : `(${column} #> ${pathParam})`;\n switch (expr.op) {\n case \"exists\": {\n // `#>` reads a key PostgreSQL can parse as an integer (`\"0\"`, ` 1`,\n // `+1`) as an index into an array, so such a step also requires its\n // container to be an object. Presence needs no jsonb cast on a `json`\n // column: json's own `#>` and `json_typeof` give the same answer.\n const typeOf = expr.storage === \"json\" ? \"json_typeof\" : \"jsonb_typeof\";\n const guards = expr.path.flatMap((segment, index) => {\n if (typeof segment !== \"string\" || !/^\\s*[+-]?\\d/.test(segment)) return [];\n const container = index === 0 ? column : `${column} #> ${collector.add(expr.path.slice(0, index).map(String))}::text[]`;\n return [` AND ${typeOf}(${container}) = 'object'`];\n });\n return renderJsonExists({ present: `(${column} #> ${pathParam}) IS NOT NULL${guards.join(\"\")}`, column, exists: expr.value === true });\n }\n case \"equals\":\n return `${extracted} ${cmp} ${collector.add(JSON.stringify(expr.value))}${dialect.jsonParamCast}`;\n case \"string_contains\":\n case \"string_starts_with\":\n case \"string_ends_with\": {\n const target = expr.storage === \"json\" ? `(${extracted} #>> '{}')` : `(${column} #>> ${pathParam})`;\n return renderJsonLike({ dialect, target, expr, collector });\n }\n case \"array_contains\":\n return `${extracted} @> ${collector.add(JSON.stringify(expr.value))}${dialect.jsonParamCast}`;\n case \"array_starts_with\":\n return `${extracted} -> 0 = ${collector.add(JSON.stringify(expr.value))}${dialect.jsonParamCast}`;\n case \"array_ends_with\":\n return `${extracted} -> -1 = ${collector.add(JSON.stringify(expr.value))}${dialect.jsonParamCast}`;\n }\n }\n\n if (dialect.jsonPathMode === \"sqliteExtract\") {\n const column = quoteCol(dialect, expr.column);\n // JSON booleans surface as SQL 0/1, so value equality alone loses type.\n const typeMatches = (type: string, value: unknown): string => {\n if (typeof value === \"number\") return `${type} IN ('integer', 'real')`;\n const tag = typeof value === \"boolean\" ? String(value)\n : value === null ? \"null\" : Array.isArray(value) ? \"array\"\n : typeof value === \"object\" ? \"object\" : \"text\";\n return `${type} = '${tag}'`;\n };\n const compareExtracted = (path: string, value: unknown): string => {\n const type = `json_type(${column}, ${collector.add(path)})`;\n const guard = typeMatches(type, value);\n let base = guard;\n if (value !== null) {\n const target = `json_extract(${column}, ${collector.add(path)})`;\n const bound = typeof value === \"boolean\" ? (value ? 1 : 0) : value;\n const comparison = typeof value === \"object\"\n ? renderSqliteJsonEquality({ dialect, left: target, right: collector.add(JSON.stringify(value)) })\n : `${target} = ${collector.add(bound)}`;\n base = `(${guard} AND ${comparison})`;\n }\n return expr.negate === true ? `NOT (${base})` : base;\n };\n switch (expr.op) {\n case \"exists\":\n return renderJsonExists({ present: `json_type(${column}, ${collector.add(jsonPathString(expr.path))}) IS NOT NULL`, column, exists: expr.value === true });\n case \"equals\":\n return compareExtracted(jsonPathString(expr.path), expr.value);\n case \"string_contains\":\n case \"string_starts_with\":\n case \"string_ends_with\": {\n const target = `json_extract(${column}, ${collector.add(jsonPathString(expr.path))})`;\n return renderJsonLike({ dialect, target, expr, collector });\n }\n case \"array_starts_with\":\n case \"array_ends_with\": {\n // Edge-element access: `$[0]` / `$[#-1]` path elements (sqlite ≥3.31;\n // bun:sqlite bundles far newer) — N6/board #21.\n const edge = expr.op === \"array_starts_with\" ? \"[0]\" : \"[#-1]\";\n return compareExtracted(`${jsonPathString(expr.path)}${edge}`, expr.value);\n }\n case \"array_contains\": {\n // Scalar-needle containment via json_each() EXISTS — one EXISTS per\n // element, ANDed (jsonb `@>` semantics for scalar members). Deep\n // structural containment (object/array members) has no cheap faithful\n // sqlite form and stays refused; JSON null members compare through\n // json_each's 'null' type tag, not SQL NULL, so they are refused too.\n //\n // Haystack type guard (wave-C review): json_each() over a path holding\n // a SCALAR yields one row carrying that scalar, so an unguarded EXISTS\n // matched `{ tags: \"a\" }` against needle `[\"a\"]` where postgres (`@>`\n // with an array needle) and mysql (JSON_CONTAINS against an array\n // literal) are false. json_type() is NULL for a missing path, so\n // missing paths and NULL columns stay non-matches — and an empty\n // needle reduces to the guard alone: contained in every ARRAY (pg's\n // `@> '[]'` truth) and in nothing else.\n const guard = `json_type(${column}, ${collector.add(jsonPathString(expr.path))}) = 'array'`;\n const elements = Array.isArray(expr.value) ? expr.value : [expr.value];\n const tests = elements.map((element) => {\n if (element === null || (typeof element === \"object\" && element !== null)) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"json array_contains with object/array/null elements\",\n hint: \"sqlite expresses scalar-element containment only — deep structural containment needs postgres or mysql\",\n });\n }\n const bound = typeof element === \"boolean\" ? (element ? 1 : 0) : element;\n const path = collector.add(jsonPathString(expr.path));\n const type = `${dialect.quoteIdent({ name: \"json_each\" })}.${dialect.quoteIdent({ name: \"type\" })}`;\n return `EXISTS (SELECT 1 FROM json_each(${column}, ${path}) WHERE ${typeMatches(type, element)} AND ${dialect.quoteIdent({ name: \"json_each\" })}.${dialect.quoteIdent({ name: \"value\" })} = ${collector.add(bound)})`;\n });\n return tests.length === 0 ? guard : `(${[guard, ...tests].join(\" AND \")})`;\n }\n default:\n throw internalError({ message: `json op \"${expr.op}\" leaked past supportedJsonOps on sqlite` });\n }\n }\n\n // mysqlExtract\n const column = quoteCol(dialect, expr.column);\n const pathString = jsonPathString(expr.path);\n switch (expr.op) {\n case \"exists\": {\n // NULL for a SQL NULL document, so `NOT` keeps such rows out as it does on the other dialects.\n const present = `JSON_CONTAINS_PATH(${column}, 'one', ${collector.add(pathString)})`;\n return expr.value === true ? present : `NOT ${present}`;\n }\n case \"equals\":\n return `JSON_EXTRACT(${column}, ${collector.add(pathString)}) ${cmp} CAST(${collector.add(JSON.stringify(expr.value))} AS JSON)`;\n case \"string_contains\":\n case \"string_starts_with\":\n case \"string_ends_with\": {\n const target = `JSON_UNQUOTE(JSON_EXTRACT(${column}, ${collector.add(pathString)}))`;\n return renderJsonLike({ dialect, target, expr, collector });\n }\n case \"array_contains\":\n return `JSON_CONTAINS(JSON_EXTRACT(${column}, ${collector.add(pathString)}), CAST(${collector.add(JSON.stringify(expr.value))} AS JSON))`;\n case \"array_starts_with\":\n return `JSON_EXTRACT(${column}, ${collector.add(`${pathString}[0]`)}) ${cmp} CAST(${collector.add(JSON.stringify(expr.value))} AS JSON)`;\n case \"array_ends_with\":\n return `JSON_EXTRACT(${column}, ${collector.add(`${pathString}[last]`)}) ${cmp} CAST(${collector.add(JSON.stringify(expr.value))} AS JSON)`;\n }\n}\n\n// ─── Ordering ─────────────────────────────────────────────────────\n\n/**\n * The output name a groupBy expression key's ORDER BY term reads in its\n * emulated null placement. MySQL's ONLY_FULL_GROUP_BY admits a GROUP BY\n * expression as a whole ORDER BY term, but inside `<expression> IS NULL` it\n * reads the expression's column as ungrouped (ER_WRONG_FIELD_WITH_GROUP);\n * MySQL resolves an output name inside an ORDER BY expression, and a key's\n * output name is never a column of its table (the runtime refuses such an\n * `as`). A truncated key keeps its column's name, so it never qualifies.\n */\nfunction groupKeyOutputName(params: { dialect: SqlDialect; statement: SelectStatement; column: ColRef }): string | undefined {\n const { dialect, statement, column } = params;\n if (column.groupKey === undefined) return undefined;\n const text = quoteCol(dialect, column);\n const projected = statement.columns.find((candidate) =>\n candidate.groupKey !== undefined && candidate.transform === undefined && candidate.alias !== undefined && quoteCol(dialect, candidate) === text);\n return projected?.alias;\n}\n\nfunction renderOrderTerm(params: { dialect: SqlDialect; term: OrderTerm; collector: ParamCollector; nullsOutputName?: string }): string {\n const { dialect, term, collector, nullsOutputName } = params;\n if (\"agg\" in term) {\n return `${renderAggRef(dialect, term.agg, collector)} ${term.direction === \"asc\" ? \"ASC\" : \"DESC\"}`;\n }\n // Relation orderBy: a correlated scalar subquery — its parameters merge into\n // the shared sequence exactly where they appear in the text (twice when the\n // NULL emulation below repeats the subquery).\n const expression = \"select\" in term\n ? (): string => renderScalarSubquery({ dialect, subquery: term, collector })\n : (): string => quoteCol(dialect, term.column);\n const direction = term.direction === \"asc\" ? \"ASC\" : \"DESC\";\n if (term.nulls === undefined) {\n return `${expression()} ${direction}`;\n }\n if (dialect.orderByNullsMode === \"native\") {\n return `${expression()} ${direction} NULLS ${term.nulls === \"first\" ? \"FIRST\" : \"LAST\"}`;\n }\n // Emulation (mysql): the engine's native order already places NULLs FIRST on\n // ASC and LAST on DESC — those pairings render the bare term (the redundant\n // boolean pre-term cost a per-row evaluation and could defeat index-order\n // scans, #14). Only the diverging pairings need the `IS NULL` pre-term:\n // false(0) sorts first, so plain `IS NULL` pushes nulls last and\n // `IS NULL DESC` pulls them first.\n if ((term.nulls === \"first\") === (term.direction === \"asc\")) {\n return `${expression()} ${direction}`;\n }\n const tested = nullsOutputName === undefined ? expression() : dialect.quoteIdent({ name: nullsOutputName });\n const nullsTerm = term.nulls === \"first\" ? `${tested} IS NULL DESC` : `${tested} IS NULL`;\n return `${nullsTerm}, ${expression()} ${direction}`;\n}\n\n// ─── Projections ──────────────────────────────────────────────────\n\nfunction renderSelectExpr(params: { dialect: SqlDialect; expr: SelectExpr }): string {\n const { dialect, expr } = params;\n if (expr.kind === \"one\") return \"1\";\n if (expr.kind === \"exists\") throw internalError({ message: \"an exists projection renders as its whole statement\" });\n const alias = expr.alias === undefined ? \"\" : ` AS ${dialect.quoteIdent({ name: expr.alias })}`;\n return `COUNT(*)${alias}`;\n}\n\n// ─── Lateral JSON joins ───────────────────────────────────\n\n/**\n * `LEFT JOIN LATERAL (… to_json …) AS alias ON true`. Postgres SQL, and MySQL\n * 8.0.14+ through `SqlDialect.lateralJson` (lane J: `JSON_ARRAY` rows,\n * `JSON_ARRAYAGG`, an ordered level's `ROW_NUMBER()` position slot) — the\n * runtime gates the \"join\" strategy on `capabilities.lateralJoin` at build\n * time, and this renderer refuses too (dialect honesty, rule 4).\n *\n * `json`, not `jsonb`: the payload is transport — parsed by the driver and\n * never touched by a JSON operator on the server. `jsonb_agg(to_jsonb(…))`\n * builds postgres's binary JSON (sorted, de-duplicated keys) and then\n * serializes it straight back to text for the wire, which measured at 2–3.7×\n * the server time of `json_agg(to_json(…))` for identical decoded values\n * (`.ai/plans/26.09.08 - performance-join-strategy.md` §1.2). The observable\n * differences are textual only: `json` keeps construction key order and `-0`,\n * `jsonb` normalizes both; every scalar still rides the B3 transforms.\n */\nfunction renderPositionalRow(params: { dialect: SqlDialect; join: LateralJoin; subAlias: string }): string {\n const { dialect, join, subAlias } = params;\n const json = lateralJsonOf({ dialect });\n // Lane J: a `positionSlot` dialect's ordered list level carries its\n // ROW_NUMBER() position as the LAST slot (the runtime sorts by it).\n const position = join.select.rowNumber;\n const positioned = position !== undefined && json.order === \"positionSlot\" && join.agg === \"jsonArray\" &&\n position.partitionBy.length === 0 && position.orderBy.length > 0;\n if (join.select.columns.length === 0 || join.select.selectExpr !== undefined ||\n (join.select.aggregates?.length ?? 0) > 0 || (position !== undefined && !positioned)) {\n throw internalError({ message: \"positional lateral rows require an explicit column-only projection\" });\n }\n const projected = join.select.columns.map((column) => projectionOutputName({ column }));\n const hidden = join.hidden ?? [];\n if (hidden.some((name) => !projected.includes(name)) || hidden.length >= projected.length) {\n throw internalError({ message: \"a hidden lateral column must be one of the projected columns, and one column must remain\" });\n }\n const names = [...projected.filter((name) => !hidden.includes(name)), ...(positioned ? [position.alias] : [])];\n if (new Set(names).size !== names.length) {\n throw internalError({ message: \"positional lateral projection has duplicate output names\" });\n }\n const values = names.map((name) => `${subAlias}.${dialect.quoteIdent({ name })}`);\n const chunks: string[] = [];\n for (let index = 0; index < values.length; index += JSON_TRANSPORT.chunkSize) {\n chunks.push(`${json.rowArray}(${values.slice(index, index + JSON_TRANSPORT.chunkSize).join(\", \")})`);\n }\n if (chunks.length > JSON_TRANSPORT.chunkSize) {\n throw internalError({ message: \"positional lateral projection exceeds the transport width limit\" });\n }\n return chunks.length === 1 ? chunks[0] as string : `${json.rowArray}(${chunks.join(\", \")})`;\n}\n\n/** The dialect's lateral JSON functions; callers already refused a dialect without them. */\nfunction lateralJsonOf(params: { dialect: SqlDialect }): NonNullable<SqlDialect[\"lateralJson\"]> {\n const json = params.dialect.lateralJson;\n if (json === null) throw internalError({ message: \"lateral JSON rendering on a dialect without LATERAL\" });\n return json;\n}\n\nfunction renderLateralJoin(params: {\n dialect: SqlDialect;\n join: LateralJoin;\n collector: ParamCollector;\n}): string {\n const { dialect, join, collector } = params;\n const inner = renderSelect({ dialect, statement: join.select, collector });\n if (join.agg === \"count\") {\n if (join.rowFormat === \"positional\" || join.select.columns.length !== 0 ||\n join.select.selectExpr?.kind !== \"countAll\" || join.select.selectExpr.alias !== join.columnAlias ||\n join.select.groupBy !== undefined || join.select.having !== undefined ||\n join.select.limit !== undefined || join.select.offset !== undefined || join.select.distinctOn !== undefined ||\n join.select.distinct !== undefined) {\n throw internalError({ message: \"count lateral must return one ungrouped COUNT(*) under its column alias\" });\n }\n return `LEFT JOIN LATERAL (${inner.text}) AS ${dialect.quoteIdent({ name: join.alias })} ON true`;\n }\n if (join.agg === \"aggregate\") {\n if (join.rowFormat === \"positional\" || join.select.columns.length !== 0 || join.select.selectExpr !== undefined ||\n (join.select.aggregates?.length ?? 0) === 0 ||\n join.select.groupBy !== undefined || join.select.having !== undefined || join.select.groupingSets !== undefined ||\n join.select.limit !== undefined || join.select.offset !== undefined || join.select.distinctOn !== undefined ||\n join.select.distinct !== undefined || join.select.rowLock !== undefined) {\n throw internalError({ message: \"aggregate lateral must return one ungrouped row of aggregates\" });\n }\n return `LEFT JOIN LATERAL (${inner.text}) AS ${dialect.quoteIdent({ name: join.alias })} ON true`;\n }\n const columnAlias = dialect.quoteIdent({ name: join.columnAlias });\n const subAlias = dialect.quoteIdent({ name: \"__sub\" });\n const json = lateralJsonOf({ dialect });\n // N2 (SQL review): json_agg over a subquery only \"usually\" preserves the\n // subquery's order — pin it with an explicit ORDER BY inside the aggregate\n // (the subquery keeps its own ORDER BY for LIMIT). Only column terms that\n // are PROJECTED (and untransformed — a B3 ::text cast would re-sort\n // lexicographically) can be referenced through `__sub`; anything else keeps\n // the old behavior. A `positionSlot` dialect (MySQL) orders through the\n // position slot instead ({@link renderPositionalRow}).\n let aggOrder = \"\";\n if (json.order === \"inAggregate\" && join.agg === \"jsonArray\" && join.select.orderBy !== undefined && join.select.orderBy.length > 0) {\n const projected = new Set(\n join.select.columns\n .filter((column) => column.transform === undefined && column.castReal !== true)\n .map((column) => column.name)\n .concat((join.select.scalarSubqueries ?? []).map((subquery) => subquery.alias)),\n );\n const terms = join.select.orderBy;\n const columnTerms = terms.filter(\n (term): term is Extract<OrderTerm, { column: ColRef }> => \"column\" in term,\n );\n const subRef = (column: ColRef): ColRef => ({ table: \"__sub\", name: column.name, ...(column.castJsonb === undefined ? {} : { castJsonb: column.castJsonb }) });\n const readable = (column: ColRef): boolean =>\n column.coalesce === undefined ? projected.has(column.name) : column.coalesce.every((member) => projected.has(member.name));\n if (columnTerms.length === terms.length && columnTerms.every((term) => readable(term.column))) {\n const rendered = columnTerms.map((term) =>\n renderOrderTerm({\n dialect,\n term: {\n ...term,\n column: term.column.coalesce === undefined ? subRef(term.column) : { ...term.column, coalesce: term.column.coalesce.map(subRef) },\n },\n collector,\n }),\n );\n aggOrder = ` ORDER BY ${rendered.join(\", \")}`;\n }\n }\n if (join.rowFormat !== \"positional\" && json.order !== \"inAggregate\") {\n // `to_json(\"__sub\".*)` names the columns itself; the runtime always sends\n // positional rows, so object rows stay a postgres construct.\n throw unsupportedCapability({ dialect: dialect.name, feature: \"object-format lateral rows\", hint: \"lateral relation rows render positional (rowFormat \\\"positional\\\") on this dialect\" });\n }\n const rowJson = join.rowFormat === \"positional\"\n ? renderPositionalRow({ dialect, join, subAlias })\n : `to_json(${subAlias}.*)`;\n const projection =\n join.agg === \"jsonArray\"\n ? `COALESCE(${json.arrayAgg}(${rowJson}${aggOrder}), ${json.emptyArray}) AS ${columnAlias}`\n : `${rowJson} AS ${columnAlias}`;\n const alias = dialect.quoteIdent({ name: join.alias });\n return `LEFT JOIN LATERAL (SELECT ${projection} FROM (${inner.text}) AS ${subAlias}) AS ${alias} ON true`;\n}\n\n/**\n * `(SELECT COUNT(*) FROM … WHERE …) AS \"alias\"` — one scalar per output row\n * ({@link CountSubquery}). Refuses anything but one ungrouped COUNT(*), so a\n * builder bug can never project a multi-row or multi-column subquery.\n */\nfunction renderCountSubquery(params: {\n dialect: SqlDialect;\n subquery: CountSubquery;\n collector: ParamCollector;\n}): string {\n const { dialect, subquery, collector } = params;\n const select = subquery.select;\n if (select.columns.length !== 0 || select.selectExpr?.kind !== \"countAll\" ||\n (select.aggregates?.length ?? 0) > 0 || select.rowNumber !== undefined ||\n select.groupBy !== undefined || select.having !== undefined ||\n select.limit !== undefined || select.offset !== undefined ||\n select.distinctOn !== undefined || select.distinct !== undefined || select.rowLock !== undefined ||\n select.countSubqueries !== undefined || select.scalarSubqueries !== undefined) {\n throw internalError({ message: \"count subquery must be one ungrouped COUNT(*)\" });\n }\n const inner = renderSelect({ dialect, statement: select, collector });\n return `(${inner.text}) AS ${dialect.quoteIdent({ name: subquery.alias })}`;\n}\n\n/** Render a scalar value without its projection alias. */\nfunction renderScalarSubquery(params: {\n dialect: SqlDialect;\n subquery: { readonly select: SelectStatement; readonly coalesce?: 0 };\n collector: ParamCollector;\n}): string {\n const { dialect, subquery, collector } = params;\n const value = `(${renderSelect({ dialect, statement: subquery.select, collector }).text})`;\n return subquery.coalesce === 0 ? `COALESCE(${value}, 0)` : value;\n}\n\n// ─── RETURNING ────────────────────────────────────────────────────\n\nfunction applyReturning(params: {\n dialect: SqlDialect;\n requested: readonly ReturningColumn[] | undefined;\n /**\n * The quoted target alias of an `UPDATE … FROM`, whose joined relation may\n * share a column name with the target (PostgreSQL only: SQLite's RETURNING\n * sees the target table alone).\n */\n qualify?: string;\n /** Binds a row-capture cascade column's limit. */\n collector?: ParamCollector;\n /** The written table when the statement gives it no alias: a table named `old` or `new` hides the row names. */\n table?: TableRef;\n}): { suffix: string; status: \"native\" | \"omitted\" | \"none\" } {\n const { dialect, requested } = params;\n if (requested === undefined || requested.length === 0) {\n return { suffix: \"\", status: \"none\" };\n }\n if (!dialect.capabilities.returning) {\n // Dropping a row-capture column with the omitted RETURNING would lose the capture without a word.\n const capture = requested.find(isCaptureReturningColumn);\n if (capture !== undefined) renderCaptureReturning({ dialect, column: capture, collector: params.collector, rows: PLAIN_ROW_NAMES });\n const other = requested.find(isOtherRowReturningColumn);\n if (other !== undefined) renderOtherRowReturning({ dialect, column: other, rows: PLAIN_ROW_NAMES });\n const version = requested.find((column) => typeof column !== \"string\" && \"serverVersion\" in column);\n if (version !== undefined) renderServerVersionReturning({ dialect, alias: returningColumnName(version) });\n return { suffix: \"\", status: \"omitted\" };\n }\n // PostgreSQL 18 resolves `old.` / `new.` to a target table of that name before the row it names, so such a\n // table renames the rows (`RETURNING WITH (OLD AS …)`), or `old.\"col\"` would silently read the new value.\n const hidden = (params.table?.name === \"old\" || params.table?.name === \"new\") &&\n requested.some((column) => isCaptureReturningColumn(column) || (isOtherRowReturningColumn(column) && column.from === \"old\"));\n const rows = hidden ? { old: dialect.quoteIdent({ name: \"__vibe_old\" }), new: dialect.quoteIdent({ name: \"__vibe_new\" }) } : PLAIN_ROW_NAMES;\n const read = (name: string): string => (params.qualify === undefined ? name : `${params.qualify}.${name}`);\n const columns = requested\n .map((column) => {\n if (typeof column === \"string\") return read(dialect.quoteIdent({ name: column }));\n if (\"capture\" in column) return renderCaptureReturning({ dialect, column, collector: params.collector, rows });\n if (\"from\" in column) return renderOtherRowReturning({ dialect, column, rows });\n if (\"serverVersion\" in column) return renderServerVersionReturning({ dialect, alias: column.alias });\n if (\"transform\" in column) {\n const name = dialect.quoteIdent({ name: column.name });\n return `${dialect.jsonTextProjection({ expression: read(name) })} AS ${name}`;\n }\n const name = dialect.quoteIdent({ name: column.name });\n return `${textProjection({ dialect, expression: read(name) })} AS ${name}`;\n })\n .join(\", \");\n const renamed = hidden ? `WITH (OLD AS ${rows.old}, NEW AS ${rows.new}) ` : \"\";\n return { suffix: ` RETURNING ${renamed}${columns}`, status: \"native\" };\n}\n\n/** How RETURNING names the row before and the row after the statement (PostgreSQL 18). */\ntype RowNames = { readonly old: string; readonly new: string };\n\nconst PLAIN_ROW_NAMES: RowNames = Object.freeze({ old: \"old\", new: \"new\" });\n\n/** {@link ServerVersionReturningColumn}: `pg_catalog.current_setting('server_version_num') AS \"alias\"`. */\nfunction renderServerVersionReturning(params: { dialect: SqlDialect; alias: string }): string {\n const { dialect } = params;\n if (!dialect.capabilities.rowCapture) {\n throw unsupportedCapability({ dialect: dialect.name, feature: \"RETURNING the server version\", hint: \"only a dialect whose RETURNING can name the row before the write asks for its server version\" });\n }\n return `pg_catalog.current_setting('server_version_num') AS ${dialect.quoteIdent({ name: params.alias })}`;\n}\n\n/**\n * `old.\"col\"::text AS \"alias\"`, `new.\"col\"::text AS \"alias\"` or `(old.\"col\" IS\n * NULL) AS \"alias\"` — see {@link CaptureReturningColumn}. Only a dialect with\n * the `rowCapture` capability names the row before and after the statement\n * in RETURNING; elsewhere the runtime refuses `capture` before it builds one.\n */\nfunction renderCaptureReturning(params: { dialect: SqlDialect; column: CaptureReturningColumn; collector?: ParamCollector | undefined; rows: RowNames }): string {\n const { dialect, column, rows } = params;\n if (!dialect.capabilities.rowCapture) {\n throw unsupportedCapability({ dialect: dialect.name, feature: \"row capture (RETURNING old./new.)\", hint: \"row capture needs PostgreSQL 18 or later; the runtime refuses $transaction({ capture }) on this dialect\" });\n }\n const alias = dialect.quoteIdent({ name: column.alias });\n if (column.capture === \"cascade\") {\n if (params.collector === undefined) throw internalError({ message: `capture cascade column \"${column.alias}\" rendered without a parameter collector` });\n const child = dialect.quoteIdent({ name: CAPTURE_CHILD_ALIAS });\n const match = column.cascade.on.map((pair) => `${child}.${dialect.quoteIdent({ name: pair.child })} = ${rows.old}.${dialect.quoteIdent({ name: pair.parent })}`).join(\" AND \");\n return `${renderCascadeImages({ dialect, cascade: column.cascade, match, collector: params.collector })} AS ${alias}`;\n }\n const name = dialect.quoteIdent({ name: column.name });\n if (column.capture === \"inserted\") return `(${rows.old}.${name} IS NULL) AS ${alias}`;\n if (column.capture === \"key\") return `${rows.old}.${name} AS ${alias}`;\n return `${renderCaptureCell({ dialect, row: rows[column.capture], cell: column })} AS ${alias}`;\n}\n\nconst CAPTURE_CHILD_ALIAS = \"__vibe_c\";\nconst CAPTURE_HOP_ALIAS = \"__vibe_h\";\n\n/**\n * One capture cell as text, read from `row` (`old`, `new` or a quoted alias):\n * `row.\"col\"::text`, or through a {@link CaptureCell.hop} the related row's\n * column, `(SELECT \"__vibe_h\".\"col\"::text FROM \"Related\" AS \"__vibe_h\" WHERE\n * \"__vibe_h\".\"id\" = row.\"relatedId\")`.\n */\nfunction renderCaptureCell(params: { dialect: SqlDialect; row: string; cell: CaptureCell }): string {\n const { dialect, row, cell } = params;\n const name = dialect.quoteIdent({ name: cell.name });\n if (cell.hop === undefined) return textProjection({ dialect, expression: `${row}.${name}` });\n if (cell.hop.on.length === 0) throw internalError({ message: `capture hop to \"${cell.hop.table.name}\" needs at least one key column` });\n const related = dialect.quoteIdent({ name: CAPTURE_HOP_ALIAS });\n const match = cell.hop.on.map((pair) => `${related}.${dialect.quoteIdent({ name: pair.target })} = ${row}.${dialect.quoteIdent({ name: pair.source })}`).join(\" AND \");\n return `(SELECT ${textProjection({ dialect, expression: `${related}.${name}` })} FROM ${renderTable(dialect, cell.hop.table)} AS ${related} WHERE ${match})`;\n}\n\n/** A {@link CaptureCascade}'s bounded distinct image aggregate over the child rows `match` admits. */\nfunction renderCascadeImages(params: { dialect: SqlDialect; cascade: CaptureCascade; match: string; collector: ParamCollector }): string {\n const { dialect, cascade, match, collector } = params;\n if (cascade.cells.length === 0 || cascade.on.length === 0) throw internalError({ message: `capture cascade into \"${cascade.table.name}\" needs at least one cell and one key column` });\n if (!Number.isSafeInteger(cascade.limit) || cascade.limit < 1) throw internalError({ message: `capture cascade into \"${cascade.table.name}\" needs a positive integer limit` });\n const child = dialect.quoteIdent({ name: CAPTURE_CHILD_ALIAS });\n const item = dialect.quoteIdent({ name: \"__vibe_i\" });\n const cells = cascade.cells.map((cell) => renderCaptureCell({ dialect, row: child, cell })).join(\", \");\n return `(SELECT array_agg(${item})::text FROM (SELECT DISTINCT ARRAY[${cells}] AS ${item} FROM ${renderTable(dialect, cascade.table)} AS ${child} WHERE ${match} LIMIT ${collector.add(cascade.limit)}) AS ${dialect.quoteIdent({ name: \"__vibe_d\" })})`;\n}\n\n/**\n * `old.\"col\" AS \"alias\"` or `\"source\".\"col\" AS \"alias\"`, projected like the\n * written row's own column — see {@link OtherRowReturningColumn}. Refused\n * where the dialect cannot name that row in RETURNING, so a caller never gets\n * a write whose previous values were silently dropped.\n */\nfunction renderOtherRowReturning(params: { dialect: SqlDialect; column: OtherRowReturningColumn; rows: RowNames }): string {\n const { dialect, column } = params;\n const fromOld = column.from === \"old\";\n if (fromOld ? !dialect.capabilities.rowCapture : !dialect.capabilities.returningReadsJoinedSource) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: fromOld ? \"RETURNING old.… (the row before the write)\" : \"RETURNING a joined source's columns\",\n hint: fromOld ? \"needs PostgreSQL 18 or later\" : \"read the row inside the write's transaction first, then write it\",\n });\n }\n const name = dialect.quoteIdent({ name: column.name });\n const expression = column.from === \"old\" ? `${params.rows.old}.${name}` : `${dialect.quoteIdent({ name: column.from.source })}.${name}`;\n const projected = column.projection === \"castText\" ? textProjection({ dialect, expression })\n : column.projection === \"jsonText\" ? dialect.jsonTextProjection({ expression })\n : expression;\n return `${projected} AS ${dialect.quoteIdent({ name: column.alias })}`;\n}\n\n// ─── SELECT ───────────────────────────────────────────────────────\n\n/**\n * {@link KeyTableJoin}: `INNER JOIN (VALUES ROW(?, 0), …) AS alias (…) ON …`.\n * Mysql only — the one dialect whose default text equality is not byte\n * equality, and the shape was measured there (8.0.19+ `VALUES ROW`, already\n * this project's floor for the upsert row alias). Postgres needs a typed\n * parameter per member, so it renders only `citext` / `text` / `integer`\n * members (`CAST($n AS citext | text | bigint)`, plain `(…)` rows) — the\n * runtime emits it for a key tuple with a citext member; every other postgres\n * member refuses, and sqlite has no derived-table column list, so it refuses\n * rather than render an untested form.\n *\n * Ordinals are literal integers (row `i` → `i`): a statement-local index, not\n * data, so a key costs exactly the parameters its members bind — the same\n * budget as `col IN (?, …)`. Text members bind bare so the column's collation\n * decides; numeric members that travel as strings are CAST (see\n * {@link KeyTableMember}).\n *\n * The runtime emits a key table wherever `conflictKeyEquality.textIsBinaryByDefault`\n * is false (packages/runtime/src/relation-loader.ts, `associatesInDatabase`);\n * this refusal is by NAME, so a new dialect declaring that fact must also be\n * measured and admitted here.\n */\nfunction renderKeyTableJoin(params: { dialect: SqlDialect; join: KeyTableJoin; collector: ParamCollector }): string {\n const { dialect, join, collector } = params;\n // Postgres binds every member typed (an untyped VALUES cell would be\n // `text`, see {@link KeyTableMember}); `citext` and `text` are postgres\n // members, mysql binds text bare.\n const postgresMember = (member: KeyTableMember): boolean => member.kind === \"citext\" || member.kind === \"text\" || member.kind === \"integer\";\n const admitted = dialect.name === \"mysql\"\n ? join.members.every((member) => member.kind !== \"citext\" && member.kind !== \"text\")\n : dialect.name === \"postgres\" && join.members.every(postgresMember);\n if (!admitted) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"relation key table\",\n hint: \"the key-table join is mysql's relation association — this dialect compares relation keys by value\",\n });\n }\n if (join.columns.length === 0 || join.columns.length !== join.members.length) {\n throw internalError({ message: `key table needs one member per column, got ${join.members.length} for ${join.columns.length}` });\n }\n if (join.rows.length === 0) throw internalError({ message: \"key table needs at least one key row\" });\n for (const member of join.members) {\n if (member.kind === \"decimal\" && !(Number.isInteger(member.scale) && member.scale >= 0 && member.scale <= 30)) {\n throw internalError({ message: `key table decimal scale must be an integer 0-30, got ${String(member.scale)}` });\n }\n }\n const alias = dialect.quoteIdent({ name: join.alias });\n const memberNames = join.members.map((_, index) => dialect.quoteIdent({ name: `__vibe_k${index}` }));\n const rows = join.rows.map((row, ordinal) => {\n if (row.length !== join.members.length) {\n throw internalError({ message: `key table row has ${row.length} values for ${join.members.length} members` });\n }\n const cells = row.map((value, index) => {\n const placeholder = collector.add(value);\n const member = join.members[index] as KeyTableMember;\n switch (member.kind) {\n case \"integer\":\n return dialect.name === \"mysql\" ? `CAST(${placeholder} AS SIGNED)` : `CAST(${placeholder} AS bigint)`;\n case \"timestamp\":\n return `CAST(${placeholder} AS DATETIME(6))`;\n case \"time\":\n return `CAST(${placeholder} AS TIME(6))`;\n case \"decimal\":\n return `CAST(${placeholder} AS DECIMAL(65,${member.scale}))`;\n case \"citext\":\n return `CAST(${placeholder} AS citext)`;\n case \"text\":\n return `CAST(${placeholder} AS text)`;\n default:\n return placeholder;\n }\n });\n return dialect.name === \"mysql\" ? `ROW(${cells.join(\", \")}, ${ordinal})` : `(${cells.join(\", \")}, ${ordinal})`;\n });\n const on = join.columns.map((column, index) => `${quoteCol(dialect, column)} = ${alias}.${memberNames[index] as string}`).join(\" AND \");\n return `INNER JOIN (VALUES ${rows.join(\", \")}) AS ${alias} (${[...memberNames, dialect.quoteIdent({ name: join.ordinalAlias })].join(\", \")}) ON ${on}`;\n}\n\n// ─── Fix lane Q2 (D-03): derived-table LEFT JOIN ───\n\n/**\n * {@link LeftJoin}: `LEFT JOIN (<select>) AS \"alias\" ON \"alias\".\"k\" =\n * \"outer\".\"c\" [AND …]`. Portable. Refuses a builder bug: no ON pair, or a\n * derived projection with an unaliased column (the outer scope must see only\n * the reserved aliases, never a name that could make an unqualified outer\n * reference ambiguous). The derived select renders here, so its parameters\n * land in the shared sequence where they appear in the text.\n */\nfunction renderLeftJoin(params: { dialect: SqlDialect; join: LeftJoin; collector: ParamCollector }): string {\n const { dialect, join, collector } = params;\n if (join.on.length === 0) {\n throw internalError({ message: \"left join needs at least one ON pair\" });\n }\n if (join.select.columns.length === 0 || join.select.columns.some((column) => column.alias === undefined)) {\n throw internalError({ message: \"a left join's derived select must alias every projected column\" });\n }\n const inner = renderSelect({ dialect, statement: join.select, collector });\n const on = join.on\n .map((pair) => `${quoteCol(dialect, pair.left)} = ${quoteCol(dialect, pair.right)}`)\n .join(\" AND \");\n return `LEFT JOIN (${inner.text}) AS ${dialect.quoteIdent({ name: join.alias })} ON ${on}`;\n}\n\n/**\n * `SELECT EXISTS (SELECT 1 FROM … WHERE …) AS \"alias\"`: the statement's own\n * FROM and WHERE as the subquery. Anything that would change which rows the\n * subquery sees, or add a column, is a builder bug.\n */\nfunction renderExistsSelect(params: { dialect: SqlDialect; statement: SelectStatement; alias: string; collector: ParamCollector }): RenderedQuery {\n const { dialect, statement, alias, collector } = params;\n const extra =\n statement.columns.length > 0 || (statement.aggregates?.length ?? 0) > 0 || statement.countSubqueries !== undefined ||\n statement.scalarSubqueries !== undefined || statement.rowNumber !== undefined || statement.groupBy !== undefined ||\n statement.groupingSets !== undefined || statement.having !== undefined || statement.orderBy !== undefined ||\n statement.limit !== undefined || statement.offset !== undefined || statement.rowLock !== undefined ||\n statement.distinct !== undefined || statement.distinctOn !== undefined || statement.lateralJoins !== undefined ||\n statement.innerJoins !== undefined || statement.leftJoins !== undefined || statement.keyTable !== undefined;\n if (extra) throw internalError({ message: \"an exists select takes only a FROM and a WHERE\" });\n const inner = renderSelect({ dialect, statement: { ...statement, selectExpr: { kind: \"one\" } }, collector });\n return { ...inner, text: `SELECT EXISTS (${inner.text}) AS ${dialect.quoteIdent({ name: alias })}` };\n}\n\nfunction renderSelect(params: {\n dialect: SqlDialect;\n statement: SelectStatement;\n collector: ParamCollector;\n}): RenderedQuery {\n const { dialect, statement, collector } = params;\n\n if (statement.selectExpr?.kind === \"exists\") return renderExistsSelect({ dialect, statement, alias: statement.selectExpr.alias, collector });\n if (statement.selectExpr !== undefined && statement.columns.length > 0 && statement.selectExpr.kind !== \"countAll\") {\n throw internalError({ message: \"only countAll can combine with a column list\" });\n }\n if (\n statement.selectExpr !== undefined &&\n statement.aggregates !== undefined &&\n statement.aggregates.length > 0\n ) {\n throw internalError({ message: \"selectExpr and aggregates cannot combine\" });\n }\n const columnList = statement.columns.map((column) => quoteProjection(dialect, column));\n if (statement.selectExpr !== undefined) {\n columnList.push(renderSelectExpr({ dialect, expr: statement.selectExpr }));\n }\n if (statement.aggregates !== undefined) {\n for (const selection of statement.aggregates) {\n const expression = renderAggRef(dialect, selection.agg, collector);\n const projected = selection.castText === true ? textProjection({ dialect, expression }) : expression;\n columnList.push(`${projected} AS ${dialect.quoteIdent({ name: selection.alias })}`);\n }\n }\n const groupKeys = statement.groupBy?.map((column) => quoteCol(dialect, column)) ?? [];\n if (statement.groupingSets !== undefined) {\n columnList.push(`${renderGroupingSetIndex({ keys: groupKeys, grouping: statement.groupingSets })} AS ${dialect.quoteIdent({ name: statement.groupingSets.indexAlias })}`);\n }\n if (statement.countSubqueries !== undefined) {\n for (const subquery of statement.countSubqueries) {\n columnList.push(renderCountSubquery({ dialect, subquery, collector }));\n }\n }\n if (statement.scalarSubqueries !== undefined) {\n for (const subquery of statement.scalarSubqueries) {\n columnList.push(`${renderScalarSubquery({ dialect, subquery, collector })} AS ${dialect.quoteIdent({ name: subquery.alias })}`);\n }\n }\n if (statement.rowNumber !== undefined) {\n const rowNumber = statement.rowNumber;\n // An unpartitioned window numbers the whole select: only the position slot\n // of a lateral list level (`lateralJson.order: \"positionSlot\"`), which\n // always carries the level's order.\n if (rowNumber.partitionBy.length === 0 && rowNumber.orderBy.length === 0) {\n throw internalError({ message: \"rowNumber needs a partition column or an order\" });\n }\n const partition = rowNumber.partitionBy.length === 0 ? \"\" : `PARTITION BY ${rowNumber.partitionBy.map((column) => quoteCol(dialect, column)).join(\", \")}`;\n const order =\n rowNumber.orderBy.length === 0\n ? \"\"\n : `${partition === \"\" ? \"\" : \" \"}ORDER BY ${rowNumber.orderBy.map((term) => renderOrderTerm({ dialect, term, collector })).join(\", \")}`;\n columnList.push(\n `ROW_NUMBER() OVER (${partition}${order}) AS ${dialect.quoteIdent({ name: rowNumber.alias })}`,\n );\n }\n let distinctPrefix = statement.distinct === true ? \"DISTINCT \" : \"\";\n if (statement.distinct === true && statement.distinctOn !== undefined) {\n throw internalError({ message: \"distinct and distinctOn cannot combine\" });\n }\n if (statement.distinctOn !== undefined && statement.distinctOn.length > 0) {\n if (!dialect.capabilities.distinctOn) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"SELECT DISTINCT ON\",\n hint: \"postgres-only — the runtime emulates distinct client-side on this dialect\",\n });\n }\n distinctPrefix = `DISTINCT ON (${statement.distinctOn.map((column) => quoteCol(dialect, typedOrderRef({ statement, column }))).join(\", \")}) `;\n }\n const columns = columnList.length === 0 ? \"*\" : columnList.join(\", \");\n\n let from: string;\n // EPIC 4 (ST-07): key rows render where the table would, under its name.\n if (statement.fromKeys !== undefined) {\n from = renderKeyRows({ dialect, statement, keys: statement.fromKeys, collector });\n } else if (statement.fromUnion !== undefined) {\n // Fix lane Q2 (DB-07): a union page renders where a derived table would.\n from = `(${renderUnionPage({ dialect, statement, collector })}) AS ${dialect.quoteIdent({ name: statement.table.name })}`;\n } else if (statement.keyPage !== undefined) {\n // Fix lane Q1 (DB-01): a per-key page renders where a derived table would.\n if (statement.fromSelect !== undefined || statement.table.alias !== undefined) {\n throw internalError({ message: \"keyPage uses table.name as the derived-table alias — fromSelect and table.alias must be unset\" });\n }\n from = `(${renderKeyPage({ dialect, page: statement.keyPage, collector })}) AS ${dialect.quoteIdent({ name: statement.table.name })}`;\n } else if (statement.fromSelect !== undefined) {\n if (statement.table.alias !== undefined) {\n throw internalError({ message: \"fromSelect uses table.name as the subquery alias — table.alias must be unset\" });\n }\n // The subquery renders before WHERE/ORDER BY, so its parameters land in\n // the shared sequence exactly where they appear in the text.\n const inner = renderSelect({ dialect, statement: statement.fromSelect, collector });\n from = `(${inner.text}) AS ${dialect.quoteIdent({ name: statement.table.name })}`;\n } else {\n from = renderTable(dialect, statement.table);\n }\n let text = `SELECT ${distinctPrefix}${columns} FROM ${from}`;\n\n if (statement.innerJoins !== undefined && statement.innerJoins.length > 0) {\n for (const join of statement.innerJoins) {\n if (join.on.length === 0) {\n throw internalError({ message: \"inner join needs at least one ON pair\" });\n }\n const on = join.on\n .map((pair) => `${quoteCol(dialect, pair.left)} = ${quoteCol(dialect, pair.right)}`)\n .join(\" AND \");\n text += ` INNER JOIN ${renderTable(dialect, join.table)} ON ${on}`;\n }\n }\n if (statement.keyTable !== undefined) {\n text += ` ${renderKeyTableJoin({ dialect, join: statement.keyTable, collector })}`;\n }\n // Fix lane Q2 (D-03): derived-table LEFT JOINs (to-one relation orderBy).\n if (statement.leftJoins !== undefined && statement.leftJoins.length > 0) {\n if (statement.rowLock !== undefined) {\n throw internalError({ message: \"a locking read cannot carry a left join — postgres refuses FOR UPDATE on the nullable side of an outer join\" });\n }\n for (const join of statement.leftJoins) {\n text += ` ${renderLeftJoin({ dialect, join, collector })}`;\n }\n }\n\n if (statement.lateralJoins !== undefined && statement.lateralJoins.length > 0) {\n if (!dialect.capabilities.lateralJoin || dialect.lateralJson === null) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"LATERAL JOIN relation loading\",\n hint: 'use the portable \"query\" relation strategy on this dialect',\n });\n }\n for (const join of statement.lateralJoins) {\n text += ` ${renderLateralJoin({ dialect, join, collector })}`;\n }\n }\n\n if (statement.where !== undefined) {\n text += ` WHERE ${renderExpr({ dialect, expr: statement.where, collector })}`;\n }\n if (statement.groupBy !== undefined && statement.groupBy.length > 0) {\n text += ` GROUP BY ${statement.groupingSets === undefined ? groupKeys.join(\", \") : renderGroupingSets({ dialect, keys: groupKeys, grouping: statement.groupingSets })}`;\n } else if (statement.groupingSets !== undefined) {\n throw internalError({ message: \"grouping sets need groupBy columns\" });\n }\n if (statement.having !== undefined) {\n text += ` HAVING ${renderExpr({ dialect, expr: statement.having, collector })}`;\n }\n if (statement.orderBy !== undefined && statement.orderBy.length > 0) {\n const terms = statement.orderBy.map((term) => {\n if (!(\"column\" in term)) return renderOrderTerm({ dialect, term, collector });\n const nullsOutputName = term.nulls === undefined || dialect.orderByNullsMode === \"native\" ? undefined : groupKeyOutputName({ dialect, statement, column: term.column });\n return renderOrderTerm({\n dialect,\n term: { ...term, column: typedOrderRef({ statement, column: term.column }) },\n collector,\n ...(nullsOutputName === undefined ? {} : { nullsOutputName }),\n });\n });\n text += ` ORDER BY ${terms.join(\", \")}`;\n }\n\n if (statement.limit !== undefined) {\n assertCount(statement.limit, \"limit\");\n text += ` LIMIT ${statement.limit}`;\n }\n if (statement.offset !== undefined) {\n assertCount(statement.offset, \"offset\");\n if (statement.limit === undefined && dialect.offsetRequiresLimit !== null) {\n text += ` LIMIT ${dialect.offsetRequiresLimit.limitText}`;\n }\n text += ` OFFSET ${statement.offset}`;\n }\n if (statement.rowLock !== undefined) {\n const target = statement.table.alias ?? statement.table.name;\n if (statement.rowLock.of !== undefined && statement.rowLock.of.some((name) => name !== target)) {\n throw internalError({ message: `a row lock's \\`of\\` list may name only the statement's own table \"${target}\"` });\n }\n if (statement.rowLock.of !== undefined && (statement.fromSelect !== undefined || statement.keyPage !== undefined)) {\n throw internalError({ message: \"a row lock's `of` list cannot name a derived table\" });\n }\n const clause = renderRowLockClause({ dialect, lock: statement.rowLock });\n if (clause !== null) text += ` ${clause}`;\n }\n\n return { text, values: collector.values, returning: \"none\" };\n}\n\n// ─── INSERT (incl. upsert) ────────────────────────────────────────\n\n/** The unnest source's relation alias and its ordinality column (`InsertStatement.unnest`). */\nconst UNNEST_ROWS_ALIAS = \"__vibe_rows\";\nconst UNNEST_ORDINALITY = \"ord\";\n\n/**\n * One cell of an unnest insert, as its array element: a plain value, SQL NULL,\n * or a Json cell's text (the column's storage must match). `DEFAULT`, the\n * database clock and any other object are refused — the builder keeps VALUES\n * for them, so reaching here is a builder defect.\n */\nfunction unnestElement(params: { value: unknown; column: string; jsonStorage: \"json\" | \"jsonb\" | undefined }): unknown {\n const { value, column, jsonStorage } = params;\n if (value === null || value === undefined) return null;\n if (isJsonParamCell(value)) {\n if (jsonStorage === undefined || (value.storage ?? \"jsonb\") !== jsonStorage) {\n throw internalError({ message: `unnest insert column \"${column}\" got a Json cell its declared type does not take` });\n }\n return value.text;\n }\n if (jsonStorage === undefined) {\n switch (typeof value) {\n case \"string\":\n case \"number\":\n case \"boolean\":\n case \"bigint\":\n return value;\n case \"object\":\n if (value instanceof Date || value instanceof Uint8Array) return value;\n }\n }\n throw internalError({ message: `unnest insert column \"${column}\" got a cell that is not a plain value (DEFAULT, the database clock, a document) — such rows keep VALUES` });\n}\n\n/**\n * `SELECT \"c1\", … FROM unnest($1::<type>[], …) WITH ORDINALITY AS\n * \"__vibe_rows\" (\"c1\", …, \"ord\") ORDER BY \"ord\"` — the source of an\n * {@link InsertStatement} carrying `unnest`. Collects ONE array per column, in\n * column order: the rows transposed, Json cells reduced to their text. The\n * aliases are positional, so no column name can collide with the ordinality\n * column; `ORDER BY \"ord\"` makes the insert consume rows in input order\n * (PostgreSQL promises no order without it).\n */\nfunction renderUnnestRows(params: {\n dialect: SqlDialect;\n statement: InsertStatement;\n members: readonly KeyListMember[];\n collector: ParamCollector;\n}): string {\n const { dialect, statement, members, collector } = params;\n if (dialect.bulkInsertForm !== \"unnest\") {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a bulk insert bound as typed arrays (INSERT … SELECT FROM unnest)\",\n hint: \"this dialect binds createMany rows as VALUES\",\n });\n }\n if (statement.columns.length === 0) throw internalError({ message: \"an unnest insert needs at least one column\" });\n if (members.length !== statement.columns.length) {\n throw internalError({ message: `unnest insert has ${members.length} column types for ${statement.columns.length} columns` });\n }\n if (statement.onConflict !== undefined && !(\"doNothing\" in statement.onConflict)) {\n throw internalError({ message: \"an unnest insert takes no DO UPDATE arm — upserts bind VALUES\" });\n }\n const aliases = statement.columns.map((_column, index) => dialect.quoteIdent({ name: `c${index + 1}` }));\n const arrays = members.map((member, index) => {\n const cast = postgresBulkInsertArrayCast({ dialect, member });\n const jsonStorage = member.type !== \"Json\" ? undefined : cast === \"text::json\" ? \"json\" : \"jsonb\";\n const column = statement.columns[index] as string;\n const values = statement.rows.map((row) => unnestElement({ value: row[index], column, jsonStorage }));\n return `${collector.add(values)}::${cast}[]`;\n });\n const ord = dialect.quoteIdent({ name: UNNEST_ORDINALITY });\n return `SELECT ${aliases.join(\", \")} FROM unnest(${arrays.join(\", \")}) WITH ORDINALITY AS ${dialect.quoteIdent({ name: UNNEST_ROWS_ALIAS })} (${aliases.join(\", \")}, ${ord}) ORDER BY ${ord}`;\n}\n\nfunction renderInsert(params: {\n dialect: SqlDialect;\n statement: InsertStatement;\n collector: ParamCollector;\n}): RenderedQuery {\n const { dialect, statement, collector } = params;\n\n if (statement.rows.length === 0) {\n throw internalError({ message: \"insert requires at least one row\" });\n }\n // No column named: every value is its column default (dialect.emptyInsert).\n const defaultValues = statement.columns.length === 0 && dialect.emptyInsert.form === \"defaultValues\";\n if (defaultValues && statement.rows.length !== 1) {\n throw internalError({ message: `${dialect.name} inserts an all-default row as DEFAULT VALUES, one row per statement` });\n }\n if (defaultValues && statement.onConflict !== undefined && !(dialect.emptyInsert.form === \"defaultValues\" && dialect.emptyInsert.conflictClause)) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a conflict clause on an all-default row (DEFAULT VALUES)\",\n hint: \"supply at least one column value, or drop the conflict clause\",\n });\n }\n for (const row of statement.rows) {\n if (row.length !== statement.columns.length) {\n throw internalError({\n message: `insert row has ${row.length} values but ${statement.columns.length} columns`,\n });\n }\n }\n\n const onConflict = statement.onConflict;\n const insertKeyword = \"INSERT INTO\";\n\n const columnList = statement.columns.map((name) => dialect.quoteIdent({ name })).join(\", \");\n // EPIC C: rows bound as one typed array per column (`InsertStatement.unnest`).\n const unnestSource = statement.unnest === undefined ? undefined : renderUnnestRows({ dialect, statement, members: statement.unnest, collector });\n const rowsSql = unnestSource !== undefined ? \"\" : statement.rows\n .map(\n (row) =>\n `(${row\n .map((value) => {\n // Json cell: the param's type is pinned (`$n::text::jsonb` on\n // postgres) so OID-typed drivers cannot double-encode the document.\n if (isJsonParamCell(value)) return `${collector.add(value.text)}${jsonCellCast(dialect, value)}`;\n // Database-clock cell: the dialect's now() expression.\n if (isDbNowMarker(value)) {\n return dialect.renderDbNow({ offsetSeconds: value.offsetSeconds, collector });\n }\n if (!isSqlDefaultCell(value)) return collector.add(value);\n // M4: a heterogeneous createMany cell defers to the COLUMN default.\n if (!dialect.rowDefaultKeyword) {\n throw internalError({\n message: `${dialect.name} cannot render a per-row DEFAULT cell — rows must be grouped by column set`,\n });\n }\n return \"DEFAULT\";\n })\n .join(\", \")})`,\n )\n .join(\", \");\n let text = defaultValues\n ? `${insertKeyword} ${renderTable(dialect, statement.table)} DEFAULT VALUES`\n : `${insertKeyword} ${renderTable(dialect, statement.table)} (${columnList}) ${unnestSource ?? `VALUES ${rowsSql}`}`;\n\n // Mysql can only name the incoming row through a ROW ALIAS declared right\n // after the VALUES list; postgres/sqlite have the built-in `excluded`\n // pseudo-relation and need nothing. Emitted only when the update arm\n // actually references the incoming row.\n if (\n onConflict !== undefined &&\n !(\"doNothing\" in onConflict) &&\n dialect.excludedRowRef.form === \"rowAlias\" &&\n Object.values(onConflict.update).some((value) => isExcludedRef(value) || (isSqlFragment(value) && sqlUsesIncoming({ fragment: value })))\n ) {\n text += ` AS ${dialect.quoteIdent({ name: dialect.excludedRowRef.alias })}`;\n }\n\n if (onConflict !== undefined) {\n if (\"doNothing\" in onConflict) {\n if (dialect.doNothingForm === \"onConflictDoNothing\") {\n let target = \"\";\n if (onConflict.constraint !== undefined) {\n if (dialect.name !== \"postgres\") {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a named-constraint conflict target (ON CONFLICT ON CONSTRAINT)\",\n hint: \"only postgres names constraints in conflict targets — use a column-list target\",\n });\n }\n target = ` ON CONSTRAINT ${dialect.quoteIdent({ name: onConflict.constraint })}`;\n } else if (onConflict.columns !== undefined && onConflict.columns.length > 0) {\n target = ` (${onConflict.columns.map((name) => dialect.quoteIdent({ name })).join(\", \")})`;\n if (onConflict.conflictWhere !== undefined) {\n // RAW predicate — the engines match it against the index's own\n // predicate structurally; parameters could never match (ast.ts).\n target += ` WHERE ${onConflict.conflictWhere}`;\n }\n }\n text += ` ON CONFLICT${target} DO NOTHING`;\n } else {\n // `duplicateKeyKeep` fires on ANY duplicate key. A bare column target\n // degrades to that documented wider skip; a REFINED target (named\n // constraint, partial-index predicate) must not silently widen —\n // the builder gates first, the renderer defends.\n if (onConflict.constraint !== undefined || onConflict.conflictWhere !== undefined) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a refined conflict target (constraint / partial-index predicate) on ON DUPLICATE KEY UPDATE\",\n hint: \"mysql skips on any duplicate key — drop the refinement or gate the call per dialect\",\n });\n }\n // A self-assignment: a duplicate changes nothing, every other error\n // (NOT NULL, range, foreign key) stays an error — never INSERT IGNORE.\n const keepName = onConflict.keepColumn ?? statement.columns[0];\n if (keepName === undefined) {\n throw internalError({ message: \"a skip-duplicates insert of an all-default row must name its keepColumn\" });\n }\n const keep = dialect.quoteIdent({ name: keepName });\n const current = `${dialect.quoteIdent({ name: statement.table.name })}.${keep}`;\n const flag = onConflict.duplicateFlag;\n if (flag !== undefined && !/^\\d{1,20}$/.test(flag)) {\n throw internalError({ message: `duplicateFlag must be a decimal literal, got ${JSON.stringify(flag)}` });\n }\n // The flag form reports a skipped duplicate through the insert id\n // (`LAST_INSERT_ID(S)` runs only on the duplicate arm).\n text += flag === undefined\n ? ` ON DUPLICATE KEY UPDATE ${keep} = ${current}`\n : ` ON DUPLICATE KEY UPDATE ${keep} = IF(LAST_INSERT_ID(${flag}), ${current}, ${current})`;\n }\n } else {\n const updates = Object.entries(onConflict.update);\n if (updates.length === 0) {\n throw internalError({ message: \"upsert update must set at least one column\" });\n }\n // The update arm's self-references MUST be table-qualified: inside\n // `ON CONFLICT … DO UPDATE SET`, postgres has BOTH the target row and\n // the `excluded` pseudo-relation in scope, so a bare `\"views\" + $n`\n // is rejected as ambiguous (SQLSTATE 42702). Sqlite and mysql accept\n // the qualified form with identical semantics (the pre-update row), so\n // one rule covers every dialect instead of a per-dialect divergence.\n const selfRef = dialect.quoteIdent({ name: statement.table.name });\n if (onConflict.skipUnchanged !== undefined && !dialect.capabilities.upsertSkipUnchanged) {\n throw unsupportedCapability({ dialect: dialect.name, feature: \"skipUnchanged on an upsert's update arm\", hint: \"drop skipUnchanged on this dialect\" });\n }\n if (onConflict.rowPolicy !== undefined && !dialect.capabilities.nativeRowLevelSecurity) {\n throw unsupportedCapability({ dialect: dialect.name, feature: \"nativeRowLevelSecurity\", hint: \"a conflict arm's row policy is a native row-security predicate\" });\n }\n const assignments = dialect.upsertForm !== \"onConflict\" && onConflict.skipUnchanged !== undefined\n ? renderStampFirstAssignments({ dialect, columns: onConflict.skipUnchanged, update: onConflict.update, collector, selfRef, tableName: statement.table.name })\n : renderAssignments({ dialect, entries: updates, collector, selfRef, allowExcluded: true, tableName: statement.table.name });\n if (dialect.upsertForm === \"onConflict\") {\n if (onConflict.lastInsertIdColumn !== undefined) {\n throw internalError({ message: \"lastInsertIdColumn is a mysql (onDuplicateKey) construct\" });\n }\n if (onConflict.constraint !== undefined && dialect.name !== \"postgres\") {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a named-constraint conflict target (ON CONFLICT ON CONSTRAINT)\",\n hint: \"sqlite conflict targets are column lists — name the indexed columns instead\",\n });\n }\n if (onConflict.constraint !== undefined && onConflict.conflictWhere !== undefined) {\n throw internalError({\n message: \"a named-constraint conflict target already identifies the index — it cannot carry a partial predicate too\",\n });\n }\n // RAW predicate — matched structurally against the partial index's own\n // stored predicate, exactly like the DO NOTHING form (ast.ts).\n const partial = onConflict.conflictWhere === undefined ? \"\" : ` WHERE ${onConflict.conflictWhere}`;\n const target =\n onConflict.constraint !== undefined\n ? ` ON CONSTRAINT ${dialect.quoteIdent({ name: onConflict.constraint })}`\n : ` (${onConflict.columns.map((name) => dialect.quoteIdent({ name })).join(\", \")})${partial}`;\n text += ` ON CONFLICT${target} DO UPDATE SET ${assignments}`;\n const unchanged = onConflict.skipUnchanged === undefined\n ? undefined\n : renderUnchangedGuard({ dialect, columns: onConflict.skipUnchanged, update: onConflict.update, collector, selfRef, tableName: statement.table.name });\n if (unchanged !== undefined || onConflict.updateWhere !== undefined) {\n if (!dialect.capabilities.conflictUpdateWhere) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a guarded conflict update (ON CONFLICT … DO UPDATE … WHERE)\",\n hint: \"run the guarded upsert as a find-then-write in a transaction instead\",\n });\n }\n const condition = onConflict.updateWhere === undefined ? undefined : renderExpr({ dialect, expr: onConflict.updateWhere, collector });\n const guard = unchanged === undefined ? condition : condition === undefined ? unchanged : `${unchanged} AND (${condition})`;\n // The guard reads the stored row before row security checks it: a row the policy hides skips nothing.\n text += onConflict.rowPolicy === undefined ? ` WHERE ${guard}` : ` WHERE (${onConflict.rowPolicy}) IS NOT TRUE OR (${guard})`;\n }\n } else {\n if (onConflict.updateWhere !== undefined) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a guarded conflict update (ON DUPLICATE KEY UPDATE has no WHERE)\",\n hint: \"run the guarded upsert as a find-then-write in a transaction instead — the runtime does this when the dialect lacks conflictUpdateWhere\",\n });\n }\n if (onConflict.constraint !== undefined) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a named-constraint conflict target on ON DUPLICATE KEY UPDATE\",\n hint: \"mysql's ODKU fires on any duplicate key — no target can be named\",\n });\n }\n if (onConflict.conflictWhere !== undefined) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a partial-index conflict target on ON DUPLICATE KEY UPDATE\",\n hint: \"mysql's ODKU fires on any duplicate key — a partial arbiter cannot be selected; gate the call per dialect\",\n });\n }\n // B2: the update arm must record WHICH row it addressed — without this,\n // LAST_INSERT_ID() is stale after ODKU takes the update arm and the\n // read-back can resolve an unrelated row.\n const trick =\n onConflict.lastInsertIdColumn === undefined\n ? \"\"\n : `, ${dialect.quoteIdent({ name: onConflict.lastInsertIdColumn })} = LAST_INSERT_ID(${dialect.quoteIdent({ name: onConflict.lastInsertIdColumn })})`;\n const flagged = onConflict.duplicateFlag;\n if (flagged !== undefined && (onConflict.lastInsertIdColumn !== undefined || !/^\\d{1,20}$/.test(flagged.flag))) {\n throw internalError({ message: \"an update arm's duplicate flag must be a decimal literal, and cannot share LAST_INSERT_ID with lastInsertIdColumn\" });\n }\n const flag = flagged === undefined\n ? \"\"\n : `, ${dialect.quoteIdent({ name: flagged.column })} = IF(LAST_INSERT_ID(${flagged.flag}), ${selfRef}.${dialect.quoteIdent({ name: flagged.column })}, ${selfRef}.${dialect.quoteIdent({ name: flagged.column })})`;\n text += ` ON DUPLICATE KEY UPDATE ${assignments}${trick}${flag}`;\n }\n }\n }\n\n const returning = applyReturning({ dialect, requested: statement.returning, collector, table: statement.table });\n return { text: text + returning.suffix, values: collector.values, returning: returning.status };\n}\n\n// ─── UPDATE ───────────────────────────────────────────────────────\n\nfunction renderUpdate(params: {\n dialect: SqlDialect;\n statement: UpdateStatement;\n collector: ParamCollector;\n /** Chain steps defined before this one (a chain step only): a set value may read them. */\n earlier?: ReadonlySet<string>;\n}): RenderedQuery {\n const { dialect, statement, collector } = params;\n\n const assignments = Object.entries(statement.set);\n if (assignments.length === 0) {\n throw internalError({ message: \"update must set at least one column\" });\n }\n const source = statement.from;\n if (source !== undefined) {\n if (statement.alias === undefined || statement.alias === source.alias) throw internalError({ message: \"UPDATE … FROM needs distinct target and source aliases\" });\n const target = dialect.quoteIdent({ name: statement.alias });\n const joined = dialect.quoteIdent({ name: source.alias });\n const assign = (): string => renderAssignments({ dialect, entries: assignments, collector, selfRef: target, source: joined, ...(dialect.name === \"mysql\" ? { qualifyWrite: target } : {}), ...(params.earlier === undefined ? {} : { steps: params.earlier }) });\n const where = (): string => statement.where === undefined ? \"\" : ` AND ${renderExpr({ dialect, expr: statement.where, collector })}`;\n if (\"select\" in source) {\n // A FROM subquery reading the target table is the previous-row read of\n // `update({ previous })`; only PostgreSQL's RETURNING can read it back.\n if (!dialect.capabilities.returningReadsJoinedSource) {\n throw unsupportedCapability({ dialect: dialect.name, feature: \"UPDATE … FROM (SELECT …) with RETURNING of the joined source\", hint: \"read the row inside the write's transaction first, then write it\" });\n }\n // Placeholders bind in text order: SET, the subquery, then the outer WHERE.\n const set = assign();\n const joinedSelect = renderSelect({ dialect, statement: source.select, collector }).text;\n const text = `UPDATE ${renderTable(dialect, statement.table)} AS ${target} SET ${set} FROM (${joinedSelect}) AS ${joined} WHERE ${renderExpr({ dialect, expr: source.on, collector })}${where()}`;\n const returning = applyReturning({ dialect, requested: statement.returning, qualify: target });\n return { text: text + returning.suffix, values: collector.values, returning: returning.status };\n }\n // Placeholders bind in text order: MySQL's ON precedes SET.\n const text = dialect.name === \"mysql\"\n ? `UPDATE ${renderTable(dialect, statement.table)} AS ${target} JOIN ${renderTable(dialect, source.table)} AS ${joined} ON ${renderExpr({ dialect, expr: source.on, collector })} SET ${assign()}${statement.where === undefined ? \"\" : ` WHERE ${renderExpr({ dialect, expr: statement.where, collector })}`}`\n : `UPDATE ${renderTable(dialect, statement.table)} AS ${target} SET ${assign()} FROM ${renderTable(dialect, source.table)} AS ${joined} WHERE ${renderExpr({ dialect, expr: source.on, collector })}${where()}`;\n const returning = applyReturning({ dialect, requested: statement.returning, collector, ...(dialect.name === \"postgres\" ? { qualify: target } : {}) });\n return { text: text + returning.suffix, values: collector.values, returning: returning.status };\n }\n const setSql = renderAssignments({ dialect, entries: assignments, collector, ...(params.earlier === undefined ? {} : { steps: params.earlier }) });\n let text = `UPDATE ${renderTable(dialect, statement.table)} SET ${setSql}`;\n\n if (statement.where !== undefined) {\n text += ` WHERE ${renderExpr({ dialect, expr: statement.where, collector })}`;\n }\n\n const returning = applyReturning({ dialect, requested: statement.returning, collector, table: statement.table });\n return { text: text + returning.suffix, values: collector.values, returning: returning.status };\n}\n\n// ─── Assignments (SET / DO UPDATE SET) ────────────────────────────\n\n/**\n * `SET` assignments, shared by UPDATE and the upsert update arm.\n *\n * `selfRef` (the quoted target table) qualifies the READ side of an operation\n * that reads the column it writes — required inside `ON CONFLICT DO UPDATE`,\n * where a bare reference is ambiguous with `excluded` on postgres. The write\n * side is never qualified: `SET \"t\".\"col\" = …` is a syntax error everywhere.\n * A plain UPDATE passes no `selfRef` — it has no second relation in scope.\n */\n/**\n * The incoming row's column, qualified for this dialect: `excluded.\"col\"`\n * (postgres/sqlite) or `` `new`.`col` `` (mysql's row alias, declared after the\n * VALUES list by {@link renderInsert}).\n */\nfunction renderIncomingRowColumn(params: { dialect: SqlDialect; column: string }): string {\n const { dialect, column } = params;\n const ref = dialect.excludedRowRef;\n const qualifier = ref.form === \"keyword\" ? ref.name : dialect.quoteIdent({ name: ref.alias });\n return `${qualifier}.${dialect.quoteIdent({ name: column })}`;\n}\n\ntype AssignmentContext = {\n dialect: SqlDialect;\n collector: ParamCollector;\n selfRef?: string;\n /** Only an upsert's update arm has an incoming row to reference. */\n allowExcluded?: boolean;\n tableName?: string;\n /** Lane C3: earlier chain steps a {@link StepColumnRef} value may read (a chain UPDATE step only). */\n steps?: ReadonlySet<string>;\n /** `UPDATE … FROM`: the quoted alias a {@link SourceColumnRef} value reads. */\n source?: string;\n /** MySQL's `UPDATE … JOIN` qualifies the written column with the target alias. */\n qualifyWrite?: string;\n};\n\nfunction renderAssignments(params: AssignmentContext & { entries: readonly (readonly [string, unknown])[] }): string {\n const { dialect, entries } = params;\n return entries\n .map(([name, value]) => `${dialect.quoteIdent({ name })} = ${renderAssignmentValue({ ...params, name, value })}`)\n .map((assignment) => (params.qualifyWrite === undefined ? assignment : `${params.qualifyWrite}.${assignment}`))\n .join(\", \");\n}\n\n/**\n * The skip-unchanged member of a conflict arm's WHERE: the stored row's\n * compared columns differ from the values the assignments write. Each value\n * renders again through the assignment renderer, so a bound value binds once\n * more; `excluded` references bind nothing.\n *\n * \"Unchanged\" means the stored value would not change. Where the column's own\n * equality is coarser, both sides compare as text instead: PostgreSQL text in\n * the \"C\" collation (a `citext` or nondeterministic-collation column), the\n * text of a bare `numeric` (`1.50` is not `1.5`), MySQL's `CAST(… AS BINARY)`;\n * a bound Json value is converted to MySQL's own document text first.\n */\nfunction renderUnchangedGuard(params: {\n dialect: SqlDialect;\n columns: readonly UnchangedColumn[];\n update: Readonly<Record<string, unknown>>;\n collector: ParamCollector;\n selfRef: string;\n tableName: string;\n}): string {\n const { dialect, columns, update, collector, selfRef, tableName } = params;\n if (columns.length === 0) throw internalError({ message: \"a skip-unchanged guard needs at least one compared column\" });\n const left: string[] = [];\n const right: string[] = [];\n for (const entry of columns) {\n if (!Object.hasOwn(update, entry.column)) {\n throw internalError({ message: `the skip-unchanged column ${entry.column} has no assignment in the update arm` });\n }\n const assigned = update[entry.column];\n const value = renderAssignmentValue({ dialect, collector, selfRef, allowExcluded: true, tableName, name: entry.column, value: assigned });\n const stored = `${selfRef}.${dialect.quoteIdent({ name: entry.column })}`;\n if (dialect.name === \"mysql\" && entry.bytes !== undefined && entry.bytes !== \"decimal\") {\n left.push(`CAST(${stored} AS BINARY)`);\n // A bound Json value is the caller's JSON text; the stored side is MySQL's normalized document text.\n right.push(entry.json !== undefined && !isExcludedRef(assigned) ? `CAST(CAST(${value} AS JSON) AS BINARY)` : `CAST(${value} AS BINARY)`);\n continue;\n }\n if (dialect.name === \"postgres\" && entry.folds === true) {\n const text = entry.list === true ? \"text[]\" : \"text\";\n left.push(`${stored}::${text} COLLATE \"C\"`);\n right.push(`(${value})::${text} COLLATE \"C\"`);\n continue;\n }\n if (dialect.name === \"postgres\" && entry.bytes === \"decimal\") {\n left.push(`${stored}::text`);\n right.push(`((${value})::numeric${entry.list === true ? \"[]\" : \"\"})::text`);\n continue;\n }\n const cast = dialect.name === \"postgres\" && entry.json !== undefined ? `::jsonb${entry.json === \"list\" ? \"[]\" : \"\"}` : \"\";\n left.push(`${stored}${cast}`);\n right.push(cast === \"\" ? value : `(${value})${cast}`);\n }\n return dialect.renderRowsDiffer({ left, right });\n}\n\n/**\n * A skip-unchanged update arm where the conflict clause has no WHERE (MySQL's\n * ON DUPLICATE KEY UPDATE): each column the comparison leaves out (the\n * `@updatedAt` stamps) is assigned FIRST, as `IF(<stored row differs>, <new\n * value>, <stored value>)`, then the compared columns as usual. MySQL runs the\n * assignments left to right, so the comparison reads the stored row; a row\n * whose assignments then change nothing is not written at all. Placeholders\n * bind in text order: each stamp's comparison values, its own value, then the\n * remaining assignments.\n */\nfunction renderStampFirstAssignments(params: {\n dialect: SqlDialect;\n columns: readonly UnchangedColumn[];\n update: Readonly<Record<string, unknown>>;\n collector: ParamCollector;\n selfRef: string;\n tableName: string;\n}): string {\n const { dialect, columns, update, collector, selfRef, tableName } = params;\n const compared = new Set(columns.map((entry) => entry.column));\n const context = { dialect, collector, selfRef, allowExcluded: true, tableName };\n const stamps = Object.entries(update).filter(([name]) => !compared.has(name));\n const rest = Object.entries(update).filter(([name]) => compared.has(name));\n const first = stamps.map(([name, value]) => {\n const differs = renderUnchangedGuard({ ...params });\n const column = dialect.quoteIdent({ name });\n return `${column} = IF(${differs}, ${renderAssignmentValue({ ...context, name, value })}, ${selfRef}.${column})`;\n });\n return [...first, ...(rest.length === 0 ? [] : [renderAssignments({ ...context, entries: rest })])].join(\", \");\n}\n\n/** The value expression one SET assignment writes into column `name`. */\nfunction renderAssignmentValue(params: AssignmentContext & { name: string; value: unknown }): string {\n const { dialect, collector, selfRef, name, value } = params;\n const column = dialect.quoteIdent({ name });\n const read = selfRef === undefined ? column : `${selfRef}.${column}`;\n if (isSourceColumnRef(value)) {\n if (params.source === undefined) throw internalError({ message: `an UPDATE set value reads the joined source's column ${value.column}, but the statement joins no source` });\n return `${params.source}.${dialect.quoteIdent({ name: value.column })}`;\n }\n // Lane C3: the value of an earlier step's one row — a scalar subquery,\n // whose own scope resolves the column (no clash with the target's).\n if (isStepColumnRef(value)) {\n if (params.steps === undefined || !params.steps.has(value.step)) {\n throw internalError({ message: `an UPDATE set value reads step \"${value.step}\", which is not an earlier chain step` });\n }\n return `(SELECT ${dialect.quoteIdent({ name: value.column })} FROM ${dialect.quoteIdent({ name: value.step })})`;\n }\n // The INCOMING row's value for this column — a column reference, so a\n // batched upsert writes each conflicting row's own value while binding\n // it exactly once (in the VALUES list).\n if (isSqlFragment(value)) {\n if (params.allowExcluded !== true || selfRef === undefined) throw internalError({ message: \"SQL assignment fragments require a conflict update\" });\n return renderSqlFragment({ dialect, fragment: value, collector, conflict: { table: params.tableName! } });\n }\n if (isExcludedRef(value)) {\n if (params.allowExcluded !== true) {\n throw internalError({\n message: `an incoming-row reference (${value.column}) is only meaningful inside an upsert's update arm`,\n });\n }\n return renderIncomingRowColumn({ dialect, column: value.column });\n }\n // V8: the column keeps its current value — a conflict update arm only.\n if (isSqlKeepCell(value)) {\n if (params.allowExcluded !== true || selfRef === undefined) throw internalError({ message: \"a keep-column cell is only meaningful inside an upsert's update arm\" });\n return read;\n }\n if (isJsonPatchOperation(value)) {\n return renderJsonPatch({ dialect, patch: value, read, collector });\n }\n // Json cell: same param-type pinning as the VALUES cells above.\n if (isJsonParamCell(value)) {\n return `${collector.add(value.text)}${jsonCellCast(dialect, value)}`;\n }\n if (isSetOperation(value)) {\n const operand = collector.add(value.value);\n const numeric = dialect.name === \"sqlite\" && value.numericType === \"Decimal\" ? `CAST(${operand} AS REAL)` : operand;\n return `${read} ${SET_OPERATION_SQL[value.__op]} ${numeric}`;\n }\n if (isDbNowMarker(value)) {\n return dialect.renderDbNow({ offsetSeconds: value.offsetSeconds, collector });\n }\n if (isListSetOperation(value)) {\n assertScalarArrays(dialect, 'the scalar-list update operation \"push\"');\n if (value.__listOp === \"append\") {\n return `array_append(${read}, ${collector.add(value.value)})`;\n }\n return `${read} || ${collector.add(value.value)}`;\n }\n return collector.add(value);\n}\n\n// ─── DELETE ───────────────────────────────────────────────────────\n\nfunction renderDelete(params: {\n dialect: SqlDialect;\n statement: DeleteStatement;\n collector: ParamCollector;\n}): RenderedQuery {\n const { dialect, statement, collector } = params;\n\n let text = `DELETE FROM ${renderTable(dialect, statement.table)}`;\n if (statement.where !== undefined) {\n text += ` WHERE ${renderExpr({ dialect, expr: statement.where, collector })}`;\n }\n\n const returning = applyReturning({ dialect, requested: statement.returning, collector, table: statement.table });\n return { text: text + returning.suffix, values: collector.values, returning: returning.status };\n}\n\n// ─── Statement chains (WITH … SELECT) ─────────────────────────────\n\n/** Derived-table aliases of a chain's verdict SELECT — no step may take them. */\nconst CHAIN_ROWS_ALIAS = \"__vibe_rows\";\nconst CHAIN_ONE_ALIAS = \"__vibe_one\";\n\n/**\n * `WITH \"a\" AS (…), \"b\" AS (…) <final SELECT>` — see {@link ChainStatement}.\n * Steps render in order through the ordinary statement renderers on ONE\n * shared collector, so parameters number in step order, then the verdict.\n *\n * The verdict form is `SELECT rows.cols, <verdict> FROM (SELECT 1) LEFT JOIN\n * (<union>) AS rows ON TRUE`: one row per written row, or ONE all-NULL row\n * carrying the verdict when the union is empty. A `LEFT JOIN`, not a NULL\n * marker branch inside the `UNION ALL`, so every column keeps its RETURNING\n * type — PostgreSQL resolves a nested UNION's untyped NULLs pairwise (two NULL\n * branches become `text`), which a bare marker branch would trip over.\n */\nfunction renderChain(params: {\n dialect: SqlDialect;\n statement: ChainStatement;\n collector: ParamCollector;\n}): RenderedQuery {\n const { dialect, statement, collector } = params;\n if (dialect.statementChain === null) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a statement chain (data-modifying WITH steps)\",\n hint: \"this dialect accepts only SELECT inside WITH — gate on SqlDialect.statementChain and keep the multi-statement path\",\n });\n }\n if (statement.steps.length === 0) throw internalError({ message: \"a statement chain needs at least one step\" });\n const defined = new Set<string>();\n const steps: string[] = [];\n for (const step of statement.steps) {\n if (step.name === CHAIN_ROWS_ALIAS || step.name === CHAIN_ONE_ALIAS || defined.has(step.name)) {\n throw internalError({ message: `chain step name \"${step.name}\" is reserved or repeated` });\n }\n const body = renderChainStep({ dialect, statement: step.statement, collector, earlier: defined });\n steps.push(`${dialect.quoteIdent({ name: step.name })} AS (${body})`);\n defined.add(step.name);\n }\n\n const result = statement.result;\n const captures = result.capture ?? [];\n if (captures.length > 0 && !dialect.capabilities.rowCapture) {\n throw unsupportedCapability({ dialect: dialect.name, feature: \"row capture (RETURNING old./new.)\", hint: \"row capture needs PostgreSQL 18 or later; the runtime refuses $transaction({ capture }) on this dialect\" });\n }\n for (const alias of captureAliases({ captures })) {\n if (result.columns.includes(alias) || alias === result.verdict?.alias || alias === result.tally?.alias) {\n throw internalError({ message: `chain capture alias \"${alias}\" collides with a result column` });\n }\n }\n if (result.rowsFrom.length === 0 && result.columns.length === 0 && result.tally !== undefined && result.verdict === undefined) {\n const tally = renderTallyColumn({ dialect, result, defined, collector });\n return { text: `WITH ${steps.join(\", \")} SELECT ${[tally, ...renderChainCaptures({ dialect, captures, defined, collector })].join(\", \")}`, values: collector.values, returning: \"none\" };\n }\n if (result.rowsFrom.length === 0 || result.columns.length === 0) {\n throw internalError({ message: \"a chain result needs at least one source step and one column\" });\n }\n for (const name of result.rowsFrom) {\n if (!defined.has(name)) throw internalError({ message: `chain result reads undefined step \"${name}\"` });\n }\n const columnList = result.columns.map((name) => dialect.quoteIdent({ name })).join(\", \");\n const guarded = result.verdict !== undefined || result.tally !== undefined || (result.veto !== undefined && result.veto.length > 0);\n // Without a guaranteed row the capture columns ride every arm: rendered once\n // (one bound limit each), the same text in every arm.\n const armCapture = guarded || captures.length === 0 ? \"\" : `, ${renderChainCaptures({ dialect, captures, defined, collector }).join(\", \")}`;\n const union = result.rowsFrom\n .map((name) => `SELECT ${columnList}${armCapture} FROM ${dialect.quoteIdent({ name })}`)\n .join(\" UNION ALL \");\n let select = union;\n if (guarded) {\n const extra: string[] = [];\n for (const alias of [result.verdict?.alias, result.tally?.alias]) {\n if (alias !== undefined && result.columns.includes(alias)) {\n throw internalError({ message: `chain result alias \"${alias}\" collides with a result column` });\n }\n }\n const rows = dialect.quoteIdent({ name: CHAIN_ROWS_ALIAS });\n const projected = result.columns.map((name) => `${rows}.${dialect.quoteIdent({ name })}`);\n if (result.verdict !== undefined) {\n extra.push(`${renderExpr({ dialect, expr: result.verdict.expr, collector })} AS ${dialect.quoteIdent({ name: result.verdict.alias })}`);\n }\n if (result.tally !== undefined || (result.veto !== undefined && result.veto.length > 0)) {\n extra.push(renderTallyColumn({ dialect, result, defined, collector }));\n }\n extra.push(...renderChainCaptures({ dialect, captures, defined, collector }));\n select =\n `SELECT ${[...projected, ...extra].join(\", \")} FROM (SELECT 1) AS ${dialect.quoteIdent({ name: CHAIN_ONE_ALIAS })}` +\n ` LEFT JOIN (${union}) AS ${rows} ON TRUE`;\n }\n return { text: `WITH ${steps.join(\", \")} ${select}`, values: collector.values, returning: \"none\" };\n}\n\nfunction renderChainStep(params: {\n dialect: SqlDialect;\n statement: ChainStepStatement;\n collector: ParamCollector;\n earlier: ReadonlySet<string>;\n}): string {\n const { dialect, statement, collector } = params;\n switch (statement.kind) {\n case \"select\":\n return renderSelect({ dialect, statement, collector }).text;\n case \"insert\":\n return renderInsert({ dialect, statement, collector }).text;\n case \"insertSelect\":\n return renderInsertSelect({ dialect, statement, collector, earlier: params.earlier });\n case \"update\":\n return renderUpdate({ dialect, statement, collector, earlier: params.earlier }).text;\n case \"delete\":\n return renderDelete({ dialect, statement, collector }).text;\n }\n}\n\n/** The result columns every {@link ChainCapture} entry adds, in render order. */\nfunction captureAliases(params: { captures: readonly ChainCapture[] }): string[] {\n const out: string[] = [];\n for (const entry of params.captures) {\n out.push(`${entry.alias}_n`);\n if (entry.inserted !== undefined) out.push(`${entry.alias}_i`);\n if (entry.before !== undefined && entry.before.length > 0) out.push(`${entry.alias}_b`);\n if (entry.after !== undefined && entry.after.length > 0) {\n if (entry.inserted === undefined || entry.insertedOnly !== true) out.push(`${entry.alias}_a`);\n if (entry.inserted !== undefined) out.push(`${entry.alias}_ia`);\n }\n for (const index of (entry.cascades ?? []).keys()) out.push(`${entry.alias}_c${index}`);\n }\n return out;\n}\n\n/**\n * The {@link ChainCapture} columns: a step's row count, its inserted-arm\n * count, and its distinct before/after images as ONE two-dimensional text\n * array literal each (an upsert step's after images one per arm), `LIMIT`\n * bound once per entry — so a write of 10 000 rows of one key ships one\n * image, and no aggregate ships more than `limit`.\n */\nfunction renderChainCaptures(params: { dialect: SqlDialect; captures: readonly ChainCapture[]; defined: ReadonlySet<string>; collector: ParamCollector }): string[] {\n const { dialect, captures, defined, collector } = params;\n const quote = (name: string): string => dialect.quoteIdent({ name });\n const out: string[] = [];\n for (const entry of captures) {\n if (!defined.has(entry.step)) throw internalError({ message: `chain capture reads undefined step \"${entry.step}\"` });\n const step = quote(entry.step);\n const marker = entry.inserted === undefined ? undefined : quote(entry.inserted);\n out.push(`(SELECT count(*) FROM ${step}) AS ${quote(`${entry.alias}_n`)}`);\n if (marker !== undefined) out.push(`(SELECT count(*) FROM ${step} WHERE ${marker}) AS ${quote(`${entry.alias}_i`)}`);\n const before = entry.before ?? [];\n const after = entry.after ?? [];\n out.push(...renderImageAggregates({ dialect, entry, step, marker, before, after, collector }));\n for (const [index, cascade] of (entry.cascades ?? []).entries()) {\n const keys = quote(\"__vibe_k\");\n const child = quote(CAPTURE_CHILD_ALIAS);\n const match = `EXISTS (SELECT 1 FROM ${step} AS ${keys} WHERE ${cascade.on.map((pair) => `${keys}.${quote(pair.parent)} = ${child}.${quote(pair.child)}`).join(\" AND \")})`;\n out.push(`${renderCascadeImages({ dialect, cascade, match, collector })} AS ${quote(`${entry.alias}_c${index}`)}`);\n }\n }\n return out;\n}\n\n/** A {@link ChainCapture} entry's `_b`, `_a` and `_ia` image aggregates, sharing one bound limit. */\nfunction renderImageAggregates(params: { dialect: SqlDialect; entry: ChainCapture; step: string; marker: string | undefined; before: readonly string[]; after: readonly string[]; collector: ParamCollector }): string[] {\n const { dialect, entry, step, marker, before, after, collector } = params;\n const quote = (name: string): string => dialect.quoteIdent({ name });\n const out: string[] = [];\n if (before.length === 0 && after.length === 0) return out;\n if (!Number.isSafeInteger(entry.limit) || entry.limit < 1) throw internalError({ message: `chain capture \"${entry.alias}\" needs a positive integer limit` });\n const limit = collector.add(entry.limit);\n const item = quote(\"__vibe_i\");\n const image = (columns: readonly string[], filter: string): string =>\n `(SELECT array_agg(${item})::text FROM (SELECT DISTINCT ARRAY[${columns.map(quote).join(\", \")}] AS ${item} FROM ${step}${filter} LIMIT ${limit}) AS ${quote(\"__vibe_d\")})`;\n const updatedRows = marker === undefined ? \"\" : ` WHERE NOT ${marker}`;\n if (before.length > 0) out.push(`${image(before, updatedRows)} AS ${quote(`${entry.alias}_b`)}`);\n if (after.length > 0 && (marker === undefined || entry.insertedOnly !== true)) out.push(`${image(after, updatedRows)} AS ${quote(`${entry.alias}_a`)}`);\n if (after.length > 0 && marker !== undefined) out.push(`${image(after, ` WHERE ${marker}`)} AS ${quote(`${entry.alias}_ia`)}`);\n return out;\n}\n\n/** One SELECT-list cell in a VALUES form: encoded value, Json cell or clock cell — never DEFAULT. */\nfunction renderSelectCell(params: { dialect: SqlDialect; value: unknown; collector: ParamCollector }): string {\n const { dialect, value, collector } = params;\n if (isJsonParamCell(value)) return `${collector.add(value.text)}${jsonCellCast(dialect, value)}`;\n if (isDbNowMarker(value)) return dialect.renderDbNow({ offsetSeconds: value.offsetSeconds, collector });\n if (isSqlDefaultCell(value)) {\n throw internalError({ message: \"DEFAULT is not allowed in an INSERT … SELECT list — omit the column instead\" });\n }\n return collector.add(value);\n}\n\n/**\n * `(SELECT cols FROM (VALUES (<typed NULL row>), ($1, $2), …) AS \"alias\"\n * (cols) OFFSET 1) AS \"alias\"` — see {@link ChainRowSource}: the first VALUES\n * row is one `(SELECT \"col\" FROM typedBy WHERE FALSE)` per column (a typed\n * NULL), which types every later parameter by the target table's own column;\n * `OFFSET 1` drops it again.\n */\nfunction renderRowSource(params: { dialect: SqlDialect; source: ChainRowSource; collector: ParamCollector }): string {\n const { dialect, source, collector } = params;\n if (source.columns.length === 0 || source.rows.length === 0) {\n throw internalError({ message: \"a row source needs at least one column and one row\" });\n }\n const typedBy = renderTable(dialect, source.typedBy);\n const columns = source.columns.map((name) => dialect.quoteIdent({ name }));\n const rows = [`(${columns.map((column) => `(SELECT ${column} FROM ${typedBy} WHERE FALSE)`).join(\", \")})`];\n for (const row of source.rows) {\n if (row.length !== source.columns.length) {\n throw internalError({ message: `row source row has ${row.length} values but ${source.columns.length} columns` });\n }\n rows.push(`(${row.map((value) => renderSelectCell({ dialect, value, collector })).join(\", \")})`);\n }\n const alias = dialect.quoteIdent({ name: source.alias });\n const columnList = columns.join(\", \");\n return `(SELECT ${columnList} FROM (VALUES ${rows.join(\", \")}) AS ${alias} (${columnList}) OFFSET 1) AS ${alias}`;\n}\n\n/**\n * The tally column guarded by the vetoes: `CASE WHEN NOT EXISTS (SELECT 1\n * FROM \"s\") THEN CAST('__vibe_veto:<token>:' || $n || ':' || (SELECT count(*)\n * FROM \"s\") AS integer) … ELSE (SELECT count(*) FROM \"a\") + … END`, `$n`\n * binding the veto's nonce. A veto with `minRows` above 1 (EPIC W) tests\n * `WHEN (SELECT count(*) FROM \"s\") < <minRows>` instead.\n *\n * The failing cast is how a plain SQL expression raises an error (SQLSTATE\n * 22P02, the marker quoted in the message). Its operand reads the step, so it\n * is NOT a constant: PostgreSQL folds constant CASE arms at plan time and\n * would raise even when the arm is never taken; this one is evaluated only\n * when its WHEN holds. The count it appends is the rows the step returned.\n */\nfunction renderTallyColumn(params: { dialect: SqlDialect; result: ChainResult; defined: ReadonlySet<string>; collector: ParamCollector }): string {\n const { dialect, result, defined, collector } = params;\n const tally = result.tally;\n if (tally === undefined) throw internalError({ message: \"a chain veto needs a tally column to guard\" });\n if (tally.steps.length === 0) throw internalError({ message: \"a chain tally needs at least one step\" });\n const step = (name: string): string => {\n if (!defined.has(name)) throw internalError({ message: `chain tally or veto reads undefined step \"${name}\"` });\n return dialect.quoteIdent({ name });\n };\n const count = (name: string): string => `(SELECT count(*) FROM ${step(name)})`;\n const sum = tally.steps.map(count).join(\" + \");\n const vetoes = result.veto ?? [];\n if (vetoes.length === 0) {\n if (result.vetoGate !== undefined) throw internalError({ message: \"a chain veto gate needs a veto to gate\" });\n return `${sum} AS ${dialect.quoteIdent({ name: tally.alias })}`;\n }\n const gate = result.vetoGate === undefined ? [] : [`WHEN NOT EXISTS (SELECT 1 FROM ${step(result.vetoGate)}) THEN ${sum}`];\n const arms = vetoes.map((veto) => {\n if (!CHAIN_VETO_TOKEN_PATTERN.test(veto.token)) throw internalError({ message: `chain veto token \"${veto.token}\" is not a lower-case word` });\n if (typeof veto.nonce !== \"string\" || veto.nonce === \"\") throw internalError({ message: `chain veto \"${veto.token}\" needs a non-empty nonce` });\n const minRows = veto.minRows ?? 1;\n if (!Number.isSafeInteger(minRows) || minRows < 1) throw internalError({ message: `chain veto \"${veto.token}\" needs a positive integer minRows` });\n if (veto.exactRows !== undefined && (!Number.isSafeInteger(veto.exactRows) || veto.exactRows < 0 || veto.minRows !== undefined)) {\n throw internalError({ message: `chain veto \"${veto.token}\" needs a nonnegative safe integer exactRows without minRows` });\n }\n const when = veto.exactRows !== undefined\n ? `WHEN ${count(veto.step)} <> ${veto.exactRows}`\n : minRows === 1 ? `WHEN NOT EXISTS (SELECT 1 FROM ${step(veto.step)})` : `WHEN ${count(veto.step)} < ${minRows}`;\n return `${when} THEN CAST('${CHAIN_VETO_PREFIX}${veto.token}:' || ${collector.add(veto.nonce)} || ':' || ${count(veto.step)} AS integer)`;\n });\n return `CASE ${[...gate, ...arms].join(\" \")} ELSE ${sum} END AS ${dialect.quoteIdent({ name: tally.alias })}`;\n}\n\n/** `INSERT INTO t (cols) SELECT <cells> [FROM steps] [WHERE …] [RETURNING …]` — a chain step only. */\nfunction renderInsertSelect(params: {\n dialect: SqlDialect;\n statement: InsertSelectStatement;\n collector: ParamCollector;\n earlier: ReadonlySet<string>;\n}): string {\n const { dialect, statement, collector } = params;\n if (statement.columns.length === 0) throw internalError({ message: \"insert requires at least one column\" });\n if (statement.cells.length !== statement.columns.length) {\n throw internalError({\n message: `insert row has ${statement.cells.length} values but ${statement.columns.length} columns`,\n });\n }\n const from = statement.from ?? [];\n for (const name of from) {\n if (!params.earlier.has(name)) throw internalError({ message: `INSERT … SELECT reads step \"${name}\" before it is defined` });\n }\n const source = statement.source;\n if (source !== undefined && (params.earlier.has(source.alias) || from.includes(source.alias))) {\n throw internalError({ message: `row source alias \"${source.alias}\" collides with a chain step` });\n }\n const cells = statement.cells.map((value) => {\n if (isStepColumnRef(value)) {\n if (!from.includes(value.step) && value.step !== source?.alias) {\n throw internalError({ message: `cell reads step \"${value.step}\", which the INSERT … SELECT does not name in FROM` });\n }\n return `${dialect.quoteIdent({ name: value.step })}.${dialect.quoteIdent({ name: value.column })}`;\n }\n return renderSelectCell({ dialect, value, collector });\n });\n const columnList = statement.columns.map((name) => dialect.quoteIdent({ name })).join(\", \");\n let text = `INSERT INTO ${renderTable(dialect, statement.table)} (${columnList}) SELECT ${cells.join(\", \")}`;\n const relations = from.map((name) => dialect.quoteIdent({ name }));\n if (source !== undefined) relations.push(renderRowSource({ dialect, source, collector }));\n if (relations.length > 0) text += ` FROM ${relations.join(\" CROSS JOIN \")}`;\n if (statement.where !== undefined) {\n text += ` WHERE ${renderExpr({ dialect, expr: statement.where, collector })}`;\n }\n const conflict = statement.conflictDoNothing;\n if (conflict !== undefined) {\n if (conflict.columns.length === 0) throw internalError({ message: \"an INSERT … SELECT conflict clause needs at least one column\" });\n if (dialect.doNothingForm !== \"onConflictDoNothing\") {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"ON CONFLICT DO NOTHING on an INSERT … SELECT chain step\",\n hint: \"gate on SqlDialect.statementChain and keep the multi-statement path\",\n });\n }\n text += ` ON CONFLICT (${conflict.columns.map((name) => dialect.quoteIdent({ name })).join(\", \")}) DO NOTHING`;\n }\n return text + applyReturning({ dialect, requested: statement.returning, collector, table: statement.table }).suffix;\n}\n",
|
|
54
|
+
"import { renderSqliteJsonEquality } from \"./dialects/sqlite-json-equality.ts\";\nimport { mysqlPinnedCommonTableSuffix, renderMysqlJsonKeys } from \"./dialects/mysql-json-keys.ts\";\nimport { JSON_TRANSPORT, projectionOutputName } from \"./json-transport.ts\";\nimport { isFixedDiagnostic, renderCaptureReadiness, renderDiagnostic } from \"./dialects/diagnostics.ts\";\nimport type { DiagnosticStatement } from \"./dialects/diagnostics.ts\";\nimport { renderPostgresExplain, renderPostgresWorkload } from \"./dialects/postgres-diagnostics.ts\";\nimport { renderRlsReadinessQuery, renderRlsProbeTable, renderRlsPolicyPath } from \"./dialects/postgres-rls-readiness.ts\";\n/**\n * Statement renderer: SQL AST × dialect → { text, values, returning }.\n *\n * The shared grammar lives here; every dialect divergence goes through an\n * explicit SqlDialect strategy field. Malformed ASTs throw VIBE_INTERNAL —\n * the AST is built by VibeORM code, so a bad shape is always our bug.\n */\n\nimport { assertSqlNamespace, internalError, unsupportedCapability } from \"@vibeorm/schema\";\nimport { isSqlFragment, renderSqlFragment, sqlUsesIncoming } from \"./composable.ts\";\nimport type { SqlFragmentSpec } from \"@vibeorm/schema\";\nimport type { ColRef, CommonTable, FirstRowList, JsonKeys, JsonParamCell, JsonSlot, KeyTableJoin, KeyTableMember, OrderTerm, SqlStatement, RlsReadinessStatement, RlsProbeTableStatement, RlsPolicyPathStatement, SqlExpr, TableArrays, TableRef } from \"./ast.ts\";\nimport type {\n AggFn,\n AggRef,\n ChainResult,\n ChainCapture,\n CaptureCascade,\n CaptureCell,\n CaptureReturningColumn,\n OtherRowReturningColumn,\n ChainRowSource,\n ChainStatement,\n ChainStepStatement,\n DeleteStatement,\n GroupKeyExpression,\n GroupingSets,\n InsertSelectStatement,\n InsertStatement,\n UnchangedColumn,\n KeyListMember,\n KeyPage,\n KeyRows,\n RowSourceColumn,\n OrderByColumn,\n LateralJoin,\n LeftJoin,\n CountSubquery,\n ReturningColumn,\n SelectExpr,\n SelectStatement,\n SetOperator,\n UpdateStatement,\n} from \"./ast.ts\";\nimport { CHAIN_VETO_PREFIX, CHAIN_VETO_TOKEN_PATTERN, isCaptureReturningColumn, isOtherRowReturningColumn, isDbNowMarker, returningColumnName, isExcludedRef, isJsonParamCell, isListSetOperation, isSetOperation, isSqlDefaultCell, isSqlKeepCell, isSourceColumnRef, isStepColumnRef } from \"./ast.ts\";\nimport type { SqlDialect } from \"./dialect.ts\";\nimport { containsPattern, endsWithPattern, startsWithPattern, strictMatchCollationPrefilter, strictMatchPattern } from \"./like.ts\";\nimport { renderAdvisoryLock, renderAdvisoryLocks, renderRowLockClause } from \"./locks.ts\";\nimport { renderDateTruncation } from \"./date-truncation.ts\";\nimport { ParamCollector } from \"./params.ts\";\nimport { isJsonListParameter, jsonListParameter } from \"./json-list-parameter.ts\";\nimport { jsonPathString } from \"./json-path.ts\";\nimport { isJsonPatchOperation, renderJsonPatch } from \"./json-patch.ts\";\nimport { keyListBindsUntypedRows, postgresBulkInsertArrayCast, postgresKeyListElementType } from \"./key-list.ts\";\nimport { renderRlsContext, renderRlsDisable, renderRlsDropPolicy, renderRlsEnable, renderRlsForce, renderRlsNoForce, renderRlsPolicy, renderRlsRole } from \"./dialects/postgres-rls.ts\";\n\n// ─── Result shape ─────────────────────────────────────────────────\n\nexport type RenderedQuery = {\n readonly text: string;\n readonly values: unknown[];\n /**\n * RETURNING status: \"native\" (rendered), \"omitted\" (requested but the dialect\n * lacks it — caller must re-select), \"none\" (not requested).\n */\n readonly returning: \"native\" | \"omitted\" | \"none\";\n};\n\n// ─── Entry point ──────────────────────────────────────────────────\n\nexport function renderStatement(params: { dialect: SqlDialect; statement: DiagnosticStatement | SqlStatement | RlsReadinessStatement | RlsProbeTableStatement | RlsPolicyPathStatement }): RenderedQuery {\n const { dialect, statement } = params;\n const collector = new ParamCollector(dialect);\n switch (statement.kind) {\n case \"diagnostic\": {\n // EPIC 5: `postgresExplain` wraps another statement, so it renders that\n // one first and keeps its parameters; the read-only workload reads take\n // their own identifiers and bounds. Everything else is a fixed probe.\n if (isFixedDiagnostic(statement)) return renderDiagnostic({ dialect, query: statement.query });\n if (statement.query === \"postgresCaptureReadiness\") return renderCaptureReadiness({ dialect, tables: statement.tables });\n if (statement.query === \"postgresExplain\") {\n return renderPostgresExplain({\n dialect,\n query: renderStatement({ dialect, statement: statement.statement }),\n ...(statement.options === undefined ? {} : { options: statement.options }),\n });\n }\n return renderPostgresWorkload({ dialect, ...statement });\n }\n case \"select\":\n return renderSelect({ dialect, statement, collector, outermost: true });\n case \"advisoryLocks\":\n return renderAdvisoryLocks({ dialect, keys: statement.keys, mode: statement.mode });\n case \"advisoryLock\":\n return renderAdvisoryLock({ dialect, statement, collector });\n case \"insert\":\n return renderInsert({ dialect, statement, collector });\n case \"update\":\n return renderUpdate({ dialect, statement, collector });\n case \"delete\":\n return renderDelete({ dialect, statement, collector });\n case \"chain\":\n return renderChain({ dialect, statement, collector });\n case \"rlsReadiness\": return renderRlsReadinessQuery({ dialect, ...statement });\n case \"rlsProbeTable\": return renderRlsProbeTable({ dialect, ...statement });\n case \"rlsPolicyPath\": return renderRlsPolicyPath({ dialect, ...statement });\n case \"rlsEnable\":\n return renderRlsEnable({ dialect, table: statement.table });\n case \"rlsForce\":\n return renderRlsForce({ dialect, table: statement.table });\n case \"rlsDisable\":\n return renderRlsDisable({ dialect, table: statement.table });\n case \"rlsNoForce\":\n return renderRlsNoForce({ dialect, table: statement.table });\n case \"rlsDropPolicy\":\n return renderRlsDropPolicy({ dialect, table: statement.table, policyName: statement.policyName });\n case \"rlsPolicy\":\n return renderRlsPolicy({ dialect, ...statement });\n case \"rlsContext\":\n return renderRlsContext({ dialect, ...statement });\n case \"rlsRole\":\n return renderRlsRole({ dialect, role: statement.role });\n }\n}\n\n// ─── Shared pieces ────────────────────────────────────────────────\n\nfunction quoteCol(dialect: SqlDialect, column: ColRef): string {\n if (column.coalesce !== undefined) {\n if (column.coalesce.length < 2 || column.coalesce.some((member) => member.coalesce !== undefined)) {\n throw internalError({ message: \"ColRef.coalesce needs two or more plain member references\" });\n }\n return `COALESCE(${column.coalesce.map((member) => quoteCol(dialect, member)).join(\", \")})`;\n }\n const name = dialect.quoteIdent({ name: column.name });\n const ref = column.table === undefined ? name : `${dialect.quoteIdent({ name: column.table })}.${name}`;\n // groupBy date keys: the start of the period, rendered identically at the\n // projection, GROUP BY and ORDER BY sites (refused without the capability).\n if (column.truncate !== undefined) return renderDateTruncation({ dialect, reference: ref, truncation: column.truncate });\n if (column.groupKey !== undefined) return renderGroupKey({ dialect, reference: ref, key: column.groupKey });\n if (column.enumOrdinal === true) return dialect.renderEnumOrdinal({ column: ref });\n // B4: sqlite Decimal compare/order/aggregate sites read the TEXT column as\n // REAL — the builder sets this only there, never on projections.\n if (column.castReal === true) {\n if (dialect.name !== \"sqlite\") {\n throw internalError({ message: \"ColRef.castReal is a sqlite Decimal construct\" });\n }\n return `CAST(${ref} AS REAL)`;\n }\n // D3: postgres `json` order/distinct/compare sites read the column as jsonb.\n if (column.castJsonb !== undefined) {\n if (dialect.name !== \"postgres\") {\n throw internalError({ message: \"ColRef.castJsonb is a postgres json construct\" });\n }\n return `${ref}::${column.castJsonb}`;\n }\n return ref;\n}\n\n/**\n * An ORDER BY / DISTINCT ON column of a SELECT, protected from binding to an\n * OUTPUT column. Postgres, MySQL and SQLite all resolve a bare name in ORDER\n * BY (postgres: DISTINCT ON too) to an output column of that name FIRST. When\n * the projection renames something else to the column's name — a postgres\n * `Float[]`/`Json[]` list read as `\"col\"::text AS \"col\"`, or a projection\n * alias — the bare name would order the TEXT, not the typed column\n * (`{10}` < `{1e-07}` < `{9}`). Such a reference is qualified with the\n * select's FROM name (its alias, or the derived-table name), which only ever\n * names the input column. Qualified references, casts and truncations\n * (`castReal`, `castJsonb`, `truncate` — expressions read input columns, and a\n * truncated key must repeat its GROUP BY text) and plain projections render\n * unchanged. Window ORDER BY (ROW_NUMBER) never sees output names, so it is\n * not passed through here.\n */\nfunction typedOrderRef(params: { statement: SelectStatement; column: ColRef }): ColRef {\n const { statement, column } = params;\n // MySQL and SQLite resolve an output name inside an ORDER BY expression too.\n if (column.coalesce !== undefined) return { ...column, coalesce: column.coalesce.map((member) => typedOrderRef({ statement, column: member })) };\n if (column.table !== undefined || column.castReal === true || column.castJsonb !== undefined || column.truncate !== undefined || column.groupKey !== undefined) return column;\n const renamed = statement.columns.some(\n (projected) => (projected.alias ?? projected.name) === column.name && (projected.transform !== undefined || projected.alias !== undefined),\n );\n return renamed ? { ...column, table: statement.table.alias ?? statement.table.name } : column;\n}\n\n/**\n * The cast a {@link JsonParamCell} renders after its placeholder: the\n * dialect's json param cast (`::text::jsonb` on postgres, empty elsewhere),\n * or `::text::json` for a cell bound for a postgres `json` column — the\n * server parses the text as `json` and stores it as written (D3).\n */\nfunction jsonCellCast(dialect: SqlDialect, cell: JsonParamCell): string {\n if (cell.storage !== \"json\" || dialect.jsonParamCast === \"\") return dialect.jsonParamCast;\n if (dialect.name !== \"postgres\") {\n throw internalError({ message: \"JsonParamCell storage json is a postgres construct\" });\n }\n return \"::text::json\";\n}\n\n/**\n * Projection rendering: a plain reference or its wire transform. JSON text\n * projections use the dialect primitive and keep explicit aliases. Text casts\n * preserve lossless transport on every dialect; both base64 forms remain\n * postgres-only.\n */\nfunction quoteProjection(dialect: SqlDialect, column: ColRef): string {\n if (column.transform === undefined) {\n const base = quoteCol(dialect, column);\n // A truncated key is an expression: it keeps the column's name as output name.\n const alias = column.alias ?? (column.truncate === undefined && column.groupKey === undefined ? undefined : column.name);\n if (alias === undefined) return base;\n return `${base} AS ${dialect.quoteIdent({ name: alias })}`;\n }\n if (column.transform === \"jsonText\") {\n const ref = quoteCol(dialect, column);\n const alias = dialect.quoteIdent({ name: column.alias ?? column.name });\n return `${dialect.jsonTextProjection({ expression: ref })} AS ${alias}`;\n }\n const ref = quoteCol(dialect, column);\n const alias = dialect.quoteIdent({ name: column.alias ?? column.name });\n if (column.transform === \"castText\") return `${textProjection({ dialect, expression: ref })} AS ${alias}`;\n // Lane J: MySQL's lateral subselect ships Bytes as `TO_BASE64` (a newline\n // every 76 characters, which the base64 decoder skips).\n if (column.transform === \"encodeBase64\" && dialect.name === \"mysql\") return `TO_BASE64(${ref}) AS ${alias}`;\n if (dialect.name !== \"postgres\") {\n throw internalError({ message: `${column.transform} is a postgres construct` });\n }\n if (column.transform === \"encodeArrayBase64\") return `encode(array_send(${ref}), 'base64') AS ${alias}`;\n return `encode(${ref}, 'base64') AS ${alias}`;\n}\n\nfunction textProjection(params: { dialect: SqlDialect; expression: string }): string {\n return params.dialect.name === \"postgres\" ? `${params.expression}::text`\n : `CAST(${params.expression} AS ${params.dialect.name === \"mysql\" ? \"CHAR\" : \"TEXT\"})`;\n}\n\n/**\n * A SELECT list rendered exactly as a {@link SelectStatement}'s columns are —\n * plain references and their wire transforms (`\"t\".\"scores\"::text AS\n * \"scores\"`) — for SQL assembled outside the AST (extension statements), so\n * its rows reach the driver in the same formats as `findMany`'s.\n */\nexport function renderProjection(params: { dialect: SqlDialect; columns: readonly ColRef[] }): string {\n const { dialect, columns } = params;\n return columns.map((column) => quoteProjection(dialect, column)).join(\", \");\n}\n\nfunction renderTable(dialect: SqlDialect, table: TableRef): string {\n if (table.namespace !== undefined) assertSqlNamespace({ namespace: table.namespace, dialect: dialect.name });\n const relation = dialect.quoteIdent({ name: table.name });\n const name = table.namespace === undefined ? relation : `${dialect.quoteIdent({ name: table.namespace })}.${relation}`;\n if (table.alias === undefined) return name;\n return `${name} AS ${dialect.quoteIdent({ name: table.alias })}`;\n}\n\nfunction assertCount(value: number, what: string): void {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw internalError({ message: `${what} must be a non-negative integer, got ${value}` });\n }\n}\n\nconst COMPARISON_SQL: Readonly<Record<string, string>> = {\n eq: \"=\",\n ne: \"<>\",\n gt: \">\",\n gte: \">=\",\n lt: \"<\",\n lte: \"<=\",\n};\n\n/**\n * Atomic SET arithmetic. `divide` is plain `/`: integer columns therefore\n * follow each dialect's own integer-division rule (pg/sqlite truncate, mysql\n * promotes to decimal) — pinned by the update-atomic-ops catalog case.\n */\nconst SET_OPERATION_SQL: Readonly<Record<SetOperator, string>> = {\n increment: \"+\",\n decrement: \"-\",\n multiply: \"*\",\n divide: \"/\",\n};\n\nconst AGG_FN_SQL: Readonly<Record<AggFn, string>> = {\n count: \"COUNT\",\n avg: \"AVG\",\n sum: \"SUM\",\n min: \"MIN\",\n max: \"MAX\",\n};\n\n/**\n * `COUNT(*)` / `FN(\"col\")` — shared by projections, HAVING and ORDER BY. A\n * filtered aggregate renders its predicate where it stands, so its parameters\n * bind at every site, in text order.\n */\nfunction renderAggRef(dialect: SqlDialect, agg: AggRef, collector: ParamCollector): string {\n if (agg.filter !== undefined) return renderFilteredAggregate({ dialect, agg, filter: agg.filter, collector });\n if (agg.fn === \"countAll\") return \"COUNT(*)\";\n const column = quoteCol(dialect, agg.column);\n if ((agg.fn === \"min\" || agg.fn === \"max\") && agg.enumOrder !== undefined) {\n return dialect.renderEnumMinMax({ fn: agg.fn, column, result: agg.enumOrder });\n }\n return `${AGG_FN_SQL[agg.fn]}(${column})`;\n}\n\n/**\n * `AGG(x) FILTER (WHERE …)`, or on a `caseWhen` dialect `AGG(CASE WHEN … THEN\n * x END)` — `COUNT(*)` counts `CASE WHEN … THEN 1 END` there. A row the\n * predicate leaves unknown is left out by both forms.\n */\nfunction renderFilteredAggregate(params: { dialect: SqlDialect; agg: AggRef; filter: SqlExpr; collector: ParamCollector }): string {\n const { dialect, agg, filter, collector } = params;\n if (dialect.capabilities.filteredAggregates === \"filterClause\") {\n const { filter: _filter, ...plain } = agg;\n const aggregate = renderAggRef(dialect, plain, collector);\n return `${aggregate} FILTER (WHERE ${renderExpr({ dialect, expr: filter, collector })})`;\n }\n const when = renderExpr({ dialect, expr: filter, collector });\n if (agg.fn === \"countAll\") return `COUNT(CASE WHEN ${when} THEN 1 END)`;\n const column = quoteCol(dialect, agg.column);\n if ((agg.fn === \"min\" || agg.fn === \"max\") && agg.enumOrder !== undefined) {\n return dialect.renderEnumMinMax({ fn: agg.fn, column, result: agg.enumOrder, when });\n }\n return `${AGG_FN_SQL[agg.fn]}(CASE WHEN ${when} THEN ${column} END)`;\n}\n\n/** The longest string prefix a `groupBy` prefix key takes. */\nconst MAX_GROUP_KEY_PREFIX = 1000;\n\n/**\n * A {@link GroupKeyExpression} over `reference`. The path steps and the prefix\n * length render as literals (each site of one key must repeat the identical\n * text), so they are checked again here.\n *\n * - postgres: `(\"col\" -> 'a' ->> 'b')` — `->` with a text key reads an object\n * member only, as the other dialects' quoted paths do; a `json` column\n * converts the extracted value to jsonb (`((\"col\" -> 'a' -> 'b')::jsonb #>>\n * '{}')`) so numbers and objects print as a jsonb column's do;\n * - sqlite: `json_extract` returns JSON booleans as 1/0 and numbers as\n * numbers, so a CASE over `json_type` spells each type as JSON text;\n * - mysql: `JSON_UNQUOTE` of a JSON `null` is the string `'null'`, so a CASE\n * over `JSON_TYPE` maps it to SQL NULL first.\n */\nfunction renderGroupKey(params: { dialect: SqlDialect; reference: string; key: GroupKeyExpression }): string {\n const { dialect, reference, key } = params;\n if (key.kind === \"prefix\") {\n if (!Number.isSafeInteger(key.length) || key.length < 1 || key.length > MAX_GROUP_KEY_PREFIX) {\n throw internalError({ message: `a groupBy prefix length must be an integer from 1 to ${MAX_GROUP_KEY_PREFIX}, got ${String(key.length)}` });\n }\n if (dialect.name === \"sqlite\") return `substr(${reference}, 1, ${key.length})`;\n return `${dialect.name === \"mysql\" ? \"LEFT\" : \"left\"}(${reference}, ${key.length})`;\n }\n if (key.path.length === 0 || key.path.some((step) => typeof step !== \"string\" || step.length === 0 || step.includes(\"\\u0000\"))) {\n throw internalError({ message: \"a groupBy JSON path needs one or more non-empty object keys without NUL characters\" });\n }\n switch (dialect.jsonPathMode) {\n case \"operators\": {\n const steps = key.path.map((step) => dialect.quoteStringLiteral({ value: step }));\n if (key.storage === \"json\") return `((${reference} -> ${steps.join(\" -> \")})::jsonb #>> '{}')`;\n const last = steps.length - 1;\n return `(${reference}${steps.map((step, index) => `${index === last ? \" ->> \" : \" -> \"}${step}`).join(\"\")})`;\n }\n case \"sqliteExtract\": {\n const path = dialect.quoteStringLiteral({ value: jsonPathString(key.path) });\n const extracted = `json_extract(${reference}, ${path})`;\n return `CASE json_type(${reference}, ${path}) WHEN 'text' THEN ${extracted} WHEN 'true' THEN 'true' WHEN 'false' THEN 'false' WHEN 'null' THEN NULL ELSE CAST(${extracted} AS TEXT) END`;\n }\n case \"mysqlExtract\": {\n const extracted = `JSON_EXTRACT(${reference}, ${dialect.quoteStringLiteral({ value: jsonPathString(key.path) })})`;\n return `CASE WHEN JSON_TYPE(${extracted}) = 'NULL' THEN NULL ELSE JSON_UNQUOTE(${extracted}) END`;\n }\n }\n}\n\n/**\n * `GROUP BY …` over grouping sets: `GROUPING SETS ((a, b), (a), ())`, or on a\n * `rollup` dialect `a, b WITH ROLLUP` when the sets are exactly the rollup\n * chain of the keys in order. Anything else is refused.\n */\nfunction renderGroupingSets(params: { dialect: SqlDialect; keys: readonly string[]; grouping: GroupingSets }): string {\n const { dialect, keys, grouping } = params;\n const sets = groupingSetIndexes({ keys, grouping });\n const mode = dialect.capabilities.groupingSets;\n if (mode === \"groupingSets\") {\n return `GROUPING SETS (${sets.map((set) => `(${set.map((index) => keys[index]).join(\", \")})`).join(\", \")})`;\n }\n if (mode === \"rollup\" && isRollupChain({ count: keys.length, sets })) return `${keys.join(\", \")} WITH ROLLUP`;\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: mode === \"rollup\" ? \"groupBy grouping sets other than the rollup of `by` in order\" : \"groupBy grouping sets\",\n hint: mode === \"rollup\"\n ? \"MySQL groups by `WITH ROLLUP` only: list the sets [[a, b], [a], []] for by [a, b], or run one groupBy per set\"\n : \"run one groupBy per grouping set instead\",\n });\n}\n\n/** The sets' member indexes, checked against the key count. */\nfunction groupingSetIndexes(params: { keys: readonly string[]; grouping: GroupingSets }): readonly (readonly number[])[] {\n const { keys, grouping } = params;\n if (grouping.sets.length === 0 || keys.length === 0 || keys.length > 31) {\n throw internalError({ message: \"grouping sets need one or more sets over 1 to 31 groupBy keys\" });\n }\n for (const set of grouping.sets) {\n if (set.some((index) => !Number.isSafeInteger(index) || index < 0 || index >= keys.length)) {\n throw internalError({ message: \"a grouping set names a groupBy key that does not exist\" });\n }\n }\n return grouping.sets;\n}\n\n/**\n * Are `sets` (indexes into `count` grouping keys) exactly the rollup chain\n * `[0..n-1], [0..n-2], …, []`, in any order and with members in any order?\n * The one shape a `rollup` dialect can group by (`GROUP BY … WITH ROLLUP`).\n */\nexport function isRollupChain(params: { count: number; sets: readonly (readonly number[])[] }): boolean {\n const { count, sets } = params;\n if (sets.length !== count + 1) return false;\n const lengths = new Set<number>();\n for (const set of sets) {\n const sorted = [...set].sort((left, right) => left - right);\n if (!sorted.every((index, position) => index === position)) return false;\n lengths.add(set.length);\n }\n return lengths.size === count + 1;\n}\n\n/**\n * `CASE GROUPING(k0, k1, …) WHEN <mask> THEN <set index> … END`: GROUPING sets\n * a key's bit (the rightmost key is the lowest bit) when the row's set leaves\n * the key out, so each set has one mask.\n */\nfunction renderGroupingSetIndex(params: { keys: readonly string[]; grouping: GroupingSets }): string {\n const { keys } = params;\n const sets = groupingSetIndexes(params);\n const branches = sets.map((set, position) => {\n let mask = 0;\n for (let index = 0; index < keys.length; index++) {\n if (!set.includes(index)) mask += 2 ** (keys.length - 1 - index);\n }\n return `WHEN ${mask} THEN ${position}`;\n });\n return `CASE GROUPING(${keys.join(\", \")}) ${branches.join(\" \")} END`;\n}\n\nfunction assertScalarArrays(dialect: SqlDialect, feature: string): void {\n if (dialect.capabilities.scalarArrays) return;\n throw unsupportedCapability({\n dialect: dialect.name,\n feature,\n hint: \"only postgres has native array columns — model the list as a related table instead\",\n });\n}\n\n// ─── Expressions ──────────────────────────────────────────────────\n\n/**\n * Render one boolean expression into SQL text, collecting parameters into the\n * shared collector. Public so extension delegates can AND user `where` trees\n * (compiled by the runtime) into their own statements.\n */\nexport function renderExpr(params: { dialect: SqlDialect; expr: SqlExpr; collector: ParamCollector }): string {\n const { dialect, expr, collector } = params;\n\n switch (expr.kind) {\n case \"cmp\": {\n const op = COMPARISON_SQL[expr.op];\n if (op === undefined) {\n throw internalError({ message: `unknown comparison operator \"${expr.op}\"` });\n }\n // Database-clock operand: the dialect's now() expression, never a param.\n if (isDbNowMarker(expr.value)) {\n return `${quoteCol(dialect, expr.column)} ${op} ${dialect.renderDbNow({ offsetSeconds: expr.value.offsetSeconds, collector })}`;\n }\n const compared = listComparison({ dialect, column: expr.column, value: expr.value, collector });\n return `${compared.column} ${op} ${compared.operand}`;\n }\n\n case \"cmpCol\": {\n const op = COMPARISON_SQL[expr.op];\n if (op === undefined) {\n throw internalError({ message: `unknown comparison operator \"${expr.op}\"` });\n }\n return `${quoteCol(dialect, expr.left)} ${op} ${quoteCol(dialect, expr.right)}`;\n }\n\n case \"isNull\":\n return `${quoteCol(dialect, expr.column)} IS ${expr.negate === true ? \"NOT NULL\" : \"NULL\"}`;\n\n case \"inArray\": {\n if (expr.values.length === 0) {\n // Empty IN matches nothing; empty NOT IN matches everything.\n return expr.negate === true ? \"1 = 1\" : \"1 = 0\";\n }\n const column = quoteCol(dialect, expr.column);\n if (expr.timeOfDay === true && dialect.timeOfDayInStrategy === \"equalities\") {\n const equalities = collector.addMany(expr.values).map((placeholder) => `${column} = ${placeholder}`);\n return `${expr.negate === true ? \"NOT \" : \"\"}(${equalities.join(\" OR \")})`;\n }\n if (dialect.inArrayStrategy === \"any\") {\n const base = `${column} = ANY(${collector.add(Array.isArray(expr.values) ? [...expr.values] : expr.values)})`;\n return expr.negate === true ? `NOT (${base})` : base;\n }\n const placeholders = collector.addMany(expr.values);\n return `${column} ${expr.negate === true ? \"NOT IN\" : \"IN\"} (${placeholders.join(\", \")})`;\n }\n\n case \"tupleIn\": {\n if (expr.columns.length === 0) {\n throw internalError({ message: \"tupleIn needs at least one column\" });\n }\n for (const row of expr.rows) {\n if (row.length !== expr.columns.length) {\n throw internalError({\n message: `tupleIn row has ${row.length} values for ${expr.columns.length} columns`,\n });\n }\n }\n if (expr.rows.length === 0) {\n // Same honesty as inArray: an empty membership matches nothing.\n return expr.negate === true ? \"1 = 1\" : \"1 = 0\";\n }\n const columns = expr.columns.map((column) => quoteCol(dialect, column));\n if (dialect.tupleInStrategy === \"rowValue\") {\n const tuples = expr.rows.map((row) => `(${collector.addMany(row).join(\", \")})`);\n const base = `(${columns.join(\", \")}) IN (${tuples.join(\", \")})`;\n return expr.negate === true ? `NOT (${base})` : base;\n }\n // No row constructors: an OR of COMPLETE conjunctions, never a per-column\n // IN (which would match the Cartesian product of the members).\n const conjunctions = expr.rows.map((row) => {\n const terms = row.map((value, index) => `${columns[index] as string} = ${collector.add(value)}`);\n return terms.length === 1 ? (terms[0] as string) : `(${terms.join(\" AND \")})`;\n });\n const base = conjunctions.length === 1 ? (conjunctions[0] as string) : `(${conjunctions.join(\" OR \")})`;\n return expr.negate === true ? `NOT ${base.startsWith(\"(\") ? base : `(${base})`}` : base;\n }\n\n case \"keyList\":\n return renderKeyList({ dialect, expr, collector });\n\n case \"rowCompare\": {\n // D-01: one row-value comparison; values bind in member order.\n const op = COMPARISON_SQL[expr.op];\n if (op === undefined || expr.columns.length === 0 || expr.values.length !== expr.columns.length) {\n throw internalError({ message: `rowCompare needs a range operator and one value per column (${expr.columns.length} columns, ${expr.values.length} values)` });\n }\n const columns = expr.columns.map((column) => quoteCol(dialect, column));\n const placeholders = expr.values.map((value) => collector.add(value));\n return `(${columns.join(\", \")}) ${op} (${placeholders.join(\", \")})`;\n }\n\n case \"inSelect\": {\n // D-04: the subquery shares the collector, like EXISTS.\n if (expr.columns.length === 0) throw internalError({ message: \"inSelect needs at least one column\" });\n if (dialect.name === \"mysql\" && (expr.select.limit !== undefined || expr.select.offset !== undefined)) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"LIMIT inside an IN subquery\",\n hint: \"mysql refuses LIMIT directly inside an IN subquery (error 1235); wrap the limited select in a derived table\",\n });\n }\n const columns = expr.columns.map((column) => quoteCol(dialect, column));\n if (expr.single === true && columns.length !== 1) throw internalError({ message: \"a single-row inSelect compares exactly one column\" });\n const tested = columns.length === 1 ? (columns[0] as string) : `(${columns.join(\", \")})`;\n const sub = renderSelect({ dialect, statement: expr.select, collector });\n return expr.single === true ? `${tested} = (${sub.text})` : `${tested} IN (${sub.text})`;\n }\n\n case \"like\": {\n const column = quoteCol(dialect, expr.column);\n const placeholder = collector.add(expr.pattern);\n let base: string;\n if (expr.insensitive === true) {\n base =\n dialect.insensitiveLike === \"ilike\"\n ? `${column} ILIKE ${placeholder}`\n : expr.ciCollation === true\n ? // #36: the column's declared `_ci` collation already folds case —\n // plain LIKE keeps the index usable.\n `${column} LIKE ${placeholder}`\n : `LOWER(${column}) LIKE LOWER(${placeholder})`;\n } else {\n base = `${column} LIKE ${placeholder}`;\n }\n if (dialect.likeEscapeClause !== null) {\n base = `${base}${dialect.likeEscapeClause}`;\n }\n return expr.negate === true ? `NOT (${base})` : base;\n }\n\n case \"strictMatch\": {\n const column = quoteCol(dialect, expr.column);\n let base: string;\n if (expr.op === \"equals\") {\n // pg and sqlite `=` are already byte-exact; only mysql's `_ci`\n // collations fold equality and need the BINARY cast.\n base =\n dialect.strictMatchStrategy === \"binary\"\n ? `${column} = CAST(${collector.add(expr.value)} AS BINARY)`\n : `${column} = ${collector.add(expr.value)}`;\n } else {\n const pattern = strictMatchPattern({\n strategy: dialect.strictMatchStrategy,\n op: expr.op,\n value: expr.value,\n });\n if (dialect.strictMatchStrategy === \"glob\") {\n base = `${column} GLOB ${collector.add(pattern)}`;\n } else {\n // Fix lane Q2 (D-06): mysql strict startsWith ANDs the collation\n // LIKE first (same pattern, bound first) — an index-boundable\n // superset of the byte-exact test, so the rows are unchanged.\n const prefilter = strictMatchCollationPrefilter({\n strategy: dialect.strictMatchStrategy,\n op: expr.op,\n negate: expr.negate === true,\n })\n ? `${column} LIKE ${collector.add(pattern)}${dialect.likeEscapeClause ?? \"\"}`\n : null;\n const placeholder = collector.add(pattern);\n base =\n dialect.strictMatchStrategy === \"binary\"\n ? `${column} LIKE CAST(${placeholder} AS BINARY)`\n : `${column} LIKE ${placeholder}`;\n if (dialect.likeEscapeClause !== null) base = `${base}${dialect.likeEscapeClause}`;\n if (prefilter !== null) base = `(${prefilter} AND ${base})`;\n }\n }\n return expr.negate === true ? `NOT (${base})` : base;\n }\n\n case \"and\":\n case \"or\": {\n if (expr.operands.length === 0) {\n // Neutral elements: empty AND is always-true, empty OR always-false.\n return expr.kind === \"and\" ? \"1 = 1\" : \"1 = 0\";\n }\n if (expr.operands.length === 1) {\n return renderExpr({ dialect, expr: expr.operands[0]!, collector });\n }\n const joiner = expr.kind === \"and\" ? \" AND \" : \" OR \";\n const rendered = expr.operands.map((operand) => renderExpr({ dialect, expr: operand, collector }));\n return `(${rendered.join(joiner)})`;\n }\n\n case \"not\":\n return `NOT (${renderExpr({ dialect, expr: expr.operand, collector })})`;\n\n case \"aggCmp\": {\n const op = COMPARISON_SQL[expr.op];\n if (op === undefined) {\n throw internalError({ message: `unknown comparison operator \"${expr.op}\"` });\n }\n return `${renderAggRef(dialect, expr.agg, collector)} ${op} ${collector.add(expr.value)}`;\n }\n\n case \"arrayHas\": {\n assertScalarArrays(dialect, \"the scalar-list filter \\\"has\\\"\");\n const compared = listComparison({ dialect, column: expr.column, value: expr.value, collector });\n const base = `${compared.operand} = ANY(${compared.column})`;\n return expr.negate === true ? `NOT (${base})` : base;\n }\n\n case \"arrayContainsAll\": {\n assertScalarArrays(dialect, \"the scalar-list filter \\\"hasEvery\\\"\");\n const values = Array.isArray(expr.values) ? [...expr.values] : expr.values;\n const compared = listComparison({ dialect, column: expr.column, value: values, collector });\n return `${compared.column} @> ${compared.operand}`;\n }\n\n case \"arrayOverlaps\": {\n assertScalarArrays(dialect, \"the scalar-list filter \\\"hasSome\\\"\");\n const values = Array.isArray(expr.values) ? [...expr.values] : expr.values;\n const compared = listComparison({ dialect, column: expr.column, value: values, collector });\n return `${compared.column} && ${compared.operand}`;\n }\n\n case \"arrayIsEmpty\": {\n assertScalarArrays(dialect, \"the scalar-list filter \\\"isEmpty\\\"\");\n // v1 semantics kept: array_length of NULL and of '{}' are both NULL, so\n // `isEmpty: true` matches NULL **and** empty lists.\n const column = quoteCol(dialect, expr.column);\n return `array_length(${column}, 1) IS ${expr.empty ? \"NULL\" : \"NOT NULL\"}`;\n }\n\n case \"jsonFilter\":\n return renderJsonFilter({ dialect, expr, collector });\n\n case \"exists\": {\n // The subquery shares the statement's collector, so its parameters land\n // in the single sequence exactly where they appear in the text.\n const sub = renderSelect({ dialect, statement: expr.select, collector });\n return `${expr.negate === true ? \"NOT \" : \"\"}EXISTS (${sub.text})`;\n }\n\n case \"composed\":\n return `(${renderSqlFragment({ dialect, fragment: expr.fragment, collector })})`;\n\n case \"fragment\":\n return renderFragment({ dialect, fragment: expr.fragment, collector });\n\n case \"raw\":\n return expr.text;\n }\n}\n\n// ─── Bound fragments (extension SQL plane) ───────────────────\n\n/**\n * Render a neutral bound fragment (extensions.md §3): literal text verbatim,\n * `{ param }` through the collector (single placeholder sequence), `{ ident }`\n * paths through dialect.quoteIdent. Exported so extension delegates can build\n * full statements sharing one collector with core-compiled WHERE trees.\n */\nexport function renderFragment(params: {\n dialect: SqlDialect;\n fragment: SqlFragmentSpec;\n collector: ParamCollector;\n}): string {\n const { dialect, fragment, collector } = params;\n let text = \"\";\n for (const part of fragment.parts) {\n if (typeof part === \"string\") {\n text += part;\n } else if (\"param\" in part) {\n text += collector.add(part.param);\n } else {\n text += part.ident.map((name) => dialect.quoteIdent({ name })).join(\".\");\n }\n }\n return text;\n}\n\n/**\n * Column and operand of a comparison (`cmp`, `has`, `hasEvery`, `hasSome`).\n * A Json-list operand of a `json[]` column (`Json[] @db.Json`) compares as\n * jsonb on both sides — `\"col\"::jsonb[]` against `$n::text::jsonb[]` (or\n * `$n::text::jsonb` for one element) — because `json` has no equality\n * operator at all (\"could not identify an equality operator for type json\").\n * Write sites (`push`) keep the `json` operand. Everything else renders as\n * before. The column side is added first only in text: it binds nothing.\n */\nfunction listComparison(params: {\n dialect: SqlDialect;\n column: ColRef;\n value: unknown;\n collector: ParamCollector;\n}): { readonly column: string; readonly operand: string } {\n const { dialect, column, value, collector } = params;\n if (isJsonListParameter(value) && value.storage === \"json\") {\n return {\n column: `${quoteCol(dialect, column)}::jsonb[]`,\n operand: collector.add(jsonListParameter({ value: value.value, storage: \"jsonb\" })),\n };\n }\n return { column: quoteCol(dialect, column), operand: collector.add(value) };\n}\n\ntype KeyListExpr = Extract<SqlExpr, { kind: \"keyList\" }>;\n\n/**\n * Key-list membership per `SqlDialect.keyListStrategy` (see the `keyList`\n * node): postgres binds one typed array per member and unnests them in a\n * semi-join subquery — except when a member is a `DateTime` without a\n * declared native type ({@link keyListBindsUntypedRows}): then it renders the\n * row-constructor list of untyped parameters, so each member is typed from\n * its column like `\"col\" = $n`; mysql renders the row-constructor list (an OR\n * of complete conjunctions when a member is a time of day and the dialect\n * declares `equalities` for it); sqlite renders `IN (VALUES …)`.\n */\nfunction renderKeyList(params: { dialect: SqlDialect; expr: KeyListExpr; collector: ParamCollector }): string {\n const { dialect, expr, collector } = params;\n const arity = expr.columns.length;\n if (arity === 0) throw internalError({ message: \"keyList needs at least one column\" });\n if (expr.members.length !== arity) {\n throw internalError({ message: `keyList has ${expr.members.length} members for ${arity} columns` });\n }\n for (const row of expr.rows) {\n if (row.length !== arity) throw internalError({ message: `keyList row has ${row.length} values for ${arity} columns` });\n }\n // Same honesty as inArray: an empty key list matches nothing.\n if (expr.rows.length === 0) return \"1 = 0\";\n const columns = expr.columns.map((column) => quoteCol(dialect, column));\n const tuple = arity === 1 ? (columns[0] as string) : `(${columns.join(\", \")})`;\n if (dialect.keyListStrategy === \"unnest\") {\n // Every member's element type first: a member without one (Json, an\n // unknown native type) is refused in either form.\n const types = expr.members.map((member) => postgresKeyListElementType({ dialect, member }));\n if (!keyListBindsUntypedRows({ members: expr.members })) {\n const arrays = types.map((type, index) => `${collector.add(expr.rows.map((row) => row[index]))}::${type}[]`);\n return `${tuple} IN (SELECT * FROM unnest(${arrays.join(\", \")}))`;\n }\n }\n if (dialect.timeOfDayInStrategy === \"equalities\" && expr.members.some((member) => member.timeOfDay === true)) {\n const conjunctions = expr.rows.map((row) => {\n const terms = row.map((value, index) => `${columns[index] as string} = ${collector.add(value)}`);\n return terms.length === 1 ? (terms[0] as string) : `(${terms.join(\" AND \")})`;\n });\n return conjunctions.length === 1 ? (conjunctions[0] as string) : `(${conjunctions.join(\" OR \")})`;\n }\n const tuples = expr.rows.map((row) => `(${collector.addMany(row).join(\", \")})`);\n return dialect.keyListStrategy === \"values\"\n ? `${tuple} IN (VALUES ${tuples.join(\", \")})`\n : `${tuple} IN (${tuples.join(\", \")})`;\n}\n\n// ─── Fix lane Q1 (round 3, DB-01): per-key page ─────────────────────────\n\n/** Key-list source alias of a per-key page; its members are `__vibe_k<i>` on postgres. */\nconst KEY_PAGE_KEYS = \"__vibe_keys\";\n/** Postgres: the lateral page of identity keys. */\nconst KEY_PAGE_IDS = \"__vibe_ids\";\n/** The child table re-read by identity. */\nconst KEY_PAGE_ROWS = \"__vibe_page\";\n\n/** Members of a {@link KeyPage}'s `select` the per-key page renders; any other is a malformed node. */\nconst KEY_PAGE_SELECT_MEMBERS: ReadonlySet<string> = new Set([\"kind\", \"table\", \"columns\", \"where\", \"orderBy\", \"limit\", \"offset\"]);\n\n/**\n * The per-key page (`SelectStatement.keyPage`) per `SqlDialect.keyPageStrategy`\n * — see {@link KeyPage}. Parameters join the shared sequence in text order:\n * the key tuples (FROM), then the page's own `where`.\n */\nfunction renderKeyPage(params: { dialect: SqlDialect; page: KeyPage; collector: ParamCollector }): string {\n const { dialect, page, collector } = params;\n const { select } = page;\n const arity = page.keyColumns.length;\n if (arity === 0 || page.members.length !== arity) {\n throw internalError({ message: `keyPage has ${page.members.length} members for ${arity} key columns` });\n }\n if (page.rows.length === 0) throw internalError({ message: \"keyPage needs at least one key\" });\n for (const row of page.rows) {\n if (row.length !== arity) throw internalError({ message: `keyPage row has ${row.length} values for ${arity} key columns` });\n }\n if (page.identity.length === 0) throw internalError({ message: \"keyPage needs the child's identity columns\" });\n const order = select.orderBy ?? [];\n if (order.length === 0 || order.some((term) => !(\"column\" in term))) {\n throw internalError({ message: \"keyPage needs a non-empty order of plain column terms\" });\n }\n if (select.table.alias !== undefined || Object.keys(select).some((member) => !KEY_PAGE_SELECT_MEMBERS.has(member))) {\n throw internalError({ message: \"keyPage select carries a member the per-key page cannot render\" });\n }\n if (dialect.keyPageStrategy === \"window\") {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a per-key page (keyPage)\",\n hint: \"the runtime keeps the ROW_NUMBER window on this dialect\",\n });\n }\n const pageRef = (column: ColRef): ColRef => ({ ...column, table: KEY_PAGE_ROWS });\n const projection = select.columns.map((column) => quoteProjection(dialect, pageRef(column)));\n const withKey = (keyRef: (index: number) => ColRef): SqlExpr => {\n const equalities: SqlExpr[] = page.keyColumns.map((column, index) => ({ kind: \"cmpCol\", op: \"eq\", left: column, right: keyRef(index) }));\n const operands = select.where === undefined ? equalities : [...equalities, select.where];\n return operands.length === 1 ? (operands[0] as SqlExpr) : { kind: \"and\", operands };\n };\n const keyPage = (where: SqlExpr, rank: boolean): SelectStatement => ({\n kind: \"select\",\n table: select.table,\n columns: page.identity,\n ...(rank ? { rowNumber: { partitionBy: page.keyColumns, orderBy: order, alias: page.rankAlias } } : {}),\n where,\n orderBy: order,\n ...(select.limit === undefined ? {} : { limit: select.limit }),\n ...(select.offset === undefined ? {} : { offset: select.offset }),\n });\n const rows = renderTable(dialect, { ...select.table, alias: KEY_PAGE_ROWS });\n const keyAlias = select.table.name === KEY_PAGE_KEYS ? `${KEY_PAGE_KEYS}_1` : KEY_PAGE_KEYS;\n const keys = dialect.quoteIdent({ name: keyAlias });\n\n if (dialect.keyPageStrategy === \"lateral\") {\n // One typed array per member, exactly the key-list filter's element types.\n if (keyListBindsUntypedRows({ members: page.members })) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a per-key page over a DateTime key without a declared native type\",\n hint: \"the runtime keeps the ROW_NUMBER window for such keys\",\n });\n }\n const types = page.members.map((member) => postgresKeyListElementType({ dialect, member }));\n const arrays = types.map((type, index) => `${collector.add(page.rows.map((row) => row[index]))}::${type}[]`);\n const names = page.keyColumns.map((_, index) => dialect.quoteIdent({ name: `__vibe_k${index}` }));\n const ids = renderSelect({ dialect, statement: keyPage(withKey((index) => ({ table: keyAlias, name: `__vibe_k${index}` })), true), collector });\n const on = page.identity.map((column) => `${quoteCol(dialect, pageRef(column))} = ${quoteCol(dialect, { table: KEY_PAGE_IDS, name: column.name })}`).join(\" AND \");\n const rank = quoteCol(dialect, { table: KEY_PAGE_IDS, name: page.rankAlias });\n return `SELECT ${[...projection, rank].join(\", \")} FROM unnest(${arrays.join(\", \")}) AS ${keys} (${names.join(\", \")}) CROSS JOIN LATERAL (${ids.text}) AS ${dialect.quoteIdent({ name: KEY_PAGE_IDS })} INNER JOIN ${rows} ON ${on}`;\n }\n\n // inLimit: the rank is re-derived over the fetched page — rendered first,\n // it is text order; plain column terms bind nothing.\n const partition = page.keyColumns.map((column) => quoteCol(dialect, pageRef(column))).join(\", \");\n const rankOrder = order.map((term) => renderOrderTerm({ dialect, term: { ...term, column: pageRef((term as OrderByColumn).column) }, collector })).join(\", \");\n const rank = `ROW_NUMBER() OVER (PARTITION BY ${partition} ORDER BY ${rankOrder}) AS ${dialect.quoteIdent({ name: page.rankAlias })}`;\n const tuples = page.rows.map((row) => `(${collector.addMany(row).join(\", \")})`);\n // SQLite names a VALUES clause's columns column1, column2, … (documented).\n const membership = renderExpr({\n dialect,\n expr: { kind: \"inSelect\", columns: page.identity.map(pageRef), select: keyPage(withKey((index) => ({ table: keyAlias, name: `column${index + 1}` })), false) },\n collector,\n });\n return `SELECT ${[...projection, rank].join(\", \")} FROM (VALUES ${tuples.join(\", \")}) AS ${keys} INNER JOIN ${rows} ON ${membership}`;\n}\n\n// ─── Statement-count pass EPIC 4 (ST-07): key rows ───\n\n/**\n * The derived table of `SelectStatement.fromKeys` (see {@link KeyRows}):\n * `unnest($1::<type>[], …) AS \"<name>\" (\"<column>\", …)` — one typed array per\n * column, bound at the FROM position of the shared parameter sequence.\n *\n * @throws VibeError `VIBE_UNSUPPORTED_CAPABILITY` on a dialect without the\n * typed-array key list (`keyListStrategy` other than `unnest`), for a\n * `DateTime` member without a declared native type, and for a member type\n * the key list does not know.\n */\nfunction renderKeyRows(params: { dialect: SqlDialect; statement: SelectStatement; keys: KeyRows; collector: ParamCollector }): string {\n const { dialect, statement, keys, collector } = params;\n if (statement.fromSelect !== undefined || statement.keyPage !== undefined || statement.fromUnion !== undefined || statement.table.alias !== undefined) {\n throw internalError({ message: \"fromKeys uses table.name as the derived-table alias — fromSelect, keyPage, fromUnion and table.alias must be unset\" });\n }\n // A lock over bound key rows would lock nothing.\n if (statement.rowLock !== undefined) throw internalError({ message: \"a locking read cannot read from key rows\" });\n const arity = keys.columns.length;\n if (arity === 0 || keys.members.length !== arity) {\n throw internalError({ message: `fromKeys has ${keys.members.length} members for ${arity} columns` });\n }\n if (keys.rows.length === 0) throw internalError({ message: \"fromKeys needs at least one key row\" });\n for (const row of keys.rows) {\n if (row.length !== arity) throw internalError({ message: `fromKeys row has ${row.length} values for ${arity} columns` });\n }\n if (dialect.keyListStrategy !== \"unnest\" || keyListBindsUntypedRows({ members: keys.members })) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: dialect.keyListStrategy !== \"unnest\" ? \"a key-rows FROM (fromKeys)\" : \"a key-rows FROM over a DateTime key without a declared native type\",\n hint: \"the runtime keeps the per-relation loads for this write\",\n });\n }\n const types = keys.members.map((member) => postgresKeyListElementType({ dialect, member }));\n const arrays = types.map((type, index) => `${collector.add(keys.rows.map((row) => row[index]))}::${type}[]`);\n const names = keys.columns.map((name) => dialect.quoteIdent({ name }));\n return `unnest(${arrays.join(\", \")}) AS ${dialect.quoteIdent({ name: statement.table.name })} (${names.join(\", \")})`;\n}\n\n// ─── One row of outer columns ───\n\n/**\n * `SelectStatement.fromRow`: one row of outer columns under the names of a\n * table row, where a derived table would render. It binds nothing.\n */\nfunction renderOuterRow(params: { dialect: SqlDialect; statement: SelectStatement; row: readonly RowSourceColumn[] }): string {\n const { dialect, statement, row } = params;\n if (!dialect.capabilities.carrierRows) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"carrier rows\",\n hint: \"lists below a shared to-one nest on small levels and load by key otherwise on this dialect\",\n });\n }\n if (statement.fromSelect !== undefined || statement.keyPage !== undefined || statement.fromUnion !== undefined || statement.table.alias !== undefined ||\n statement.table.namespace !== undefined || statement.rowLock !== undefined) {\n throw internalError({ message: \"fromRow uses table.name as the derived-table alias — fromSelect, keyPage, fromUnion, table.alias, a namespace and a row lock must be unset\" });\n }\n const names = row.map((entry) => entry.alias);\n if (row.length === 0 || new Set(names).size !== names.length || row.some((entry) => entry.column.table === undefined)) {\n throw internalError({ message: \"fromRow needs one or more table-qualified outer columns under distinct names\" });\n }\n const cells = row.map((entry) => `${quoteCol(dialect, entry.column)} AS ${dialect.quoteIdent({ name: entry.alias })}`);\n return `(SELECT ${cells.join(\", \")}) AS ${dialect.quoteIdent({ name: statement.table.name })}`;\n}\n\n// ─── A dictionary of shared lists: common tables and keys read from JSON ───\n\nfunction refuseSharedListDictionary(params: { dialect: SqlDialect }): void {\n if (params.dialect.capabilities.sharedListDictionary) return;\n throw unsupportedCapability({\n dialect: params.dialect.name,\n feature: \"a dictionary of shared lists\",\n hint: \"lists below a to-one under a list nest on small levels and load by key otherwise on this dialect\",\n });\n}\n\n/** `SelectStatement.with`: the `WITH …` prefix of the outermost select, bound in text order. */\nfunction renderCommonTables(params: { dialect: SqlDialect; tables: readonly CommonTable[]; collector: ParamCollector }): string {\n const { dialect, tables, collector } = params;\n refuseSharedListDictionary({ dialect });\n const names = tables.map((table) => table.name);\n if (tables.length === 0 || new Set(names).size !== names.length || tables.some((table) => table.select.with !== undefined)) {\n throw internalError({ message: \"common tables need distinct names and selects without common tables of their own\" });\n }\n const pinned = lateralJsonOf({ dialect }).pinnedCommonTable;\n const rendered = tables.map((table) => {\n const select = renderSelect({ dialect, statement: table.select, collector }).text;\n if (pinned === \"limit\") return `${dialect.quoteIdent({ name: table.name })} AS (${select}${mysqlPinnedCommonTableSuffix({ table })})`;\n return `${dialect.quoteIdent({ name: table.name })} AS ${table.materialized === true ? \"MATERIALIZED \" : \"\"}(${select})`;\n });\n return `WITH ${rendered.join(\", \")} `;\n}\n\n/** The source alias, the element aliases and the key-set alias of a {@link JsonKeys} walk. */\nconst JSON_KEYS_SOURCE_ALIAS = \"__vibe_s\";\nconst JSON_KEYS_SET_ALIAS = \"__vibe_k\";\n\n/** One value of a positional JSON row: `<row> -> <index>`, through its chunk when the row is chunked. */\nfunction renderJsonSlot(params: { row: string; slot: JsonSlot; text: boolean }): string {\n const { row, slot } = params;\n if (!Number.isSafeInteger(slot.index) || !Number.isSafeInteger(slot.width) || slot.index < 0 || slot.index >= slot.width) {\n throw internalError({ message: \"a JSON slot must be an index inside its row\" });\n }\n const last = params.text ? \"->>\" : \"->\";\n const size = JSON_TRANSPORT.chunkSize;\n if (slot.width <= size) return `${row} ${last} ${slot.index}`;\n return `${row} -> ${Math.floor(slot.index / size)} ${last} ${slot.index % size}`;\n}\n\n/**\n * `SelectStatement.fromJsonKeys`: the distinct keys a JSON walk reaches, each\n * as its text and cast back to its column's base type, where a derived table\n * would render. It binds nothing.\n */\nfunction renderJsonKeys(params: { dialect: SqlDialect; statement: SelectStatement; keys: JsonKeys }): string {\n const { dialect, statement, keys } = params;\n refuseSharedListDictionary({ dialect });\n if (statement.fromSelect !== undefined || statement.keyPage !== undefined || statement.fromUnion !== undefined || statement.fromKeys !== undefined ||\n statement.fromRow !== undefined || statement.table.alias !== undefined || statement.table.namespace !== undefined || statement.rowLock !== undefined) {\n throw internalError({ message: \"fromJsonKeys uses table.name as the derived-table alias — every other FROM form, table.alias, a namespace and a row lock must be unset\" });\n }\n const outputs = keys.keys.flatMap((key) => [key.token, key.alias]);\n if (keys.keys.length === 0 || keys.source.table === undefined || new Set(outputs).size !== outputs.length) {\n throw internalError({ message: \"fromJsonKeys needs a table-qualified source and one or more keys under distinct names\" });\n }\n if (lateralJsonOf({ dialect }).keysFromJson === \"jsonTable\") return renderMysqlJsonKeys({ dialect, statement, keys });\n if (keyListBindsUntypedRows({ members: keys.keys.map((key) => key.member) })) {\n throw internalError({ message: \"fromJsonKeys cannot type a DateTime key without a declared native type\" });\n }\n const source = dialect.quoteIdent({ name: JSON_KEYS_SOURCE_ALIAS });\n const set = dialect.quoteIdent({ name: JSON_KEYS_SET_ALIAS });\n const column = dialect.quoteIdent({ name: \"value\" });\n let value = `${source}.${dialect.quoteIdent({ name: keys.source.name })}`;\n let from = `${dialect.quoteIdent({ name: keys.source.table })} AS ${source}`;\n let lists = 0;\n for (const step of keys.steps) {\n if (step.kind === \"slot\") {\n value = renderJsonSlot({ row: value, slot: step.slot, text: false });\n continue;\n }\n // Every list of this level in ONE value, then its lists, then their\n // elements: two set-returning calls per level whatever the row count\n // (see `JsonKeys`). A row the walk does not reach holds SQL NULL where\n // its list would be; `json_agg` would keep it as a JSON null, which is\n // not a list to read.\n const all = dialect.quoteIdent({ name: `__vibe_d${lists}` });\n const element = dialect.quoteIdent({ name: `__vibe_e${lists++}` });\n from = `json_array_elements((SELECT json_agg(${value}) FROM ${from} WHERE ${value} IS NOT NULL)) AS ${all}(${column}) ` +\n `CROSS JOIN LATERAL json_array_elements(${all}.${column}) AS ${element}(${column})`;\n value = `${element}.${column}`;\n }\n const tokens = keys.keys.map((key) => `${renderJsonSlot({ row: value, slot: key.slot, text: true })} AS ${dialect.quoteIdent({ name: key.token })}`);\n const typed = keys.keys.flatMap((key) => {\n const token = `${set}.${dialect.quoteIdent({ name: key.token })}`;\n return [token, `CAST(${token} AS ${postgresKeyListElementType({ dialect, member: key.member })}) AS ${dialect.quoteIdent({ name: key.alias })}`];\n });\n return `(SELECT ${typed.join(\", \")} FROM (SELECT DISTINCT ${tokens.join(\", \")} FROM ${from}) AS ${set}) AS ${dialect.quoteIdent({ name: statement.table.name })}`;\n}\n\n/** The one-row derived table that holds the arrays of a {@link TableArrays} source. */\nconst TABLE_ARRAYS_ALIAS = \"__vibe_a\";\n\n/**\n * `SelectStatement.fromTableArrays`: the rows of a common table through one\n * array per column, where a table would render. It binds nothing.\n */\nfunction renderTableArrays(params: { dialect: SqlDialect; statement: SelectStatement; rows: TableArrays }): string {\n const { dialect, statement, rows } = params;\n if (!dialect.capabilities.carrierRows || dialect.lateralJson?.carriedLists !== \"firstRow\") {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"the rows of a common table read back through arrays (fromTableArrays)\",\n hint: \"carrier rows return their lists on the row that carries, or load by key, on this dialect\",\n });\n }\n if (statement.fromSelect !== undefined || statement.keyPage !== undefined || statement.fromUnion !== undefined || statement.fromKeys !== undefined ||\n statement.fromRow !== undefined || statement.fromJsonKeys !== undefined || statement.table.alias !== undefined ||\n statement.table.namespace !== undefined || statement.rowLock !== undefined) {\n throw internalError({ message: \"fromTableArrays uses table.name as the row alias — every other FROM form, table.alias, a namespace and a row lock must be unset\" });\n }\n const names = rows.columns.map((entry) => entry.alias);\n if (rows.columns.length === 0 || new Set(names).size !== names.length) {\n throw internalError({ message: \"fromTableArrays needs one or more columns under distinct names\" });\n }\n const quote = (name: string): string => dialect.quoteIdent({ name });\n const source = quote(rows.source);\n const arrays = quote(TABLE_ARRAYS_ALIAS);\n const order = `${source}.${quote(rows.orderBy)}`;\n const cells = rows.columns.map((entry, index) => `array_agg(${source}.${quote(entry.name)} ORDER BY ${order}) AS ${quote(`__vibe_a${index}`)}`);\n const read = rows.columns.map((_, index) => `${arrays}.${quote(`__vibe_a${index}`)}`);\n return `(SELECT ${cells.join(\", \")} FROM ${source}) AS ${arrays} CROSS JOIN LATERAL unnest(${read.join(\", \")}) AS ${quote(statement.table.name)}(${names.map(quote).join(\", \")})`;\n}\n\n// ─── Fix lane Q2 (round 3, DB-07): union page ───\n\n/** Members a {@link SelectStatement.fromUnion} branch may carry; any other is a malformed node. */\nconst UNION_BRANCH_MEMBERS: ReadonlySet<string> = new Set([\"kind\", \"table\", \"columns\", \"where\", \"orderBy\", \"limit\"]);\n\n/**\n * The `UNION ALL` of a union page (`SelectStatement.fromUnion`), each branch\n * in its own derived table `\"__vibe_u<i>\"` — see the field's docs. Branches\n * render (and bind) in order.\n */\nfunction renderUnionPage(params: { dialect: SqlDialect; statement: SelectStatement; collector: ParamCollector }): string {\n const { dialect, statement, collector } = params;\n const branches = statement.fromUnion ?? [];\n if (branches.length < 2) throw internalError({ message: \"fromUnion needs at least two branches\" });\n if (statement.fromSelect !== undefined || statement.keyPage !== undefined || statement.table.alias !== undefined) {\n throw internalError({ message: \"fromUnion uses table.name as the derived-table alias — fromSelect, keyPage and table.alias must be unset\" });\n }\n // A lock over a derived union would not lock the base rows the branches read.\n if (statement.rowLock !== undefined) throw internalError({ message: \"a locking read cannot read from a union page\" });\n const outputNames = (branch: SelectStatement): string => branch.columns.map((column) => column.alias ?? column.name).join(\"\\u0000\");\n const names = outputNames(branches[0] as SelectStatement);\n return branches\n .map((branch, index) => {\n if (branch.columns.length === 0 || Object.keys(branch).some((member) => !UNION_BRANCH_MEMBERS.has(member))) {\n throw internalError({ message: \"a fromUnion branch must be a plain SELECT <columns> FROM <table> [WHERE] [ORDER BY] [LIMIT]\" });\n }\n if (outputNames(branch) !== names) throw internalError({ message: \"fromUnion branches must project the same output names in the same order\" });\n const inner = renderSelect({ dialect, statement: branch, collector });\n return `SELECT * FROM (${inner.text}) AS ${dialect.quoteIdent({ name: `__vibe_u${index}` })}`;\n })\n .join(\" UNION ALL \");\n}\n\ntype JsonFilterExpr = Extract<SqlExpr, { kind: \"jsonFilter\" }>;\n\nfunction jsonStringPattern(params: { expr: JsonFilterExpr }): string {\n const { expr } = params;\n if (typeof expr.value !== \"string\") {\n throw internalError({ message: `json ${expr.op} expects a string operand` });\n }\n if (expr.op === \"string_contains\") return containsPattern({ raw: expr.value });\n if (expr.op === \"string_starts_with\") return startsWithPattern({ raw: expr.value });\n return endsWithPattern({ raw: expr.value });\n}\n\n/** Case-[in]sensitive LIKE over an extracted-text expression, per dialect. */\nfunction renderJsonLike(params: {\n dialect: SqlDialect;\n target: string;\n expr: JsonFilterExpr;\n collector: ParamCollector;\n}): string {\n const { dialect, target, expr, collector } = params;\n const placeholder = collector.add(jsonStringPattern({ expr }));\n let base: string;\n if (expr.insensitive === true) {\n base =\n dialect.insensitiveLike === \"ilike\"\n ? `${target} ILIKE ${placeholder}`\n : `LOWER(${target}) LIKE LOWER(${placeholder})`;\n } else {\n base = `${target} LIKE ${placeholder}`;\n }\n if (dialect.likeEscapeClause !== null) base = `${base}${dialect.likeEscapeClause}`;\n return expr.negate === true ? `NOT (${base})` : base;\n}\n\n/**\n * Member presence as a three-valued predicate: TRUE or FALSE for a present\n * document, NULL for a SQL NULL column, so `NOT` keeps NULL columns out (the\n * rule every other path filter follows).\n */\nfunction renderJsonExists(params: { present: string; column: string; exists: boolean }): string {\n const { present, column, exists } = params;\n return `CASE WHEN ${present} THEN ${exists ? \"TRUE\" : \"FALSE\"} WHEN ${column} IS NOT NULL THEN ${exists ? \"FALSE\" : \"TRUE\"} END`;\n}\n\n/**\n * One JSON path predicate, per dialect strategy. The path is BOUND: a `text[]`\n * parameter on postgres (cast so string-literal array forms work too), a\n * `$.a.b` path string elsewhere. Values bind as JSON text for json/jsonb\n * comparisons and as LIKE patterns for the string ops.\n */\nfunction renderJsonFilter(params: {\n dialect: SqlDialect;\n expr: JsonFilterExpr;\n collector: ParamCollector;\n}): string {\n const { dialect, expr, collector } = params;\n if (!dialect.supportedJsonOps.includes(expr.op)) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: `the json filter \"${expr.op}\"`,\n hint: `this dialect can express: ${dialect.supportedJsonOps.join(\", \")}`,\n });\n }\n const cmp = expr.negate === true ? \"<>\" : \"=\";\n\n if (dialect.jsonPathMode === \"operators\") {\n const column = quoteCol(dialect, expr.column);\n const pathParam = `${collector.add(expr.path.map(String))}::text[]`;\n // A `json` column (`Json @db.Json`) has no `=`, `<>` or `@>` — postgres\n // defines them for jsonb only (SQLSTATE 42883 `json = jsonb`). The\n // value-comparing ops cast the EXTRACTED value, not the column: the\n // result is jsonb equality and containment, a jsonb column's semantics\n // (json navigation also takes the LAST of duplicate keys), and only the\n // sub-value is converted — ~40% faster than casting the whole document\n // on 20,000 4-KB rows (PostgreSQL 18.6). The string ops read the same\n // jsonb value as text (`#>> '{}'`): json's own `#>>` returns the STORED\n // spelling of a non-string value (`1e2`, `[1, 2]`, both duplicate keys)\n // where a jsonb column reads `100`, `[1, 2]` and the last key. For a\n // string value both forms return the same unescaped text.\n const extracted = expr.storage === \"json\" ? `(${column} #> ${pathParam})::jsonb` : `(${column} #> ${pathParam})`;\n switch (expr.op) {\n case \"exists\": {\n // `#>` reads a key PostgreSQL can parse as an integer (`\"0\"`, ` 1`,\n // `+1`) as an index into an array, so such a step also requires its\n // container to be an object. Presence needs no jsonb cast on a `json`\n // column: json's own `#>` and `json_typeof` give the same answer.\n const typeOf = expr.storage === \"json\" ? \"json_typeof\" : \"jsonb_typeof\";\n const guards = expr.path.flatMap((segment, index) => {\n if (typeof segment !== \"string\" || !/^\\s*[+-]?\\d/.test(segment)) return [];\n const container = index === 0 ? column : `${column} #> ${collector.add(expr.path.slice(0, index).map(String))}::text[]`;\n return [` AND ${typeOf}(${container}) = 'object'`];\n });\n return renderJsonExists({ present: `(${column} #> ${pathParam}) IS NOT NULL${guards.join(\"\")}`, column, exists: expr.value === true });\n }\n case \"equals\":\n return `${extracted} ${cmp} ${collector.add(JSON.stringify(expr.value))}${dialect.jsonParamCast}`;\n case \"string_contains\":\n case \"string_starts_with\":\n case \"string_ends_with\": {\n const target = expr.storage === \"json\" ? `(${extracted} #>> '{}')` : `(${column} #>> ${pathParam})`;\n return renderJsonLike({ dialect, target, expr, collector });\n }\n case \"array_contains\":\n return `${extracted} @> ${collector.add(JSON.stringify(expr.value))}${dialect.jsonParamCast}`;\n case \"array_starts_with\":\n return `${extracted} -> 0 = ${collector.add(JSON.stringify(expr.value))}${dialect.jsonParamCast}`;\n case \"array_ends_with\":\n return `${extracted} -> -1 = ${collector.add(JSON.stringify(expr.value))}${dialect.jsonParamCast}`;\n }\n }\n\n if (dialect.jsonPathMode === \"sqliteExtract\") {\n const column = quoteCol(dialect, expr.column);\n // JSON booleans surface as SQL 0/1, so value equality alone loses type.\n const typeMatches = (type: string, value: unknown): string => {\n if (typeof value === \"number\") return `${type} IN ('integer', 'real')`;\n const tag = typeof value === \"boolean\" ? String(value)\n : value === null ? \"null\" : Array.isArray(value) ? \"array\"\n : typeof value === \"object\" ? \"object\" : \"text\";\n return `${type} = '${tag}'`;\n };\n const compareExtracted = (path: string, value: unknown): string => {\n const type = `json_type(${column}, ${collector.add(path)})`;\n const guard = typeMatches(type, value);\n let base = guard;\n if (value !== null) {\n const target = `json_extract(${column}, ${collector.add(path)})`;\n const bound = typeof value === \"boolean\" ? (value ? 1 : 0) : value;\n const comparison = typeof value === \"object\"\n ? renderSqliteJsonEquality({ dialect, left: target, right: collector.add(JSON.stringify(value)) })\n : `${target} = ${collector.add(bound)}`;\n base = `(${guard} AND ${comparison})`;\n }\n return expr.negate === true ? `NOT (${base})` : base;\n };\n switch (expr.op) {\n case \"exists\":\n return renderJsonExists({ present: `json_type(${column}, ${collector.add(jsonPathString(expr.path))}) IS NOT NULL`, column, exists: expr.value === true });\n case \"equals\":\n return compareExtracted(jsonPathString(expr.path), expr.value);\n case \"string_contains\":\n case \"string_starts_with\":\n case \"string_ends_with\": {\n const target = `json_extract(${column}, ${collector.add(jsonPathString(expr.path))})`;\n return renderJsonLike({ dialect, target, expr, collector });\n }\n case \"array_starts_with\":\n case \"array_ends_with\": {\n // Edge-element access: `$[0]` / `$[#-1]` path elements (sqlite ≥3.31;\n // bun:sqlite bundles far newer) — N6/board #21.\n const edge = expr.op === \"array_starts_with\" ? \"[0]\" : \"[#-1]\";\n return compareExtracted(`${jsonPathString(expr.path)}${edge}`, expr.value);\n }\n case \"array_contains\": {\n // Scalar-needle containment via json_each() EXISTS — one EXISTS per\n // element, ANDed (jsonb `@>` semantics for scalar members). Deep\n // structural containment (object/array members) has no cheap faithful\n // sqlite form and stays refused; JSON null members compare through\n // json_each's 'null' type tag, not SQL NULL, so they are refused too.\n //\n // Haystack type guard (wave-C review): json_each() over a path holding\n // a SCALAR yields one row carrying that scalar, so an unguarded EXISTS\n // matched `{ tags: \"a\" }` against needle `[\"a\"]` where postgres (`@>`\n // with an array needle) and mysql (JSON_CONTAINS against an array\n // literal) are false. json_type() is NULL for a missing path, so\n // missing paths and NULL columns stay non-matches — and an empty\n // needle reduces to the guard alone: contained in every ARRAY (pg's\n // `@> '[]'` truth) and in nothing else.\n const guard = `json_type(${column}, ${collector.add(jsonPathString(expr.path))}) = 'array'`;\n const elements = Array.isArray(expr.value) ? expr.value : [expr.value];\n const tests = elements.map((element) => {\n if (element === null || (typeof element === \"object\" && element !== null)) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"json array_contains with object/array/null elements\",\n hint: \"sqlite expresses scalar-element containment only — deep structural containment needs postgres or mysql\",\n });\n }\n const bound = typeof element === \"boolean\" ? (element ? 1 : 0) : element;\n const path = collector.add(jsonPathString(expr.path));\n const type = `${dialect.quoteIdent({ name: \"json_each\" })}.${dialect.quoteIdent({ name: \"type\" })}`;\n return `EXISTS (SELECT 1 FROM json_each(${column}, ${path}) WHERE ${typeMatches(type, element)} AND ${dialect.quoteIdent({ name: \"json_each\" })}.${dialect.quoteIdent({ name: \"value\" })} = ${collector.add(bound)})`;\n });\n return tests.length === 0 ? guard : `(${[guard, ...tests].join(\" AND \")})`;\n }\n default:\n throw internalError({ message: `json op \"${expr.op}\" leaked past supportedJsonOps on sqlite` });\n }\n }\n\n // mysqlExtract\n const column = quoteCol(dialect, expr.column);\n const pathString = jsonPathString(expr.path);\n switch (expr.op) {\n case \"exists\": {\n // NULL for a SQL NULL document, so `NOT` keeps such rows out as it does on the other dialects.\n const present = `JSON_CONTAINS_PATH(${column}, 'one', ${collector.add(pathString)})`;\n return expr.value === true ? present : `NOT ${present}`;\n }\n case \"equals\":\n return `JSON_EXTRACT(${column}, ${collector.add(pathString)}) ${cmp} CAST(${collector.add(JSON.stringify(expr.value))} AS JSON)`;\n case \"string_contains\":\n case \"string_starts_with\":\n case \"string_ends_with\": {\n const target = `JSON_UNQUOTE(JSON_EXTRACT(${column}, ${collector.add(pathString)}))`;\n return renderJsonLike({ dialect, target, expr, collector });\n }\n case \"array_contains\":\n return `JSON_CONTAINS(JSON_EXTRACT(${column}, ${collector.add(pathString)}), CAST(${collector.add(JSON.stringify(expr.value))} AS JSON))`;\n case \"array_starts_with\":\n return `JSON_EXTRACT(${column}, ${collector.add(`${pathString}[0]`)}) ${cmp} CAST(${collector.add(JSON.stringify(expr.value))} AS JSON)`;\n case \"array_ends_with\":\n return `JSON_EXTRACT(${column}, ${collector.add(`${pathString}[last]`)}) ${cmp} CAST(${collector.add(JSON.stringify(expr.value))} AS JSON)`;\n }\n}\n\n// ─── Ordering ─────────────────────────────────────────────────────\n\n/**\n * The output name a groupBy expression key's ORDER BY term reads in its\n * emulated null placement. MySQL's ONLY_FULL_GROUP_BY admits a GROUP BY\n * expression as a whole ORDER BY term, but inside `<expression> IS NULL` it\n * reads the expression's column as ungrouped (ER_WRONG_FIELD_WITH_GROUP);\n * MySQL resolves an output name inside an ORDER BY expression, and a key's\n * output name is never a column of its table (the runtime refuses such an\n * `as`). A truncated key keeps its column's name, so it never qualifies.\n */\nfunction groupKeyOutputName(params: { dialect: SqlDialect; statement: SelectStatement; column: ColRef }): string | undefined {\n const { dialect, statement, column } = params;\n if (column.groupKey === undefined) return undefined;\n const text = quoteCol(dialect, column);\n const projected = statement.columns.find((candidate) =>\n candidate.groupKey !== undefined && candidate.transform === undefined && candidate.alias !== undefined && quoteCol(dialect, candidate) === text);\n return projected?.alias;\n}\n\nfunction renderOrderTerm(params: { dialect: SqlDialect; term: OrderTerm; collector: ParamCollector; nullsOutputName?: string }): string {\n const { dialect, term, collector, nullsOutputName } = params;\n if (\"agg\" in term) {\n return `${renderAggRef(dialect, term.agg, collector)} ${term.direction === \"asc\" ? \"ASC\" : \"DESC\"}`;\n }\n // Relation orderBy: a correlated scalar subquery — its parameters merge into\n // the shared sequence exactly where they appear in the text (twice when the\n // NULL emulation below repeats the subquery).\n const expression = \"select\" in term\n ? (): string => renderScalarSubquery({ dialect, subquery: term, collector })\n : (): string => quoteCol(dialect, term.column);\n const direction = term.direction === \"asc\" ? \"ASC\" : \"DESC\";\n if (term.nulls === undefined) {\n return `${expression()} ${direction}`;\n }\n if (dialect.orderByNullsMode === \"native\") {\n return `${expression()} ${direction} NULLS ${term.nulls === \"first\" ? \"FIRST\" : \"LAST\"}`;\n }\n // Emulation (mysql): the engine's native order already places NULLs FIRST on\n // ASC and LAST on DESC — those pairings render the bare term (the redundant\n // boolean pre-term cost a per-row evaluation and could defeat index-order\n // scans, #14). Only the diverging pairings need the `IS NULL` pre-term:\n // false(0) sorts first, so plain `IS NULL` pushes nulls last and\n // `IS NULL DESC` pulls them first.\n if ((term.nulls === \"first\") === (term.direction === \"asc\")) {\n return `${expression()} ${direction}`;\n }\n const tested = nullsOutputName === undefined ? expression() : dialect.quoteIdent({ name: nullsOutputName });\n const nullsTerm = term.nulls === \"first\" ? `${tested} IS NULL DESC` : `${tested} IS NULL`;\n return `${nullsTerm}, ${expression()} ${direction}`;\n}\n\n// ─── Projections ──────────────────────────────────────────────────\n\nfunction renderSelectExpr(params: { dialect: SqlDialect; expr: SelectExpr }): string {\n const { dialect, expr } = params;\n if (expr.kind === \"one\") return \"1\";\n if (expr.kind === \"exists\") throw internalError({ message: \"an exists projection renders as its whole statement\" });\n const alias = expr.alias === undefined ? \"\" : ` AS ${dialect.quoteIdent({ name: expr.alias })}`;\n return `COUNT(*)${alias}`;\n}\n\n// ─── Lateral JSON joins ───────────────────────────────────\n\n/**\n * `LEFT JOIN LATERAL (… to_json …) AS alias ON true`. Postgres SQL, and MySQL\n * 8.0.14+ through `SqlDialect.lateralJson` (lane J: `JSON_ARRAY` rows,\n * `JSON_ARRAYAGG`, an ordered level's `ROW_NUMBER()` position slot) — the\n * runtime gates the \"join\" strategy on `capabilities.lateralJoin` at build\n * time, and this renderer refuses too (dialect honesty, rule 4).\n *\n * `json`, not `jsonb`: the payload is transport — parsed by the driver and\n * never touched by a JSON operator on the server. `jsonb_agg(to_jsonb(…))`\n * builds postgres's binary JSON (sorted, de-duplicated keys) and then\n * serializes it straight back to text for the wire, which measured at 2–3.7×\n * the server time of `json_agg(to_json(…))` for identical decoded values\n * (`.ai/plans/26.09.08 - performance-join-strategy.md` §1.2). The observable\n * differences are textual only: `json` keeps construction key order and `-0`,\n * `jsonb` normalizes both; every scalar still rides the B3 transforms.\n */\nfunction renderPositionalRow(params: { dialect: SqlDialect; join: LateralJoin; subAlias: string }): string {\n const { dialect, join, subAlias } = params;\n const json = lateralJsonOf({ dialect });\n // Lane J: a `positionSlot` dialect's ordered list level carries its\n // ROW_NUMBER() position as the LAST slot (the runtime sorts by it).\n const position = join.select.rowNumber;\n const positioned = position !== undefined && json.order === \"positionSlot\" && join.agg === \"jsonArray\" &&\n position.partitionBy.length === 0 && position.orderBy.length > 0;\n if (join.select.columns.length === 0 || join.select.selectExpr !== undefined ||\n (join.select.aggregates?.length ?? 0) > 0 || (position !== undefined && !positioned)) {\n throw internalError({ message: \"positional lateral rows require an explicit column-only projection\" });\n }\n const projected = join.select.columns.map((column) => projectionOutputName({ column }));\n const hidden = join.hidden ?? [];\n if (hidden.some((name) => !projected.includes(name)) || hidden.length >= projected.length) {\n throw internalError({ message: \"a hidden lateral column must be one of the projected columns, and one column must remain\" });\n }\n const names = [...projected.filter((name) => !hidden.includes(name)), ...(positioned ? [position.alias] : [])];\n if (new Set(names).size !== names.length) {\n throw internalError({ message: \"positional lateral projection has duplicate output names\" });\n }\n const values = names.map((name) => `${subAlias}.${dialect.quoteIdent({ name })}`);\n const chunks: string[] = [];\n for (let index = 0; index < values.length; index += JSON_TRANSPORT.chunkSize) {\n chunks.push(`${json.rowArray}(${values.slice(index, index + JSON_TRANSPORT.chunkSize).join(\", \")})`);\n }\n if (chunks.length > JSON_TRANSPORT.chunkSize) {\n throw internalError({ message: \"positional lateral projection exceeds the transport width limit\" });\n }\n return chunks.length === 1 ? chunks[0] as string : `${json.rowArray}(${chunks.join(\", \")})`;\n}\n\n/** The dialect's lateral JSON functions; callers already refused a dialect without them. */\nfunction lateralJsonOf(params: { dialect: SqlDialect }): NonNullable<SqlDialect[\"lateralJson\"]> {\n const json = params.dialect.lateralJson;\n if (json === null) throw internalError({ message: \"lateral JSON rendering on a dialect without LATERAL\" });\n return json;\n}\n\nfunction renderLateralJoin(params: {\n dialect: SqlDialect;\n join: LateralJoin;\n collector: ParamCollector;\n}): string {\n const { dialect, join } = params;\n return `LEFT JOIN LATERAL (${renderLateralSubquery(params)}) AS ${dialect.quoteIdent({ name: join.alias })} ON true`;\n}\n\n/** The subquery of a lateral join: one row, the JSON value (or count, or aggregates) under its column alias. */\nfunction renderLateralSubquery(params: {\n dialect: SqlDialect;\n join: LateralJoin;\n collector: ParamCollector;\n}): string {\n const { dialect, join, collector } = params;\n const inner = renderSelect({ dialect, statement: join.select, collector });\n if (join.agg === \"count\") {\n if (join.rowFormat === \"positional\" || join.select.columns.length !== 0 ||\n join.select.selectExpr?.kind !== \"countAll\" || join.select.selectExpr.alias !== join.columnAlias ||\n join.select.groupBy !== undefined || join.select.having !== undefined ||\n join.select.limit !== undefined || join.select.offset !== undefined || join.select.distinctOn !== undefined ||\n join.select.distinct !== undefined) {\n throw internalError({ message: \"count lateral must return one ungrouped COUNT(*) under its column alias\" });\n }\n return inner.text;\n }\n if (join.agg === \"aggregate\") {\n if (join.rowFormat === \"positional\" || join.select.columns.length !== 0 || join.select.selectExpr !== undefined ||\n (join.select.aggregates?.length ?? 0) === 0 ||\n join.select.groupBy !== undefined || join.select.having !== undefined || join.select.groupingSets !== undefined ||\n join.select.limit !== undefined || join.select.offset !== undefined || join.select.distinctOn !== undefined ||\n join.select.distinct !== undefined || join.select.rowLock !== undefined) {\n throw internalError({ message: \"aggregate lateral must return one ungrouped row of aggregates\" });\n }\n return inner.text;\n }\n const columnAlias = dialect.quoteIdent({ name: join.columnAlias });\n const subAlias = dialect.quoteIdent({ name: \"__sub\" });\n const json = lateralJsonOf({ dialect });\n // N2 (SQL review): json_agg over a subquery only \"usually\" preserves the\n // subquery's order — pin it with an explicit ORDER BY inside the aggregate\n // (the subquery keeps its own ORDER BY for LIMIT). Only column terms that\n // are PROJECTED (and untransformed — a B3 ::text cast would re-sort\n // lexicographically) can be referenced through `__sub`; anything else keeps\n // the old behavior. A `positionSlot` dialect (MySQL) orders through the\n // position slot instead ({@link renderPositionalRow}).\n let aggOrder = \"\";\n if (json.order === \"inAggregate\" && join.agg === \"jsonArray\" && join.select.orderBy !== undefined && join.select.orderBy.length > 0) {\n const projected = new Set(\n join.select.columns\n .filter((column) => column.transform === undefined && column.castReal !== true)\n .map((column) => column.name)\n .concat((join.select.scalarSubqueries ?? []).map((subquery) => subquery.alias)),\n );\n const terms = join.select.orderBy;\n const columnTerms = terms.filter(\n (term): term is Extract<OrderTerm, { column: ColRef }> => \"column\" in term,\n );\n const subRef = (column: ColRef): ColRef => ({ table: \"__sub\", name: column.name, ...(column.castJsonb === undefined ? {} : { castJsonb: column.castJsonb }) });\n const readable = (column: ColRef): boolean =>\n column.coalesce === undefined ? projected.has(column.name) : column.coalesce.every((member) => projected.has(member.name));\n if (columnTerms.length === terms.length && columnTerms.every((term) => readable(term.column))) {\n const rendered = columnTerms.map((term) =>\n renderOrderTerm({\n dialect,\n term: {\n ...term,\n column: term.column.coalesce === undefined ? subRef(term.column) : { ...term.column, coalesce: term.column.coalesce.map(subRef) },\n },\n collector,\n }),\n );\n aggOrder = ` ORDER BY ${rendered.join(\", \")}`;\n }\n }\n if (join.rowFormat !== \"positional\" && json.order !== \"inAggregate\") {\n // `to_json(\"__sub\".*)` names the columns itself; the runtime always sends\n // positional rows, so object rows stay a postgres construct.\n throw unsupportedCapability({ dialect: dialect.name, feature: \"object-format lateral rows\", hint: \"lateral relation rows render positional (rowFormat \\\"positional\\\") on this dialect\" });\n }\n const rowJson = join.rowFormat === \"positional\"\n ? renderPositionalRow({ dialect, join, subAlias })\n : `to_json(${subAlias}.*)`;\n const projection =\n join.agg === \"jsonArray\"\n ? `COALESCE(${json.arrayAgg}(${rowJson}${aggOrder}), ${json.emptyArray}) AS ${columnAlias}`\n : `${rowJson} AS ${columnAlias}`;\n const exposed = join.expose ?? [];\n if (exposed.length > 0) {\n const projected = join.select.columns.map((column) => projectionOutputName({ column }));\n if (join.agg !== \"jsonObject\" || exposed.some((name) => !projected.includes(name) || name === join.columnAlias) || new Set(exposed).size !== exposed.length) {\n throw internalError({ message: \"a lateral exposes distinct projected columns of a one-row subselect, beside its JSON column\" });\n }\n }\n const exposure = exposed.map((name) => `, ${subAlias}.${dialect.quoteIdent({ name })}`).join(\"\");\n return `SELECT ${projection}${exposure} FROM (${inner.text}) AS ${subAlias}`;\n}\n\n/** `SelectStatement.firstRowLists`: one projection per list, see {@link FirstRowList}. */\nfunction renderFirstRowList(params: { dialect: SqlDialect; entry: FirstRowList; collector: ParamCollector }): string {\n const { dialect, entry, collector } = params;\n refuseSharedListDictionary({ dialect });\n if (entry.list.agg !== \"jsonArray\" || entry.list.expose !== undefined || entry.ordinal.table === undefined) {\n throw internalError({ message: \"a first-row list is a JSON list gated by a table-qualified ordinal of the statement's row\" });\n }\n const list = renderLateralSubquery({ dialect, join: entry.list, collector });\n return `CASE WHEN ${quoteCol(dialect, entry.ordinal)} = 1 THEN (${list}) END AS ${dialect.quoteIdent({ name: entry.list.columnAlias })}`;\n}\n\n/**\n * `(SELECT COUNT(*) FROM … WHERE …) AS \"alias\"` — one scalar per output row\n * ({@link CountSubquery}). Refuses anything but one ungrouped COUNT(*), so a\n * builder bug can never project a multi-row or multi-column subquery.\n */\nfunction renderCountSubquery(params: {\n dialect: SqlDialect;\n subquery: CountSubquery;\n collector: ParamCollector;\n}): string {\n const { dialect, subquery, collector } = params;\n const select = subquery.select;\n if (select.columns.length !== 0 || select.selectExpr?.kind !== \"countAll\" ||\n (select.aggregates?.length ?? 0) > 0 || select.rowNumber !== undefined ||\n select.groupBy !== undefined || select.having !== undefined ||\n select.limit !== undefined || select.offset !== undefined ||\n select.distinctOn !== undefined || select.distinct !== undefined || select.rowLock !== undefined ||\n select.countSubqueries !== undefined || select.scalarSubqueries !== undefined) {\n throw internalError({ message: \"count subquery must be one ungrouped COUNT(*)\" });\n }\n const inner = renderSelect({ dialect, statement: select, collector });\n return `(${inner.text}) AS ${dialect.quoteIdent({ name: subquery.alias })}`;\n}\n\n/** Render a scalar value without its projection alias. */\nfunction renderScalarSubquery(params: {\n dialect: SqlDialect;\n subquery: { readonly select: SelectStatement; readonly coalesce?: 0 };\n collector: ParamCollector;\n}): string {\n const { dialect, subquery, collector } = params;\n const value = `(${renderSelect({ dialect, statement: subquery.select, collector }).text})`;\n return subquery.coalesce === 0 ? `COALESCE(${value}, 0)` : value;\n}\n\n// ─── RETURNING ────────────────────────────────────────────────────\n\nfunction applyReturning(params: {\n dialect: SqlDialect;\n requested: readonly ReturningColumn[] | undefined;\n /**\n * The quoted target alias of an `UPDATE … FROM`, whose joined relation may\n * share a column name with the target (PostgreSQL only: SQLite's RETURNING\n * sees the target table alone).\n */\n qualify?: string;\n /** Binds a row-capture cascade column's limit. */\n collector?: ParamCollector;\n /** The written table when the statement gives it no alias: a table named `old` or `new` hides the row names. */\n table?: TableRef;\n}): { suffix: string; status: \"native\" | \"omitted\" | \"none\" } {\n const { dialect, requested } = params;\n if (requested === undefined || requested.length === 0) {\n return { suffix: \"\", status: \"none\" };\n }\n if (!dialect.capabilities.returning) {\n // Dropping a row-capture column with the omitted RETURNING would lose the capture without a word.\n const capture = requested.find(isCaptureReturningColumn);\n if (capture !== undefined) renderCaptureReturning({ dialect, column: capture, collector: params.collector, rows: PLAIN_ROW_NAMES });\n const other = requested.find(isOtherRowReturningColumn);\n if (other !== undefined) renderOtherRowReturning({ dialect, column: other, rows: PLAIN_ROW_NAMES });\n const version = requested.find((column) => typeof column !== \"string\" && \"serverVersion\" in column);\n if (version !== undefined) renderServerVersionReturning({ dialect, alias: returningColumnName(version) });\n return { suffix: \"\", status: \"omitted\" };\n }\n // PostgreSQL 18 resolves `old.` / `new.` to a target table of that name before the row it names, so such a\n // table renames the rows (`RETURNING WITH (OLD AS …)`), or `old.\"col\"` would silently read the new value.\n const hidden = (params.table?.name === \"old\" || params.table?.name === \"new\") &&\n requested.some((column) => isCaptureReturningColumn(column) || (isOtherRowReturningColumn(column) && column.from === \"old\"));\n const rows = hidden ? { old: dialect.quoteIdent({ name: \"__vibe_old\" }), new: dialect.quoteIdent({ name: \"__vibe_new\" }) } : PLAIN_ROW_NAMES;\n const read = (name: string): string => (params.qualify === undefined ? name : `${params.qualify}.${name}`);\n const columns = requested\n .map((column) => {\n if (typeof column === \"string\") return read(dialect.quoteIdent({ name: column }));\n if (\"capture\" in column) return renderCaptureReturning({ dialect, column, collector: params.collector, rows });\n if (\"from\" in column) return renderOtherRowReturning({ dialect, column, rows });\n if (\"serverVersion\" in column) return renderServerVersionReturning({ dialect, alias: column.alias });\n if (\"transform\" in column) {\n const name = dialect.quoteIdent({ name: column.name });\n return `${dialect.jsonTextProjection({ expression: read(name) })} AS ${name}`;\n }\n const name = dialect.quoteIdent({ name: column.name });\n return `${textProjection({ dialect, expression: read(name) })} AS ${name}`;\n })\n .join(\", \");\n const renamed = hidden ? `WITH (OLD AS ${rows.old}, NEW AS ${rows.new}) ` : \"\";\n return { suffix: ` RETURNING ${renamed}${columns}`, status: \"native\" };\n}\n\n/** How RETURNING names the row before and the row after the statement (PostgreSQL 18). */\ntype RowNames = { readonly old: string; readonly new: string };\n\nconst PLAIN_ROW_NAMES: RowNames = Object.freeze({ old: \"old\", new: \"new\" });\n\n/** {@link ServerVersionReturningColumn}: `pg_catalog.current_setting('server_version_num') AS \"alias\"`. */\nfunction renderServerVersionReturning(params: { dialect: SqlDialect; alias: string }): string {\n const { dialect } = params;\n if (!dialect.capabilities.rowCapture) {\n throw unsupportedCapability({ dialect: dialect.name, feature: \"RETURNING the server version\", hint: \"only a dialect whose RETURNING can name the row before the write asks for its server version\" });\n }\n return `pg_catalog.current_setting('server_version_num') AS ${dialect.quoteIdent({ name: params.alias })}`;\n}\n\n/**\n * `old.\"col\"::text AS \"alias\"`, `new.\"col\"::text AS \"alias\"` or `(old.\"col\" IS\n * NULL) AS \"alias\"` — see {@link CaptureReturningColumn}. Only a dialect with\n * the `rowCapture` capability names the row before and after the statement\n * in RETURNING; elsewhere the runtime refuses `capture` before it builds one.\n */\nfunction renderCaptureReturning(params: { dialect: SqlDialect; column: CaptureReturningColumn; collector?: ParamCollector | undefined; rows: RowNames }): string {\n const { dialect, column, rows } = params;\n if (!dialect.capabilities.rowCapture) {\n throw unsupportedCapability({ dialect: dialect.name, feature: \"row capture (RETURNING old./new.)\", hint: \"row capture needs PostgreSQL 18 or later; the runtime refuses $transaction({ capture }) on this dialect\" });\n }\n const alias = dialect.quoteIdent({ name: column.alias });\n if (column.capture === \"cascade\") {\n if (params.collector === undefined) throw internalError({ message: `capture cascade column \"${column.alias}\" rendered without a parameter collector` });\n const child = dialect.quoteIdent({ name: CAPTURE_CHILD_ALIAS });\n const match = column.cascade.on.map((pair) => `${child}.${dialect.quoteIdent({ name: pair.child })} = ${rows.old}.${dialect.quoteIdent({ name: pair.parent })}`).join(\" AND \");\n return `${renderCascadeImages({ dialect, cascade: column.cascade, match, collector: params.collector })} AS ${alias}`;\n }\n const name = dialect.quoteIdent({ name: column.name });\n if (column.capture === \"inserted\") return `(${rows.old}.${name} IS NULL) AS ${alias}`;\n if (column.capture === \"key\") return `${rows.old}.${name} AS ${alias}`;\n return `${renderCaptureCell({ dialect, row: rows[column.capture], cell: column })} AS ${alias}`;\n}\n\nconst CAPTURE_CHILD_ALIAS = \"__vibe_c\";\nconst CAPTURE_HOP_ALIAS = \"__vibe_h\";\n\n/**\n * One capture cell as text, read from `row` (`old`, `new` or a quoted alias):\n * `row.\"col\"::text`, or through a {@link CaptureCell.hop} the related row's\n * column, `(SELECT \"__vibe_h\".\"col\"::text FROM \"Related\" AS \"__vibe_h\" WHERE\n * \"__vibe_h\".\"id\" = row.\"relatedId\")`.\n */\nfunction renderCaptureCell(params: { dialect: SqlDialect; row: string; cell: CaptureCell }): string {\n const { dialect, row, cell } = params;\n const name = dialect.quoteIdent({ name: cell.name });\n if (cell.hop === undefined) return textProjection({ dialect, expression: `${row}.${name}` });\n if (cell.hop.on.length === 0) throw internalError({ message: `capture hop to \"${cell.hop.table.name}\" needs at least one key column` });\n const related = dialect.quoteIdent({ name: CAPTURE_HOP_ALIAS });\n const match = cell.hop.on.map((pair) => `${related}.${dialect.quoteIdent({ name: pair.target })} = ${row}.${dialect.quoteIdent({ name: pair.source })}`).join(\" AND \");\n return `(SELECT ${textProjection({ dialect, expression: `${related}.${name}` })} FROM ${renderTable(dialect, cell.hop.table)} AS ${related} WHERE ${match})`;\n}\n\n/** A {@link CaptureCascade}'s bounded distinct image aggregate over the child rows `match` admits. */\nfunction renderCascadeImages(params: { dialect: SqlDialect; cascade: CaptureCascade; match: string; collector: ParamCollector }): string {\n const { dialect, cascade, match, collector } = params;\n if (cascade.cells.length === 0 || cascade.on.length === 0) throw internalError({ message: `capture cascade into \"${cascade.table.name}\" needs at least one cell and one key column` });\n if (!Number.isSafeInteger(cascade.limit) || cascade.limit < 1) throw internalError({ message: `capture cascade into \"${cascade.table.name}\" needs a positive integer limit` });\n const child = dialect.quoteIdent({ name: CAPTURE_CHILD_ALIAS });\n const item = dialect.quoteIdent({ name: \"__vibe_i\" });\n const cells = cascade.cells.map((cell) => renderCaptureCell({ dialect, row: child, cell })).join(\", \");\n return `(SELECT array_agg(${item})::text FROM (SELECT DISTINCT ARRAY[${cells}] AS ${item} FROM ${renderTable(dialect, cascade.table)} AS ${child} WHERE ${match} LIMIT ${collector.add(cascade.limit)}) AS ${dialect.quoteIdent({ name: \"__vibe_d\" })})`;\n}\n\n/**\n * `old.\"col\" AS \"alias\"` or `\"source\".\"col\" AS \"alias\"`, projected like the\n * written row's own column — see {@link OtherRowReturningColumn}. Refused\n * where the dialect cannot name that row in RETURNING, so a caller never gets\n * a write whose previous values were silently dropped.\n */\nfunction renderOtherRowReturning(params: { dialect: SqlDialect; column: OtherRowReturningColumn; rows: RowNames }): string {\n const { dialect, column } = params;\n const fromOld = column.from === \"old\";\n if (fromOld ? !dialect.capabilities.rowCapture : !dialect.capabilities.returningReadsJoinedSource) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: fromOld ? \"RETURNING old.… (the row before the write)\" : \"RETURNING a joined source's columns\",\n hint: fromOld ? \"needs PostgreSQL 18 or later\" : \"read the row inside the write's transaction first, then write it\",\n });\n }\n const name = dialect.quoteIdent({ name: column.name });\n const expression = column.from === \"old\" ? `${params.rows.old}.${name}` : `${dialect.quoteIdent({ name: column.from.source })}.${name}`;\n const projected = column.projection === \"castText\" ? textProjection({ dialect, expression })\n : column.projection === \"jsonText\" ? dialect.jsonTextProjection({ expression })\n : expression;\n return `${projected} AS ${dialect.quoteIdent({ name: column.alias })}`;\n}\n\n// ─── SELECT ───────────────────────────────────────────────────────\n\n/**\n * {@link KeyTableJoin}: `INNER JOIN (VALUES ROW(?, 0), …) AS alias (…) ON …`.\n * Mysql only — the one dialect whose default text equality is not byte\n * equality, and the shape was measured there (8.0.19+ `VALUES ROW`, already\n * this project's floor for the upsert row alias). Postgres needs a typed\n * parameter per member, so it renders only `citext` / `text` / `integer`\n * members (`CAST($n AS citext | text | bigint)`, plain `(…)` rows) — the\n * runtime emits it for a key tuple with a citext member; every other postgres\n * member refuses, and sqlite has no derived-table column list, so it refuses\n * rather than render an untested form.\n *\n * Ordinals are literal integers (row `i` → `i`): a statement-local index, not\n * data, so a key costs exactly the parameters its members bind — the same\n * budget as `col IN (?, …)`. Text members bind bare so the column's collation\n * decides; numeric members that travel as strings are CAST (see\n * {@link KeyTableMember}).\n *\n * The runtime emits a key table wherever `conflictKeyEquality.textIsBinaryByDefault`\n * is false (packages/runtime/src/relation-loader.ts, `associatesInDatabase`);\n * this refusal is by NAME, so a new dialect declaring that fact must also be\n * measured and admitted here.\n */\nfunction renderKeyTableJoin(params: { dialect: SqlDialect; join: KeyTableJoin; collector: ParamCollector }): string {\n const { dialect, join, collector } = params;\n // Postgres binds every member typed (an untyped VALUES cell would be\n // `text`, see {@link KeyTableMember}); `citext` and `text` are postgres\n // members, mysql binds text bare.\n const postgresMember = (member: KeyTableMember): boolean => member.kind === \"citext\" || member.kind === \"text\" || member.kind === \"integer\";\n const admitted = dialect.name === \"mysql\"\n ? join.members.every((member) => member.kind !== \"citext\" && member.kind !== \"text\")\n : dialect.name === \"postgres\" && join.members.every(postgresMember);\n if (!admitted) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"relation key table\",\n hint: \"the key-table join is mysql's relation association — this dialect compares relation keys by value\",\n });\n }\n if (join.columns.length === 0 || join.columns.length !== join.members.length) {\n throw internalError({ message: `key table needs one member per column, got ${join.members.length} for ${join.columns.length}` });\n }\n if (join.rows.length === 0) throw internalError({ message: \"key table needs at least one key row\" });\n for (const member of join.members) {\n if (member.kind === \"decimal\" && !(Number.isInteger(member.scale) && member.scale >= 0 && member.scale <= 30)) {\n throw internalError({ message: `key table decimal scale must be an integer 0-30, got ${String(member.scale)}` });\n }\n }\n const alias = dialect.quoteIdent({ name: join.alias });\n const memberNames = join.members.map((_, index) => dialect.quoteIdent({ name: `__vibe_k${index}` }));\n const rows = join.rows.map((row, ordinal) => {\n if (row.length !== join.members.length) {\n throw internalError({ message: `key table row has ${row.length} values for ${join.members.length} members` });\n }\n const cells = row.map((value, index) => {\n const placeholder = collector.add(value);\n const member = join.members[index] as KeyTableMember;\n switch (member.kind) {\n case \"integer\":\n return dialect.name === \"mysql\" ? `CAST(${placeholder} AS SIGNED)` : `CAST(${placeholder} AS bigint)`;\n case \"timestamp\":\n return `CAST(${placeholder} AS DATETIME(6))`;\n case \"time\":\n return `CAST(${placeholder} AS TIME(6))`;\n case \"decimal\":\n return `CAST(${placeholder} AS DECIMAL(65,${member.scale}))`;\n case \"citext\":\n return `CAST(${placeholder} AS citext)`;\n case \"text\":\n return `CAST(${placeholder} AS text)`;\n default:\n return placeholder;\n }\n });\n return dialect.name === \"mysql\" ? `ROW(${cells.join(\", \")}, ${ordinal})` : `(${cells.join(\", \")}, ${ordinal})`;\n });\n const on = join.columns.map((column, index) => `${quoteCol(dialect, column)} = ${alias}.${memberNames[index] as string}`).join(\" AND \");\n return `INNER JOIN (VALUES ${rows.join(\", \")}) AS ${alias} (${[...memberNames, dialect.quoteIdent({ name: join.ordinalAlias })].join(\", \")}) ON ${on}`;\n}\n\n// ─── Fix lane Q2 (D-03): derived-table LEFT JOIN ───\n\n/**\n * {@link LeftJoin}: `LEFT JOIN (<select>) AS \"alias\" ON \"alias\".\"k\" =\n * \"outer\".\"c\" [AND …]`. Portable. Refuses a builder bug: no ON pair, or a\n * derived projection with an unaliased column (the outer scope must see only\n * the reserved aliases, never a name that could make an unqualified outer\n * reference ambiguous). The derived select renders here, so its parameters\n * land in the shared sequence where they appear in the text.\n */\nfunction renderLeftJoin(params: { dialect: SqlDialect; join: LeftJoin; collector: ParamCollector }): string {\n const { dialect, join, collector } = params;\n if (join.on.length === 0) {\n throw internalError({ message: \"left join needs at least one ON pair\" });\n }\n if (join.select.columns.length === 0 || join.select.columns.some((column) => column.alias === undefined)) {\n throw internalError({ message: \"a left join's derived select must alias every projected column\" });\n }\n const inner = renderSelect({ dialect, statement: join.select, collector });\n const on = join.on\n .map((pair) => `${quoteCol(dialect, pair.left)} = ${quoteCol(dialect, pair.right)}`)\n .join(\" AND \");\n return `LEFT JOIN (${inner.text}) AS ${dialect.quoteIdent({ name: join.alias })} ON ${on}`;\n}\n\n/**\n * `SELECT EXISTS (SELECT 1 FROM … WHERE …) AS \"alias\"`: the statement's own\n * FROM and WHERE as the subquery. Anything that would change which rows the\n * subquery sees, or add a column, is a builder bug.\n */\nfunction renderExistsSelect(params: { dialect: SqlDialect; statement: SelectStatement; alias: string; collector: ParamCollector }): RenderedQuery {\n const { dialect, statement, alias, collector } = params;\n const extra =\n statement.columns.length > 0 || (statement.aggregates?.length ?? 0) > 0 || statement.countSubqueries !== undefined ||\n statement.scalarSubqueries !== undefined || statement.rowNumber !== undefined || statement.groupBy !== undefined ||\n statement.groupingSets !== undefined || statement.having !== undefined || statement.orderBy !== undefined ||\n statement.limit !== undefined || statement.offset !== undefined || statement.rowLock !== undefined ||\n statement.distinct !== undefined || statement.distinctOn !== undefined || statement.lateralJoins !== undefined ||\n statement.innerJoins !== undefined || statement.leftJoins !== undefined || statement.keyTable !== undefined;\n if (extra) throw internalError({ message: \"an exists select takes only a FROM and a WHERE\" });\n const inner = renderSelect({ dialect, statement: { ...statement, selectExpr: { kind: \"one\" } }, collector });\n return { ...inner, text: `SELECT EXISTS (${inner.text}) AS ${dialect.quoteIdent({ name: alias })}` };\n}\n\nfunction renderSelect(params: {\n dialect: SqlDialect;\n statement: SelectStatement;\n collector: ParamCollector;\n /** The select is the statement itself: the only place common tables render. */\n outermost?: true;\n /** The select reads a common table of its statement, so `allColumns` names that table. */\n overCommonTable?: true;\n}): RenderedQuery {\n const { dialect, statement, collector } = params;\n\n if (statement.with !== undefined) {\n if (params.outermost !== true) throw internalError({ message: \"common tables render on the outermost select only\" });\n const { with: tables, ...main } = statement;\n const prefix = renderCommonTables({ dialect, tables, collector });\n const names = new Set(tables.map((table) => table.name));\n const rendered = renderSelect({ dialect, statement: main, collector, ...(main.allColumns === true && names.has(main.table.name) ? { overCommonTable: true as const } : {}) });\n return { ...rendered, text: `${prefix}${rendered.text}` };\n }\n\n if (statement.selectExpr?.kind === \"exists\") return renderExistsSelect({ dialect, statement, alias: statement.selectExpr.alias, collector });\n if (statement.selectExpr !== undefined && statement.columns.length > 0 && statement.selectExpr.kind !== \"countAll\") {\n throw internalError({ message: \"only countAll can combine with a column list\" });\n }\n if (\n statement.selectExpr !== undefined &&\n statement.aggregates !== undefined &&\n statement.aggregates.length > 0\n ) {\n throw internalError({ message: \"selectExpr and aggregates cannot combine\" });\n }\n const columnList = statement.columns.map((column) => quoteProjection(dialect, column));\n if (statement.selectExpr !== undefined) {\n columnList.push(renderSelectExpr({ dialect, expr: statement.selectExpr }));\n }\n if (statement.aggregates !== undefined) {\n for (const selection of statement.aggregates) {\n const expression = renderAggRef(dialect, selection.agg, collector);\n const projected = selection.castText === true ? textProjection({ dialect, expression }) : expression;\n columnList.push(`${projected} AS ${dialect.quoteIdent({ name: selection.alias })}`);\n }\n }\n const groupKeys = statement.groupBy?.map((column) => quoteCol(dialect, column)) ?? [];\n if (statement.groupingSets !== undefined) {\n columnList.push(`${renderGroupingSetIndex({ keys: groupKeys, grouping: statement.groupingSets })} AS ${dialect.quoteIdent({ name: statement.groupingSets.indexAlias })}`);\n }\n if (statement.countSubqueries !== undefined) {\n for (const subquery of statement.countSubqueries) {\n columnList.push(renderCountSubquery({ dialect, subquery, collector }));\n }\n }\n if (statement.scalarSubqueries !== undefined) {\n for (const subquery of statement.scalarSubqueries) {\n columnList.push(`${renderScalarSubquery({ dialect, subquery, collector })} AS ${dialect.quoteIdent({ name: subquery.alias })}`);\n }\n }\n if (statement.rowNumber !== undefined) {\n const rowNumber = statement.rowNumber;\n // An unpartitioned window numbers the whole select: only the position slot\n // of a lateral list level (`lateralJson.order: \"positionSlot\"`), which\n // always carries the level's order.\n if (rowNumber.partitionBy.length === 0 && rowNumber.orderBy.length === 0) {\n throw internalError({ message: \"rowNumber needs a partition column or an order\" });\n }\n const partition = rowNumber.partitionBy.length === 0 ? \"\" : `PARTITION BY ${rowNumber.partitionBy.map((column) => quoteCol(dialect, column)).join(\", \")}`;\n const order =\n rowNumber.orderBy.length === 0\n ? \"\"\n : `${partition === \"\" ? \"\" : \" \"}ORDER BY ${rowNumber.orderBy.map((term) => renderOrderTerm({ dialect, term, collector })).join(\", \")}`;\n columnList.push(\n `ROW_NUMBER() OVER (${partition}${order}) AS ${dialect.quoteIdent({ name: rowNumber.alias })}`,\n );\n }\n if (statement.windows !== undefined) {\n for (const window of statement.windows) {\n const alias = dialect.quoteIdent({ name: window.alias });\n if (window.kind === \"ordinal\") {\n const order = window.orderBy.length === 0 ? \"\" : `ORDER BY ${window.orderBy.map((term) => renderOrderTerm({ dialect, term, collector })).join(\", \")}`;\n columnList.push(`ROW_NUMBER() OVER (${order}) AS ${alias}`);\n continue;\n }\n if (window.partitionBy.length === 0) throw internalError({ message: \"a firstOrdinal window needs a partition column\" });\n columnList.push(\n `MIN(${quoteCol(dialect, window.ordinal)}) OVER (PARTITION BY ${window.partitionBy.map((column) => quoteCol(dialect, column)).join(\", \")}) AS ${alias}`,\n );\n }\n }\n if (statement.firstRowLists !== undefined) {\n for (const entry of statement.firstRowLists) columnList.push(renderFirstRowList({ dialect, entry, collector }));\n }\n if (statement.allColumns === true) {\n if (params.overCommonTable === true) {\n if (statement.fromSelect !== undefined || statement.selectExpr !== undefined || statement.table.namespace !== undefined) {\n throw internalError({ message: \"allColumns over a common table reads that table alone\" });\n }\n columnList.unshift(`${dialect.quoteIdent({ name: statement.table.alias ?? statement.table.name })}.*`);\n } else {\n if (statement.fromSelect === undefined || statement.columns.length > 0 || statement.selectExpr !== undefined) {\n throw internalError({ message: \"allColumns re-exposes a derived table: it needs fromSelect and no column list\" });\n }\n columnList.unshift(`${dialect.quoteIdent({ name: statement.table.name })}.*`);\n }\n }\n let distinctPrefix = statement.distinct === true ? \"DISTINCT \" : \"\";\n if (statement.distinct === true && statement.distinctOn !== undefined) {\n throw internalError({ message: \"distinct and distinctOn cannot combine\" });\n }\n if (statement.distinctOn !== undefined && statement.distinctOn.length > 0) {\n if (!dialect.capabilities.distinctOn) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"SELECT DISTINCT ON\",\n hint: \"postgres-only — the runtime emulates distinct client-side on this dialect\",\n });\n }\n distinctPrefix = `DISTINCT ON (${statement.distinctOn.map((column) => quoteCol(dialect, typedOrderRef({ statement, column }))).join(\", \")}) `;\n }\n const columns = columnList.length === 0 ? \"*\" : columnList.join(\", \");\n\n let from: string;\n // EPIC 4 (ST-07): key rows render where the table would, under its name.\n if (statement.fromKeys !== undefined) {\n from = renderKeyRows({ dialect, statement, keys: statement.fromKeys, collector });\n } else if (statement.fromRow !== undefined) {\n from = renderOuterRow({ dialect, statement, row: statement.fromRow });\n } else if (statement.fromJsonKeys !== undefined) {\n from = renderJsonKeys({ dialect, statement, keys: statement.fromJsonKeys });\n } else if (statement.fromTableArrays !== undefined) {\n from = renderTableArrays({ dialect, statement, rows: statement.fromTableArrays });\n } else if (statement.fromUnion !== undefined) {\n // Fix lane Q2 (DB-07): a union page renders where a derived table would.\n from = `(${renderUnionPage({ dialect, statement, collector })}) AS ${dialect.quoteIdent({ name: statement.table.name })}`;\n } else if (statement.keyPage !== undefined) {\n // Fix lane Q1 (DB-01): a per-key page renders where a derived table would.\n if (statement.fromSelect !== undefined || statement.table.alias !== undefined) {\n throw internalError({ message: \"keyPage uses table.name as the derived-table alias — fromSelect and table.alias must be unset\" });\n }\n from = `(${renderKeyPage({ dialect, page: statement.keyPage, collector })}) AS ${dialect.quoteIdent({ name: statement.table.name })}`;\n } else if (statement.fromSelect !== undefined) {\n if (statement.table.alias !== undefined) {\n throw internalError({ message: \"fromSelect uses table.name as the subquery alias — table.alias must be unset\" });\n }\n // The subquery renders before WHERE/ORDER BY, so its parameters land in\n // the shared sequence exactly where they appear in the text.\n const inner = renderSelect({ dialect, statement: statement.fromSelect, collector });\n from = `(${inner.text}) AS ${dialect.quoteIdent({ name: statement.table.name })}`;\n } else {\n from = renderTable(dialect, statement.table);\n }\n let text = `SELECT ${distinctPrefix}${columns} FROM ${from}`;\n\n if (statement.innerJoins !== undefined && statement.innerJoins.length > 0) {\n for (const join of statement.innerJoins) {\n if (join.on.length === 0) {\n throw internalError({ message: \"inner join needs at least one ON pair\" });\n }\n const on = join.on\n .map((pair) => `${quoteCol(dialect, pair.left)} = ${quoteCol(dialect, pair.right)}`)\n .join(\" AND \");\n text += ` INNER JOIN ${renderTable(dialect, join.table)} ON ${on}`;\n }\n }\n if (statement.keyTable !== undefined) {\n text += ` ${renderKeyTableJoin({ dialect, join: statement.keyTable, collector })}`;\n }\n // Fix lane Q2 (D-03): derived-table LEFT JOINs (to-one relation orderBy).\n if (statement.leftJoins !== undefined && statement.leftJoins.length > 0) {\n if (statement.rowLock !== undefined) {\n throw internalError({ message: \"a locking read cannot carry a left join — postgres refuses FOR UPDATE on the nullable side of an outer join\" });\n }\n for (const join of statement.leftJoins) {\n text += ` ${renderLeftJoin({ dialect, join, collector })}`;\n }\n }\n\n if (statement.lateralJoins !== undefined && statement.lateralJoins.length > 0) {\n if (!dialect.capabilities.lateralJoin || dialect.lateralJson === null) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"LATERAL JOIN relation loading\",\n hint: 'use the portable \"query\" relation strategy on this dialect',\n });\n }\n for (const join of statement.lateralJoins) {\n text += ` ${renderLateralJoin({ dialect, join, collector })}`;\n }\n }\n\n if (statement.where !== undefined) {\n text += ` WHERE ${renderExpr({ dialect, expr: statement.where, collector })}`;\n }\n if (statement.groupBy !== undefined && statement.groupBy.length > 0) {\n text += ` GROUP BY ${statement.groupingSets === undefined ? groupKeys.join(\", \") : renderGroupingSets({ dialect, keys: groupKeys, grouping: statement.groupingSets })}`;\n } else if (statement.groupingSets !== undefined) {\n throw internalError({ message: \"grouping sets need groupBy columns\" });\n }\n if (statement.having !== undefined) {\n text += ` HAVING ${renderExpr({ dialect, expr: statement.having, collector })}`;\n }\n if (statement.orderBy !== undefined && statement.orderBy.length > 0) {\n const terms = statement.orderBy.map((term) => {\n if (!(\"column\" in term)) return renderOrderTerm({ dialect, term, collector });\n const nullsOutputName = term.nulls === undefined || dialect.orderByNullsMode === \"native\" ? undefined : groupKeyOutputName({ dialect, statement, column: term.column });\n return renderOrderTerm({\n dialect,\n term: { ...term, column: typedOrderRef({ statement, column: term.column }) },\n collector,\n ...(nullsOutputName === undefined ? {} : { nullsOutputName }),\n });\n });\n text += ` ORDER BY ${terms.join(\", \")}`;\n }\n\n if (statement.limit !== undefined) {\n assertCount(statement.limit, \"limit\");\n text += ` LIMIT ${statement.limit}`;\n }\n if (statement.offset !== undefined) {\n assertCount(statement.offset, \"offset\");\n if (statement.limit === undefined && dialect.offsetRequiresLimit !== null) {\n text += ` LIMIT ${dialect.offsetRequiresLimit.limitText}`;\n }\n text += ` OFFSET ${statement.offset}`;\n }\n if (statement.rowLock !== undefined) {\n const target = statement.table.alias ?? statement.table.name;\n if (statement.rowLock.of !== undefined && statement.rowLock.of.some((name) => name !== target)) {\n throw internalError({ message: `a row lock's \\`of\\` list may name only the statement's own table \"${target}\"` });\n }\n if (statement.rowLock.of !== undefined && (statement.fromSelect !== undefined || statement.keyPage !== undefined)) {\n throw internalError({ message: \"a row lock's `of` list cannot name a derived table\" });\n }\n const clause = renderRowLockClause({ dialect, lock: statement.rowLock });\n if (clause !== null) text += ` ${clause}`;\n }\n\n return { text, values: collector.values, returning: \"none\" };\n}\n\n// ─── INSERT (incl. upsert) ────────────────────────────────────────\n\n/** The unnest source's relation alias and its ordinality column (`InsertStatement.unnest`). */\nconst UNNEST_ROWS_ALIAS = \"__vibe_rows\";\nconst UNNEST_ORDINALITY = \"ord\";\n\n/**\n * One cell of an unnest insert, as its array element: a plain value, SQL NULL,\n * or a Json cell's text (the column's storage must match). `DEFAULT`, the\n * database clock and any other object are refused — the builder keeps VALUES\n * for them, so reaching here is a builder defect.\n */\nfunction unnestElement(params: { value: unknown; column: string; jsonStorage: \"json\" | \"jsonb\" | undefined }): unknown {\n const { value, column, jsonStorage } = params;\n if (value === null || value === undefined) return null;\n if (isJsonParamCell(value)) {\n if (jsonStorage === undefined || (value.storage ?? \"jsonb\") !== jsonStorage) {\n throw internalError({ message: `unnest insert column \"${column}\" got a Json cell its declared type does not take` });\n }\n return value.text;\n }\n if (jsonStorage === undefined) {\n switch (typeof value) {\n case \"string\":\n case \"number\":\n case \"boolean\":\n case \"bigint\":\n return value;\n case \"object\":\n if (value instanceof Date || value instanceof Uint8Array) return value;\n }\n }\n throw internalError({ message: `unnest insert column \"${column}\" got a cell that is not a plain value (DEFAULT, the database clock, a document) — such rows keep VALUES` });\n}\n\n/**\n * `SELECT \"c1\", … FROM unnest($1::<type>[], …) WITH ORDINALITY AS\n * \"__vibe_rows\" (\"c1\", …, \"ord\") ORDER BY \"ord\"` — the source of an\n * {@link InsertStatement} carrying `unnest`. Collects ONE array per column, in\n * column order: the rows transposed, Json cells reduced to their text. The\n * aliases are positional, so no column name can collide with the ordinality\n * column; `ORDER BY \"ord\"` makes the insert consume rows in input order\n * (PostgreSQL promises no order without it).\n */\nfunction renderUnnestRows(params: {\n dialect: SqlDialect;\n statement: InsertStatement;\n members: readonly KeyListMember[];\n collector: ParamCollector;\n}): string {\n const { dialect, statement, members, collector } = params;\n if (dialect.bulkInsertForm !== \"unnest\") {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a bulk insert bound as typed arrays (INSERT … SELECT FROM unnest)\",\n hint: \"this dialect binds createMany rows as VALUES\",\n });\n }\n if (statement.columns.length === 0) throw internalError({ message: \"an unnest insert needs at least one column\" });\n if (members.length !== statement.columns.length) {\n throw internalError({ message: `unnest insert has ${members.length} column types for ${statement.columns.length} columns` });\n }\n if (statement.onConflict !== undefined && !(\"doNothing\" in statement.onConflict)) {\n throw internalError({ message: \"an unnest insert takes no DO UPDATE arm — upserts bind VALUES\" });\n }\n const aliases = statement.columns.map((_column, index) => dialect.quoteIdent({ name: `c${index + 1}` }));\n const arrays = members.map((member, index) => {\n const cast = postgresBulkInsertArrayCast({ dialect, member });\n const jsonStorage = member.type !== \"Json\" ? undefined : cast === \"text::json\" ? \"json\" : \"jsonb\";\n const column = statement.columns[index] as string;\n const values = statement.rows.map((row) => unnestElement({ value: row[index], column, jsonStorage }));\n return `${collector.add(values)}::${cast}[]`;\n });\n const ord = dialect.quoteIdent({ name: UNNEST_ORDINALITY });\n return `SELECT ${aliases.join(\", \")} FROM unnest(${arrays.join(\", \")}) WITH ORDINALITY AS ${dialect.quoteIdent({ name: UNNEST_ROWS_ALIAS })} (${aliases.join(\", \")}, ${ord}) ORDER BY ${ord}`;\n}\n\nfunction renderInsert(params: {\n dialect: SqlDialect;\n statement: InsertStatement;\n collector: ParamCollector;\n}): RenderedQuery {\n const { dialect, statement, collector } = params;\n\n if (statement.rows.length === 0) {\n throw internalError({ message: \"insert requires at least one row\" });\n }\n // No column named: every value is its column default (dialect.emptyInsert).\n const defaultValues = statement.columns.length === 0 && dialect.emptyInsert.form === \"defaultValues\";\n if (defaultValues && statement.rows.length !== 1) {\n throw internalError({ message: `${dialect.name} inserts an all-default row as DEFAULT VALUES, one row per statement` });\n }\n if (defaultValues && statement.onConflict !== undefined && !(dialect.emptyInsert.form === \"defaultValues\" && dialect.emptyInsert.conflictClause)) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a conflict clause on an all-default row (DEFAULT VALUES)\",\n hint: \"supply at least one column value, or drop the conflict clause\",\n });\n }\n for (const row of statement.rows) {\n if (row.length !== statement.columns.length) {\n throw internalError({\n message: `insert row has ${row.length} values but ${statement.columns.length} columns`,\n });\n }\n }\n\n const onConflict = statement.onConflict;\n const insertKeyword = \"INSERT INTO\";\n\n const columnList = statement.columns.map((name) => dialect.quoteIdent({ name })).join(\", \");\n // EPIC C: rows bound as one typed array per column (`InsertStatement.unnest`).\n const unnestSource = statement.unnest === undefined ? undefined : renderUnnestRows({ dialect, statement, members: statement.unnest, collector });\n const rowsSql = unnestSource !== undefined ? \"\" : statement.rows\n .map(\n (row) =>\n `(${row\n .map((value) => {\n // Json cell: the param's type is pinned (`$n::text::jsonb` on\n // postgres) so OID-typed drivers cannot double-encode the document.\n if (isJsonParamCell(value)) return `${collector.add(value.text)}${jsonCellCast(dialect, value)}`;\n // Database-clock cell: the dialect's now() expression.\n if (isDbNowMarker(value)) {\n return dialect.renderDbNow({ offsetSeconds: value.offsetSeconds, collector });\n }\n if (!isSqlDefaultCell(value)) return collector.add(value);\n // M4: a heterogeneous createMany cell defers to the COLUMN default.\n if (!dialect.rowDefaultKeyword) {\n throw internalError({\n message: `${dialect.name} cannot render a per-row DEFAULT cell — rows must be grouped by column set`,\n });\n }\n return \"DEFAULT\";\n })\n .join(\", \")})`,\n )\n .join(\", \");\n let text = defaultValues\n ? `${insertKeyword} ${renderTable(dialect, statement.table)} DEFAULT VALUES`\n : `${insertKeyword} ${renderTable(dialect, statement.table)} (${columnList}) ${unnestSource ?? `VALUES ${rowsSql}`}`;\n\n // Mysql can only name the incoming row through a ROW ALIAS declared right\n // after the VALUES list; postgres/sqlite have the built-in `excluded`\n // pseudo-relation and need nothing. Emitted only when the update arm\n // actually references the incoming row.\n if (\n onConflict !== undefined &&\n !(\"doNothing\" in onConflict) &&\n dialect.excludedRowRef.form === \"rowAlias\" &&\n Object.values(onConflict.update).some((value) => isExcludedRef(value) || (isSqlFragment(value) && sqlUsesIncoming({ fragment: value })))\n ) {\n text += ` AS ${dialect.quoteIdent({ name: dialect.excludedRowRef.alias })}`;\n }\n\n if (onConflict !== undefined) {\n if (\"doNothing\" in onConflict) {\n if (dialect.doNothingForm === \"onConflictDoNothing\") {\n let target = \"\";\n if (onConflict.constraint !== undefined) {\n if (dialect.name !== \"postgres\") {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a named-constraint conflict target (ON CONFLICT ON CONSTRAINT)\",\n hint: \"only postgres names constraints in conflict targets — use a column-list target\",\n });\n }\n target = ` ON CONSTRAINT ${dialect.quoteIdent({ name: onConflict.constraint })}`;\n } else if (onConflict.columns !== undefined && onConflict.columns.length > 0) {\n target = ` (${onConflict.columns.map((name) => dialect.quoteIdent({ name })).join(\", \")})`;\n if (onConflict.conflictWhere !== undefined) {\n // RAW predicate — the engines match it against the index's own\n // predicate structurally; parameters could never match (ast.ts).\n target += ` WHERE ${onConflict.conflictWhere}`;\n }\n }\n text += ` ON CONFLICT${target} DO NOTHING`;\n } else {\n // `duplicateKeyKeep` fires on ANY duplicate key. A bare column target\n // degrades to that documented wider skip; a REFINED target (named\n // constraint, partial-index predicate) must not silently widen —\n // the builder gates first, the renderer defends.\n if (onConflict.constraint !== undefined || onConflict.conflictWhere !== undefined) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a refined conflict target (constraint / partial-index predicate) on ON DUPLICATE KEY UPDATE\",\n hint: \"mysql skips on any duplicate key — drop the refinement or gate the call per dialect\",\n });\n }\n // A self-assignment: a duplicate changes nothing, every other error\n // (NOT NULL, range, foreign key) stays an error — never INSERT IGNORE.\n const keepName = onConflict.keepColumn ?? statement.columns[0];\n if (keepName === undefined) {\n throw internalError({ message: \"a skip-duplicates insert of an all-default row must name its keepColumn\" });\n }\n const keep = dialect.quoteIdent({ name: keepName });\n const current = `${dialect.quoteIdent({ name: statement.table.name })}.${keep}`;\n const flag = onConflict.duplicateFlag;\n if (flag !== undefined && !/^\\d{1,20}$/.test(flag)) {\n throw internalError({ message: `duplicateFlag must be a decimal literal, got ${JSON.stringify(flag)}` });\n }\n // The flag form reports a skipped duplicate through the insert id\n // (`LAST_INSERT_ID(S)` runs only on the duplicate arm).\n text += flag === undefined\n ? ` ON DUPLICATE KEY UPDATE ${keep} = ${current}`\n : ` ON DUPLICATE KEY UPDATE ${keep} = IF(LAST_INSERT_ID(${flag}), ${current}, ${current})`;\n }\n } else {\n const updates = Object.entries(onConflict.update);\n if (updates.length === 0) {\n throw internalError({ message: \"upsert update must set at least one column\" });\n }\n // The update arm's self-references MUST be table-qualified: inside\n // `ON CONFLICT … DO UPDATE SET`, postgres has BOTH the target row and\n // the `excluded` pseudo-relation in scope, so a bare `\"views\" + $n`\n // is rejected as ambiguous (SQLSTATE 42702). Sqlite and mysql accept\n // the qualified form with identical semantics (the pre-update row), so\n // one rule covers every dialect instead of a per-dialect divergence.\n const selfRef = dialect.quoteIdent({ name: statement.table.name });\n if (onConflict.skipUnchanged !== undefined && !dialect.capabilities.upsertSkipUnchanged) {\n throw unsupportedCapability({ dialect: dialect.name, feature: \"skipUnchanged on an upsert's update arm\", hint: \"drop skipUnchanged on this dialect\" });\n }\n if (onConflict.rowPolicy !== undefined && !dialect.capabilities.nativeRowLevelSecurity) {\n throw unsupportedCapability({ dialect: dialect.name, feature: \"nativeRowLevelSecurity\", hint: \"a conflict arm's row policy is a native row-security predicate\" });\n }\n const assignments = dialect.upsertForm !== \"onConflict\" && onConflict.skipUnchanged !== undefined\n ? renderStampFirstAssignments({ dialect, columns: onConflict.skipUnchanged, update: onConflict.update, collector, selfRef, tableName: statement.table.name })\n : renderAssignments({ dialect, entries: updates, collector, selfRef, allowExcluded: true, tableName: statement.table.name });\n if (dialect.upsertForm === \"onConflict\") {\n if (onConflict.lastInsertIdColumn !== undefined) {\n throw internalError({ message: \"lastInsertIdColumn is a mysql (onDuplicateKey) construct\" });\n }\n if (onConflict.constraint !== undefined && dialect.name !== \"postgres\") {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a named-constraint conflict target (ON CONFLICT ON CONSTRAINT)\",\n hint: \"sqlite conflict targets are column lists — name the indexed columns instead\",\n });\n }\n if (onConflict.constraint !== undefined && onConflict.conflictWhere !== undefined) {\n throw internalError({\n message: \"a named-constraint conflict target already identifies the index — it cannot carry a partial predicate too\",\n });\n }\n // RAW predicate — matched structurally against the partial index's own\n // stored predicate, exactly like the DO NOTHING form (ast.ts).\n const partial = onConflict.conflictWhere === undefined ? \"\" : ` WHERE ${onConflict.conflictWhere}`;\n const target =\n onConflict.constraint !== undefined\n ? ` ON CONSTRAINT ${dialect.quoteIdent({ name: onConflict.constraint })}`\n : ` (${onConflict.columns.map((name) => dialect.quoteIdent({ name })).join(\", \")})${partial}`;\n text += ` ON CONFLICT${target} DO UPDATE SET ${assignments}`;\n const unchanged = onConflict.skipUnchanged === undefined\n ? undefined\n : renderUnchangedGuard({ dialect, columns: onConflict.skipUnchanged, update: onConflict.update, collector, selfRef, tableName: statement.table.name });\n if (unchanged !== undefined || onConflict.updateWhere !== undefined) {\n if (!dialect.capabilities.conflictUpdateWhere) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a guarded conflict update (ON CONFLICT … DO UPDATE … WHERE)\",\n hint: \"run the guarded upsert as a find-then-write in a transaction instead\",\n });\n }\n const condition = onConflict.updateWhere === undefined ? undefined : renderExpr({ dialect, expr: onConflict.updateWhere, collector });\n const guard = unchanged === undefined ? condition : condition === undefined ? unchanged : `${unchanged} AND (${condition})`;\n // The guard reads the stored row before row security checks it: a row the policy hides skips nothing.\n text += onConflict.rowPolicy === undefined ? ` WHERE ${guard}` : ` WHERE (${onConflict.rowPolicy}) IS NOT TRUE OR (${guard})`;\n }\n } else {\n if (onConflict.updateWhere !== undefined) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a guarded conflict update (ON DUPLICATE KEY UPDATE has no WHERE)\",\n hint: \"run the guarded upsert as a find-then-write in a transaction instead — the runtime does this when the dialect lacks conflictUpdateWhere\",\n });\n }\n if (onConflict.constraint !== undefined) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a named-constraint conflict target on ON DUPLICATE KEY UPDATE\",\n hint: \"mysql's ODKU fires on any duplicate key — no target can be named\",\n });\n }\n if (onConflict.conflictWhere !== undefined) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a partial-index conflict target on ON DUPLICATE KEY UPDATE\",\n hint: \"mysql's ODKU fires on any duplicate key — a partial arbiter cannot be selected; gate the call per dialect\",\n });\n }\n // B2: the update arm must record WHICH row it addressed — without this,\n // LAST_INSERT_ID() is stale after ODKU takes the update arm and the\n // read-back can resolve an unrelated row.\n const trick =\n onConflict.lastInsertIdColumn === undefined\n ? \"\"\n : `, ${dialect.quoteIdent({ name: onConflict.lastInsertIdColumn })} = LAST_INSERT_ID(${dialect.quoteIdent({ name: onConflict.lastInsertIdColumn })})`;\n const flagged = onConflict.duplicateFlag;\n if (flagged !== undefined && (onConflict.lastInsertIdColumn !== undefined || !/^\\d{1,20}$/.test(flagged.flag))) {\n throw internalError({ message: \"an update arm's duplicate flag must be a decimal literal, and cannot share LAST_INSERT_ID with lastInsertIdColumn\" });\n }\n const flag = flagged === undefined\n ? \"\"\n : `, ${dialect.quoteIdent({ name: flagged.column })} = IF(LAST_INSERT_ID(${flagged.flag}), ${selfRef}.${dialect.quoteIdent({ name: flagged.column })}, ${selfRef}.${dialect.quoteIdent({ name: flagged.column })})`;\n text += ` ON DUPLICATE KEY UPDATE ${assignments}${trick}${flag}`;\n }\n }\n }\n\n const returning = applyReturning({ dialect, requested: statement.returning, collector, table: statement.table });\n return { text: text + returning.suffix, values: collector.values, returning: returning.status };\n}\n\n// ─── UPDATE ───────────────────────────────────────────────────────\n\nfunction renderUpdate(params: {\n dialect: SqlDialect;\n statement: UpdateStatement;\n collector: ParamCollector;\n /** Chain steps defined before this one (a chain step only): a set value may read them. */\n earlier?: ReadonlySet<string>;\n}): RenderedQuery {\n const { dialect, statement, collector } = params;\n\n const assignments = Object.entries(statement.set);\n if (assignments.length === 0) {\n throw internalError({ message: \"update must set at least one column\" });\n }\n const source = statement.from;\n if (source !== undefined) {\n if (statement.alias === undefined || statement.alias === source.alias) throw internalError({ message: \"UPDATE … FROM needs distinct target and source aliases\" });\n const target = dialect.quoteIdent({ name: statement.alias });\n const joined = dialect.quoteIdent({ name: source.alias });\n const assign = (): string => renderAssignments({ dialect, entries: assignments, collector, selfRef: target, source: joined, ...(dialect.name === \"mysql\" ? { qualifyWrite: target } : {}), ...(params.earlier === undefined ? {} : { steps: params.earlier }) });\n const where = (): string => statement.where === undefined ? \"\" : ` AND ${renderExpr({ dialect, expr: statement.where, collector })}`;\n if (\"select\" in source) {\n // A FROM subquery reading the target table is the previous-row read of\n // `update({ previous })`; only PostgreSQL's RETURNING can read it back.\n if (!dialect.capabilities.returningReadsJoinedSource) {\n throw unsupportedCapability({ dialect: dialect.name, feature: \"UPDATE … FROM (SELECT …) with RETURNING of the joined source\", hint: \"read the row inside the write's transaction first, then write it\" });\n }\n // Placeholders bind in text order: SET, the subquery, then the outer WHERE.\n const set = assign();\n const joinedSelect = renderSelect({ dialect, statement: source.select, collector }).text;\n const text = `UPDATE ${renderTable(dialect, statement.table)} AS ${target} SET ${set} FROM (${joinedSelect}) AS ${joined} WHERE ${renderExpr({ dialect, expr: source.on, collector })}${where()}`;\n const returning = applyReturning({ dialect, requested: statement.returning, qualify: target });\n return { text: text + returning.suffix, values: collector.values, returning: returning.status };\n }\n // Placeholders bind in text order: MySQL's ON precedes SET.\n const text = dialect.name === \"mysql\"\n ? `UPDATE ${renderTable(dialect, statement.table)} AS ${target} JOIN ${renderTable(dialect, source.table)} AS ${joined} ON ${renderExpr({ dialect, expr: source.on, collector })} SET ${assign()}${statement.where === undefined ? \"\" : ` WHERE ${renderExpr({ dialect, expr: statement.where, collector })}`}`\n : `UPDATE ${renderTable(dialect, statement.table)} AS ${target} SET ${assign()} FROM ${renderTable(dialect, source.table)} AS ${joined} WHERE ${renderExpr({ dialect, expr: source.on, collector })}${where()}`;\n const returning = applyReturning({ dialect, requested: statement.returning, collector, ...(dialect.name === \"postgres\" ? { qualify: target } : {}) });\n return { text: text + returning.suffix, values: collector.values, returning: returning.status };\n }\n const setSql = renderAssignments({ dialect, entries: assignments, collector, ...(params.earlier === undefined ? {} : { steps: params.earlier }) });\n let text = `UPDATE ${renderTable(dialect, statement.table)} SET ${setSql}`;\n\n if (statement.where !== undefined) {\n text += ` WHERE ${renderExpr({ dialect, expr: statement.where, collector })}`;\n }\n\n const returning = applyReturning({ dialect, requested: statement.returning, collector, table: statement.table });\n return { text: text + returning.suffix, values: collector.values, returning: returning.status };\n}\n\n// ─── Assignments (SET / DO UPDATE SET) ────────────────────────────\n\n/**\n * `SET` assignments, shared by UPDATE and the upsert update arm.\n *\n * `selfRef` (the quoted target table) qualifies the READ side of an operation\n * that reads the column it writes — required inside `ON CONFLICT DO UPDATE`,\n * where a bare reference is ambiguous with `excluded` on postgres. The write\n * side is never qualified: `SET \"t\".\"col\" = …` is a syntax error everywhere.\n * A plain UPDATE passes no `selfRef` — it has no second relation in scope.\n */\n/**\n * The incoming row's column, qualified for this dialect: `excluded.\"col\"`\n * (postgres/sqlite) or `` `new`.`col` `` (mysql's row alias, declared after the\n * VALUES list by {@link renderInsert}).\n */\nfunction renderIncomingRowColumn(params: { dialect: SqlDialect; column: string }): string {\n const { dialect, column } = params;\n const ref = dialect.excludedRowRef;\n const qualifier = ref.form === \"keyword\" ? ref.name : dialect.quoteIdent({ name: ref.alias });\n return `${qualifier}.${dialect.quoteIdent({ name: column })}`;\n}\n\ntype AssignmentContext = {\n dialect: SqlDialect;\n collector: ParamCollector;\n selfRef?: string;\n /** Only an upsert's update arm has an incoming row to reference. */\n allowExcluded?: boolean;\n tableName?: string;\n /** Lane C3: earlier chain steps a {@link StepColumnRef} value may read (a chain UPDATE step only). */\n steps?: ReadonlySet<string>;\n /** `UPDATE … FROM`: the quoted alias a {@link SourceColumnRef} value reads. */\n source?: string;\n /** MySQL's `UPDATE … JOIN` qualifies the written column with the target alias. */\n qualifyWrite?: string;\n};\n\nfunction renderAssignments(params: AssignmentContext & { entries: readonly (readonly [string, unknown])[] }): string {\n const { dialect, entries } = params;\n return entries\n .map(([name, value]) => `${dialect.quoteIdent({ name })} = ${renderAssignmentValue({ ...params, name, value })}`)\n .map((assignment) => (params.qualifyWrite === undefined ? assignment : `${params.qualifyWrite}.${assignment}`))\n .join(\", \");\n}\n\n/**\n * The skip-unchanged member of a conflict arm's WHERE: the stored row's\n * compared columns differ from the values the assignments write. Each value\n * renders again through the assignment renderer, so a bound value binds once\n * more; `excluded` references bind nothing.\n *\n * \"Unchanged\" means the stored value would not change. Where the column's own\n * equality is coarser, both sides compare as text instead: PostgreSQL text in\n * the \"C\" collation (a `citext` or nondeterministic-collation column), the\n * text of a bare `numeric` (`1.50` is not `1.5`), MySQL's `CAST(… AS BINARY)`;\n * a bound Json value is converted to MySQL's own document text first.\n */\nfunction renderUnchangedGuard(params: {\n dialect: SqlDialect;\n columns: readonly UnchangedColumn[];\n update: Readonly<Record<string, unknown>>;\n collector: ParamCollector;\n selfRef: string;\n tableName: string;\n}): string {\n const { dialect, columns, update, collector, selfRef, tableName } = params;\n if (columns.length === 0) throw internalError({ message: \"a skip-unchanged guard needs at least one compared column\" });\n const left: string[] = [];\n const right: string[] = [];\n for (const entry of columns) {\n if (!Object.hasOwn(update, entry.column)) {\n throw internalError({ message: `the skip-unchanged column ${entry.column} has no assignment in the update arm` });\n }\n const assigned = update[entry.column];\n const value = renderAssignmentValue({ dialect, collector, selfRef, allowExcluded: true, tableName, name: entry.column, value: assigned });\n const stored = `${selfRef}.${dialect.quoteIdent({ name: entry.column })}`;\n if (dialect.name === \"mysql\" && entry.bytes !== undefined && entry.bytes !== \"decimal\") {\n left.push(`CAST(${stored} AS BINARY)`);\n // A bound Json value is the caller's JSON text; the stored side is MySQL's normalized document text.\n right.push(entry.json !== undefined && !isExcludedRef(assigned) ? `CAST(CAST(${value} AS JSON) AS BINARY)` : `CAST(${value} AS BINARY)`);\n continue;\n }\n if (dialect.name === \"postgres\" && entry.folds === true) {\n const text = entry.list === true ? \"text[]\" : \"text\";\n left.push(`${stored}::${text} COLLATE \"C\"`);\n right.push(`(${value})::${text} COLLATE \"C\"`);\n continue;\n }\n if (dialect.name === \"postgres\" && entry.bytes === \"decimal\") {\n left.push(`${stored}::text`);\n right.push(`((${value})::numeric${entry.list === true ? \"[]\" : \"\"})::text`);\n continue;\n }\n const cast = dialect.name === \"postgres\" && entry.json !== undefined ? `::jsonb${entry.json === \"list\" ? \"[]\" : \"\"}` : \"\";\n left.push(`${stored}${cast}`);\n right.push(cast === \"\" ? value : `(${value})${cast}`);\n }\n return dialect.renderRowsDiffer({ left, right });\n}\n\n/**\n * A skip-unchanged update arm where the conflict clause has no WHERE (MySQL's\n * ON DUPLICATE KEY UPDATE): each column the comparison leaves out (the\n * `@updatedAt` stamps) is assigned FIRST, as `IF(<stored row differs>, <new\n * value>, <stored value>)`, then the compared columns as usual. MySQL runs the\n * assignments left to right, so the comparison reads the stored row; a row\n * whose assignments then change nothing is not written at all. Placeholders\n * bind in text order: each stamp's comparison values, its own value, then the\n * remaining assignments.\n */\nfunction renderStampFirstAssignments(params: {\n dialect: SqlDialect;\n columns: readonly UnchangedColumn[];\n update: Readonly<Record<string, unknown>>;\n collector: ParamCollector;\n selfRef: string;\n tableName: string;\n}): string {\n const { dialect, columns, update, collector, selfRef, tableName } = params;\n const compared = new Set(columns.map((entry) => entry.column));\n const context = { dialect, collector, selfRef, allowExcluded: true, tableName };\n const stamps = Object.entries(update).filter(([name]) => !compared.has(name));\n const rest = Object.entries(update).filter(([name]) => compared.has(name));\n const first = stamps.map(([name, value]) => {\n const differs = renderUnchangedGuard({ ...params });\n const column = dialect.quoteIdent({ name });\n return `${column} = IF(${differs}, ${renderAssignmentValue({ ...context, name, value })}, ${selfRef}.${column})`;\n });\n return [...first, ...(rest.length === 0 ? [] : [renderAssignments({ ...context, entries: rest })])].join(\", \");\n}\n\n/** The value expression one SET assignment writes into column `name`. */\nfunction renderAssignmentValue(params: AssignmentContext & { name: string; value: unknown }): string {\n const { dialect, collector, selfRef, name, value } = params;\n const column = dialect.quoteIdent({ name });\n const read = selfRef === undefined ? column : `${selfRef}.${column}`;\n if (isSourceColumnRef(value)) {\n if (params.source === undefined) throw internalError({ message: `an UPDATE set value reads the joined source's column ${value.column}, but the statement joins no source` });\n return `${params.source}.${dialect.quoteIdent({ name: value.column })}`;\n }\n // Lane C3: the value of an earlier step's one row — a scalar subquery,\n // whose own scope resolves the column (no clash with the target's).\n if (isStepColumnRef(value)) {\n if (params.steps === undefined || !params.steps.has(value.step)) {\n throw internalError({ message: `an UPDATE set value reads step \"${value.step}\", which is not an earlier chain step` });\n }\n return `(SELECT ${dialect.quoteIdent({ name: value.column })} FROM ${dialect.quoteIdent({ name: value.step })})`;\n }\n // The INCOMING row's value for this column — a column reference, so a\n // batched upsert writes each conflicting row's own value while binding\n // it exactly once (in the VALUES list).\n if (isSqlFragment(value)) {\n if (params.allowExcluded !== true || selfRef === undefined) throw internalError({ message: \"SQL assignment fragments require a conflict update\" });\n return renderSqlFragment({ dialect, fragment: value, collector, conflict: { table: params.tableName! } });\n }\n if (isExcludedRef(value)) {\n if (params.allowExcluded !== true) {\n throw internalError({\n message: `an incoming-row reference (${value.column}) is only meaningful inside an upsert's update arm`,\n });\n }\n return renderIncomingRowColumn({ dialect, column: value.column });\n }\n // V8: the column keeps its current value — a conflict update arm only.\n if (isSqlKeepCell(value)) {\n if (params.allowExcluded !== true || selfRef === undefined) throw internalError({ message: \"a keep-column cell is only meaningful inside an upsert's update arm\" });\n return read;\n }\n if (isJsonPatchOperation(value)) {\n return renderJsonPatch({ dialect, patch: value, read, collector });\n }\n // Json cell: same param-type pinning as the VALUES cells above.\n if (isJsonParamCell(value)) {\n return `${collector.add(value.text)}${jsonCellCast(dialect, value)}`;\n }\n if (isSetOperation(value)) {\n const operand = collector.add(value.value);\n const numeric = dialect.name === \"sqlite\" && value.numericType === \"Decimal\" ? `CAST(${operand} AS REAL)` : operand;\n return `${read} ${SET_OPERATION_SQL[value.__op]} ${numeric}`;\n }\n if (isDbNowMarker(value)) {\n return dialect.renderDbNow({ offsetSeconds: value.offsetSeconds, collector });\n }\n if (isListSetOperation(value)) {\n assertScalarArrays(dialect, 'the scalar-list update operation \"push\"');\n if (value.__listOp === \"append\") {\n return `array_append(${read}, ${collector.add(value.value)})`;\n }\n return `${read} || ${collector.add(value.value)}`;\n }\n return collector.add(value);\n}\n\n// ─── DELETE ───────────────────────────────────────────────────────\n\nfunction renderDelete(params: {\n dialect: SqlDialect;\n statement: DeleteStatement;\n collector: ParamCollector;\n}): RenderedQuery {\n const { dialect, statement, collector } = params;\n\n let text = `DELETE FROM ${renderTable(dialect, statement.table)}`;\n if (statement.where !== undefined) {\n text += ` WHERE ${renderExpr({ dialect, expr: statement.where, collector })}`;\n }\n\n const returning = applyReturning({ dialect, requested: statement.returning, collector, table: statement.table });\n return { text: text + returning.suffix, values: collector.values, returning: returning.status };\n}\n\n// ─── Statement chains (WITH … SELECT) ─────────────────────────────\n\n/** Derived-table aliases of a chain's verdict SELECT — no step may take them. */\nconst CHAIN_ROWS_ALIAS = \"__vibe_rows\";\nconst CHAIN_ONE_ALIAS = \"__vibe_one\";\n\n/**\n * `WITH \"a\" AS (…), \"b\" AS (…) <final SELECT>` — see {@link ChainStatement}.\n * Steps render in order through the ordinary statement renderers on ONE\n * shared collector, so parameters number in step order, then the verdict.\n *\n * The verdict form is `SELECT rows.cols, <verdict> FROM (SELECT 1) LEFT JOIN\n * (<union>) AS rows ON TRUE`: one row per written row, or ONE all-NULL row\n * carrying the verdict when the union is empty. A `LEFT JOIN`, not a NULL\n * marker branch inside the `UNION ALL`, so every column keeps its RETURNING\n * type — PostgreSQL resolves a nested UNION's untyped NULLs pairwise (two NULL\n * branches become `text`), which a bare marker branch would trip over.\n */\nfunction renderChain(params: {\n dialect: SqlDialect;\n statement: ChainStatement;\n collector: ParamCollector;\n}): RenderedQuery {\n const { dialect, statement, collector } = params;\n if (dialect.statementChain === null) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a statement chain (data-modifying WITH steps)\",\n hint: \"this dialect accepts only SELECT inside WITH — gate on SqlDialect.statementChain and keep the multi-statement path\",\n });\n }\n if (statement.steps.length === 0) throw internalError({ message: \"a statement chain needs at least one step\" });\n const defined = new Set<string>();\n const steps: string[] = [];\n for (const step of statement.steps) {\n if (step.name === CHAIN_ROWS_ALIAS || step.name === CHAIN_ONE_ALIAS || defined.has(step.name)) {\n throw internalError({ message: `chain step name \"${step.name}\" is reserved or repeated` });\n }\n const body = renderChainStep({ dialect, statement: step.statement, collector, earlier: defined });\n steps.push(`${dialect.quoteIdent({ name: step.name })} AS (${body})`);\n defined.add(step.name);\n }\n\n const result = statement.result;\n const captures = result.capture ?? [];\n if (captures.length > 0 && !dialect.capabilities.rowCapture) {\n throw unsupportedCapability({ dialect: dialect.name, feature: \"row capture (RETURNING old./new.)\", hint: \"row capture needs PostgreSQL 18 or later; the runtime refuses $transaction({ capture }) on this dialect\" });\n }\n for (const alias of captureAliases({ captures })) {\n if (result.columns.includes(alias) || alias === result.verdict?.alias || alias === result.tally?.alias) {\n throw internalError({ message: `chain capture alias \"${alias}\" collides with a result column` });\n }\n }\n if (result.rowsFrom.length === 0 && result.columns.length === 0 && result.tally !== undefined && result.verdict === undefined) {\n const tally = renderTallyColumn({ dialect, result, defined, collector });\n return { text: `WITH ${steps.join(\", \")} SELECT ${[tally, ...renderChainCaptures({ dialect, captures, defined, collector })].join(\", \")}`, values: collector.values, returning: \"none\" };\n }\n if (result.rowsFrom.length === 0 || result.columns.length === 0) {\n throw internalError({ message: \"a chain result needs at least one source step and one column\" });\n }\n for (const name of result.rowsFrom) {\n if (!defined.has(name)) throw internalError({ message: `chain result reads undefined step \"${name}\"` });\n }\n const columnList = result.columns.map((name) => dialect.quoteIdent({ name })).join(\", \");\n const guarded = result.verdict !== undefined || result.tally !== undefined || (result.veto !== undefined && result.veto.length > 0);\n // Without a guaranteed row the capture columns ride every arm: rendered once\n // (one bound limit each), the same text in every arm.\n const armCapture = guarded || captures.length === 0 ? \"\" : `, ${renderChainCaptures({ dialect, captures, defined, collector }).join(\", \")}`;\n const union = result.rowsFrom\n .map((name) => `SELECT ${columnList}${armCapture} FROM ${dialect.quoteIdent({ name })}`)\n .join(\" UNION ALL \");\n let select = union;\n if (guarded) {\n const extra: string[] = [];\n for (const alias of [result.verdict?.alias, result.tally?.alias]) {\n if (alias !== undefined && result.columns.includes(alias)) {\n throw internalError({ message: `chain result alias \"${alias}\" collides with a result column` });\n }\n }\n const rows = dialect.quoteIdent({ name: CHAIN_ROWS_ALIAS });\n const projected = result.columns.map((name) => `${rows}.${dialect.quoteIdent({ name })}`);\n if (result.verdict !== undefined) {\n extra.push(`${renderExpr({ dialect, expr: result.verdict.expr, collector })} AS ${dialect.quoteIdent({ name: result.verdict.alias })}`);\n }\n if (result.tally !== undefined || (result.veto !== undefined && result.veto.length > 0)) {\n extra.push(renderTallyColumn({ dialect, result, defined, collector }));\n }\n extra.push(...renderChainCaptures({ dialect, captures, defined, collector }));\n select =\n `SELECT ${[...projected, ...extra].join(\", \")} FROM (SELECT 1) AS ${dialect.quoteIdent({ name: CHAIN_ONE_ALIAS })}` +\n ` LEFT JOIN (${union}) AS ${rows} ON TRUE`;\n }\n return { text: `WITH ${steps.join(\", \")} ${select}`, values: collector.values, returning: \"none\" };\n}\n\nfunction renderChainStep(params: {\n dialect: SqlDialect;\n statement: ChainStepStatement;\n collector: ParamCollector;\n earlier: ReadonlySet<string>;\n}): string {\n const { dialect, statement, collector } = params;\n switch (statement.kind) {\n case \"select\":\n return renderSelect({ dialect, statement, collector }).text;\n case \"insert\":\n return renderInsert({ dialect, statement, collector }).text;\n case \"insertSelect\":\n return renderInsertSelect({ dialect, statement, collector, earlier: params.earlier });\n case \"update\":\n return renderUpdate({ dialect, statement, collector, earlier: params.earlier }).text;\n case \"delete\":\n return renderDelete({ dialect, statement, collector }).text;\n }\n}\n\n/** The result columns every {@link ChainCapture} entry adds, in render order. */\nfunction captureAliases(params: { captures: readonly ChainCapture[] }): string[] {\n const out: string[] = [];\n for (const entry of params.captures) {\n out.push(`${entry.alias}_n`);\n if (entry.inserted !== undefined) out.push(`${entry.alias}_i`);\n if (entry.before !== undefined && entry.before.length > 0) out.push(`${entry.alias}_b`);\n if (entry.after !== undefined && entry.after.length > 0) {\n if (entry.inserted === undefined || entry.insertedOnly !== true) out.push(`${entry.alias}_a`);\n if (entry.inserted !== undefined) out.push(`${entry.alias}_ia`);\n }\n for (const index of (entry.cascades ?? []).keys()) out.push(`${entry.alias}_c${index}`);\n }\n return out;\n}\n\n/**\n * The {@link ChainCapture} columns: a step's row count, its inserted-arm\n * count, and its distinct before/after images as ONE two-dimensional text\n * array literal each (an upsert step's after images one per arm), `LIMIT`\n * bound once per entry — so a write of 10 000 rows of one key ships one\n * image, and no aggregate ships more than `limit`.\n */\nfunction renderChainCaptures(params: { dialect: SqlDialect; captures: readonly ChainCapture[]; defined: ReadonlySet<string>; collector: ParamCollector }): string[] {\n const { dialect, captures, defined, collector } = params;\n const quote = (name: string): string => dialect.quoteIdent({ name });\n const out: string[] = [];\n for (const entry of captures) {\n if (!defined.has(entry.step)) throw internalError({ message: `chain capture reads undefined step \"${entry.step}\"` });\n const step = quote(entry.step);\n const marker = entry.inserted === undefined ? undefined : quote(entry.inserted);\n out.push(`(SELECT count(*) FROM ${step}) AS ${quote(`${entry.alias}_n`)}`);\n if (marker !== undefined) out.push(`(SELECT count(*) FROM ${step} WHERE ${marker}) AS ${quote(`${entry.alias}_i`)}`);\n const before = entry.before ?? [];\n const after = entry.after ?? [];\n out.push(...renderImageAggregates({ dialect, entry, step, marker, before, after, collector }));\n for (const [index, cascade] of (entry.cascades ?? []).entries()) {\n const keys = quote(\"__vibe_k\");\n const child = quote(CAPTURE_CHILD_ALIAS);\n const match = `EXISTS (SELECT 1 FROM ${step} AS ${keys} WHERE ${cascade.on.map((pair) => `${keys}.${quote(pair.parent)} = ${child}.${quote(pair.child)}`).join(\" AND \")})`;\n out.push(`${renderCascadeImages({ dialect, cascade, match, collector })} AS ${quote(`${entry.alias}_c${index}`)}`);\n }\n }\n return out;\n}\n\n/** A {@link ChainCapture} entry's `_b`, `_a` and `_ia` image aggregates, sharing one bound limit. */\nfunction renderImageAggregates(params: { dialect: SqlDialect; entry: ChainCapture; step: string; marker: string | undefined; before: readonly string[]; after: readonly string[]; collector: ParamCollector }): string[] {\n const { dialect, entry, step, marker, before, after, collector } = params;\n const quote = (name: string): string => dialect.quoteIdent({ name });\n const out: string[] = [];\n if (before.length === 0 && after.length === 0) return out;\n if (!Number.isSafeInteger(entry.limit) || entry.limit < 1) throw internalError({ message: `chain capture \"${entry.alias}\" needs a positive integer limit` });\n const limit = collector.add(entry.limit);\n const item = quote(\"__vibe_i\");\n const image = (columns: readonly string[], filter: string): string =>\n `(SELECT array_agg(${item})::text FROM (SELECT DISTINCT ARRAY[${columns.map(quote).join(\", \")}] AS ${item} FROM ${step}${filter} LIMIT ${limit}) AS ${quote(\"__vibe_d\")})`;\n const updatedRows = marker === undefined ? \"\" : ` WHERE NOT ${marker}`;\n if (before.length > 0) out.push(`${image(before, updatedRows)} AS ${quote(`${entry.alias}_b`)}`);\n if (after.length > 0 && (marker === undefined || entry.insertedOnly !== true)) out.push(`${image(after, updatedRows)} AS ${quote(`${entry.alias}_a`)}`);\n if (after.length > 0 && marker !== undefined) out.push(`${image(after, ` WHERE ${marker}`)} AS ${quote(`${entry.alias}_ia`)}`);\n return out;\n}\n\n/** One SELECT-list cell in a VALUES form: encoded value, Json cell or clock cell — never DEFAULT. */\nfunction renderSelectCell(params: { dialect: SqlDialect; value: unknown; collector: ParamCollector }): string {\n const { dialect, value, collector } = params;\n if (isJsonParamCell(value)) return `${collector.add(value.text)}${jsonCellCast(dialect, value)}`;\n if (isDbNowMarker(value)) return dialect.renderDbNow({ offsetSeconds: value.offsetSeconds, collector });\n if (isSqlDefaultCell(value)) {\n throw internalError({ message: \"DEFAULT is not allowed in an INSERT … SELECT list — omit the column instead\" });\n }\n return collector.add(value);\n}\n\n/**\n * `(SELECT cols FROM (VALUES (<typed NULL row>), ($1, $2), …) AS \"alias\"\n * (cols) OFFSET 1) AS \"alias\"` — see {@link ChainRowSource}: the first VALUES\n * row is one `(SELECT \"col\" FROM typedBy WHERE FALSE)` per column (a typed\n * NULL), which types every later parameter by the target table's own column;\n * `OFFSET 1` drops it again.\n */\nfunction renderRowSource(params: { dialect: SqlDialect; source: ChainRowSource; collector: ParamCollector }): string {\n const { dialect, source, collector } = params;\n if (source.columns.length === 0 || source.rows.length === 0) {\n throw internalError({ message: \"a row source needs at least one column and one row\" });\n }\n const typedBy = renderTable(dialect, source.typedBy);\n const columns = source.columns.map((name) => dialect.quoteIdent({ name }));\n const rows = [`(${columns.map((column) => `(SELECT ${column} FROM ${typedBy} WHERE FALSE)`).join(\", \")})`];\n for (const row of source.rows) {\n if (row.length !== source.columns.length) {\n throw internalError({ message: `row source row has ${row.length} values but ${source.columns.length} columns` });\n }\n rows.push(`(${row.map((value) => renderSelectCell({ dialect, value, collector })).join(\", \")})`);\n }\n const alias = dialect.quoteIdent({ name: source.alias });\n const columnList = columns.join(\", \");\n return `(SELECT ${columnList} FROM (VALUES ${rows.join(\", \")}) AS ${alias} (${columnList}) OFFSET 1) AS ${alias}`;\n}\n\n/**\n * The tally column guarded by the vetoes: `CASE WHEN NOT EXISTS (SELECT 1\n * FROM \"s\") THEN CAST('__vibe_veto:<token>:' || $n || ':' || (SELECT count(*)\n * FROM \"s\") AS integer) … ELSE (SELECT count(*) FROM \"a\") + … END`, `$n`\n * binding the veto's nonce. A veto with `minRows` above 1 (EPIC W) tests\n * `WHEN (SELECT count(*) FROM \"s\") < <minRows>` instead.\n *\n * The failing cast is how a plain SQL expression raises an error (SQLSTATE\n * 22P02, the marker quoted in the message). Its operand reads the step, so it\n * is NOT a constant: PostgreSQL folds constant CASE arms at plan time and\n * would raise even when the arm is never taken; this one is evaluated only\n * when its WHEN holds. The count it appends is the rows the step returned.\n */\nfunction renderTallyColumn(params: { dialect: SqlDialect; result: ChainResult; defined: ReadonlySet<string>; collector: ParamCollector }): string {\n const { dialect, result, defined, collector } = params;\n const tally = result.tally;\n if (tally === undefined) throw internalError({ message: \"a chain veto needs a tally column to guard\" });\n if (tally.steps.length === 0) throw internalError({ message: \"a chain tally needs at least one step\" });\n const step = (name: string): string => {\n if (!defined.has(name)) throw internalError({ message: `chain tally or veto reads undefined step \"${name}\"` });\n return dialect.quoteIdent({ name });\n };\n const count = (name: string): string => `(SELECT count(*) FROM ${step(name)})`;\n const sum = tally.steps.map(count).join(\" + \");\n const vetoes = result.veto ?? [];\n if (vetoes.length === 0) {\n if (result.vetoGate !== undefined) throw internalError({ message: \"a chain veto gate needs a veto to gate\" });\n return `${sum} AS ${dialect.quoteIdent({ name: tally.alias })}`;\n }\n const gate = result.vetoGate === undefined ? [] : [`WHEN NOT EXISTS (SELECT 1 FROM ${step(result.vetoGate)}) THEN ${sum}`];\n const arms = vetoes.map((veto) => {\n if (!CHAIN_VETO_TOKEN_PATTERN.test(veto.token)) throw internalError({ message: `chain veto token \"${veto.token}\" is not a lower-case word` });\n if (typeof veto.nonce !== \"string\" || veto.nonce === \"\") throw internalError({ message: `chain veto \"${veto.token}\" needs a non-empty nonce` });\n const minRows = veto.minRows ?? 1;\n if (!Number.isSafeInteger(minRows) || minRows < 1) throw internalError({ message: `chain veto \"${veto.token}\" needs a positive integer minRows` });\n if (veto.exactRows !== undefined && (!Number.isSafeInteger(veto.exactRows) || veto.exactRows < 0 || veto.minRows !== undefined)) {\n throw internalError({ message: `chain veto \"${veto.token}\" needs a nonnegative safe integer exactRows without minRows` });\n }\n const when = veto.exactRows !== undefined\n ? `WHEN ${count(veto.step)} <> ${veto.exactRows}`\n : minRows === 1 ? `WHEN NOT EXISTS (SELECT 1 FROM ${step(veto.step)})` : `WHEN ${count(veto.step)} < ${minRows}`;\n return `${when} THEN CAST('${CHAIN_VETO_PREFIX}${veto.token}:' || ${collector.add(veto.nonce)} || ':' || ${count(veto.step)} AS integer)`;\n });\n return `CASE ${[...gate, ...arms].join(\" \")} ELSE ${sum} END AS ${dialect.quoteIdent({ name: tally.alias })}`;\n}\n\n/** `INSERT INTO t (cols) SELECT <cells> [FROM steps] [WHERE …] [RETURNING …]` — a chain step only. */\nfunction renderInsertSelect(params: {\n dialect: SqlDialect;\n statement: InsertSelectStatement;\n collector: ParamCollector;\n earlier: ReadonlySet<string>;\n}): string {\n const { dialect, statement, collector } = params;\n if (statement.columns.length === 0) throw internalError({ message: \"insert requires at least one column\" });\n if (statement.cells.length !== statement.columns.length) {\n throw internalError({\n message: `insert row has ${statement.cells.length} values but ${statement.columns.length} columns`,\n });\n }\n const from = statement.from ?? [];\n for (const name of from) {\n if (!params.earlier.has(name)) throw internalError({ message: `INSERT … SELECT reads step \"${name}\" before it is defined` });\n }\n const source = statement.source;\n if (source !== undefined && (params.earlier.has(source.alias) || from.includes(source.alias))) {\n throw internalError({ message: `row source alias \"${source.alias}\" collides with a chain step` });\n }\n const cells = statement.cells.map((value) => {\n if (isStepColumnRef(value)) {\n if (!from.includes(value.step) && value.step !== source?.alias) {\n throw internalError({ message: `cell reads step \"${value.step}\", which the INSERT … SELECT does not name in FROM` });\n }\n return `${dialect.quoteIdent({ name: value.step })}.${dialect.quoteIdent({ name: value.column })}`;\n }\n return renderSelectCell({ dialect, value, collector });\n });\n const columnList = statement.columns.map((name) => dialect.quoteIdent({ name })).join(\", \");\n let text = `INSERT INTO ${renderTable(dialect, statement.table)} (${columnList}) SELECT ${cells.join(\", \")}`;\n const relations = from.map((name) => dialect.quoteIdent({ name }));\n if (source !== undefined) relations.push(renderRowSource({ dialect, source, collector }));\n if (relations.length > 0) text += ` FROM ${relations.join(\" CROSS JOIN \")}`;\n if (statement.where !== undefined) {\n text += ` WHERE ${renderExpr({ dialect, expr: statement.where, collector })}`;\n }\n const conflict = statement.conflictDoNothing;\n if (conflict !== undefined) {\n if (conflict.columns.length === 0) throw internalError({ message: \"an INSERT … SELECT conflict clause needs at least one column\" });\n if (dialect.doNothingForm !== \"onConflictDoNothing\") {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"ON CONFLICT DO NOTHING on an INSERT … SELECT chain step\",\n hint: \"gate on SqlDialect.statementChain and keep the multi-statement path\",\n });\n }\n text += ` ON CONFLICT (${conflict.columns.map((name) => dialect.quoteIdent({ name })).join(\", \")}) DO NOTHING`;\n }\n return text + applyReturning({ dialect, requested: statement.returning, collector, table: statement.table }).suffix;\n}\n",
|
|
53
55
|
"/**\n * LIKE pattern helpers.\n *\n * User input must be escaped before being embedded in a LIKE pattern, so that\n * `%`, `_` and `\\` in data match literally. All dialects use `\\` as the escape\n * character (sqlite only via the explicit ESCAPE clause the dialect appends —\n * see SqlDialect.likeEscapeClause).\n */\n\n/** Escape LIKE wildcards (`%`, `_`) and the escape character itself. */\nexport function escapeLikePattern(params: { raw: string }): string {\n return params.raw.replaceAll(\"\\\\\", \"\\\\\\\\\").replaceAll(\"%\", \"\\\\%\").replaceAll(\"_\", \"\\\\_\");\n}\n\n/** Pattern for a `contains` filter: `%value%` with the value escaped. */\nexport function containsPattern(params: { raw: string }): string {\n return `%${escapeLikePattern({ raw: params.raw })}%`;\n}\n\n/** Pattern for a `startsWith` filter: `value%` with the value escaped. */\nexport function startsWithPattern(params: { raw: string }): string {\n return `${escapeLikePattern({ raw: params.raw })}%`;\n}\n\n/** Pattern for an `endsWith` filter: `%value` with the value escaped. */\nexport function endsWithPattern(params: { raw: string }): string {\n return `%${escapeLikePattern({ raw: params.raw })}`;\n}\n\n/**\n * Escape sqlite GLOB metacharacters (`*`, `?`, `[`) via single-character\n * classes — GLOB has no ESCAPE clause, and LIKE's backslash escaping does NOT\n * apply to it (board #20; `]` is literal outside a class). Used by the\n * `strictMatch` renderer on dialects with `strictMatchStrategy: \"glob\"`.\n */\nexport function escapeGlobPattern(params: { raw: string }): string {\n return params.raw.replace(/[*?[]/g, (char) => `[${char}]`);\n}\n\n/**\n * The BOUND pattern a `strictMatch` pattern op renders, per strategy — the\n * ONE derivation point, used by the renderer AND the runtime's render-cache\n * mirror (which must bind the identical parameter, LEARNINGS mirror rule).\n */\nexport function strictMatchPattern(params: {\n strategy: \"native\" | \"glob\" | \"binary\";\n op: \"contains\" | \"startsWith\" | \"endsWith\";\n value: string;\n}): string {\n const { strategy, op, value } = params;\n if (strategy === \"glob\") {\n const inner = escapeGlobPattern({ raw: value });\n return op === \"contains\" ? `*${inner}*` : op === \"startsWith\" ? `${inner}*` : `*${inner}`;\n }\n return op === \"contains\"\n ? containsPattern({ raw: value })\n : op === \"startsWith\"\n ? startsWithPattern({ raw: value })\n : endsWithPattern({ raw: value });\n}\n\n// ─── Fix lane Q2 (D-06): collation prefilter of a strict prefix match ───\n\n/**\n * Does a `strictMatch` render the collation `LIKE` conjunct BEFORE its\n * byte-exact test? Only the `binary` strategy's (mysql) non-negated\n * `startsWith`: `(col LIKE ? AND col LIKE CAST(? AS BINARY))`, the same\n * pattern bound twice. A byte-exact prefix match is always a collation match\n * (a collation never separates identical characters, and the escaped prefix\n * plus `%` has no other wildcard), so the AND keeps exactly the binary test's\n * rows — while the plain conjunct lets a btree index on the column bound the\n * scan (measured on mysql 26.7: 5.92 → 0.24 ms, 100 002 → 3 rows read). The\n * ONE decision point for the renderer AND the runtime's render-cache mirror,\n * which must bind the pattern twice exactly when the renderer does.\n */\nexport function strictMatchCollationPrefilter(params: {\n strategy: \"native\" | \"glob\" | \"binary\";\n op: \"equals\" | \"contains\" | \"startsWith\" | \"endsWith\";\n negate: boolean;\n}): boolean {\n return params.strategy === \"binary\" && params.op === \"startsWith\" && !params.negate;\n}\n",
|
|
54
56
|
"/**\n * Lock SQL: the row-locking clause appended to a SELECT, and the\n * transaction-scoped advisory-lock statement.\n *\n * Both are pure text decisions, so both live here rather than in the runtime —\n * and both REFUSE rather than degrade. A dialect that cannot express a strength\n * or a wait policy has no text for it (`SqlDialect.rowLockSyntax`), and the\n * refusal is a `VIBE_UNSUPPORTED_CAPABILITY`, never a weaker clause: silently\n * turning `skipLocked` into a blocking read hands two workers the same job.\n */\n\nimport { internalError, unsupportedCapability } from \"@vibeorm/schema\";\nimport type { AdvisoryLockMode, RowLockStrength, RowLockWaitPolicy } from \"@vibeorm/schema\";\nimport type { AdvisoryLockKey, AdvisoryLockStatement, RowLock } from \"./ast.ts\";\nimport { ADVISORY_LOCK_RESULT_COLUMN } from \"./ast.ts\";\nimport type { SqlDialect } from \"./dialect.ts\";\nimport { ParamCollector } from \"./params.ts\";\nimport type { RenderedQuery } from \"./render.ts\";\n\n// ─── Row locks ────────────────────────────────────────────────────\n\n/**\n * How each strength and wait policy READS in a refusal message. Typed as a\n * total record, so adding a member to either union fails to compile until this\n * table names it — an error message can never silently describe the wrong lock.\n */\nconst ROW_LOCK_PROSE: {\n readonly strengths: Readonly<Record<RowLockStrength, string>>;\n readonly wait: Readonly<Record<RowLockWaitPolicy, string>>;\n} = Object.freeze({\n strengths: Object.freeze({\n update: \"FOR UPDATE\",\n noKeyUpdate: \"FOR NO KEY UPDATE\",\n share: \"FOR SHARE\",\n keyShare: \"FOR KEY SHARE\",\n }),\n wait: Object.freeze({ wait: \"\", nowait: \" NOWAIT\", skipLocked: \" SKIP LOCKED\" }),\n});\n\n/** How a lock request reads in a refusal message (`FOR UPDATE SKIP LOCKED`). */\nexport function describeRowLock(params: { lock: RowLock }): string {\n const { strength, wait } = params.lock;\n return `${ROW_LOCK_PROSE.strengths[strength]}${ROW_LOCK_PROSE.wait[wait]}`;\n}\n\n/**\n * The clause for one row lock, or `null` when this dialect has NO locking-read\n * clause at all and the request is the historical `FOR UPDATE` no-op.\n *\n * sqlite is that case: it has no clause, and its write transactions are\n * mutually exclusive, so `lock: \"update\"` there is a documented no-op kept for\n * compatibility. Anything else on such a dialect — a different strength, or a\n * wait policy that changes behaviour — is refused by the caller BEFORE this\n * point (the query builder), and refused again here as a backstop.\n */\nexport function renderRowLockClause(params: { dialect: SqlDialect; lock: RowLock }): string | null {\n const { dialect, lock } = params;\n const syntax = dialect.rowLockSyntax;\n if (syntax === null) {\n if (lock.strength === \"update\" && lock.wait === \"wait\") return null;\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: `a ${describeRowLock({ lock })} locking read`,\n hint: `${dialect.name} has no locking-read clause at all`,\n });\n }\n const strengthText = syntax.strengths[lock.strength];\n if (strengthText === undefined) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: `the ${describeRowLock({ lock: { ...lock, wait: \"wait\" } })} row-lock strength`,\n hint: `${dialect.name} can express: ${Object.keys(syntax.strengths).join(\", \")}`,\n });\n }\n const waitText = syntax.wait[lock.wait];\n if (waitText === undefined) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: `the \"${lock.wait}\" lock wait policy`,\n hint: `${dialect.name} can express: ${Object.keys(syntax.wait).join(\", \")}`,\n });\n }\n // `OF <table>` sits between the strength and the wait policy on both\n // dialects that have the clause (postgres, mysql 8.0.1+).\n if (lock.of !== undefined) {\n if (lock.of.length === 0) throw internalError({ message: \"a row lock's `of` list cannot be empty\" });\n const tables = lock.of.map((name) => dialect.quoteIdent({ name })).join(\", \");\n return `${strengthText} OF ${tables}${waitText}`;\n }\n const plain = lock.wait === \"wait\" ? syntax.plain?.[lock.strength] : undefined;\n return plain ?? `${strengthText}${waitText}`;\n}\n\n// ─── Advisory locks ───────────────────────────────────────────────\n\n/** Largest/smallest value each advisory key part may carry, per PostgreSQL's types. */\nexport const ADVISORY_KEY_BOUNDS: {\n readonly single: { readonly min: bigint; readonly max: bigint };\n readonly pair: { readonly min: number; readonly max: number };\n} = Object.freeze({\n single: Object.freeze({ min: -(2n ** 63n), max: 2n ** 63n - 1n }),\n pair: Object.freeze({ min: -(2 ** 31), max: 2 ** 31 - 1 }),\n});\n\n/** Is this key the single 64-bit form? (The alternative is the two 32-bit form.) */\nfunction isSingleKey(key: AdvisoryLockKey): key is { readonly key: bigint } {\n return \"key\" in key;\n}\n\n/**\n * `SELECT pg_advisory_xact_lock($1::bigint)` and friends.\n *\n * The key binds as TEXT with an explicit cast: PostgreSQL overloads these\n * functions on `(bigint)` and `(int4, int4)`, and an OID-typed driver resolves\n * a bound parameter's type itself — the trap `jsonParamCast` already exists for.\n * Casting in the SQL makes every driver send the same bytes.\n */\nexport function renderAdvisoryLock(params: {\n dialect: SqlDialect;\n statement: AdvisoryLockStatement;\n collector: ParamCollector;\n}): RenderedQuery {\n const { dialect, statement, collector } = params;\n const functions = dialect.advisoryLockFunctions;\n if (functions === null) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"advisory locks\",\n hint:\n dialect.name === \"mysql\"\n ? \"mysql's GET_LOCK is SESSION-scoped — it survives a rollback, so it cannot be released with the transaction\"\n : `${dialect.name} has no advisory-lock functions`,\n });\n }\n const mode: AdvisoryLockMode = statement.mode;\n const fn = (mode === \"exclusive\" ? functions.exclusive : functions.shared)[statement.wait];\n const key = statement.key;\n const args = isSingleKey(key)\n ? `${collector.add(key.key.toString())}${functions.keyCast.single}`\n : `${collector.add(String(assertInt32({ value: key.classId, part: \"classId\" })))}${functions.keyCast.pair}, ` +\n `${collector.add(String(assertInt32({ value: key.objectId, part: \"objectId\" })))}${functions.keyCast.pair}`;\n // The try-lock's boolean IS the result, so it is projected under a stable\n // name; the blocking form returns void and needs no alias.\n const projection =\n statement.wait === \"nowait\"\n ? ` AS ${dialect.quoteIdent({ name: ADVISORY_LOCK_RESULT_COLUMN })}`\n : \"\";\n return {\n text: `SELECT ${fn}(${args})${projection}`,\n values: collector.values,\n returning: \"none\",\n };\n}\n\n/**\n * Take already sorted, deduplicated bigint transaction locks in their input\n * order. The volatile lock call runs after the ordinality sort. This is a\n * separate statement: a following read obtains its snapshot after lock waits.\n */\nexport function renderAdvisoryLocks(params: { readonly dialect: SqlDialect; readonly keys: readonly bigint[]; readonly mode: AdvisoryLockMode }): RenderedQuery {\n const { dialect, keys, mode } = params;\n const functions = dialect.advisoryLockFunctions;\n if (functions === null) throw unsupportedCapability({ dialect: dialect.name, feature: \"advisory locks\" });\n if (mode !== \"exclusive\" && mode !== \"shared\") throw internalError({ message: \"advisory lock mode must be exclusive or shared\" });\n if (keys.some((key) => typeof key !== \"bigint\" || key < ADVISORY_KEY_BOUNDS.single.min || key > ADVISORY_KEY_BOUNDS.single.max)) {\n throw internalError({ message: \"advisory lock keys must be signed 64-bit integers\" });\n }\n const collector = new ParamCollector(dialect);\n const binding = collector.add(JSON.stringify(keys.map((key) => key.toString())));\n const fn = (mode === \"exclusive\" ? functions.exclusive : functions.shared).wait;\n const table = dialect.quoteIdent({ name: \"__vibe_locks\" });\n const key = dialect.quoteIdent({ name: \"key\" });\n const order = dialect.quoteIdent({ name: \"ordinal\" });\n return {\n text: `SELECT ${fn}(${table}.${key}${functions.keyCast.single}) FROM jsonb_array_elements_text(${binding}::text::jsonb) WITH ORDINALITY AS ${table}(${key}, ${order}) ORDER BY ${table}.${order}`,\n values: collector.values,\n returning: \"none\",\n };\n}\n\n/** The AST is built by VibeORM code, so an out-of-range part is our bug. */\nfunction assertInt32(params: { value: number; part: string }): number {\n const { value, part } = params;\n if (\n !Number.isInteger(value) ||\n value < ADVISORY_KEY_BOUNDS.pair.min ||\n value > ADVISORY_KEY_BOUNDS.pair.max\n ) {\n throw internalError({\n message: `advisory lock ${part} must be a 32-bit integer, got ${String(value)}`,\n meta: { part, value },\n });\n }\n return value;\n}\n",
|
|
55
57
|
"import { DATE_TRUNCATION_UNITS, VibeError, internalError, unsupportedCapability } from \"@vibeorm/schema\";\nimport type { DateTruncation } from \"./ast.ts\";\nimport type { SqlDialect } from \"./dialect.ts\";\n\n// ─── Calendar truncation (groupBy date keys) ──────────────────────\n\n/**\n * The characters a time-zone name may hold: a leading letter, then letters,\n * digits, `_`, `+`, `-` and `/`, at most 64 characters in all. Every IANA name\n * (`Europe/Oslo`, `America/Argentina/Buenos_Aires`, `Etc/GMT+1`) and `UTC`\n * fit. The name renders as an SQL string literal (a bind parameter inside a\n * GROUP BY key would not match the projection's), so this guard is what keeps\n * caller text out of the SQL grammar. Whether the zone EXISTS is the server's\n * decision: PostgreSQL refuses an unknown name with SQLSTATE 22023 (`time zone\n * \"…\" not recognized`) when the statement runs. JavaScript's `Intl` list is\n * not consulted, because its aliases differ from PostgreSQL's.\n */\nconst TIME_ZONE_NAME: RegExp = /^[A-Za-z][A-Za-z0-9_+\\-/]{0,63}$/;\n\n/** Is this value a time-zone name the renderer will spell as a literal? (See {@link TIME_ZONE_NAME}.) */\nexport function isTimeZoneName(params: { readonly value: unknown }): params is { readonly value: string } {\n return typeof params.value === \"string\" && TIME_ZONE_NAME.test(params.value);\n}\n\n/**\n * The start of the period that holds `reference`'s value, in the column's own\n * SQL type, so the field's codec decodes it unchanged:\n *\n * - `timestamptz` → `date_trunc('day', \"col\", 'Europe/Oslo')` — the 3-argument\n * form (PostgreSQL 12 or later) truncates in the named zone, never in the\n * session's `TimeZone`;\n * - `timestamp` (zone-less, UTC wall-clock by contract) →\n * `(date_trunc('day', \"col\" AT TIME ZONE 'UTC', 'Europe/Oslo') AT TIME ZONE 'UTC')`.\n *\n * The unit and the zone are literals, so every site of one key (projection,\n * GROUP BY, ORDER BY) repeats the identical text and binds no parameter.\n */\nexport function renderDateTruncation(params: { readonly dialect: SqlDialect; readonly reference: string; readonly truncation: DateTruncation }): string {\n const { dialect, reference, truncation } = params;\n if (!dialect.capabilities.dateTruncation) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a truncated groupBy key ({ field, truncate, timeZone })\",\n hint: \"only PostgreSQL and PGlite truncate a timestamp in a named time zone — group by the plain field and bucket the rows in code instead\",\n });\n }\n if (!DATE_TRUNCATION_UNITS.includes(truncation.unit)) {\n throw internalError({ message: `unknown date truncation unit ${JSON.stringify(truncation.unit)}` });\n }\n if (!isTimeZoneName({ value: truncation.timeZone })) {\n throw new VibeError({\n code: \"VIBE_VALIDATION\",\n message: `time zone ${JSON.stringify(truncation.timeZone)} is not a time-zone name — use an IANA name such as \"Europe/Oslo\" or \"UTC\"`,\n meta: { timeZone: truncation.timeZone },\n });\n }\n const unit = dialect.quoteStringLiteral({ value: truncation.unit });\n const zone = dialect.quoteStringLiteral({ value: truncation.timeZone });\n switch (truncation.storage) {\n case \"timestamptz\":\n return `date_trunc(${unit}, ${reference}, ${zone})`;\n case \"timestamp\":\n return `(date_trunc(${unit}, ${reference} AT TIME ZONE 'UTC', ${zone}) AT TIME ZONE 'UTC')`;\n default:\n throw internalError({ message: `unknown date truncation storage ${JSON.stringify(truncation.storage)}` });\n }\n}\n",
|
|
56
|
-
"/**\n * Key-list membership (`SqlExpr` `keyList`, the public `where: { IN }`):\n * the postgres element type each member's array binds as.\n *\n * Postgres compares `\"col\" = $n` with the parameter typed as the column's\n * type WITHOUT its modifier (measured on postgres 18.6: `timestamptz(3) =\n * '…00.1234'` matches nothing, `numeric(10,2) = '1.234'` matches nothing,\n * `varchar(3) = 'abcd'` matches nothing). The unnest form must compare the\n * same way, so every member binds as `$n::<base type>[]`: a `timestamptz(3)[]`\n * cast would round `.1234` onto the stored `.123` and match a row `=` does not.\n * The base type also keeps the column's own operator and index: `bpchar` for\n * `char(n)` (pad-insensitive like `=`), `citext` (case-insensitive like `=`;\n * a `text[]` member would compare case-sensitively), the native enum's own\n * type, and text collations resolve to the column's collation, as for `=`.\n */\n\nimport { unsupportedCapability } from \"@vibeorm/schema\";\nimport type { ScalarType } from \"@vibeorm/schema\";\nimport type { KeyListMember } from \"./ast.ts\";\nimport type { SqlDialect } from \"./dialect.ts\";\n\n/** Canonical element type per scalar (the column type when no `@db.*` type is declared). */\nconst SCALAR_ELEMENT_TYPES: Readonly<Record<ScalarType, string | null>> = Object.freeze({\n String: \"text\",\n Boolean: \"bool\",\n Int: \"int4\",\n BigInt: \"int8\",\n Float: \"float8\",\n Decimal: \"numeric\",\n DateTime: \"timestamptz\",\n // Json has no equality operator a key can use; the runtime refuses it first.\n Json: null,\n Bytes: \"bytea\",\n});\n\n/**\n * Declared native base name (lowercase, spaces and modifier removed) → element\n * type. Every Prisma postgres `@db.*` type a key field can carry, plus the\n * catalog spellings `db pull` and hand-written schemas use.\n */\nconst NATIVE_ELEMENT_TYPES: Readonly<Record<string, string>> = Object.freeze({\n text: \"text\",\n varchar: \"varchar\",\n charactervarying: \"varchar\",\n char: \"bpchar\",\n character: \"bpchar\",\n bpchar: \"bpchar\",\n uuid: \"uuid\",\n citext: \"citext\",\n xml: \"xml\",\n inet: \"inet\",\n money: \"money\",\n // Quoted: an unquoted `bit` is the SQL-standard `bit(1)` and refuses `101`.\n bit: \"\\\"bit\\\"\",\n varbit: \"varbit\",\n bitvarying: \"varbit\",\n smallint: \"int2\",\n int2: \"int2\",\n integer: \"int4\",\n int: \"int4\",\n int4: \"int4\",\n bigint: \"int8\",\n int8: \"int8\",\n oid: \"oid\",\n real: \"float4\",\n float4: \"float4\",\n doubleprecision: \"float8\",\n double: \"float8\",\n float8: \"float8\",\n decimal: \"numeric\",\n numeric: \"numeric\",\n boolean: \"bool\",\n bool: \"bool\",\n timestamp: \"timestamp\",\n timestampwithouttimezone: \"timestamp\",\n timestamptz: \"timestamptz\",\n timestampwithtimezone: \"timestamptz\",\n date: \"date\",\n time: \"time\",\n timewithouttimezone: \"time\",\n timetz: \"timetz\",\n timewithtimezone: \"timetz\",\n bytea: \"bytea\",\n});\n\n/**\n * The postgres element type a key-list member's array binds as, or\n * `undefined` when the member has none (Json, or a native type this list does\n * not know). Never throws: a caller deciding whether a key list CAN carry a\n * member (the automatic OR rewrite) asks here; {@link postgresKeyListElementType}\n * is the throwing form the renderer uses.\n */\nexport function postgresKeyListElementTypeOf(params: { dialect: SqlDialect; member: KeyListMember }): string | undefined {\n const { dialect, member } = params;\n if (member.type === \"Enum\") {\n if (member.enumType === undefined) return \"text\";\n const name = dialect.quoteIdent({ name: member.enumType.name });\n return member.enumType.namespace === undefined ? name : `${dialect.quoteIdent({ name: member.enumType.namespace })}.${name}`;\n }\n const native = member.nativeType === undefined\n ? undefined\n : NATIVE_ELEMENT_TYPES[member.nativeType.toLowerCase().replace(/\\([^)]*\\)/g, \"\").replace(/\\s+/g, \"\")];\n const type = member.nativeType === undefined ? SCALAR_ELEMENT_TYPES[member.type] : native;\n return type === null ? undefined : type;\n}\n\n/**\n * The postgres element type a key-list member's array binds as\n * (`$n::<type>[]`), derived from the column's declared type facts.\n *\n * @throws VibeError `VIBE_UNSUPPORTED_CAPABILITY` for a member whose type has\n * no equality a key can use (Json) or a native type this list does not know.\n * @internal\n */\nexport function postgresKeyListElementType(params: { dialect: SqlDialect; member: KeyListMember }): string {\n const { dialect, member } = params;\n const type = postgresKeyListElementTypeOf({ dialect, member });\n if (type === undefined) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: `the key-list filter (IN) on a ${member.type}${member.nativeType === undefined ? \"\" : ` @db.${member.nativeType}`} member`,\n hint: \"IN binds every member as a typed array; filter this field with equality inside OR instead\",\n });\n }\n return type;\n}\n\n/**\n * Whether a key list must bind its rows as a row-value list of UNTYPED\n * parameters, `(a, b) IN (($1, $2), …)`, instead of typed arrays on the\n * `unnest` strategy: some member is a `DateTime` without a declared native\n * type. Its element type would be `timestamptz`, but such a field may sit on\n * a zone-less `timestamp(3)` column (a Prisma-created database;\n * docs/dialect-notes.md \"DateTime without time zone on postgres\"), where\n * `timestamp = timestamptz` converts the column through the session TimeZone\n * and matches other rows than `\"col\" = $n` (an untyped parameter the server\n * types from the column). The row-value list keeps that typing; PostgreSQL\n * plans it like the OR of conjunctions, so its planning grows with the list.\n * Shared by the renderer and the runtime's render-cache walk.\n */\nexport function keyListBindsUntypedRows(params: { members: readonly KeyListMember[] }): boolean {\n return params.members.some((member) => member.type === \"DateTime\" && member.nativeType === undefined);\n}\n\n// ─── Bulk insert (`InsertStatement.unnest`) ───────────────────────────\n\n/**\n * The cast after a bulk-insert column's array placeholder (`$n::<cast>[]`),\n * or `undefined` when the column has none and the insert must keep VALUES.\n * Never throws: the query builder asks here while deciding admission.\n *\n * Every type the key list knows binds its BASE type, exactly as above — the\n * INSERT's assignment then applies the column's modifier (length, precision,\n * rounding) the way it does for a VALUES parameter. Json is the one addition:\n * it binds through a text slot, `text::jsonb` (`text::json` for `@db.Json`),\n * because PostgreSQL has no assignment cast from text to jsonb and bun:sql's\n * named statements would JSON-encode pre-encoded text bound to a jsonb slot\n * (the `JsonParamCell` rule, per element).\n */\nexport function postgresBulkInsertArrayCastOf(params: { dialect: SqlDialect; member: KeyListMember }): string | undefined {\n const { dialect, member } = params;\n if (member.type === \"Json\") return member.nativeType?.trim().toLowerCase() === \"json\" ? \"text::json\" : \"text::jsonb\";\n return postgresKeyListElementTypeOf({ dialect, member });\n}\n\n/**\n * The throwing form of {@link postgresBulkInsertArrayCastOf}, for the renderer.\n *\n * @throws VibeError `VIBE_UNSUPPORTED_CAPABILITY` for a native type the\n * bulk-insert form does not know.\n * @internal\n */\nexport function postgresBulkInsertArrayCast(params: { dialect: SqlDialect; member: KeyListMember }): string {\n const { dialect, member } = params;\n const cast = postgresBulkInsertArrayCastOf({ dialect, member });\n if (cast === undefined) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: `a bulk insert binding a ${member.type}${member.nativeType === undefined ? \"\" : ` @db.${member.nativeType}`} column as a typed array`,\n hint: \"the query builder keeps VALUES for this column type\",\n });\n }\n return cast;\n}\n",
|
|
57
58
|
"import { VibeError } from \"@vibeorm/schema\";\nimport { isSqlFragment } from \"./composable.ts\";\nimport type { SqlDialect } from \"./dialect.ts\";\nimport { ParamCollector } from \"./params.ts\";\nimport { registerSqlHandleCheck } from \"./sql-handles.ts\";\nimport type { ResultReadDecoder } from \"./result-decoder.ts\";\nimport { bindSqlBindingProgram, finishSqlBindingCollection, startSqlBindingCollection } from \"./sql-bindings.ts\";\nimport type { SqlBindingProgram } from \"./sql-bindings.ts\";\nimport { isSqlInput, sqlInputScopeHandle, sqlInputScopeKeys } from \"./sql-input.ts\";\nimport type { SqlInputScope } from \"./sql-input.ts\";\n\ndeclare const queryBrand: unique symbol;\ndeclare const commandBrand: unique symbol;\n/** Authentic row-returning SQL plan, independent of a client or transaction. */\nexport type SqlQuery<Row> = { readonly [queryBrand]: Row };\n/** Authentic affected-count SQL plan; never a row-returning contract. */\nexport type SqlCommand = { readonly [commandBrand]: true };\n/** Render into the enclosing collector, preserving parameter order in compositions. */\nexport type SqlPlanRender = (params: { dialect: SqlDialect; collector: ParamCollector }) => string;\n/** Compiled row query and its captured runtime result contract. */\nexport type CompiledSqlQuery<Row> = { readonly text: string; readonly values: unknown[]; readonly decoder: ResultReadDecoder<Row> };\n\ntype QueryState = { readonly render: SqlPlanRender; readonly decoder: ResultReadDecoder<unknown> };\nconst queries = new WeakMap<object, QueryState>();\nconst commands = new WeakMap<object, SqlPlanRender>();\n\ndeclare const reusableQueryBrand: unique symbol;\ndeclare const reusableCommandBrand: unique symbol;\n/** Ownerless fixed SQL with required execution inputs and its own result decoder. */\nexport type ReusableSqlQuery<Params extends object, Row> = { readonly [reusableQueryBrand]: { readonly params: Params; readonly row: Row } };\n/** Ownerless fixed affected-count SQL with required execution inputs. */\nexport type ReusableSqlCommand<Params extends object> = { readonly [reusableCommandBrand]: Params };\n/** A fresh bound command, ready for the existing raw execution route. */\nexport type CompiledSqlCommand = { readonly text: string; readonly values: unknown[] };\ntype CompiledTemplate = { readonly text: string; readonly program: SqlBindingProgram };\ntype TemplateState = { readonly render: SqlPlanRender; readonly scope: SqlInputScope; readonly decoder?: ResultReadDecoder<unknown>; readonly cache: WeakMap<SqlDialect, CompiledTemplate> };\nconst reusableQueries = new WeakMap<object, TemplateState>();\nconst reusableCommands = new WeakMap<object, TemplateState>();\nregisterSqlHandleCheck({ check: (value) => queries.has(value) || commands.has(value) || reusableQueries.has(value) || reusableCommands.has(value) });\n\nfunction invalid(message: string): never {\n throw new VibeError({ code: \"VIBE_VALIDATION\", message });\n}\n\n/** Capture a renderer and decoder without opening any execution resource. */\nexport function createSqlQuery<Row>(params: { render: SqlPlanRender; decoder: ResultReadDecoder<Row> }): SqlQuery<Row> {\n if (typeof params.render !== \"function\" || typeof params.decoder?.decode !== \"function\") invalid(\"SQL queries require a renderer and result decoder\");\n const query = Object.freeze(Object.create(null)) as SqlQuery<Row>;\n queries.set(query, Object.freeze({ render: params.render, decoder: params.decoder }));\n return query;\n}\n\n/** Capture a command renderer without inventing a result-row contract. */\nexport function createSqlCommand(params: { render: SqlPlanRender }): SqlCommand {\n if (typeof params.render !== \"function\") invalid(\"SQL commands require a renderer\");\n const command = Object.freeze(Object.create(null)) as SqlCommand;\n commands.set(command, params.render);\n return command;\n}\n\n/** Structural copies and assertions are not executable row plans. */\nexport function isSqlQuery(value: unknown): value is SqlQuery<unknown> {\n return typeof value === \"object\" && value !== null && queries.has(value);\n}\n\n/** Structural copies and row plans are not executable commands. */\nexport function isSqlCommand(value: unknown): value is SqlCommand {\n return typeof value === \"object\" && value !== null && commands.has(value);\n}\n\n/** Authentic reusable row plans are distinct from ordinary composable plans. */\nexport function isReusableSqlQuery(value: unknown): value is ReusableSqlQuery<object, unknown> {\n return typeof value === \"object\" && value !== null && reusableQueries.has(value);\n}\n\n/** Authentic reusable commands never masquerade as row queries. */\nexport function isReusableSqlCommand(value: unknown): value is ReusableSqlCommand<object> {\n return typeof value === \"object\" && value !== null && reusableCommands.has(value);\n}\n\n/** Query-bundle provenance is checked by qb.reusable before this bridge. */\nexport function createReusableSqlQuery<P extends object, Row>(params: { query: SqlQuery<Row>; scope: SqlInputScope }): ReusableSqlQuery<P, Row> {\n const state = queries.get(params.query) ?? invalid(\"Expected an authentic SQL row query\");\n sqlInputScopeKeys({ scope: params.scope });\n const query = Object.freeze(Object.create(null)) as ReusableSqlQuery<P, Row>;\n reusableQueries.set(query, { ...state, scope: params.scope, cache: new WeakMap() });\n return query;\n}\n\n/** Wrap an admitted builder command without capturing an execution owner. */\nexport function createReusableSqlCommand<P extends object>(params: { query: SqlCommand; scope: SqlInputScope }): ReusableSqlCommand<P> {\n const render = commands.get(params.query) ?? invalid(\"Expected an authentic SQL command\");\n sqlInputScopeKeys({ scope: params.scope });\n const query = Object.freeze(Object.create(null)) as ReusableSqlCommand<P>;\n reusableCommands.set(query, { render, scope: params.scope, cache: new WeakMap() });\n return query;\n}\n\nfunction compiledTemplate(params: { dialect: SqlDialect; state: TemplateState }): CompiledTemplate {\n const cached = params.state.cache.get(params.dialect);\n if (cached !== undefined) return cached;\n const collector = new ParamCollector(params.dialect);\n startSqlBindingCollection({ collector, dialect: params.dialect, scope: params.state.scope });\n const text = params.state.render({ dialect: params.dialect, collector });\n if (collector.count() > params.dialect.paramBudget) invalid(\"SQL query exceeds this dialect's parameter budget; statements are never split implicitly\");\n const program = finishSqlBindingCollection({ collector });\n const compiled = Object.freeze({ text, program });\n params.state.cache.set(params.dialect, compiled);\n return compiled;\n}\n\n/** Core and builder handles are SQL code, never execution data, at any depth of an input bag. */\nfunction executionHandle(params: { scope: SqlInputScope; value: object }): boolean {\n const { value } = params;\n return queries.has(value) || commands.has(value) || reusableQueries.has(value) || reusableCommands.has(value)\n || isSqlFragment(value) || isSqlInput(value) || sqlInputScopeHandle(params);\n}\n\nfunction bindTemplate(params: { compiled: CompiledTemplate; state: TemplateState; inputs: unknown }): unknown[] {\n const { scope } = params.state;\n return bindSqlBindingProgram({ program: params.compiled.program, params: params.inputs, isHandle: (value) => executionHandle({ scope, value }) });\n}\n\n/** Compile structure once per dialect and synchronously snapshot/bind this invocation. */\nexport function compileReusableSqlQuery<P extends object, Row>(params: { readonly dialect: SqlDialect; readonly query: ReusableSqlQuery<P, Row>; readonly params?: unknown }): CompiledSqlQuery<Row> {\n const state = reusableQueries.get(params.query) ?? invalid(\"Expected an authentic reusable SQL row query\");\n const compiled = compiledTemplate({ dialect: params.dialect, state });\n return { text: compiled.text, values: bindTemplate({ compiled, state, inputs: params.params }), decoder: state.decoder as ResultReadDecoder<Row> };\n}\n\n/** Compile structure once per dialect and bind a fresh affected-count command. */\nexport function compileReusableSqlCommand<P extends object>(params: { readonly dialect: SqlDialect; readonly query: ReusableSqlCommand<P>; readonly params?: unknown }): CompiledSqlCommand {\n const state = reusableCommands.get(params.query) ?? invalid(\"Expected an authentic reusable SQL command\");\n const compiled = compiledTemplate({ dialect: params.dialect, state });\n return { text: compiled.text, values: bindTemplate({ compiled, state, inputs: params.params }) };\n}\n\n/** Compile a row plan once the execution dialect is known. */\nexport function compileSqlQuery<Row>(params: { dialect: SqlDialect; query: SqlQuery<Row> }): CompiledSqlQuery<Row> {\n const state = queries.get(params.query) ?? invalid(\"Expected an authentic SQL row query\");\n const collector = new ParamCollector(params.dialect);\n const text = state.render({ dialect: params.dialect, collector });\n if (collector.values.length > params.dialect.paramBudget) invalid(\"SQL query exceeds this dialect's parameter budget; statements are never split implicitly\");\n return { text, values: collector.values, decoder: state.decoder as ResultReadDecoder<Row> };\n}\n\n/** Compile an affected-count plan; row terminals are refused. */\nexport function compileSqlCommand(params: { dialect: SqlDialect; query: SqlCommand }): { text: string; values: unknown[] } {\n const render = commands.get(params.query) ?? invalid(\"Expected an authentic SQL command\");\n const collector = new ParamCollector(params.dialect);\n const text = render({ dialect: params.dialect, collector });\n if (collector.values.length > params.dialect.paramBudget) invalid(\"SQL command exceeds this dialect's parameter budget; statements are never split implicitly\");\n return { text, values: collector.values };\n}\n",
|
|
58
59
|
"import { VibeError, fieldTypeIdentity, isEnumType, unsupportedCapability } from \"@vibeorm/schema\";\nimport type { ExclusionEndpoint, ExclusionIR, ExclusionSpec, FieldIR, ModelIR } from \"@vibeorm/schema\";\nimport type { SqlDialect } from \"./dialect.ts\";\nimport { renderPredicate } from \"./predicate.ts\";\n\nfunction invalid(rule: string): never {\n throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: `Invalid exclusion constraint: ${rule}`, meta: { rule: `exclusion-${rule}` } });\n}\n\n/** Compile immutable range construction and equality operands using physical column names. */\nexport function compileExclusion(params: { exclusion: ExclusionSpec; model: Pick<ModelIR, \"name\" | \"fields\">; dialect: SqlDialect }): ExclusionIR {\n const { exclusion: spec, model, dialect } = params;\n if (!dialect.capabilities.exclusionConstraints) throw unsupportedCapability({ dialect: dialect.name, feature: \"exclusionConstraints\" });\n if (!spec.name || spec.name.includes(\"\\0\")) invalid(\"name\");\n if (![\"int8range\", \"tsrange\", \"tstzrange\"].includes(spec.range.type)) invalid(\"range-type\");\n if (![\"[)\", \"[]\", \"()\", \"(]\"].includes(spec.range.bounds)) invalid(\"bounds\");\n const field = (name: string): FieldIR => {\n const value = model.fields.find((entry) => entry.name === name);\n if (value === undefined || value.isList || value.isUnsupported) invalid(\"field\");\n return value;\n };\n const endpoint = (value: ExclusionEndpoint): string => {\n if (\"unbounded\" in value) return \"NULL\";\n const infinity = \"infinity\" in value ? value.infinity : value.nullAs;\n if (infinity !== undefined && (spec.range.type === \"int8range\" || ![\"infinity\", \"-infinity\"].includes(infinity))) invalid(\"infinity\");\n const literal = infinity === undefined ? undefined : `${dialect.quoteStringLiteral({ value: infinity })}::${spec.range.type === \"tsrange\" ? \"timestamp\" : \"timestamptz\"}`;\n if (\"infinity\" in value) return literal!;\n const column = field(value.field);\n if (fieldTypeIdentity({ type: column.type }) !== (spec.range.type === \"int8range\" ? \"BigInt\" : \"DateTime\")) invalid(\"range-field-type\");\n if (column.type === \"DateTime\") {\n const timezone = /timestamptz|timestamp.*with time zone/i.test(column.nativeType ?? \"timestamptz\");\n if (timezone !== (spec.range.type === \"tstzrange\")) invalid(\"range-timezone\");\n }\n const sql = dialect.quoteIdent({ name: column.dbName ?? column.name });\n return literal === undefined ? sql : `COALESCE(${sql}, ${literal})`;\n };\n const keys = spec.keys.map((key) => {\n if (\"expression\" in key) {\n if (!key.expression.trim() || key.expression.includes(\"\\0\") || key.fields.length === 0) invalid(\"expression\");\n key.fields.forEach(field);\n return `(${key.expression}) WITH =`;\n }\n const column = field(key.field);\n if (column.isOptional) invalid(\"nullable-key-requires-expression\");\n if (!isEnumType(column.type) && ![\"String\", \"Int\", \"BigInt\", \"Float\", \"Decimal\", \"Boolean\", \"DateTime\"].includes(fieldTypeIdentity({ type: column.type }))) invalid(\"key-type\");\n return `${dialect.quoteIdent({ name: column.dbName ?? column.name })} WITH =`;\n });\n keys.push(`${spec.range.type}(${endpoint(spec.range.lower)}, ${endpoint(spec.range.upper)}, ${dialect.quoteStringLiteral({ value: spec.range.bounds })}) WITH &&`);\n const where = spec.where === undefined ? \"\" : ` WHERE (${renderPredicate({ predicate: spec.where, model, dialect, usage: \"exclusionPredicate\", site: spec.name })})`;\n return { name: spec.name, definition: `EXCLUDE USING gist (${keys.join(\", \")})${where}`, source: spec, requiredExtensions: spec.keys.length === 0 ? [] : dialect.capabilities.exclusionExtensions };\n}\n\n/** Exclusion DDL is a constraint operation, never an index operation. */\nexport function renderExclusionSetup(params: { dialect: SqlDialect; exclusion: ExclusionIR }): string[] {\n if (!params.dialect.capabilities.exclusionConstraints) throw unsupportedCapability({ dialect: params.dialect.name, feature: \"exclusionConstraints\" });\n return params.exclusion.requiredExtensions.map((name) => `CREATE EXTENSION IF NOT EXISTS ${params.dialect.quoteIdent({ name })};`);\n}\n\nexport function renderExclusionDdl(params: { dialect: SqlDialect; table: string; exclusion: ExclusionIR; operation: \"add\" | \"drop\" }): string[] {\n const { dialect, table, exclusion, operation } = params;\n if (!dialect.capabilities.exclusionConstraints) throw unsupportedCapability({ dialect: dialect.name, feature: \"exclusionConstraints\" });\n const target = `ALTER TABLE ${dialect.quoteIdent({ name: table })}`;\n if (operation === \"drop\") return [`${target} DROP CONSTRAINT ${dialect.quoteIdent({ name: exclusion.name })};`];\n return [...renderExclusionSetup({ dialect, exclusion }), `${target} ADD CONSTRAINT ${dialect.quoteIdent({ name: exclusion.name })} ${exclusion.definition};`];\n}\n\n/** Read catalog exclusion definitions, including index health; optional private probe table. */\nexport function renderExclusionCatalog(params: { dialect: SqlDialect; probe?: string; namespace?: string }): string {\n const { dialect, probe } = params;\n if (!dialect.capabilities.exclusionConstraints) throw unsupportedCapability({ dialect: dialect.name, feature: \"exclusionConstraints\" });\n const scope = probe === undefined ? `n.nspname = ${dialect.quoteStringLiteral({ value: params.namespace ?? \"public\" })}` : `t.oid = ${dialect.quoteStringLiteral({ value: probe })}::regclass`;\n return `SELECT t.relname AS table_name, c.conname AS constraint_name, pg_catalog.pg_get_constraintdef(c.oid, true) AS definition, c.convalidated AS validated, i.indisvalid AS valid, i.indisready AS ready FROM pg_catalog.pg_constraint c JOIN pg_catalog.pg_class t ON t.oid = c.conrelid JOIN pg_catalog.pg_namespace n ON n.oid = t.relnamespace JOIN pg_catalog.pg_index i ON i.indexrelid = c.conindid WHERE c.contype = 'x' AND ${scope} ORDER BY t.relname, c.conname`;\n}\n\n/** Empty private clone for server normalization; no existing row is scanned or changed. */\nexport function renderExclusionProbe(params: { dialect: SqlDialect; table: string; namespace?: string; probe: string; definition: string }): string[] {\n const { dialect, table, probe, definition } = params;\n if (!dialect.capabilities.exclusionConstraints) throw unsupportedCapability({ dialect: dialect.name, feature: \"exclusionConstraints\" });\n return [`CREATE TEMP TABLE ${dialect.quoteIdent({ name: probe })} (LIKE ${dialect.quoteIdent({ name: params.namespace ?? \"public\" })}.${dialect.quoteIdent({ name: table })})`, `ALTER TABLE ${dialect.quoteIdent({ name: probe })} ADD CONSTRAINT ${dialect.quoteIdent({ name: `${probe}_x` })} ${definition}`];\n}\n",
|
|
59
|
-
"/**\n * PostgreSQL dialect. Also serves PGlite — the differences are adapter-level\n * (single connection, bundled extension set), not SQL-text-level.\n */\n\nimport type { SqlDialect } from \"../dialect.ts\";\nimport { POSTGRES_CAPABILITIES } from \"../capabilities.ts\";\nimport { assertNoNul } from \"../identifiers.ts\";\n\nexport const postgresDialect: SqlDialect = {\n name: \"postgres\",\n capabilities: POSTGRES_CAPABILITIES,\n\n inArrayStrategy: \"any\",\n tupleInStrategy: \"rowValue\",\n keyListStrategy: \"unnest\",\n keysetSeekStrategy: \"rowValue\",\n keyPageStrategy: \"lateral\",\n lateralJson: { rowArray: \"json_build_array\", arrayAgg: \"json_agg\", emptyArray: \"'[]'::json\", order: \"inAggregate\", timeOfDayAsText: false, requiresUtcDateTimeWire: false },\n relationStrategyDefault: \"join\",\n relationFilterStrategy: \"eqSelect\",\n // Fix lane Q2 (DB-02/DB-07): the key page gains only as an index-only scan;\n // a btree stores NULLs last on ASC, so `desc nulls last` / `asc nulls first` sort the table.\n deferredJoinPage: { minSkip: 1000, requiresCoveringIndex: true },\n nativeNullsOrder: \"high\",\n nullsUnionPage: true,\n timeOfDayInStrategy: \"in\",\n upsertForm: \"onConflict\",\n // Measured on postgres 16.14 (notes-B.md): a batch proposing one conflict key\n // twice raises SQLSTATE 21000 (\"ON CONFLICT DO UPDATE command cannot affect\n // row a second time\") — including when the two keys are only equal under a\n // nondeterministic ICU collation, a char(n) trailing-space pad, `numeric`\n // scale or `uuid` case. The engine compares every proposed pair itself.\n // Text is byte-comparable by default because every collation postgres\n // creates is deterministic unless it was explicitly built with\n // `deterministic = false`: 'e' and 'E' stayed two rows on a default-collation\n // column. `numeric` is the exception the ORM cannot see from the encoded\n // value: '1.0' and '1.00' are one row.\n conflictKeyEquality: {\n foldingScalars: [\"Decimal\"],\n textIsBinaryByDefault: true,\n duplicatesInOneStatement: \"reject\",\n },\n excludedRowRef: { form: \"keyword\", name: \"excluded\" },\n doNothingForm: \"onConflictDoNothing\",\n insensitiveLike: \"ilike\",\n // Postgres `=`/`LIKE` are already byte-sensitive — strict mode is a no-op.\n strictMatchStrategy: \"native\",\n greatestForm: \"native\",\n orderByNullsMode: \"native\",\n offsetRequiresLimit: null,\n likeEscapeClause: null,\n jsonPathMode: \"operators\",\n supportedJsonOps: [\n \"equals\",\n \"exists\",\n \"string_contains\",\n \"string_starts_with\",\n \"string_ends_with\",\n \"array_contains\",\n \"array_starts_with\",\n \"array_ends_with\",\n ],\n // Json params bind as TEXT and the server parses (`$n::text::jsonb`):\n // OID-typed drivers (bun:sql) would re-serialize a bare jsonb-slot param\n // and double-encode the document (JsonParamCell, ast.ts).\n jsonParamCast: \"::text::jsonb\",\n valueCastTypes: Object.freeze({ String: \"TEXT\", Boolean: \"BOOLEAN\", Int: \"INTEGER\", BigInt: \"BIGINT\", Float: \"DOUBLE PRECISION\", Decimal: \"NUMERIC\", DateTime: \"TIMESTAMPTZ\", Json: \"JSONB\", Bytes: \"BYTEA\" }),\n lastInsertIdSql: null,\n // All four strengths and all three wait policies parse and behave on\n // PostgreSQL 18.6 and on PGlite 0.5.4 (PostgreSQL 18.3) — probed, not assumed.\n rowLockSyntax: {\n strengths: Object.freeze({\n update: \"FOR UPDATE\",\n noKeyUpdate: \"FOR NO KEY UPDATE\",\n share: \"FOR SHARE\",\n keyShare: \"FOR KEY SHARE\",\n }),\n wait: Object.freeze({ wait: \"\", nowait: \" NOWAIT\", skipLocked: \" SKIP LOCKED\" }),\n },\n // Transaction-scoped only. The session-scoped family (pg_advisory_lock) is\n // deliberately absent: on a pooled connection its lock outlives the caller.\n advisoryLockFunctions: {\n exclusive: Object.freeze({\n wait: \"pg_catalog.pg_advisory_xact_lock\",\n nowait: \"pg_catalog.pg_try_advisory_xact_lock\",\n }),\n shared: Object.freeze({\n wait: \"pg_catalog.pg_advisory_xact_lock_shared\",\n nowait: \"pg_catalog.pg_try_advisory_xact_lock_shared\",\n }),\n keyCast: Object.freeze({ single: \"::bigint\", pair: \"::int4\" }),\n },\n rowDefaultKeyword: true,\n bulkInsertForm: \"unnest\",\n emptyInsert: { form: \"defaultValues\", conflictClause: true },\n // Data-modifying CTEs (`WITH s AS (UPDATE … RETURNING …) SELECT …`) — one\n // snapshot, one atomic statement; PGlite runs the same engine.\n statementChain: \"dataModifyingCte\",\n paramBudget: 30000,\n\n // A real `boolean` type — `true`/`false` are the literals it stores.\n booleanLiteral: { true: \"true\", false: \"false\" },\n\n quoteIdent({ name }) {\n return `\"${assertNoNul({ name }).replaceAll('\"', '\"\"')}\"`;\n },\n // `standard_conforming_strings` has been on by default since postgres 9.1,\n // so a backslash is an ordinary character and only the quote is doubled.\n quoteStringLiteral({ value }) {\n return `'${value.replaceAll(\"'\", \"''\")}'`;\n },\n renderEnumOrdinal({ column }) {\n return column;\n },\n renderEnumMinMax({ fn, column }) {\n return `${fn === \"min\" ? \"MIN\" : \"MAX\"}(${column})`;\n },\n placeholder({ index }) {\n return `$${index}`;\n },\n jsonTextProjection({ expression }): string {\n return `${expression}::text`;\n },\n renderDbNow({ offsetSeconds, collector }) {\n if (offsetSeconds === 0) return \"now()\";\n return `(now() + make_interval(secs => ${collector.add(offsetSeconds)}))`;\n },\n renderRowsDiffer({ left, right }) {\n const row = (items: readonly string[]): string => (items.length === 1 ? (items[0] as string) : `(${items.join(\", \")})`);\n return `${row(left)} IS DISTINCT FROM ${row(right)}`;\n },\n};\n",
|
|
60
|
-
"/**\n * MySQL dialect (mysql2 adapter lands in P4).\n *\n * Notes pinned by catalog cases:\n * - No RETURNING → renderer omits it and flags `returning: \"omitted\"`; the\n * runtime re-selects by PK (app-generated ids) or insertId.\n * - Upserts use ON DUPLICATE KEY UPDATE (no conflict-target refinement).\n * - OFFSET requires LIMIT → the documented huge-limit idiom.\n * - No NULLS FIRST/LAST → `col IS NULL` emulation terms.\n * - No `ON CONFLICT ... DO NOTHING` → `ON DUPLICATE KEY UPDATE k = t.k` (a\n * no-op self-assignment on ANY duplicate key). Never `INSERT IGNORE`, which\n * also downgrades NOT NULL, range and foreign-key errors to warnings.\n */\n\nimport type { SqlDialect } from \"../dialect.ts\";\nimport { MYSQL_CAPABILITIES } from \"../capabilities.ts\";\nimport { assertNoNul } from \"../identifiers.ts\";\n\nexport const mysqlDialect: SqlDialect = {\n name: \"mysql\",\n capabilities: MYSQL_CAPABILITIES,\n\n inArrayStrategy: \"expand\",\n tupleInStrategy: \"rowValue\",\n keyListStrategy: \"rowValue\",\n // D-01: the OR is already index ranges here; a row-value inequality scans.\n keysetSeekStrategy: \"or\",\n // Fix lane Q1 (DB-01/DB-03): a lateral page still read every child; EXISTS is a semi-join.\n keyPageStrategy: \"window\",\n // Lane J (wave 3): MySQL 8.0.14+ LATERAL + JSON_ARRAYAGG. JSON_ARRAYAGG has\n // no ORDER BY, so ordered levels carry a ROW_NUMBER() position slot.\n lateralJson: { rowArray: \"JSON_ARRAY\", arrayAgg: \"JSON_ARRAYAGG\", emptyArray: \"JSON_ARRAY()\", order: \"positionSlot\", timeOfDayAsText: true, requiresUtcDateTimeWire: true },\n relationStrategyDefault: \"join\",\n relationFilterStrategy: \"exists\",\n // Fix lane Q2 (DB-02/DB-07): deep OFFSET flips to a table scan from skip ≈ 5 000;\n // the `IS NULL` pre-term of a non-native placement is an expression no index serves.\n deferredJoinPage: { minSkip: 1000, requiresCoveringIndex: false },\n nativeNullsOrder: \"low\",\n nullsUnionPage: true,\n // 8.4.11: `time3_col IN (?, ?)` matches nothing; `=` per value works (26.7 both).\n timeOfDayInStrategy: \"equalities\",\n upsertForm: \"onDuplicateKey\",\n // Measured on mysql 8.4.11, server collation utf8mb4_0900_ai_ci (notes-B.md):\n // a batch proposing 'e' and 'E' stores ONE row and keeps the last one, with\n // no error. The same fold hits accents; `utf8mb4_general_ci` folds a trailing\n // space too (PAD SPACE), and a `DECIMAL(65,30)` key folds '1.0' into '1.00'.\n // A column declaring a `_bin` collation is byte-comparable again: 'e' and 'E'\n // stayed two rows there.\n conflictKeyEquality: {\n foldingScalars: [\"Decimal\"],\n defaultStringMaxLength: 191,\n textIsBinaryByDefault: false,\n // A declared `@collation` can make it byte-comparable again, but only a\n // measured NO PAD one: `SELECT COLLATION_NAME, PAD_ATTRIBUTE FROM\n // information_schema.COLLATIONS` reports 'NO PAD' for exactly `binary` and\n // `utf8mb4_0900_bin`, and 'PAD SPACE' for `utf8mb4_bin` and the 39 other\n // legacy `_bin` collations. Under PAD SPACE the ORM's own upsert statement\n // stored ONE row for a batch proposing 'x' and 'x '. The list the runtime\n // checks against lives in packages/runtime/src/bulk-upsert.ts.\n duplicatesInOneStatement: \"lastWriteWins\",\n },\n // 8.0.19+ row alias. The older `VALUES(col)` function answers with\n // deprecation warning 1287 on this project's 8.4.11 container.\n excludedRowRef: { form: \"rowAlias\", alias: \"new\" },\n doNothingForm: \"duplicateKeyKeep\",\n insensitiveLike: \"lower\",\n // `_ci` collations fold `=` and `LIKE` — strict mode casts the OPERAND to\n // BINARY (byte-wise comparison; CAST form, the unary BINARY operator is\n // deprecated since 8.0.27). Operand-side: no assumption about the column's\n // charset, and the cost (index defeat) is documented in dialect-notes.md.\n strictMatchStrategy: \"binary\",\n // Correlated derived tables need MySQL 8.0.14+ (outer references); 8.4\n // needs each operand in its own scalar subquery (dialect.ts).\n greatestForm: \"wrapped-frame\",\n orderByNullsMode: \"emulate\",\n offsetRequiresLimit: { limitText: \"18446744073709551615\" },\n likeEscapeClause: null,\n // JSON_EXTRACT/JSON_UNQUOTE for scalars and strings; JSON_CONTAINS for\n // array containment; `$[0]` / `$[last]` path elements for the edge ops.\n jsonPathMode: \"mysqlExtract\",\n supportedJsonOps: [\n \"equals\",\n \"exists\",\n \"string_contains\",\n \"string_starts_with\",\n \"string_ends_with\",\n \"array_contains\",\n \"array_starts_with\",\n \"array_ends_with\",\n ],\n // Json transport is already plain text here — no param cast needed.\n jsonParamCast: \"\",\n valueCastTypes: Object.freeze({ String: \"CHAR\", Boolean: \"UNSIGNED\", Int: \"SIGNED\", BigInt: \"SIGNED\", Float: \"DOUBLE\", Decimal: \"DECIMAL(65, 30)\", DateTime: \"DATETIME(3)\", Json: \"JSON\", Bytes: \"BINARY\" }),\n lastInsertIdSql: \"SELECT LAST_INSERT_ID() AS `id`\",\n // Probed on mysql 26.7.0: FOR UPDATE / FOR SHARE, each with NOWAIT or SKIP\n // LOCKED. `FOR NO KEY UPDATE` and `FOR KEY SHARE` are PostgreSQL-only and\n // fail to parse here (errno 1064), so they are absent rather than aliased\n // onto a stronger lock. A plain shared lock is `LOCK IN SHARE MODE`: the\n // same lock, and the one spelling MariaDB (MDEV-17514) and MySQL before\n // 8.0.1 parse; 26.7.0 takes it without a warning. `FOR SHARE` stays for\n // `OF` and wait policies, which only `FOR SHARE` carries on MySQL.\n rowLockSyntax: {\n strengths: Object.freeze({ update: \"FOR UPDATE\", share: \"FOR SHARE\" }),\n wait: Object.freeze({ wait: \"\", nowait: \" NOWAIT\", skipLocked: \" SKIP LOCKED\" }),\n plain: Object.freeze({ share: \"LOCK IN SHARE MODE\" }),\n },\n // `GET_LOCK` is SESSION-scoped: the probe held one, rolled the transaction\n // back, and the lock was still held. It cannot deliver a transaction-scoped\n // advisory lock, so mysql declares none.\n advisoryLockFunctions: null,\n rowDefaultKeyword: true,\n bulkInsertForm: \"values\",\n emptyInsert: { form: \"emptyRow\" },\n // MySQL CTEs are read-only — no data-modifying steps.\n statementChain: null,\n paramBudget: 10000,\n\n // Booleans store as TINYINT(1); 1/0 is what a comparison against stored rows\n // actually meets, and `TRUE`/`FALSE` are only aliases for them.\n booleanLiteral: { true: \"1\", false: \"0\" },\n\n quoteIdent({ name }) {\n return `\\`${assertNoNul({ name }).replaceAll(\"`\", \"``\")}\\``;\n },\n // Mysql treats BOTH the doubled quote and the backslash as escapes unless the\n // server runs `NO_BACKSLASH_ESCAPES`, which VibeORM never assumes. Verified on\n // mysql 8.4.11: inserting the literal `'a\\\\b'` stores bytes `61 5C 62`, so a\n // single authored backslash MUST be doubled or it eats the next character.\n quoteStringLiteral({ value }) {\n return `'${value.replaceAll(\"\\\\\", \"\\\\\\\\\").replaceAll(\"'\", \"''\")}'`;\n },\n renderEnumOrdinal({ column }) {\n return `${column} + 0`;\n },\n renderEnumMinMax({ fn, column, result, when }) {\n const aggregate = fn === \"min\" ? \"MIN\" : \"MAX\";\n const only = (value: string): string => when === undefined ? value : `CASE WHEN ${when} THEN ${value} END`;\n if (result === \"ordinal\") return `${aggregate}(${only(`${column} + 0`)})`;\n // Five digits cover all 65,535 member indexes. Keep the database's own label\n // after the sortable prefix, without schema labels or SQL-mode-dependent escapes.\n return `SUBSTRING(${aggregate}(${only(`CONCAT(LPAD(${column} + 0, 5, '0'), ${column})`)}), 6)`;\n },\n placeholder() {\n return \"?\";\n },\n jsonTextProjection({ expression }): string {\n return `CAST(${expression} AS CHAR)`;\n },\n renderDbNow({ offsetSeconds, collector }) {\n // NOW(6): microsecond precision — assignment to a lower-precision column\n // truncates, matching the driver's own Date serialization precision.\n if (offsetSeconds === 0) return \"NOW(6)\";\n return `DATE_ADD(NOW(6), INTERVAL ${collector.add(offsetSeconds)} SECOND)`;\n },\n renderRowsDiffer({ left, right }) {\n const row = (items: readonly string[]): string => (items.length === 1 ? (items[0] as string) : `(${items.join(\", \")})`);\n return `NOT (${row(left)} <=> ${row(right)})`;\n },\n};\n",
|
|
60
|
+
"/**\n * PostgreSQL dialect. Also serves PGlite — the differences are adapter-level\n * (single connection, bundled extension set), not SQL-text-level.\n */\n\nimport type { SqlDialect } from \"../dialect.ts\";\nimport { POSTGRES_CAPABILITIES } from \"../capabilities.ts\";\nimport { assertNoNul } from \"../identifiers.ts\";\n\nexport const postgresDialect: SqlDialect = {\n name: \"postgres\",\n capabilities: POSTGRES_CAPABILITIES,\n\n inArrayStrategy: \"any\",\n tupleInStrategy: \"rowValue\",\n keyListStrategy: \"unnest\",\n keysetSeekStrategy: \"rowValue\",\n keyPageStrategy: \"lateral\",\n lateralJson: { rowArray: \"json_build_array\", arrayAgg: \"json_agg\", emptyArray: \"'[]'::json\", order: \"inAggregate\", timeOfDayAsText: false, requiresUtcDateTimeWire: false, keysFromJson: \"elements\", pinnedCommonTable: \"keyword\", carriedLists: \"firstRow\", silentSizeLimit: null },\n relationStrategyDefault: \"join\",\n relationFilterStrategy: \"eqSelect\",\n // Fix lane Q2 (DB-02/DB-07): the key page gains only as an index-only scan;\n // a btree stores NULLs last on ASC, so `desc nulls last` / `asc nulls first` sort the table.\n deferredJoinPage: { minSkip: 1000, requiresCoveringIndex: true },\n nativeNullsOrder: \"high\",\n nullsUnionPage: true,\n timeOfDayInStrategy: \"in\",\n upsertForm: \"onConflict\",\n // Measured on postgres 16.14 (notes-B.md): a batch proposing one conflict key\n // twice raises SQLSTATE 21000 (\"ON CONFLICT DO UPDATE command cannot affect\n // row a second time\") — including when the two keys are only equal under a\n // nondeterministic ICU collation, a char(n) trailing-space pad, `numeric`\n // scale or `uuid` case. The engine compares every proposed pair itself.\n // Text is byte-comparable by default because every collation postgres\n // creates is deterministic unless it was explicitly built with\n // `deterministic = false`: 'e' and 'E' stayed two rows on a default-collation\n // column. `numeric` is the exception the ORM cannot see from the encoded\n // value: '1.0' and '1.00' are one row.\n conflictKeyEquality: {\n foldingScalars: [\"Decimal\"],\n textIsBinaryByDefault: true,\n duplicatesInOneStatement: \"reject\",\n },\n excludedRowRef: { form: \"keyword\", name: \"excluded\" },\n doNothingForm: \"onConflictDoNothing\",\n insensitiveLike: \"ilike\",\n // Postgres `=`/`LIKE` are already byte-sensitive — strict mode is a no-op.\n strictMatchStrategy: \"native\",\n greatestForm: \"native\",\n orderByNullsMode: \"native\",\n offsetRequiresLimit: null,\n likeEscapeClause: null,\n jsonPathMode: \"operators\",\n supportedJsonOps: [\n \"equals\",\n \"exists\",\n \"string_contains\",\n \"string_starts_with\",\n \"string_ends_with\",\n \"array_contains\",\n \"array_starts_with\",\n \"array_ends_with\",\n ],\n // Json params bind as TEXT and the server parses (`$n::text::jsonb`):\n // OID-typed drivers (bun:sql) would re-serialize a bare jsonb-slot param\n // and double-encode the document (JsonParamCell, ast.ts).\n jsonParamCast: \"::text::jsonb\",\n valueCastTypes: Object.freeze({ String: \"TEXT\", Boolean: \"BOOLEAN\", Int: \"INTEGER\", BigInt: \"BIGINT\", Float: \"DOUBLE PRECISION\", Decimal: \"NUMERIC\", DateTime: \"TIMESTAMPTZ\", Json: \"JSONB\", Bytes: \"BYTEA\" }),\n lastInsertIdSql: null,\n // All four strengths and all three wait policies parse and behave on\n // PostgreSQL 18.6 and on PGlite 0.5.4 (PostgreSQL 18.3) — probed, not assumed.\n rowLockSyntax: {\n strengths: Object.freeze({\n update: \"FOR UPDATE\",\n noKeyUpdate: \"FOR NO KEY UPDATE\",\n share: \"FOR SHARE\",\n keyShare: \"FOR KEY SHARE\",\n }),\n wait: Object.freeze({ wait: \"\", nowait: \" NOWAIT\", skipLocked: \" SKIP LOCKED\" }),\n },\n // Transaction-scoped only. The session-scoped family (pg_advisory_lock) is\n // deliberately absent: on a pooled connection its lock outlives the caller.\n advisoryLockFunctions: {\n exclusive: Object.freeze({\n wait: \"pg_catalog.pg_advisory_xact_lock\",\n nowait: \"pg_catalog.pg_try_advisory_xact_lock\",\n }),\n shared: Object.freeze({\n wait: \"pg_catalog.pg_advisory_xact_lock_shared\",\n nowait: \"pg_catalog.pg_try_advisory_xact_lock_shared\",\n }),\n keyCast: Object.freeze({ single: \"::bigint\", pair: \"::int4\" }),\n },\n rowDefaultKeyword: true,\n bulkInsertForm: \"unnest\",\n emptyInsert: { form: \"defaultValues\", conflictClause: true },\n // Data-modifying CTEs (`WITH s AS (UPDATE … RETURNING …) SELECT …`) — one\n // snapshot, one atomic statement; PGlite runs the same engine.\n statementChain: \"dataModifyingCte\",\n paramBudget: 30000,\n\n // A real `boolean` type — `true`/`false` are the literals it stores.\n booleanLiteral: { true: \"true\", false: \"false\" },\n\n quoteIdent({ name }) {\n return `\"${assertNoNul({ name }).replaceAll('\"', '\"\"')}\"`;\n },\n // `standard_conforming_strings` has been on by default since postgres 9.1,\n // so a backslash is an ordinary character and only the quote is doubled.\n quoteStringLiteral({ value }) {\n return `'${value.replaceAll(\"'\", \"''\")}'`;\n },\n renderEnumOrdinal({ column }) {\n return column;\n },\n renderEnumMinMax({ fn, column }) {\n return `${fn === \"min\" ? \"MIN\" : \"MAX\"}(${column})`;\n },\n placeholder({ index }) {\n return `$${index}`;\n },\n jsonTextProjection({ expression }): string {\n return `${expression}::text`;\n },\n renderDbNow({ offsetSeconds, collector }) {\n if (offsetSeconds === 0) return \"now()\";\n return `(now() + make_interval(secs => ${collector.add(offsetSeconds)}))`;\n },\n renderRowsDiffer({ left, right }) {\n const row = (items: readonly string[]): string => (items.length === 1 ? (items[0] as string) : `(${items.join(\", \")})`);\n return `${row(left)} IS DISTINCT FROM ${row(right)}`;\n },\n};\n",
|
|
61
|
+
"/**\n * MySQL dialect (mysql2 adapter lands in P4).\n *\n * Notes pinned by catalog cases:\n * - No RETURNING → renderer omits it and flags `returning: \"omitted\"`; the\n * runtime re-selects by PK (app-generated ids) or insertId.\n * - Upserts use ON DUPLICATE KEY UPDATE (no conflict-target refinement).\n * - OFFSET requires LIMIT → the documented huge-limit idiom.\n * - No NULLS FIRST/LAST → `col IS NULL` emulation terms.\n * - No `ON CONFLICT ... DO NOTHING` → `ON DUPLICATE KEY UPDATE k = t.k` (a\n * no-op self-assignment on ANY duplicate key). Never `INSERT IGNORE`, which\n * also downgrades NOT NULL, range and foreign-key errors to warnings.\n */\n\nimport type { SqlDialect } from \"../dialect.ts\";\nimport { MYSQL_CAPABILITIES } from \"../capabilities.ts\";\nimport { assertNoNul } from \"../identifiers.ts\";\n\nexport const mysqlDialect: SqlDialect = {\n name: \"mysql\",\n capabilities: MYSQL_CAPABILITIES,\n\n inArrayStrategy: \"expand\",\n tupleInStrategy: \"rowValue\",\n keyListStrategy: \"rowValue\",\n // D-01: the OR is already index ranges here; a row-value inequality scans.\n keysetSeekStrategy: \"or\",\n // Fix lane Q1 (DB-01/DB-03): a lateral page still read every child; EXISTS is a semi-join.\n keyPageStrategy: \"window\",\n // Lane J (wave 3): MySQL 8.0.14+ LATERAL + JSON_ARRAYAGG. JSON_ARRAYAGG has\n // no ORDER BY, so ordered levels carry a ROW_NUMBER() position slot.\n lateralJson: { rowArray: \"JSON_ARRAY\", arrayAgg: \"JSON_ARRAYAGG\", emptyArray: \"JSON_ARRAY()\", order: \"positionSlot\", timeOfDayAsText: true, requiresUtcDateTimeWire: true, keysFromJson: \"jsonTable\", pinnedCommonTable: \"limit\", carriedLists: \"carrierRow\", silentSizeLimit: \"max_allowed_packet\" },\n relationStrategyDefault: \"join\",\n relationFilterStrategy: \"exists\",\n // Fix lane Q2 (DB-02/DB-07): deep OFFSET flips to a table scan from skip ≈ 5 000;\n // the `IS NULL` pre-term of a non-native placement is an expression no index serves.\n deferredJoinPage: { minSkip: 1000, requiresCoveringIndex: false },\n nativeNullsOrder: \"low\",\n nullsUnionPage: true,\n // 8.4.11: `time3_col IN (?, ?)` matches nothing; `=` per value works (26.7 both).\n timeOfDayInStrategy: \"equalities\",\n upsertForm: \"onDuplicateKey\",\n // Measured on mysql 8.4.11, server collation utf8mb4_0900_ai_ci (notes-B.md):\n // a batch proposing 'e' and 'E' stores ONE row and keeps the last one, with\n // no error. The same fold hits accents; `utf8mb4_general_ci` folds a trailing\n // space too (PAD SPACE), and a `DECIMAL(65,30)` key folds '1.0' into '1.00'.\n // A column declaring a `_bin` collation is byte-comparable again: 'e' and 'E'\n // stayed two rows there.\n conflictKeyEquality: {\n foldingScalars: [\"Decimal\"],\n defaultStringMaxLength: 191,\n textIsBinaryByDefault: false,\n // A declared `@collation` can make it byte-comparable again, but only a\n // measured NO PAD one: `SELECT COLLATION_NAME, PAD_ATTRIBUTE FROM\n // information_schema.COLLATIONS` reports 'NO PAD' for exactly `binary` and\n // `utf8mb4_0900_bin`, and 'PAD SPACE' for `utf8mb4_bin` and the 39 other\n // legacy `_bin` collations. Under PAD SPACE the ORM's own upsert statement\n // stored ONE row for a batch proposing 'x' and 'x '. The list the runtime\n // checks against lives in packages/runtime/src/bulk-upsert.ts.\n duplicatesInOneStatement: \"lastWriteWins\",\n },\n // 8.0.19+ row alias. The older `VALUES(col)` function answers with\n // deprecation warning 1287 on this project's 8.4.11 container.\n excludedRowRef: { form: \"rowAlias\", alias: \"new\" },\n doNothingForm: \"duplicateKeyKeep\",\n insensitiveLike: \"lower\",\n // `_ci` collations fold `=` and `LIKE` — strict mode casts the OPERAND to\n // BINARY (byte-wise comparison; CAST form, the unary BINARY operator is\n // deprecated since 8.0.27). Operand-side: no assumption about the column's\n // charset, and the cost (index defeat) is documented in dialect-notes.md.\n strictMatchStrategy: \"binary\",\n // Correlated derived tables need MySQL 8.0.14+ (outer references); 8.4\n // needs each operand in its own scalar subquery (dialect.ts).\n greatestForm: \"wrapped-frame\",\n orderByNullsMode: \"emulate\",\n offsetRequiresLimit: { limitText: \"18446744073709551615\" },\n likeEscapeClause: null,\n // JSON_EXTRACT/JSON_UNQUOTE for scalars and strings; JSON_CONTAINS for\n // array containment; `$[0]` / `$[last]` path elements for the edge ops.\n jsonPathMode: \"mysqlExtract\",\n supportedJsonOps: [\n \"equals\",\n \"exists\",\n \"string_contains\",\n \"string_starts_with\",\n \"string_ends_with\",\n \"array_contains\",\n \"array_starts_with\",\n \"array_ends_with\",\n ],\n // Json transport is already plain text here — no param cast needed.\n jsonParamCast: \"\",\n valueCastTypes: Object.freeze({ String: \"CHAR\", Boolean: \"UNSIGNED\", Int: \"SIGNED\", BigInt: \"SIGNED\", Float: \"DOUBLE\", Decimal: \"DECIMAL(65, 30)\", DateTime: \"DATETIME(3)\", Json: \"JSON\", Bytes: \"BINARY\" }),\n lastInsertIdSql: \"SELECT LAST_INSERT_ID() AS `id`\",\n // Probed on mysql 26.7.0: FOR UPDATE / FOR SHARE, each with NOWAIT or SKIP\n // LOCKED. `FOR NO KEY UPDATE` and `FOR KEY SHARE` are PostgreSQL-only and\n // fail to parse here (errno 1064), so they are absent rather than aliased\n // onto a stronger lock. A plain shared lock is `LOCK IN SHARE MODE`: the\n // same lock, and the one spelling MariaDB (MDEV-17514) and MySQL before\n // 8.0.1 parse; 26.7.0 takes it without a warning. `FOR SHARE` stays for\n // `OF` and wait policies, which only `FOR SHARE` carries on MySQL.\n rowLockSyntax: {\n strengths: Object.freeze({ update: \"FOR UPDATE\", share: \"FOR SHARE\" }),\n wait: Object.freeze({ wait: \"\", nowait: \" NOWAIT\", skipLocked: \" SKIP LOCKED\" }),\n plain: Object.freeze({ share: \"LOCK IN SHARE MODE\" }),\n },\n // `GET_LOCK` is SESSION-scoped: the probe held one, rolled the transaction\n // back, and the lock was still held. It cannot deliver a transaction-scoped\n // advisory lock, so mysql declares none.\n advisoryLockFunctions: null,\n rowDefaultKeyword: true,\n bulkInsertForm: \"values\",\n emptyInsert: { form: \"emptyRow\" },\n // MySQL CTEs are read-only — no data-modifying steps.\n statementChain: null,\n paramBudget: 10000,\n\n // Booleans store as TINYINT(1); 1/0 is what a comparison against stored rows\n // actually meets, and `TRUE`/`FALSE` are only aliases for them.\n booleanLiteral: { true: \"1\", false: \"0\" },\n\n quoteIdent({ name }) {\n return `\\`${assertNoNul({ name }).replaceAll(\"`\", \"``\")}\\``;\n },\n // Mysql treats BOTH the doubled quote and the backslash as escapes unless the\n // server runs `NO_BACKSLASH_ESCAPES`, which VibeORM never assumes. Verified on\n // mysql 8.4.11: inserting the literal `'a\\\\b'` stores bytes `61 5C 62`, so a\n // single authored backslash MUST be doubled or it eats the next character.\n quoteStringLiteral({ value }) {\n return `'${value.replaceAll(\"\\\\\", \"\\\\\\\\\").replaceAll(\"'\", \"''\")}'`;\n },\n renderEnumOrdinal({ column }) {\n return `${column} + 0`;\n },\n renderEnumMinMax({ fn, column, result, when }) {\n const aggregate = fn === \"min\" ? \"MIN\" : \"MAX\";\n const only = (value: string): string => when === undefined ? value : `CASE WHEN ${when} THEN ${value} END`;\n if (result === \"ordinal\") return `${aggregate}(${only(`${column} + 0`)})`;\n // Five digits cover all 65,535 member indexes. Keep the database's own label\n // after the sortable prefix, without schema labels or SQL-mode-dependent escapes.\n return `SUBSTRING(${aggregate}(${only(`CONCAT(LPAD(${column} + 0, 5, '0'), ${column})`)}), 6)`;\n },\n placeholder() {\n return \"?\";\n },\n jsonTextProjection({ expression }): string {\n return `CAST(${expression} AS CHAR)`;\n },\n renderDbNow({ offsetSeconds, collector }) {\n // NOW(6): microsecond precision — assignment to a lower-precision column\n // truncates, matching the driver's own Date serialization precision.\n if (offsetSeconds === 0) return \"NOW(6)\";\n return `DATE_ADD(NOW(6), INTERVAL ${collector.add(offsetSeconds)} SECOND)`;\n },\n renderRowsDiffer({ left, right }) {\n const row = (items: readonly string[]): string => (items.length === 1 ? (items[0] as string) : `(${items.join(\", \")})`);\n return `NOT (${row(left)} <=> ${row(right)})`;\n },\n};\n",
|
|
61
62
|
"/**\n * Dialect registry: the one place a `Dialect` name becomes a `SqlDialect`.\n *\n * Runtime and adapters resolve through this map so nobody re-implements the\n * lookup (and nobody can quietly forget a dialect — the Record type is total).\n */\n\nimport type { Dialect } from \"@vibeorm/schema\";\nimport type { SqlDialect } from \"../dialect.ts\";\nimport { postgresDialect } from \"./postgres.ts\";\nimport { sqliteDialect } from \"./sqlite.ts\";\nimport { mysqlDialect } from \"./mysql.ts\";\n\nexport const SQL_DIALECTS: Readonly<Record<Dialect, SqlDialect>> = {\n postgres: postgresDialect,\n sqlite: sqliteDialect,\n mysql: mysqlDialect,\n};\n\n/** The SQL dialect a dialect name selects. */\nexport function getSqlDialect(params: { dialect: Dialect }): SqlDialect {\n return SQL_DIALECTS[params.dialect];\n}\n",
|
|
62
63
|
"import { localDateCheckName } from \"@vibeorm/schema\";\nimport type { CheckIR } from \"@vibeorm/schema\";\nimport type { SqlDialect } from \"./dialect.ts\";\n\n/** The single owned SQLite calendar/domain CHECK; native DATE dialects need no marker. */\nexport function renderLocalDateCheck({ dialect, table, column }: {\n readonly dialect: SqlDialect;\n readonly table: string;\n readonly column: string;\n}): CheckIR | undefined {\n if (dialect.name !== \"sqlite\") return undefined;\n const quoted = dialect.quoteIdent({ name: column });\n // The lower bound is NULL-safe and refuses SQLite's otherwise valid year zero.\n return {\n name: localDateCheckName({ table, column }),\n expression: `${quoted} IS date(${quoted}) AND (${quoted} IS NULL OR ${quoted} >= ${dialect.quoteStringLiteral({ value: \"0001-01-01\" })})`,\n };\n}\n",
|
|
63
64
|
"/**\n * Column types per dialect: the type migrate creates for a scalar field, in\n * the spelling it compares types by. ONE rule, read by migrate's differ and by\n * the runtime's `describeSchema`, so two fields that describe the same type\n * are two columns migrate would never ALTER into each other.\n *\n * A field without a native type gets its scalar's column type\n * (dialect-matrix §2). A declared `@db.*` type replaces it on PostgreSQL and\n * MySQL unless it IS that type spelled another way. SQLite stores every column\n * by its scalar's storage class and ignores native types.\n */\n\nimport type { Dialect, ScalarType } from \"@vibeorm/schema\";\nimport { mysqlDialect } from \"./dialects/mysql.ts\";\n\n// ─── Scalar column types ──────────────────────────────────────────\n\n/** IR scalar → the PostgreSQL column type migrate creates. */\nexport const POSTGRES_SCALAR_COLUMN_TYPES: Readonly<Record<ScalarType, string>> = Object.freeze({\n String: \"text\",\n Boolean: \"boolean\",\n Int: \"integer\",\n BigInt: \"bigint\",\n Float: \"double precision\",\n Decimal: \"numeric\",\n DateTime: \"timestamptz\",\n Json: \"jsonb\",\n Bytes: \"bytea\",\n});\n\n/** IR scalar → the MySQL column type migrate creates (information_schema spelling). */\nexport const MYSQL_SCALAR_COLUMN_TYPES: Readonly<Record<ScalarType, string>> = Object.freeze({\n String: `varchar(${mysqlDialect.conflictKeyEquality.defaultStringMaxLength})`,\n Boolean: \"tinyint(1)\",\n Int: \"int\",\n BigInt: \"bigint\",\n Float: \"double\",\n Decimal: \"decimal(65,30)\",\n DateTime: \"datetime(3)\",\n Json: \"json\",\n Bytes: \"longblob\",\n});\n\n/** IR scalar → the SQLite storage class migrate declares. */\nexport const SQLITE_SCALAR_STORAGE_CLASSES: Readonly<Record<ScalarType, string>> = Object.freeze({\n String: \"TEXT\",\n Boolean: \"INTEGER\",\n Int: \"INTEGER\",\n BigInt: \"INTEGER\",\n Float: \"REAL\",\n Decimal: \"TEXT\",\n DateTime: \"TEXT\",\n Json: \"TEXT\",\n Bytes: \"BLOB\",\n});\n\n// ─── PostgreSQL spelling ──────────────────────────────────────────\n\n/**\n * Alias map applied to the base name of a native type (everything before the\n * parenthesized modifier) so that schema-declared `@db.*` spellings and\n * catalog-reported names compare equal.\n */\nexport const POSTGRES_NATIVE_ALIASES: Readonly<Record<string, string>> = Object.freeze({\n charactervarying: \"varchar\",\n character: \"char\",\n bpchar: \"char\",\n int: \"integer\",\n int4: \"integer\",\n int2: \"smallint\",\n int8: \"bigint\",\n serial: \"integer\",\n bigserial: \"bigint\",\n bool: \"boolean\",\n float4: \"real\",\n float8: \"doubleprecision\",\n double: \"doubleprecision\",\n doubleprecision: \"doubleprecision\",\n decimal: \"numeric\",\n timestampwithtimezone: \"timestamptz\",\n timestampwithouttimezone: \"timestamp\",\n timewithtimezone: \"timetz\",\n timewithouttimezone: \"time\",\n bitvarying: \"varbit\",\n});\n\n/** Modifiers PostgreSQL applies when none is declared, so the declared and the catalog spelling compare equal (`bit` IS `bit(1)`). */\nconst POSTGRES_IMPLICIT_MODIFIERS: Readonly<Record<string, string>> = Object.freeze({\n bit: \"(1)\",\n});\n\n/**\n * Temporal types whose bare spelling already means precision 6, so an explicit\n * `(6)` is the same type and normalizes to the bare name. `timestamptz` is not\n * here: migrate grandfathers its precisions per scalar\n * ({@link POSTGRES_EXACT_EQUIVALENTS} and its own looser class).\n */\nconst POSTGRES_DEFAULT_PRECISION_SIX: ReadonlySet<string> = new Set([\"timestamp\", \"time\", \"timetz\"]);\n\n/**\n * Normalize a PostgreSQL type string for comparison: lowercase, whitespace\n * stripped, base name de-aliased. `\"VarChar(191)\"` and `\"character\n * varying(191)\"` both become `\"varchar(191)\"`.\n */\nexport function normalizePostgresNativeType(params: { readonly raw: string }): string {\n const compact = params.raw.toLowerCase().replace(/\\s+/g, \"\");\n const match = compact.match(/^([a-z_0-9]+)(\\(.*\\))?(\\[\\])?$/);\n if (match === null) return compact;\n const base = POSTGRES_NATIVE_ALIASES[match[1] as string] ?? (match[1] as string);\n const modifier = POSTGRES_DEFAULT_PRECISION_SIX.has(base) && match[2] === \"(6)\" ? \"\" : match[2] ?? POSTGRES_IMPLICIT_MODIFIERS[base] ?? \"\";\n return `${base}${modifier}${match[3] ?? \"\"}`;\n}\n\n/**\n * Native spellings an explicit declaration compares EQUAL to its scalar's\n * column type without being it: `@db.Timestamptz(6)` is bare `timestamptz`\n * spelled out. Nothing grandfathered: `timestamptz(3)` stays its own type.\n */\nexport const POSTGRES_EXACT_EQUIVALENTS: Readonly<Partial<Record<ScalarType, readonly string[]>>> = Object.freeze({\n DateTime: Object.freeze([\"timestamptz(6)\"]),\n});\n\n// ─── MySQL spelling ───────────────────────────────────────────────\n\nconst MYSQL_NATIVE_ALIASES: Readonly<Record<string, string>> = Object.freeze({\n integer: \"int\",\n dec: \"decimal\",\n numeric: \"decimal\",\n bool: \"tinyint(1)\",\n boolean: \"tinyint(1)\",\n character: \"char\",\n});\n\n/**\n * Normalize a MySQL type string for comparison: lowercase, whitespace\n * stripped, base de-aliased, integer display widths dropped (MySQL 8.0.19+\n * omits them; older catalogs report `int(11)`) — EXCEPT `tinyint(1)`, which is\n * the Boolean marker and must survive normalization. A zero fractional\n * precision on a temporal type is dropped: the catalog reports\n * `datetime(0)` as `datetime`.\n */\nexport function normalizeMysqlNativeType(params: { readonly raw: string }): string {\n const compact = params.raw.toLowerCase().replace(/\\s+/g, \"\");\n if (compact === \"tinyint(1)\" || compact === \"bool\" || compact === \"boolean\") return \"tinyint(1)\";\n const match = compact.match(/^([a-z_0-9]+)(\\(.*\\))?(.*)$/);\n if (match === null) return compact;\n const base = MYSQL_NATIVE_ALIASES[match[1] as string] ?? (match[1] as string);\n let modifier = match[2] ?? \"\";\n if (/^(tinyint|smallint|mediumint|int|bigint)$/.test(base)) modifier = \"\";\n if (modifier === \"(0)\" && /^(datetime|timestamp|time)$/.test(base)) modifier = \"\";\n return `${base}${modifier}${match[3] ?? \"\"}`;\n}\n\n// ─── The column type ──────────────────────────────────────────────\n\n/**\n * The column type migrate creates for a scalar field on `dialect`, in the\n * spelling it compares types by (an explicit declaration's exact comparison):\n * the same answer for two fields means the same column type. `nativeType` is\n * the field's declared `@db.*` text; for a list field the answer is the\n * element type.\n *\n * - PostgreSQL: `String` and `String @db.Text` are `\"text\"`; `Int`,\n * `@db.Int4` and `@db.Integer` are `\"integer\"`; `Float` and\n * `@db.DoublePrecision` are `\"doubleprecision\"`; `DateTime` and\n * `@db.Timestamptz(6)` are `\"timestamptz\"`, while `@db.Timestamptz(3)` is\n * `\"timestamptz(3)\"`.\n * - MySQL: `String` is `\"varchar(191)\"`, `Boolean` `\"tinyint(1)\"`, display\n * widths dropped (`int(11)` is `\"int\"`).\n * - SQLite: the storage class (`\"TEXT\"`, `\"INTEGER\"`, `\"REAL\"`, `\"BLOB\"`);\n * a native type changes nothing there.\n */\nexport function canonicalColumnType(params: { readonly dialect: Dialect; readonly scalar: ScalarType; readonly nativeType?: string | undefined }): string {\n const { dialect, scalar, nativeType } = params;\n switch (dialect) {\n case \"postgres\": {\n const canonical = normalizePostgresNativeType({ raw: POSTGRES_SCALAR_COLUMN_TYPES[scalar] });\n if (nativeType === undefined) return canonical;\n const declared = normalizePostgresNativeType({ raw: nativeType });\n return declared === canonical || POSTGRES_EXACT_EQUIVALENTS[scalar]?.includes(declared) === true ? canonical : declared;\n }\n case \"mysql\":\n return normalizeMysqlNativeType({ raw: nativeType ?? MYSQL_SCALAR_COLUMN_TYPES[scalar] });\n case \"sqlite\":\n return SQLITE_SCALAR_STORAGE_CLASSES[scalar];\n }\n}\n",
|
|
@@ -78,7 +79,7 @@
|
|
|
78
79
|
"import { internalError, unsupportedCapability } from \"@vibeorm/schema\";\nimport type { SqlObjectIdentity } from \"@vibeorm/schema\";\nimport type { SqlDialect } from \"../dialect.ts\";\nimport type { RenderedQuery } from \"../render.ts\";\nimport { ParamCollector } from \"../params.ts\";\n\n/** Read a qualified object definition without changing the database. */\nexport function renderMigrationObjectQuery(params: { dialect: SqlDialect; identity: SqlObjectIdentity }): RenderedQuery {\n return objectQuery({ ...params, collector: new ParamCollector(params.dialect) });\n}\n\ntype InspectionCollector = Pick<ParamCollector, \"add\" | \"values\">;\n\nfunction objectQuery(params: { dialect: SqlDialect; identity: SqlObjectIdentity; collector: InspectionCollector }): RenderedQuery {\n const { dialect, identity: object, collector } = params;\n if (object.kind === \"namespace\") {\n if (dialect.name !== \"postgres\") throw unsupportedCapability({ dialect: dialect.name, feature: \"fixedNamespaces\" });\n return { text: `SELECT n.nspname::text AS \"name\" FROM pg_catalog.pg_namespace n WHERE n.nspname = ${collector.add(object.name)}`, values: collector.values, returning: \"none\" };\n }\n const physical = \"table\" in object ? object.table : object.name;\n const namespace = collector.add(physical.namespace);\n const name = collector.add(physical.name);\n let text: string;\n if (dialect.name === \"postgres\") {\n const relation = `FROM pg_catalog.pg_class c JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace`;\n const where = `n.nspname = ${namespace} AND c.relname = ${name}`;\n switch (object.kind) {\n case \"constraint\": {\n const enforcement = object.constraintType === \"foreignKey\" ? `, (SELECT bool_and(t.tgenabled IN ('O', 'A')) FROM pg_catalog.pg_trigger t WHERE t.tgconstraint = con.oid) AS \"triggersEnabled\"` : \"\";\n text = `SELECT con.contype::text AS \"type\", pg_catalog.pg_get_constraintdef(con.oid, false) AS \"definition\", con.convalidated AS \"validated\", con.condeferrable AS \"deferrable\", con.condeferred AS \"deferred\"${enforcement} ${relation} JOIN pg_catalog.pg_constraint con ON con.conrelid = c.oid WHERE ${where} AND con.conname = ${collector.add(object.name)}`;\n break;\n }\n case \"trigger\":\n text = `SELECT pg_catalog.pg_get_triggerdef(t.oid, false) AS \"definition\", t.tgenabled::text AS \"enabled\", pn.nspname::text AS \"functionNamespace\", p.proname::text AS \"functionName\", pg_catalog.pg_get_function_identity_arguments(p.oid) AS \"functionArguments\" ${relation} JOIN pg_catalog.pg_trigger t ON t.tgrelid = c.oid JOIN pg_catalog.pg_proc p ON p.oid = t.tgfoid JOIN pg_catalog.pg_namespace pn ON pn.oid = p.pronamespace WHERE ${where} AND t.tgname = ${collector.add(object.name)} AND NOT t.tgisinternal`;\n break;\n case \"function\":\n text = `SELECT pg_catalog.pg_get_functiondef(p.oid) AS \"definition\", p.provolatile::text AS \"volatility\", p.prosecdef AS \"securityDefiner\", CASE WHEN p.prosecdef THEN pg_catalog.pg_get_userbyid(p.proowner)::text ELSE NULL END AS \"definerOwner\", p.proisstrict AS \"strict\", p.proconfig::text AS \"config\", pg_catalog.pg_get_function_result(p.oid) AS \"result\" FROM pg_catalog.pg_proc p JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace WHERE n.nspname = ${namespace} AND p.proname = ${name} AND p.prokind = 'f' AND ARRAY(SELECT tn.nspname || '.' || t.typname FROM unnest(p.proargtypes) WITH ORDINALITY a(oid, ord) JOIN pg_catalog.pg_type t ON t.oid = a.oid JOIN pg_catalog.pg_namespace tn ON tn.oid = t.typnamespace ORDER BY a.ord) = ${collector.add(object.argumentTypes.map((type) => `${type.namespace}.${type.name}`))}::text[]`;\n break;\n case \"view\":\n text = `SELECT pg_catalog.pg_get_viewdef(c.oid, false) AS \"definition\", c.relkind::text AS \"type\", c.reloptions::text AS \"options\" ${relation} WHERE ${where} AND c.relkind IN ('v', 'm')`;\n break;\n case \"sequence\":\n text = `SELECT pg_catalog.format_type(s.seqtypid, NULL) AS \"type\", s.seqstart::text AS \"start\", s.seqincrement::text AS \"increment\", s.seqmax::text AS \"max\", s.seqmin::text AS \"min\", s.seqcache::text AS \"cache\", s.seqcycle AS \"cycle\" ${relation} JOIN pg_catalog.pg_sequence s ON s.seqrelid = c.oid WHERE ${where}`;\n break;\n case \"column\": case \"columnDefault\": case \"generatedColumn\":\n text = `SELECT pg_catalog.format_type(a.atttypid, a.atttypmod) AS \"type\", a.attnotnull AS \"notNull\", a.attgenerated::text AS \"generated\", a.attidentity::text AS \"identity\", cn.nspname::text AS \"collationNamespace\", coll.collname::text AS \"collationName\", pg_catalog.pg_get_expr(d.adbin, d.adrelid, false) AS \"definition\" ${relation} JOIN pg_catalog.pg_attribute a ON a.attrelid = c.oid LEFT JOIN pg_catalog.pg_collation coll ON coll.oid = a.attcollation LEFT JOIN pg_catalog.pg_namespace cn ON cn.oid = coll.collnamespace LEFT JOIN pg_catalog.pg_attrdef d ON d.adrelid = c.oid AND d.adnum = a.attnum WHERE ${where} AND a.attname = ${collector.add(object.column)} AND a.attnum > 0 AND NOT a.attisdropped`;\n break;\n case \"index\":\n text = `SELECT pg_catalog.pg_get_indexdef(i.indexrelid, 0, false) AS \"definition\", i.indisunique AS \"unique\", i.indisvalid AS \"valid\", i.indisready AS \"ready\", con.conname::text AS \"constraint\", con.contype::text AS \"constraintType\" ${relation} JOIN pg_catalog.pg_index i ON i.indrelid = c.oid JOIN pg_catalog.pg_class ix ON ix.oid = i.indexrelid LEFT JOIN pg_catalog.pg_constraint con ON con.conindid = i.indexrelid AND con.contype IN ('p', 'u', 'x') WHERE ${where} AND ix.relname = ${collector.add(object.name)}`;\n break;\n case \"table\":\n text = `SELECT c.relkind::text AS \"type\", c.relrowsecurity AS \"rls\", c.relforcerowsecurity AS \"forceRls\", c.relpersistence::text AS \"persistence\", ARRAY(SELECT option FROM unnest(c.reloptions) AS option ORDER BY option COLLATE \"C\") AS \"options\" ${relation} WHERE ${where} AND c.relkind IN ('r', 'p')`;\n break;\n case \"enum\":\n text = `SELECT ARRAY(SELECT e.enumlabel::text FROM pg_catalog.pg_enum e WHERE e.enumtypid = t.oid ORDER BY e.enumsortorder) AS \"values\" FROM pg_catalog.pg_type t JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace WHERE n.nspname = ${namespace} AND t.typname = ${name} AND t.typtype = 'e'`;\n break;\n case \"postgresExtension\":\n text = `SELECT e.extversion::text AS \"version\", e.extrelocatable AS \"relocatable\" FROM pg_catalog.pg_extension e JOIN pg_catalog.pg_namespace n ON n.oid = e.extnamespace WHERE n.nspname = ${namespace} AND e.extname = ${name}`;\n break;\n }\n } else if (dialect.name === \"mysql\") {\n if (object.kind === \"constraint\" && object.constraintType === \"exclusion\") throw unsupportedCapability({ dialect: \"mysql\", feature: \"exclusionConstraints\" });\n const mysql = mysqlFactsText({ dialect, identity: object, namespace, name, collector });\n if (mysql === undefined) throw unsupportedCapability({ dialect: \"mysql\", feature: `inspect:${object.kind}` });\n text = mysql;\n } else {\n if (physical.namespace !== \"main\" && physical.namespace !== \"temp\") throw unsupportedCapability({ dialect: \"sqlite\", feature: \"attachedSchemaInspection\" });\n // sqlite_schema retains source SQL. It is not a semantic SQL normalizer.\n const catalog = `${dialect.quoteIdent({ name: physical.namespace })}.sqlite_schema`;\n const kind = object.kind === \"table\" || object.kind === \"view\" ? object.kind : object.kind === \"trigger\" ? \"trigger\" : object.kind === \"index\" ? \"index\" : \"table\";\n if ([\"function\", \"sequence\", \"postgresExtension\", \"enum\"].includes(object.kind) || (object.kind === \"constraint\" && object.constraintType === \"exclusion\")) throw unsupportedCapability({ dialect: \"sqlite\", feature: `inspect:${object.kind}` });\n // Rebuild parameters: SQLite has positional placeholders, including unused values is invalid.\n const sqliteParams = new ParamCollector(dialect);\n if (object.kind === \"column\" || object.kind === \"columnDefault\" || object.kind === \"generatedColumn\") {\n text = `SELECT x.type AS type, x.\"notnull\" AS \"notNull\", x.pk AS primaryKeyPosition, x.hidden AS generated, x.dflt_value AS definition, (SELECT sql FROM ${catalog} WHERE name = ${sqliteParams.add(physical.name)} AND type = 'table') AS tableDefinition FROM pragma_table_xinfo(${sqliteParams.add(physical.name)}, ${sqliteParams.add(physical.namespace)}) x WHERE x.name = ${sqliteParams.add(object.column)}`;\n return { text, values: sqliteParams.values, returning: \"none\" };\n }\n const objectName = object.kind === \"trigger\" || object.kind === \"index\" ? object.name : physical.name;\n text = `SELECT sql AS definition, type AS type FROM ${catalog} WHERE name = ${sqliteParams.add(objectName)} AND type = ${sqliteParams.add(kind)}${object.kind === \"trigger\" ? ` AND tbl_name = ${sqliteParams.add(physical.name)}` : \"\"}`;\n return { text, values: sqliteParams.values, returning: \"none\" };\n }\n return { text, values: collector.values, returning: \"none\" };\n}\n\n/**\n * MySQL facts query text of one object (its namespace and name already bound),\n * or undefined for a kind MySQL cannot inspect. The one source of the MySQL\n * facts SQL: single reads and {@link renderMysqlObjectBatch} both render it.\n */\nfunction mysqlFactsText(params: { dialect: SqlDialect; identity: Exclude<SqlObjectIdentity, { kind: \"namespace\" }>; namespace: string; name: string; collector: InspectionCollector }): string | undefined {\n const { dialect, identity: object, namespace, name, collector } = params;\n switch (object.kind) {\n case \"view\": return `SELECT VIEW_DEFINITION AS definition, CHECK_OPTION AS checkOption, SECURITY_TYPE AS securityType, DEFINER AS definer FROM information_schema.VIEWS WHERE TABLE_SCHEMA = ${namespace} AND TABLE_NAME = ${name}`;\n case \"trigger\": return `SELECT ACTION_STATEMENT AS definition, ACTION_TIMING AS timing, EVENT_MANIPULATION AS event, ACTION_ORDER AS actionOrder, SQL_MODE AS sqlMode, DEFINER AS definer FROM information_schema.TRIGGERS WHERE TRIGGER_SCHEMA = ${namespace} AND EVENT_OBJECT_TABLE = ${name} AND TRIGGER_NAME = ${collector.add(object.name)}`;\n case \"function\": return `SELECT ROUTINE_DEFINITION AS definition, DTD_IDENTIFIER AS result, IS_DETERMINISTIC AS deterministic, SQL_DATA_ACCESS AS dataAccess, SECURITY_TYPE AS securityType, SQL_MODE AS sqlMode, DEFINER AS definer FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = ${namespace} AND ROUTINE_NAME = ${name} AND ROUTINE_TYPE = 'FUNCTION'`;\n case \"column\": case \"columnDefault\": case \"generatedColumn\": return `SELECT COLUMN_TYPE AS type, IS_NULLABLE AS nullable, COLUMN_DEFAULT AS definition, GENERATION_EXPRESSION AS ${dialect.quoteIdent({ name: \"generated\" })}, EXTRA AS extra, COLLATION_NAME AS collation FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = ${namespace} AND TABLE_NAME = ${name} AND COLUMN_NAME = ${collector.add(object.column)}`;\n case \"constraint\":\n if (object.constraintType === \"exclusion\") return undefined;\n return `SELECT tc.CONSTRAINT_TYPE AS type, tc.ENFORCED AS enforced, cc.CHECK_CLAUSE AS definition, rc.UPDATE_RULE AS onUpdate, rc.DELETE_RULE AS onDelete, rc.MATCH_OPTION AS matchOption FROM information_schema.TABLE_CONSTRAINTS tc LEFT JOIN information_schema.CHECK_CONSTRAINTS cc ON cc.CONSTRAINT_SCHEMA = tc.CONSTRAINT_SCHEMA AND cc.CONSTRAINT_NAME = tc.CONSTRAINT_NAME LEFT JOIN information_schema.REFERENTIAL_CONSTRAINTS rc ON rc.CONSTRAINT_SCHEMA = tc.CONSTRAINT_SCHEMA AND rc.TABLE_NAME = tc.TABLE_NAME AND rc.CONSTRAINT_NAME = tc.CONSTRAINT_NAME WHERE tc.TABLE_SCHEMA = ${namespace} AND tc.TABLE_NAME = ${name} AND tc.CONSTRAINT_NAME = ${collector.add(object.name)}`;\n case \"index\": return `SELECT INDEX_NAME AS name, NON_UNIQUE AS nonUnique, INDEX_TYPE AS method, IS_VISIBLE AS visible FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = ${namespace} AND TABLE_NAME = ${name} AND INDEX_NAME = ${collector.add(object.name)} GROUP BY INDEX_NAME, NON_UNIQUE, INDEX_TYPE, IS_VISIBLE`;\n case \"table\": return `SELECT TABLE_TYPE AS type, ENGINE AS engine, TABLE_COLLATION AS collation FROM information_schema.TABLES WHERE TABLE_SCHEMA = ${namespace} AND TABLE_NAME = ${name}`;\n default: return undefined;\n }\n}\n\n/** The parts of one MySQL member query: its select list, its source with WHERE, and the column its rows are ordered by. */\ntype MysqlMemberParts = { readonly columns: string; readonly source: string; readonly ordinal: string };\n\nfunction mysqlMemberParts(params: { identity: SqlObjectIdentity; collector: InspectionCollector }): MysqlMemberParts | undefined {\n const { identity: object, collector } = params;\n if (object.kind !== \"function\" && object.kind !== \"index\" && object.kind !== \"constraint\") return undefined;\n const physical = \"table\" in object ? object.table : object.name;\n const namespace = collector.add(physical.namespace);\n const name = collector.add(physical.name);\n return object.kind === \"function\"\n ? { columns: \"PARAMETER_MODE AS mode, PARAMETER_NAME AS name, DTD_IDENTIFIER AS type, CHARACTER_SET_NAME AS characterSet, COLLATION_NAME AS collation\", source: `information_schema.PARAMETERS WHERE SPECIFIC_SCHEMA = ${namespace} AND SPECIFIC_NAME = ${name}`, ordinal: \"ORDINAL_POSITION\" }\n : object.kind === \"index\"\n ? { columns: \"COLUMN_NAME AS name, EXPRESSION AS expression, SUB_PART AS prefixLength, COLLATION AS collation\", source: `information_schema.STATISTICS WHERE TABLE_SCHEMA = ${namespace} AND TABLE_NAME = ${name} AND INDEX_NAME = ${collector.add(object.name)}`, ordinal: \"SEQ_IN_INDEX\" }\n : { columns: \"COLUMN_NAME AS name, REFERENCED_TABLE_SCHEMA AS referenceNamespace, REFERENCED_TABLE_NAME AS referenceTable, REFERENCED_COLUMN_NAME AS referenceColumn\", source: `information_schema.KEY_COLUMN_USAGE WHERE CONSTRAINT_SCHEMA = ${namespace} AND TABLE_NAME = ${name} AND CONSTRAINT_NAME = ${collector.add(object.name)}`, ordinal: \"ORDINAL_POSITION\" };\n}\n\n/** Ordered MySQL object members; no GROUP_CONCAT truncation can hide a definition change. */\nexport function renderMysqlObjectMembers(params: { dialect: SqlDialect; identity: SqlObjectIdentity }): RenderedQuery | undefined {\n if (params.dialect.name !== \"mysql\") return undefined;\n const collector = new ParamCollector(params.dialect);\n const parts = mysqlMemberParts({ identity: params.identity, collector });\n if (parts === undefined) return undefined;\n return { text: `SELECT ${parts.columns} FROM ${parts.source} ORDER BY ${parts.ordinal}`, values: collector.values, returning: \"none\" };\n}\n\n/**\n * One batched MySQL catalog read. Its rows carry `vibe_position` = i, the\n * branch that answers for request position `positions[i]`; member reads also\n * carry `vibe_ordinal`, the single query's ORDER BY column.\n */\nexport type MysqlObjectBatch = RenderedQuery & { readonly positions: readonly number[] };\n\n/**\n * Objects per batched MySQL statement. Larger unions cost the server more per\n * object (lane M probe, 17.10.2026: 100 per statement is as fast as single reads\n * or faster; 500 and 1 000 are slower), and 100 keeps a statement far below\n * the prepared-statement placeholder limit.\n */\nconst MYSQL_OBJECT_BATCH_SIZE = 100;\n\n/**\n * Ends every batched MySQL statement. `sql_select_limit` (session or global,\n * e.g. 1 000 under `mysql --safe-updates`) silently cuts the rows of a SELECT\n * without its own LIMIT, and a cut batch would read its last objects as\n * missing; an explicit LIMIT takes precedence over it. After the last\n * `UNION ALL` branch the LIMIT applies to the whole union. The value is MySQL's\n * largest row count, so nothing is ever cut.\n */\nconst MYSQL_BATCH_NO_ROW_LIMIT = \" LIMIT 18446744073709551615\";\n\n/** Branch-relative positions keep one statement text per shape and chunk size, so prepared statements are reused. */\nfunction mysqlBatches(params: { groups: ReadonlyMap<string, readonly { readonly position: number; readonly branch: (index: number) => string; readonly values: readonly unknown[] }[]>; suffix: string }): MysqlObjectBatch[] {\n const batches: MysqlObjectBatch[] = [];\n for (const group of params.groups.values()) {\n for (let offset = 0; offset < group.length; offset += MYSQL_OBJECT_BATCH_SIZE) {\n const chunk = group.slice(offset, offset + MYSQL_OBJECT_BATCH_SIZE);\n batches.push({\n text: `${chunk.map((entry, index) => entry.branch(index)).join(\" UNION ALL \")}${params.suffix}${MYSQL_BATCH_NO_ROW_LIMIT}`,\n values: chunk.flatMap((entry) => entry.values),\n returning: \"none\",\n positions: chunk.map((entry) => entry.position),\n });\n }\n }\n return batches;\n}\n\n/**\n * MySQL facts reads in bounded statements, grouped by query shape in request\n * order, 100 objects per statement. Each `UNION ALL` branch is the UNCHANGED\n * single-object query as a derived table, so the server matches names with the\n * single read's own `WHERE` and collation: the rows of a position are exactly the\n * rows {@link renderMigrationObjectQuery} returns for it. An identity MySQL cannot\n * inspect is in no batch; the caller reads it on its own (and gets its refusal).\n * The statement ends with `LIMIT 18446744073709551615`, so `sql_select_limit`\n * cannot cut it.\n */\nexport function renderMysqlObjectBatch(params: { dialect: SqlDialect; identities: readonly SqlObjectIdentity[] }): readonly MysqlObjectBatch[] {\n const { dialect } = params;\n if (dialect.name !== \"mysql\") throw unsupportedCapability({ dialect: dialect.name, feature: \"batchedMigrationInspection\" });\n const position = dialect.quoteIdent({ name: \"vibe_position\" });\n const groups = new Map<string, { position: number; branch: (index: number) => string; values: readonly unknown[] }[]>();\n for (const [index, identity] of params.identities.entries()) {\n if (identity.kind === \"namespace\") continue;\n const physical = \"table\" in identity ? identity.table : identity.name;\n const collector = new ParamCollector(dialect);\n const text = mysqlFactsText({ dialect, identity, namespace: collector.add(physical.namespace), name: collector.add(physical.name), collector });\n if (text === undefined) continue;\n const group = groups.get(text) ?? [];\n group.push({ position: index, branch: (branch) => `SELECT ${branch} AS ${position}, q.* FROM (${text}) q`, values: collector.values });\n groups.set(text, group);\n }\n return mysqlBatches({ groups, suffix: \"\" });\n}\n\n/**\n * MySQL member reads (function parameters, index and constraint columns) in\n * bounded statements, grouped by kind in request order, 100 objects per\n * statement. Each branch is the single member query's select list and `WHERE`\n * plus its ORDER BY column as `vibe_ordinal`; MySQL ignores an ORDER BY inside a\n * union branch, so the statement orders by `vibe_position, vibe_ordinal` (then\n * `LIMIT 18446744073709551615`, so `sql_select_limit` cannot cut it). Rows\n * of a position equal {@link renderMysqlObjectMembers}' rows in its order\n * whenever that object's ordinals are distinct; the caller checks that.\n */\nexport function renderMysqlObjectMembersBatch(params: { dialect: SqlDialect; identities: readonly SqlObjectIdentity[] }): readonly MysqlObjectBatch[] {\n const { dialect } = params;\n if (dialect.name !== \"mysql\") throw unsupportedCapability({ dialect: dialect.name, feature: \"batchedMigrationInspection\" });\n const position = dialect.quoteIdent({ name: \"vibe_position\" });\n const ordinal = dialect.quoteIdent({ name: \"vibe_ordinal\" });\n const groups = new Map<string, { position: number; branch: (index: number) => string; values: readonly unknown[] }[]>();\n for (const [index, identity] of params.identities.entries()) {\n const collector = new ParamCollector(dialect);\n const parts = mysqlMemberParts({ identity, collector });\n if (parts === undefined) continue;\n const group = groups.get(identity.kind) ?? [];\n group.push({ position: index, branch: (branch) => `SELECT ${branch} AS ${position}, ${parts.ordinal} AS ${ordinal}, ${parts.columns} FROM ${parts.source}`, values: collector.values });\n groups.set(identity.kind, group);\n }\n return mysqlBatches({ groups, suffix: ` ORDER BY ${position}, ${ordinal}` });\n}\n\n/** PostgreSQL dependency addresses are returned as server-owned strings, never guessed from SQL. */\nexport function renderMigrationDependencies(params: { dialect: SqlDialect; identity: SqlObjectIdentity }): RenderedQuery {\n return dependencyQuery({ ...params, collector: new ParamCollector(params.dialect) });\n}\n\nfunction dependencyQuery(params: { dialect: SqlDialect; identity: SqlObjectIdentity; collector: InspectionCollector }): RenderedQuery {\n if (params.dialect.name !== \"postgres\") throw unsupportedCapability({ dialect: params.dialect.name, feature: \"catalogDependencies\" });\n const object = params.identity;\n const collector = params.collector;\n if (object.kind === \"namespace\") {\n const namespace = collector.add(object.name);\n return { text: `SELECT DISTINCT json_build_array(d.deptype, a.type, a.object_names, a.object_args)::text AS address FROM pg_catalog.pg_namespace n JOIN pg_catalog.pg_depend d ON d.classid = 'pg_namespace'::regclass AND d.objid = n.oid AND d.objsubid = 0 CROSS JOIN LATERAL pg_catalog.pg_identify_object_as_address(d.refclassid, d.refobjid, d.refobjsubid) a WHERE n.nspname = ${namespace} ORDER BY address`, values: collector.values, returning: \"none\" };\n }\n const physical = \"table\" in object ? object.table : object.name;\n const namespace = collector.add(physical.namespace);\n const name = collector.add(physical.name);\n const relation = `SELECT c.oid FROM pg_catalog.pg_class c JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = ${namespace} AND c.relname = ${name}`;\n let source: string;\n switch (object.kind) {\n case \"constraint\": source = `SELECT 'pg_constraint'::regclass AS classid, con.oid AS objid, 0 AS objsubid FROM pg_catalog.pg_constraint con WHERE con.conrelid = (${relation}) AND con.conname = ${collector.add(object.name)}`; break;\n case \"trigger\": source = `SELECT 'pg_trigger'::regclass AS classid, t.oid AS objid, 0 AS objsubid FROM pg_catalog.pg_trigger t WHERE t.tgrelid = (${relation}) AND t.tgname = ${collector.add(object.name)}`; break;\n case \"columnDefault\": case \"generatedColumn\": source = `SELECT 'pg_attrdef'::regclass AS classid, d.oid AS objid, 0 AS objsubid FROM pg_catalog.pg_attrdef d JOIN pg_catalog.pg_attribute a ON a.attrelid = d.adrelid AND a.attnum = d.adnum WHERE a.attrelid = (${relation}) AND a.attname = ${collector.add(object.column)}`; break;\n case \"column\": source = `SELECT 'pg_class'::regclass AS classid, a.attrelid AS objid, a.attnum AS objsubid FROM pg_catalog.pg_attribute a WHERE a.attrelid = (${relation}) AND a.attname = ${collector.add(object.column)}`; break;\n case \"view\": source = `SELECT 'pg_rewrite'::regclass AS classid, r.oid AS objid, 0 AS objsubid FROM pg_catalog.pg_rewrite r WHERE r.ev_class = (${relation})`; break;\n case \"index\": source = `SELECT 'pg_class'::regclass AS classid, i.indexrelid AS objid, 0 AS objsubid FROM pg_catalog.pg_index i JOIN pg_catalog.pg_class c ON c.oid = i.indexrelid WHERE i.indrelid = (${relation}) AND c.relname = ${collector.add(object.name)}`; break;\n case \"function\": source = `SELECT 'pg_proc'::regclass AS classid, p.oid AS objid, 0 AS objsubid FROM pg_catalog.pg_proc p JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace WHERE n.nspname = ${namespace} AND p.proname = ${name} AND ARRAY(SELECT tn.nspname || '.' || t.typname FROM unnest(p.proargtypes) WITH ORDINALITY a(oid, ord) JOIN pg_catalog.pg_type t ON t.oid = a.oid JOIN pg_catalog.pg_namespace tn ON tn.oid = t.typnamespace ORDER BY a.ord) = ${collector.add(object.argumentTypes.map((type) => `${type.namespace}.${type.name}`))}::text[]`; break;\n case \"enum\": source = `SELECT 'pg_type'::regclass AS classid, t.oid AS objid, 0 AS objsubid FROM pg_catalog.pg_type t JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace WHERE n.nspname = ${namespace} AND t.typname = ${name} AND t.typtype = 'e'`; break;\n case \"postgresExtension\": source = `SELECT 'pg_extension'::regclass AS classid, e.oid AS objid, 0 AS objsubid FROM pg_catalog.pg_extension e JOIN pg_catalog.pg_namespace n ON n.oid = e.extnamespace WHERE n.nspname = ${namespace} AND e.extname = ${name}`; break;\n default: source = `SELECT 'pg_class'::regclass AS classid, c.oid AS objid, 0 AS objsubid FROM pg_catalog.pg_class c WHERE c.oid = (${relation})`; break;\n }\n return { text: `SELECT DISTINCT json_build_array(d.deptype, a.type, a.object_names, a.object_args)::text AS address FROM (${source}) s JOIN pg_catalog.pg_depend d ON d.classid = s.classid AND d.objid = s.objid AND d.objsubid = s.objsubid CROSS JOIN LATERAL pg_catalog.pg_identify_object_as_address(d.refclassid, d.refobjid, d.refobjsubid) a ORDER BY address`, values: collector.values, returning: \"none\" };\n}\n\nfunction inspectionReferences(params: { dialect: SqlDialect }): InspectionCollector {\n const values: unknown[] = [];\n return { values, add(value) {\n values.push(value);\n return `request.${params.dialect.quoteIdent({ name: `p${values.length}` })}`;\n } };\n}\n\n/** One batched PostgreSQL catalog read and the request positions it answers for. */\nexport type MigrationObjectBatch = RenderedQuery & { readonly positions: readonly number[] };\n\n/** Batch PostgreSQL facts and dependencies by SQL shape, retaining each requested position. */\nexport function renderMigrationObjectBatch(params: { dialect: SqlDialect; identities: readonly SqlObjectIdentity[] }): readonly MigrationObjectBatch[] {\n const { dialect } = params;\n if (dialect.name !== \"postgres\") throw unsupportedCapability({ dialect: dialect.name, feature: \"batchedMigrationInspection\" });\n const groups = new Map<string, { identity: SqlObjectIdentity; position: number }[]>();\n for (const [position, identity] of params.identities.entries()) {\n // One group per distinct facts/dependency SQL pair; columnDefault and generatedColumn render the same pair.\n const kind = identity.kind === \"constraint\" ? `${identity.kind}:${identity.constraintType}` : identity.kind === \"generatedColumn\" ? \"columnDefault\" : identity.kind;\n const group = groups.get(kind) ?? [];\n group.push({ identity, position });\n groups.set(kind, group);\n }\n return [...groups.values()].map((group): MigrationObjectBatch => {\n const identity = group[0]!.identity;\n const facts = objectQuery({ dialect, identity, collector: inspectionReferences({ dialect }) });\n const dependencies = dependencyQuery({ dialect, identity, collector: inspectionReferences({ dialect }) });\n // Both queries read request.p1..pN, so they must bind the identity's values in one order.\n if (JSON.stringify(dependencies.values) !== JSON.stringify(facts.values)) throw internalError({ message: \"Batched catalog queries bind their identity in different orders\", meta: { kind: identity.kind } });\n const columns = facts.values.map((value, index) => `${dialect.quoteIdent({ name: `p${index + 1}` })} ${Array.isArray(value) ? \"text[]\" : \"text\"}`);\n const requests = group.map(({ identity, position }) => ({ position, ...Object.fromEntries(renderMigrationObjectQuery({ dialect, identity }).values.map((value, index) => [`p${index + 1}`, value])) }));\n // Bind serialized JSON as text; a jsonb wire parameter is JSON-encoded again by Bun.\n const collector = new ParamCollector(dialect);\n return {\n text: `SELECT request.position, to_jsonb(facts) AS facts, ARRAY(SELECT address FROM (${dependencies.text}) dependency ORDER BY address) AS \"dependencyAddresses\" FROM jsonb_to_recordset(${collector.add(JSON.stringify(requests))}::text::jsonb) AS request(position integer, ${columns.join(\", \")}) CROSS JOIN LATERAL (${facts.text}) facts`,\n values: collector.values,\n returning: \"none\",\n positions: group.map(({ position }) => position),\n };\n });\n}\n\n/** Record the database normalization context in generated metadata. */\nexport function renderMigrationServerVersion(params: { dialect: SqlDialect }): RenderedQuery {\n return { text: params.dialect.name === \"sqlite\" ? \"SELECT sqlite_version() AS version\" : \"SELECT version() AS version\", values: [], returning: \"none\" };\n}\n\n/** Inspectable current namespace; core PostgreSQL schema mapping remains public. */\nexport function renderMigrationNamespace(params: { dialect: SqlDialect }): RenderedQuery {\n return { text: params.dialect.name === \"mysql\" ? \"SELECT DATABASE() AS namespace\" : params.dialect.name === \"sqlite\" ? \"SELECT 'main' AS namespace\" : \"SELECT 'public' AS namespace\", values: [], returning: \"none\" };\n}\n\n/** PostgreSQL CHECK probe uses the actual table's type context and is always rolled back. */\nexport function renderCheckProbe(params: { dialect: SqlDialect; table: { namespace: string; name: string }; expression: string; name: string }): RenderedQuery {\n if (params.dialect.name !== \"postgres\") throw unsupportedCapability({ dialect: params.dialect.name, feature: \"rollbackCheckProbe\" });\n const q = (name: string): string => params.dialect.quoteIdent({ name });\n return { text: `ALTER TABLE ${q(params.table.namespace)}.${q(params.table.name)} ADD CONSTRAINT ${q(params.name)} CHECK (${params.expression}) NOT VALID`, values: [], returning: \"none\" };\n}\n",
|
|
79
80
|
"/**\n * PostgreSQL migration-operations SQL: migration-owned session settings and\n * the read-only catalog probes a nontransactional migration needs to establish\n * what actually happened before it resumes.\n *\n * Why these live here and not in @vibeorm/migrate: every SQL-text decision\n * belongs to a dialect module (constitution rule 4). The migrate runner\n * decides WHEN to ask; this file decides WHAT is asked.\n *\n * Honesty notes carried by these shapes:\n *\n * - `lock_timeout` bounds how long ONE statement waits for a lock. It does not\n * make an operation online, and it does not bound the lock's HOLD time once\n * acquired. The runner surfaces that as risk output, not as a guarantee.\n * - The index probe reports `indisvalid`/`indisready` AND the full deparsed\n * definition, because `CREATE INDEX CONCURRENTLY` can fail leaving an\n * invalid index behind that `IF NOT EXISTS` would happily accept.\n * - Every probe is scoped to `current_schema()`, the same schema the migrate\n * DDL renderers write into.\n */\n\nimport { VibeError, unsupportedCapability } from \"@vibeorm/schema\";\nimport type { SqlDialect } from \"../dialect.ts\";\nimport type { RenderedQuery } from \"../render.ts\";\nimport { ParamCollector } from \"../params.ts\";\n\n// ─── Session settings ─────────────────────────────────────────────\n\n/** Session settings a migration may scope to its own work. */\nexport type MigrationSessionSetting = \"lock_timeout\" | \"statement_timeout\";\n\n/**\n * A PostgreSQL interval-ish setting value as `current_setting` returns it\n * (`0`, `5s`, `250ms`, `2min`). Anything else is refused rather than\n * interpolated — these values are written into SQL text, not parameters,\n * because `SET` takes no placeholders.\n */\nconst SETTING_VALUE = /^[0-9]+(?:\\.[0-9]+)?\\s*(?:us|ms|s|min|h|d)?$/;\n\nfunction requirePostgres(params: { dialect: SqlDialect; feature: string }): void {\n if (params.dialect.name !== \"postgres\") {\n throw unsupportedCapability({ dialect: params.dialect.name, feature: params.feature });\n }\n}\n\n/** Read the session's current `lock_timeout` / `statement_timeout`, to restore them later. */\nexport function renderMigrationSessionRead(params: { dialect: SqlDialect }): RenderedQuery {\n requirePostgres({ dialect: params.dialect, feature: \"migrationSessionSettings\" });\n return {\n text: `SELECT pg_catalog.current_setting('lock_timeout') AS \"lockTimeout\", pg_catalog.current_setting('statement_timeout') AS \"statementTimeout\"`,\n values: [],\n returning: \"none\",\n };\n}\n\n/**\n * Scope a setting to the migration's own work. Milliseconds only, and only a\n * non-negative safe integer: 0 means \"no limit\", which is PostgreSQL's own\n * default and the value a restore falls back to.\n */\nexport function renderMigrationSessionSet(params: {\n dialect: SqlDialect;\n setting: MigrationSessionSetting;\n milliseconds: number;\n /** `SET LOCAL` — reverted by the enclosing COMMIT/ROLLBACK, so no restore is needed. */\n local?: boolean;\n}): RenderedQuery {\n requirePostgres({ dialect: params.dialect, feature: \"migrationSessionSettings\" });\n const { milliseconds, setting } = params;\n if (!Number.isSafeInteger(milliseconds) || milliseconds < 0) {\n throw new VibeError({\n code: \"VIBE_MIGRATION\",\n message: `${setting} must be a non-negative integer number of milliseconds (got ${String(milliseconds)})`,\n meta: { reason: \"execution-metadata-invalid\", setting, value: milliseconds },\n });\n }\n return { text: `SET ${params.local === true ? \"LOCAL \" : \"\"}${setting} = '${milliseconds}ms'`, values: [], returning: \"none\" };\n}\n\n/**\n * Put a setting back to the value {@link renderMigrationSessionRead} reported.\n * An unrecognized value restores the server default with `RESET` instead of\n * being interpolated — never guess at SQL text read back from a session.\n */\nexport function renderMigrationSessionRestore(params: {\n dialect: SqlDialect;\n setting: MigrationSessionSetting;\n value: string;\n}): RenderedQuery {\n requirePostgres({ dialect: params.dialect, feature: \"migrationSessionSettings\" });\n const trimmed = params.value.trim();\n const text = SETTING_VALUE.test(trimmed)\n ? `SET ${params.setting} = '${trimmed}'`\n : `RESET ${params.setting}`;\n return { text, values: [], returning: \"none\" };\n}\n\n// ─── Catalog probes ───────────────────────────────────────────────\n\n/**\n * Everything needed to decide whether a `CREATE INDEX CONCURRENTLY` finished:\n * the index's validity, its access method, its uniqueness, its key-column\n * expressions as PostgreSQL itself deparses them (newline-joined so every\n * adapter decodes one plain text column), its partial predicate and the full\n * `pg_get_indexdef` text for the operator to read in an error message.\n * Complete recovery also reads NULL uniqueness and lossless ordered JSON text\n * for key and included definitions. PostgreSQL 16/17/18 expose these fields.\n *\n * `indisvalid = false` is the state a cancelled/failed concurrent build\n * leaves behind: the index exists, is skipped by the planner, and is still\n * maintained by writes. `IF NOT EXISTS` cannot tell that apart from success.\n */\nexport function renderIndexStateQuery(params: { dialect: SqlDialect; index: string }): RenderedQuery {\n requirePostgres({ dialect: params.dialect, feature: \"concurrentIndexRecovery\" });\n const collector = new ParamCollector(params.dialect);\n const name = collector.add(params.index);\n return {\n text: `SELECT c.relname::text AS \"index\",\n t.relname::text AS \"table\",\n am.amname::text AS \"method\",\n i.indisunique AS \"unique\",\n i.indnullsnotdistinct AS \"nullsNotDistinct\",\n pg_catalog.array_to_json(ARRAY(SELECT pg_catalog.pg_get_indexdef(i.indexrelid, k.k, true)\n FROM pg_catalog.generate_series(1, i.indnkeyatts) AS k(k) ORDER BY k.k))::text AS \"keyColumns\",\n pg_catalog.array_to_json(ARRAY(SELECT pg_catalog.pg_get_indexdef(i.indexrelid, k.k, true)\n FROM pg_catalog.generate_series(i.indnkeyatts + 1, i.indnatts) AS k(k) ORDER BY k.k))::text AS \"includedColumns\",\n i.indisvalid AS \"valid\",\n i.indisready AS \"ready\",\n pg_catalog.pg_get_expr(i.indpred, i.indrelid) AS \"predicate\",\n pg_catalog.pg_get_indexdef(i.indexrelid) AS \"definition\",\n (SELECT string_agg(pg_catalog.pg_get_indexdef(i.indexrelid, k.k, true), E'\\\\n' ORDER BY k.k)\n FROM pg_catalog.generate_series(1, i.indnkeyatts) AS k(k)) AS \"columns\"\nFROM pg_catalog.pg_class c\nJOIN pg_catalog.pg_index i ON i.indexrelid = c.oid\nJOIN pg_catalog.pg_class t ON t.oid = i.indrelid\nJOIN pg_catalog.pg_am am ON am.oid = c.relam\nJOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\nWHERE n.nspname = pg_catalog.current_schema() AND c.relname = ${name}`,\n values: collector.values,\n returning: \"none\",\n };\n}\n\n/** Whether a named constraint exists on a table, and whether it is validated. */\nexport function renderConstraintStateQuery(params: {\n dialect: SqlDialect;\n table: string;\n constraint: string;\n}): RenderedQuery {\n requirePostgres({ dialect: params.dialect, feature: \"stagedConstraints\" });\n const collector = new ParamCollector(params.dialect);\n const table = collector.add(params.table);\n const constraint = collector.add(params.constraint);\n return {\n text: `SELECT con.conname::text AS \"constraint\",\n rel.relname::text AS \"table\",\n con.contype::text AS \"type\",\n con.convalidated AS \"validated\",\n pg_catalog.pg_get_constraintdef(con.oid) AS \"definition\"\nFROM pg_catalog.pg_constraint con\nJOIN pg_catalog.pg_class rel ON rel.oid = con.conrelid\nJOIN pg_catalog.pg_namespace n ON n.oid = rel.relnamespace\nWHERE n.nspname = pg_catalog.current_schema() AND rel.relname = ${table} AND con.conname = ${constraint}`,\n values: collector.values,\n returning: \"none\",\n };\n}\n\n/** Whether a relation of that physical name exists in the migration's schema. */\nexport function renderRelationStateQuery(params: { dialect: SqlDialect; table: string }): RenderedQuery {\n requirePostgres({ dialect: params.dialect, feature: \"renameRecovery\" });\n const collector = new ParamCollector(params.dialect);\n const table = collector.add(params.table);\n return {\n text: `SELECT c.relname::text AS \"table\", c.relkind::text AS \"kind\"\nFROM pg_catalog.pg_class c\nJOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\nWHERE n.nspname = pg_catalog.current_schema() AND c.relname = ${table}`,\n values: collector.values,\n returning: \"none\",\n };\n}\n\n/** Whether a live (non-dropped, non-system) column of that name exists on a table. */\nexport function renderColumnStateQuery(params: {\n dialect: SqlDialect;\n table: string;\n column: string;\n}): RenderedQuery {\n requirePostgres({ dialect: params.dialect, feature: \"renameRecovery\" });\n const collector = new ParamCollector(params.dialect);\n const table = collector.add(params.table);\n const column = collector.add(params.column);\n return {\n text: `SELECT a.attname::text AS \"column\"\nFROM pg_catalog.pg_attribute a\nJOIN pg_catalog.pg_class c ON c.oid = a.attrelid\nJOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\nWHERE n.nspname = pg_catalog.current_schema() AND c.relname = ${table} AND a.attname = ${column}\n AND a.attnum > 0 AND NOT a.attisdropped`,\n values: collector.values,\n returning: \"none\",\n };\n}\n"
|
|
80
81
|
],
|
|
81
|
-
"mappings": "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",
|
|
82
|
-
"debugId": "
|
|
82
|
+
"mappings": "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",
|
|
83
|
+
"debugId": "07BC696B142BA5A864756E2164756E21",
|
|
83
84
|
"names": []
|
|
84
85
|
}
|