@vibeorm/sql 2.3.0 → 2.3.1
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/index.js.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/params.ts", "../src/dialects/module-dependency.ts", "../src/dialects/migration-replay-coverage.ts", "../src/dialects/migration-shadow.ts", "../src/module-journal.ts", "../src/dialects/sqlite-session.ts", "../src/composable.ts", "../src/result-decoder.ts", "../src/pg-array.ts", "../src/codecs.ts", "../src/exclusion.ts", "../src/predicate.ts", "../src/ast.ts", "../src/locks.ts", "../src/json-transport.ts", "../src/capabilities.ts", "../src/dialects/postgres.ts", "../src/dialects/sqlite.ts", "../src/dialects/mysql.ts", "../src/dialects/registry.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/dialects/sqlite-table-definition.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"],
|
|
3
|
+
"sources": ["../src/params.ts", "../src/dialects/module-dependency.ts", "../src/dialects/migration-replay-coverage.ts", "../src/dialects/migration-shadow.ts", "../src/module-journal.ts", "../src/dialects/sqlite-session.ts", "../src/composable.ts", "../src/result-decoder.ts", "../src/pg-array.ts", "../src/codecs.ts", "../src/exclusion.ts", "../src/predicate.ts", "../src/ast.ts", "../src/locks.ts", "../src/json-transport.ts", "../src/capabilities.ts", "../src/identifiers.ts", "../src/dialects/postgres.ts", "../src/dialects/sqlite.ts", "../src/dialects/mysql.ts", "../src/dialects/registry.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/dialects/sqlite-table-definition.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
|
"/**\n * Parameter collection during rendering.\n *\n * The single place placeholder indices are produced — renderers never\n * hand-write `$1`/`?`, so numbering and value order can never drift apart.\n */\n\nimport type { SqlDialect } from \"./dialect.ts\";\n\nexport class ParamCollector {\n private readonly dialect: SqlDialect;\n readonly values: unknown[];\n\n constructor(dialect: SqlDialect) {\n this.dialect = dialect;\n this.values = [];\n }\n\n /** Register one parameter value; returns its placeholder text. */\n add(value: unknown): string {\n this.values.push(value);\n return this.dialect.placeholder({ index: this.values.length });\n }\n\n /** Register many values; returns their placeholders in order. */\n addMany(values: readonly unknown[]): string[] {\n return values.map((value) => this.add(value));\n }\n}\n",
|
|
6
6
|
"import type { SqlDialect } from \"../dialect.ts\";\nimport type { RenderedQuery } from \"../render.ts\";\nimport { ParamCollector } from \"../params.ts\";\n\n/** Read-only evidence needed to protect module-owned tables across namespaces. */\nexport type ModuleDependencyOperation =\n | { readonly kind: \"visibility\" }\n | { readonly kind: \"foreignKeys\"; readonly namespace: string; readonly tables: readonly string[] };\n\n/** Inspect both FK endpoints; SQLite cannot create cross-database foreign keys. */\nexport function renderModuleDependencyQuery(params: { dialect: SqlDialect; operation: ModuleDependencyOperation }): RenderedQuery | undefined {\n const { dialect, operation } = params;\n if (operation.kind === \"visibility\") return dialect.name === \"mysql\" ? { text: \"SHOW GRANTS FOR CURRENT_USER\", values: [], returning: \"none\" } : undefined;\n if (dialect.name === \"sqlite\" || operation.tables.length === 0) return undefined;\n const collector = new ParamCollector(dialect);\n const owned = operation.tables.map((table, index) => `SELECT ${collector.add(operation.namespace)}${index === 0 ? \" AS namespace\" : \"\"}, ${collector.add(table)}${index === 0 ? \" AS table_name\" : \"\"}`).join(\" UNION ALL \");\n const pg = dialect.name === \"postgres\";\n // MySQL folds identifiers only when lower_case_table_names says it does. A\n // case-insensitive catalog collation must not hide a distinct case-only peer.\n const nameKey = ({ column }: { column: string }): string => pg ? column : `CAST(IF(@@lower_case_table_names = 0, ${column}, LOWER(${column})) AS BINARY)`;\n const isOwned = ({ namespace, table }: { namespace: string; table: string }): string => `EXISTS (SELECT 1 FROM owned_tables o WHERE ${nameKey({ column: namespace })} = ${nameKey({ column: \"o.namespace\" })} AND ${nameKey({ column: table })} = ${nameKey({ column: \"o.table_name\" })})`;\n const sourceNamespace = pg ? \"sn.nspname\" : \"fk.CONSTRAINT_SCHEMA\";\n const sourceTable = pg ? \"s.relname\" : \"fk.TABLE_NAME\";\n const targetNamespace = pg ? \"tn.nspname\" : \"fk.UNIQUE_CONSTRAINT_SCHEMA\";\n const targetTable = pg ? \"t.relname\" : \"fk.REFERENCED_TABLE_NAME\";\n const from = pg\n ? \"pg_catalog.pg_constraint fk JOIN pg_catalog.pg_class s ON s.oid = fk.conrelid JOIN pg_catalog.pg_namespace sn ON sn.oid = s.relnamespace JOIN pg_catalog.pg_class t ON t.oid = fk.confrelid JOIN pg_catalog.pg_namespace tn ON tn.oid = t.relnamespace WHERE fk.contype = 'f'\"\n : \"information_schema.REFERENTIAL_CONSTRAINTS fk\";\n return {\n text: `WITH owned_tables AS (${owned})\nSELECT * FROM (SELECT ${pg ? \"fk.conname\" : \"fk.CONSTRAINT_NAME\"} AS constraint_name, ${sourceNamespace} AS source_namespace, ${sourceTable} AS source_table, ${targetNamespace} AS target_namespace, ${targetTable} AS target_table, ${isOwned({ namespace: sourceNamespace, table: sourceTable })} AS source_owned, ${isOwned({ namespace: targetNamespace, table: targetTable })} AS target_owned FROM ${from}) dependencies\nWHERE source_owned OR target_owned\nORDER BY source_namespace, source_table, constraint_name`,\n values: collector.values,\n returning: \"none\",\n };\n}\n",
|
|
@@ -18,15 +18,16 @@
|
|
|
18
18
|
"/**\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 type { 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 return `${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/** 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",
|
|
19
19
|
"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.transform === undefined ? column.alias ?? column.name : column.name;\n}\n",
|
|
20
20
|
"/** Same capability objects as schema validation, with no schema → SQL cycle. */\nexport {\n DIALECT_CAPABILITIES,\n POSTGRES_CAPABILITIES,\n SQLITE_CAPABILITIES,\n MYSQL_CAPABILITIES,\n} from \"@vibeorm/schema\";\n",
|
|
21
|
-
"/**\n *
|
|
22
|
-
"/**\n *
|
|
23
|
-
"/**\n *
|
|
21
|
+
"/**\n * Identifier hygiene shared by every dialect's `quoteIdent`.\n *\n * Quoting doubles the quote character, which is the whole grammar for every\n * other byte — except NUL: C-string servers stop reading an identifier at the\n * first NUL, so `\"users\\0x\"` would address `users`, and a quoted identifier\n * containing one is not an identifier at all. Refused at render time, the\n * earliest point every path (IR, raw `sql.ident`, extension DDL) shares.\n */\n\nimport { VibeError } from \"@vibeorm/schema\";\n\n/** Return `name` unchanged, or throw `VIBE_VALIDATION` when it contains a NUL. */\nexport function assertNoNul(params: { name: string }): string {\n if (params.name.includes(\"\\u0000\")) {\n throw new VibeError({\n code: \"VIBE_VALIDATION\",\n message: \"an SQL identifier cannot contain a NUL character — the server would stop reading it there and address a different object\",\n meta: { name: params.name.replaceAll(\"\\u0000\", \"\\\\0\") },\n });\n }\n return params.name;\n}\n",
|
|
22
|
+
"/**\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 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 orderByNullsMode: \"native\",\n offsetRequiresLimit: null,\n likeEscapeClause: null,\n jsonPathMode: \"operators\",\n supportedJsonOps: [\n \"equals\",\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 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 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 placeholder({ index }) {\n return `$${index}`;\n },\n renderDbNow({ offsetSeconds, collector }) {\n if (offsetSeconds === 0) return \"now()\";\n return `(now() + make_interval(secs => ${collector.add(offsetSeconds)}))`;\n },\n};\n",
|
|
23
|
+
"/**\n * SQLite dialect (bun:sqlite adapter lands in P4).\n *\n * Notes pinned by catalog cases:\n * - OFFSET requires LIMIT → `LIMIT -1 OFFSET n`.\n * - LIKE has no default escape character → explicit ` ESCAPE '\\'` clause.\n * - Case-insensitive matching uses LOWER()/LOWER() (default LIKE is only\n * ASCII-case-insensitive, and we want deterministic semantics).\n */\n\nimport type { SqlDialect } from \"../dialect.ts\";\nimport { SQLITE_CAPABILITIES } from \"../capabilities.ts\";\nimport { assertNoNul } from \"../identifiers.ts\";\n\nexport const sqliteDialect: SqlDialect = {\n name: \"sqlite\",\n capabilities: SQLITE_CAPABILITIES,\n\n inArrayStrategy: \"expand\",\n tupleInStrategy: \"rowValue\",\n upsertForm: \"onConflict\",\n // Measured on sqlite 3.51 (notes-B.md): a batch proposing one conflict key\n // twice is applied row by row, so the second row UPDATES the first and the\n // statement reports no error — true even for byte-identical keys, and\n // `changes()` does not reveal the collapse (3 submitted rows, 3 changes,\n // 2 rows stored). Text compares as BINARY unless the column declares a\n // collation, and every scalar lands in TEXT/INTEGER/REAL/BLOB with no\n // scale or precision of its own, so Decimal ('1.0' vs '1.00') and DateTime\n // stay byte-comparable here.\n conflictKeyEquality: {\n foldingScalars: [],\n textIsBinaryByDefault: true,\n // Sqlite ships three collating sequences and only BINARY compares bytes:\n // NOCASE folds ASCII case, and RTRIM is case-SENSITIVE and still equates\n // 'x' with 'x ' (both measured in tests/catalog/conflict-key-equality.test.ts).\n duplicatesInOneStatement: \"lastWriteWins\",\n },\n excludedRowRef: { form: \"keyword\", name: \"excluded\" },\n doNothingForm: \"onConflictDoNothing\",\n insensitiveLike: \"lower\",\n // LIKE is ASCII-case-insensitive here — strict pattern matching rides GLOB\n // (byte-exact; its `*`/`?`/`[` metachars get their own escaping, like.ts).\n strictMatchStrategy: \"glob\",\n orderByNullsMode: \"native\",\n offsetRequiresLimit: { limitText: \"-1\" },\n likeEscapeClause: \" ESCAPE '\\\\'\",\n // json_extract covers scalar extraction + LIKE over extracted text; the\n // expressible array subset (N6, board #21) is wired: `$[0]` / `$[#-1]` path\n // elements for array_starts_with/array_ends_with (sqlite ≥3.31; bun:sqlite\n // bundles far newer) and json_each() EXISTS for SCALAR-element\n // array_contains. Deep structural jsonb-style containment (object/array/\n // null members) has no cheap faithful form — the renderer refuses those\n // ELEMENT shapes with VIBE_UNSUPPORTED_CAPABILITY even though the op itself\n // is listed here.\n jsonPathMode: \"sqliteExtract\",\n supportedJsonOps: [\n \"equals\",\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 lastInsertIdSql: null,\n // No locking-read clause in sqlite: `SELECT … FOR UPDATE` is a syntax error\n // (verified on sqlite 3.51.0). None is needed for the overlays either — a\n // write transaction holds the single writer lock, so a read inside it cannot\n // race another writer.\n rowLockSyntax: null,\n advisoryLockFunctions: null,\n // No per-row DEFAULT keyword in VALUES — heterogeneous createMany rows are\n // grouped by column set into separate statements (M4).\n rowDefaultKeyword: false,\n paramBudget: 900,\n\n // No boolean type: the Boolean codec stores 0/1 in an INTEGER column, so a\n // DDL literal that must compare against stored values spells it the same way.\n booleanLiteral: { true: \"1\", false: \"0\" },\n\n quoteIdent({ name }) {\n return `\"${assertNoNul({ name }).replaceAll('\"', '\"\"')}\"`;\n },\n // Sqlite has no escape character inside a string literal at all: doubling the\n // quote is the whole grammar, and a backslash is an ordinary byte.\n quoteStringLiteral({ value }) {\n return `'${value.replaceAll(\"'\", \"''\")}'`;\n },\n placeholder() {\n return \"?\";\n },\n renderDbNow({ offsetSeconds, collector }) {\n // The format string mirrors Date#toISOString() (`%f` = SS.SSS), which is\n // exactly what the DateTime codec stores — lexicographic comparisons\n // against stored text stay correct. The offset rides sqlite's relative\n // modifier syntax (`'300 seconds'` / `'-300 seconds'`).\n if (offsetSeconds === 0) return `strftime('%Y-%m-%dT%H:%M:%fZ', 'now')`;\n return `strftime('%Y-%m-%dT%H:%M:%fZ', 'now', ${collector.add(offsetSeconds)} || ' seconds')`;\n },\n};\n",
|
|
24
|
+
"/**\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` → `INSERT IGNORE`, which is broader: it\n * downgrades other row-level errors to warnings too.\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 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: \"insertIgnore\",\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 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 \"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 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.\n rowLockSyntax: {\n strengths: Object.freeze({ update: \"FOR UPDATE\", share: \"FOR SHARE\" }),\n wait: Object.freeze({ wait: \"\", nowait: \" NOWAIT\", skipLocked: \" SKIP LOCKED\" }),\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 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 placeholder() {\n return \"?\";\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};\n",
|
|
24
25
|
"/**\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",
|
|
25
26
|
"import { 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 } from \"../ast.ts\";\nimport type { PostgresExplainOptions, PostgresWorkloadQuery } from \"./postgres-diagnostics.ts\";\n\n/** Fixed, parameterless diagnostics whose text never varies. */\nexport type FixedDiagnosticQuery = \"postgresJsonWire\" | \"sqliteTriggers\";\n\n/**\n * Fixed diagnostic queries; execution and result interpretation belong to callers.\n *\n * Three variants, discriminated by `query`:\n * - a fixed transport/catalog probe,\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 | {\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 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 two fixed probes; everything else is an EPIC 5 PostgreSQL diagnostic. */\nexport function isFixedDiagnostic(params: { query: DiagnosticStatement[\"query\"] }): params is { query: FixedDiagnosticQuery } {\n return params.query === \"postgresJsonWire\" || params.query === \"sqliteTriggers\";\n}\n",
|
|
26
27
|
"/**\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",
|
|
27
28
|
"/** 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/** The reads `catalog` folds, in the order their JSON columns appear. */\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",
|
|
28
29
|
"/** Native RLS text contract. PostgreSQL/PGlite only, with no rewriting fallback. */\nimport { RlsContextError, VibeError, 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 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/** Desired predicate only, for drift probes; it is NOT server-canonical deparse. */\nexport function renderRlsPredicate(params: { dialect: SqlDialect; schema: SchemaIR; model: string }): string {\n const model = protectedModel(params);\n return predicate({ dialect: params.dialect, schema: params.schema, model });\n}\n\nfunction predicate(params: { dialect: SqlDialect; schema: SchemaIR; model: ModelIR }): string {\n const { dialect, schema, model } = params;\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 `(${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: 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/** Every declared setting, parameterized in declaration order and transaction-local. */\nexport function renderRlsContext(params: {\n dialect: SqlDialect;\n context: RlsContextIR;\n values: Readonly<Record<string, string | null>>;\n}): RenderedQuery {\n requireRls(params);\n if (validateRlsContextIR({ context: params.context }).length !== 0 || Object.keys(params.context).length === 0 ||\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 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 return query({ text: `SELECT ${parts.join(\", \")}`, values: collector.values });\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 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 const collector = new ParamCollector(params.dialect);\n return query({ text: `SELECT set_config('role', ${collector.add(params.role)}, true)`, values: collector.values });\n}\n",
|
|
29
|
-
"import { JSON_TRANSPORT, projectionOutputName } from \"./json-transport.ts\";\nimport { isFixedDiagnostic, 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 { internalError, unsupportedCapability } from \"@vibeorm/schema\";\nimport { isSqlFragment, renderSqlFragment, sqlUsesIncoming } from \"./composable.ts\";\nimport type { SqlFragmentSpec } from \"@vibeorm/schema\";\nimport type { ColRef, OrderTerm, SqlStatement, RlsReadinessStatement, RlsProbeTableStatement, RlsPolicyPathStatement, SqlExpr, TableRef } from \"./ast.ts\";\nimport type {\n AggFn,\n AggRef,\n DeleteStatement,\n InsertStatement,\n LateralJoin,\n SelectExpr,\n SelectStatement,\n SetOperator,\n UpdateStatement,\n} from \"./ast.ts\";\nimport { isDbNowMarker, isExcludedRef, isJsonParamCell, isListSetOperation, isSetOperation, isSqlDefaultCell } from \"./ast.ts\";\nimport type { SqlDialect } from \"./dialect.ts\";\nimport { containsPattern, endsWithPattern, startsWithPattern, strictMatchPattern } from \"./like.ts\";\nimport { renderAdvisoryLock, renderRowLockClause } from \"./locks.ts\";\nimport { ParamCollector } from \"./params.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 === \"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 \"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 \"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, context: statement.context, values: statement.values });\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 const name = dialect.quoteIdent({ name: column.name });\n const ref = column.table === undefined ? name : `${dialect.quoteIdent({ name: column.table })}.${name}`;\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 return ref;\n}\n\n/**\n * Projection rendering: a plain reference, or its B3 wire transform\n * (`\"col\"::text AS \"col\"` / `encode(\"col\", 'base64') AS \"col\"`) — postgres\n * lateral subselects only; any other dialect reaching one is a builder bug.\n */\nfunction quoteProjection(dialect: SqlDialect, column: ColRef): string {\n if (column.transform === undefined) {\n const base = quoteCol(dialect, column);\n if (column.alias === undefined) return base;\n return `${base} AS ${dialect.quoteIdent({ name: column.alias })}`;\n }\n if (dialect.name !== \"postgres\") {\n throw internalError({ message: \"ColRef.transform is a postgres lateral-join construct\" });\n }\n const ref = quoteCol(dialect, column);\n const alias = dialect.quoteIdent({ name: column.name });\n if (column.transform === \"castText\") return `${ref}::text AS ${alias}`;\n return `encode(${ref}, 'base64') AS ${alias}`;\n}\n\nfunction renderTable(dialect: SqlDialect, table: TableRef): string {\n const name = dialect.quoteIdent({ name: table.name });\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/** `COUNT(*)` / `FN(\"col\")` — shared by projections, HAVING and ORDER BY. */\nfunction renderAggRef(dialect: SqlDialect, agg: AggRef): string {\n if (agg.fn === \"countAll\") return \"COUNT(*)\";\n return `${AGG_FN_SQL[agg.fn]}(${quoteCol(dialect, agg.column)})`;\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 return `${quoteCol(dialect, expr.column)} ${op} ${collector.add(expr.value)}`;\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 (dialect.inArrayStrategy === \"any\") {\n const base = `${column} = ANY(${collector.add([...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 \"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 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 }\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)} ${op} ${collector.add(expr.value)}`;\n }\n\n case \"arrayHas\": {\n assertScalarArrays(dialect, \"the scalar-list filter \\\"has\\\"\");\n const base = `${collector.add(expr.value)} = ANY(${quoteCol(dialect, expr.column)})`;\n return expr.negate === true ? `NOT (${base})` : base;\n }\n\n case \"arrayContainsAll\": {\n assertScalarArrays(dialect, \"the scalar-list filter \\\"hasEvery\\\"\");\n return `${quoteCol(dialect, expr.column)} @> ${collector.add([...expr.values])}`;\n }\n\n case \"arrayOverlaps\": {\n assertScalarArrays(dialect, \"the scalar-list filter \\\"hasSome\\\"\");\n return `${quoteCol(dialect, expr.column)} && ${collector.add([...expr.values])}`;\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// ─── JSON path filters ─────────────────────────────────────────────\n\n/** `$.a.b[0]` path string for sqlite/mysql — always bound, never spliced. */\nfunction 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 out += `.\"${segment.replaceAll('\"', '\\\\\"')}\"`;\n }\n }\n return out;\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 * 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 switch (expr.op) {\n case \"equals\":\n return `(${column} #> ${pathParam}) ${cmp} ${collector.add(JSON.stringify(expr.value))}${dialect.jsonParamCast}`;\n case \"string_contains\":\n case \"string_starts_with\":\n case \"string_ends_with\":\n return renderJsonLike({ dialect, target: `(${column} #>> ${pathParam})`, expr, collector });\n case \"array_contains\":\n return `(${column} #> ${pathParam}) @> ${collector.add(JSON.stringify(expr.value))}${dialect.jsonParamCast}`;\n case \"array_starts_with\":\n return `(${column} #> ${pathParam}) -> 0 = ${collector.add(JSON.stringify(expr.value))}${dialect.jsonParamCast}`;\n case \"array_ends_with\":\n return `(${column} #> ${pathParam}) -> -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 operand = typeof value === \"object\"\n ? `json(${collector.add(JSON.stringify(value))})` : collector.add(bound);\n base = `(${guard} AND ${target} = ${operand})`;\n }\n return expr.negate === true ? `NOT (${base})` : base;\n };\n switch (expr.op) {\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 \"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\nfunction renderOrderTerm(params: { dialect: SqlDialect; term: OrderTerm; collector: ParamCollector }): string {\n const { dialect, term, collector } = params;\n if (\"agg\" in term) {\n return `${renderAggRef(dialect, term.agg)} ${term.direction === \"asc\" ? \"ASC\" : \"DESC\"}`;\n }\n if (\"select\" in term) {\n // Relation orderBy: a correlated scalar subquery — its parameters merge\n // into the shared sequence exactly where they appear in the text.\n const sub = renderSelect({ dialect, statement: term.select, collector });\n return `(${sub.text}) ${term.direction === \"asc\" ? \"ASC\" : \"DESC\"}`;\n }\n const column = quoteCol(dialect, term.column);\n const direction = term.direction === \"asc\" ? \"ASC\" : \"DESC\";\n if (term.nulls === undefined) {\n return `${column} ${direction}`;\n }\n if (dialect.orderByNullsMode === \"native\") {\n return `${column} ${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 `${column} ${direction}`;\n }\n const nullsTerm = term.nulls === \"first\" ? `${column} IS NULL DESC` : `${column} IS NULL`;\n return `${nullsTerm}, ${column} ${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 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-only SQL by\n * design — the runtime gates the \"join\" strategy on `capabilities.lateralJoin`\n * at build 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 if (join.select.columns.length === 0 || join.select.selectExpr !== undefined ||\n (join.select.aggregates?.length ?? 0) > 0 || join.select.rowNumber !== undefined) {\n throw internalError({ message: \"positional lateral rows require an explicit column-only projection\" });\n }\n const names = join.select.columns.map((column) => projectionOutputName({ column }));\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_build_array(${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_build_array(${chunks.join(\", \")})`;\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 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 const columnAlias = dialect.quoteIdent({ name: join.columnAlias });\n const subAlias = dialect.quoteIdent({ name: \"__sub\" });\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.\n let aggOrder = \"\";\n if (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 );\n const terms = join.select.orderBy;\n const columnTerms = terms.filter(\n (term): term is Extract<OrderTerm, { column: ColRef }> => \"column\" in term,\n );\n if (columnTerms.length === terms.length && columnTerms.every((term) => projected.has(term.column.name))) {\n const rendered = columnTerms.map((term) =>\n renderOrderTerm({ dialect, term: { ...term, column: { table: \"__sub\", name: term.column.name } }, collector }),\n );\n aggOrder = ` ORDER BY ${rendered.join(\", \")}`;\n }\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_agg(${rowJson}${aggOrder}), '[]'::json) 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// ─── RETURNING ────────────────────────────────────────────────────\n\nfunction applyReturning(params: {\n dialect: SqlDialect;\n requested: readonly string[] | undefined;\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 return { suffix: \"\", status: \"omitted\" };\n }\n const columns = requested.map((name) => dialect.quoteIdent({ name })).join(\", \");\n return { suffix: ` RETURNING ${columns}`, status: \"native\" };\n}\n\n// ─── SELECT ───────────────────────────────────────────────────────\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 !== 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 columnList.push(`${renderAggRef(dialect, selection.agg)} AS ${dialect.quoteIdent({ name: selection.alias })}`);\n }\n }\n if (statement.rowNumber !== undefined) {\n const rowNumber = statement.rowNumber;\n if (rowNumber.partitionBy.length === 0) {\n throw internalError({ message: \"rowNumber needs at least one partition column\" });\n }\n const partition = rowNumber.partitionBy.map((column) => quoteCol(dialect, column)).join(\", \");\n const order =\n rowNumber.orderBy.length === 0\n ? \"\"\n : ` ORDER BY ${rowNumber.orderBy.map((term) => renderOrderTerm({ dialect, term, collector })).join(\", \")}`;\n columnList.push(\n `ROW_NUMBER() OVER (PARTITION BY ${partition}${order}) AS ${dialect.quoteIdent({ name: rowNumber.alias })}`,\n );\n }\n let distinctPrefix = \"\";\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, column)).join(\", \")}) `;\n }\n const columns = columnList.length === 0 ? \"*\" : columnList.join(\", \");\n\n let from: string;\n 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\n if (statement.lateralJoins !== undefined && statement.lateralJoins.length > 0) {\n if (!dialect.capabilities.lateralJoin) {\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.groupBy.map((column) => quoteCol(dialect, column)).join(\", \")}`;\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) => renderOrderTerm({ dialect, term, collector }));\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 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\nfunction renderInsert(params: {\n dialect: SqlDialect;\n statement: InsertStatement;\n collector: ParamCollector;\n}): RenderedQuery {\n const { dialect, statement, collector } = params;\n\n if (statement.columns.length === 0) {\n throw internalError({ message: \"insert requires at least one column\" });\n }\n if (statement.rows.length === 0) {\n throw internalError({ message: \"insert requires at least one row\" });\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 skipConflicts = onConflict !== undefined && \"doNothing\" in onConflict;\n const insertKeyword =\n skipConflicts && dialect.doNothingForm === \"insertIgnore\" ? \"INSERT IGNORE INTO\" : \"INSERT INTO\";\n\n const columnList = statement.columns.map((name) => dialect.quoteIdent({ name })).join(\", \");\n const rowsSql = 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)}${dialect.jsonParamCast}`;\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 = `${insertKeyword} ${renderTable(dialect, statement.table)} (${columnList}) 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 if (onConflict.constraint !== undefined || onConflict.conflictWhere !== undefined) {\n // INSERT IGNORE 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 throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a refined conflict target (constraint / partial-index predicate) on INSERT IGNORE\",\n hint: \"mysql skips on any duplicate key — drop the refinement or gate the call per dialect\",\n });\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 const assignments = 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 } else {\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 text += ` ON DUPLICATE KEY UPDATE ${assignments}${trick}`;\n }\n }\n }\n\n const returning = applyReturning({ dialect, requested: statement.returning });\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}): 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 setSql = renderAssignments({ dialect, entries: assignments, collector });\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 });\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\nfunction renderAssignments(params: {\n dialect: SqlDialect;\n entries: readonly (readonly [string, unknown])[];\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}): string {\n const { dialect, entries, collector, selfRef } = params;\n return entries\n .map(([name, value]) => {\n const column = dialect.quoteIdent({ name });\n const read = selfRef === undefined ? column : `${selfRef}.${column}`;\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 `${column} = ${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 `${column} = ${renderIncomingRowColumn({ dialect, column: value.column })}`;\n }\n // Json cell: same param-type pinning as the VALUES cells above.\n if (isJsonParamCell(value)) {\n return `${column} = ${collector.add(value.text)}${dialect.jsonParamCast}`;\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 `${column} = ${read} ${SET_OPERATION_SQL[value.__op]} ${numeric}`;\n }\n if (isDbNowMarker(value)) {\n return `${column} = ${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 `${column} = array_append(${read}, ${collector.add(value.value)})`;\n }\n return `${column} = ${read} || ${collector.add(value.value)}`;\n }\n return `${column} = ${collector.add(value)}`;\n })\n .join(\", \");\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 });\n return { text: text + returning.suffix, values: collector.values, returning: returning.status };\n}\n",
|
|
30
|
+
"import { JSON_TRANSPORT, projectionOutputName } from \"./json-transport.ts\";\nimport { isFixedDiagnostic, 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 { internalError, unsupportedCapability } from \"@vibeorm/schema\";\nimport { isSqlFragment, renderSqlFragment, sqlUsesIncoming } from \"./composable.ts\";\nimport type { SqlFragmentSpec } from \"@vibeorm/schema\";\nimport type { ColRef, OrderTerm, SqlStatement, RlsReadinessStatement, RlsProbeTableStatement, RlsPolicyPathStatement, SqlExpr, TableRef } from \"./ast.ts\";\nimport type {\n AggFn,\n AggRef,\n DeleteStatement,\n InsertStatement,\n LateralJoin,\n SelectExpr,\n SelectStatement,\n SetOperator,\n UpdateStatement,\n} from \"./ast.ts\";\nimport { isDbNowMarker, isExcludedRef, isJsonParamCell, isListSetOperation, isSetOperation, isSqlDefaultCell } from \"./ast.ts\";\nimport type { SqlDialect } from \"./dialect.ts\";\nimport { containsPattern, endsWithPattern, startsWithPattern, strictMatchPattern } from \"./like.ts\";\nimport { renderAdvisoryLock, renderRowLockClause } from \"./locks.ts\";\nimport { ParamCollector } from \"./params.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 === \"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 \"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 \"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, context: statement.context, values: statement.values });\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 const name = dialect.quoteIdent({ name: column.name });\n const ref = column.table === undefined ? name : `${dialect.quoteIdent({ name: column.table })}.${name}`;\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 return ref;\n}\n\n/**\n * Projection rendering: a plain reference, or its B3 wire transform\n * (`\"col\"::text AS \"col\"` / `encode(\"col\", 'base64') AS \"col\"`) — postgres\n * lateral subselects only; any other dialect reaching one is a builder bug.\n */\nfunction quoteProjection(dialect: SqlDialect, column: ColRef): string {\n if (column.transform === undefined) {\n const base = quoteCol(dialect, column);\n if (column.alias === undefined) return base;\n return `${base} AS ${dialect.quoteIdent({ name: column.alias })}`;\n }\n if (dialect.name !== \"postgres\") {\n throw internalError({ message: \"ColRef.transform is a postgres lateral-join construct\" });\n }\n const ref = quoteCol(dialect, column);\n const alias = dialect.quoteIdent({ name: column.name });\n if (column.transform === \"castText\") return `${ref}::text AS ${alias}`;\n return `encode(${ref}, 'base64') AS ${alias}`;\n}\n\nfunction renderTable(dialect: SqlDialect, table: TableRef): string {\n const name = dialect.quoteIdent({ name: table.name });\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/** `COUNT(*)` / `FN(\"col\")` — shared by projections, HAVING and ORDER BY. */\nfunction renderAggRef(dialect: SqlDialect, agg: AggRef): string {\n if (agg.fn === \"countAll\") return \"COUNT(*)\";\n return `${AGG_FN_SQL[agg.fn]}(${quoteCol(dialect, agg.column)})`;\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 return `${quoteCol(dialect, expr.column)} ${op} ${collector.add(expr.value)}`;\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 (dialect.inArrayStrategy === \"any\") {\n const base = `${column} = ANY(${collector.add([...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 \"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 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 }\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)} ${op} ${collector.add(expr.value)}`;\n }\n\n case \"arrayHas\": {\n assertScalarArrays(dialect, \"the scalar-list filter \\\"has\\\"\");\n const base = `${collector.add(expr.value)} = ANY(${quoteCol(dialect, expr.column)})`;\n return expr.negate === true ? `NOT (${base})` : base;\n }\n\n case \"arrayContainsAll\": {\n assertScalarArrays(dialect, \"the scalar-list filter \\\"hasEvery\\\"\");\n return `${quoteCol(dialect, expr.column)} @> ${collector.add([...expr.values])}`;\n }\n\n case \"arrayOverlaps\": {\n assertScalarArrays(dialect, \"the scalar-list filter \\\"hasSome\\\"\");\n return `${quoteCol(dialect, expr.column)} && ${collector.add([...expr.values])}`;\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// ─── JSON path filters ─────────────────────────────────────────────\n\n/** `$.a.b[0]` path string for sqlite/mysql — always bound, never spliced. */\nfunction 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\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 * 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 switch (expr.op) {\n case \"equals\":\n return `(${column} #> ${pathParam}) ${cmp} ${collector.add(JSON.stringify(expr.value))}${dialect.jsonParamCast}`;\n case \"string_contains\":\n case \"string_starts_with\":\n case \"string_ends_with\":\n return renderJsonLike({ dialect, target: `(${column} #>> ${pathParam})`, expr, collector });\n case \"array_contains\":\n return `(${column} #> ${pathParam}) @> ${collector.add(JSON.stringify(expr.value))}${dialect.jsonParamCast}`;\n case \"array_starts_with\":\n return `(${column} #> ${pathParam}) -> 0 = ${collector.add(JSON.stringify(expr.value))}${dialect.jsonParamCast}`;\n case \"array_ends_with\":\n return `(${column} #> ${pathParam}) -> -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 operand = typeof value === \"object\"\n ? `json(${collector.add(JSON.stringify(value))})` : collector.add(bound);\n base = `(${guard} AND ${target} = ${operand})`;\n }\n return expr.negate === true ? `NOT (${base})` : base;\n };\n switch (expr.op) {\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 \"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\nfunction renderOrderTerm(params: { dialect: SqlDialect; term: OrderTerm; collector: ParamCollector }): string {\n const { dialect, term, collector } = params;\n if (\"agg\" in term) {\n return `${renderAggRef(dialect, term.agg)} ${term.direction === \"asc\" ? \"ASC\" : \"DESC\"}`;\n }\n if (\"select\" in term) {\n // Relation orderBy: a correlated scalar subquery — its parameters merge\n // into the shared sequence exactly where they appear in the text.\n const sub = renderSelect({ dialect, statement: term.select, collector });\n return `(${sub.text}) ${term.direction === \"asc\" ? \"ASC\" : \"DESC\"}`;\n }\n const column = quoteCol(dialect, term.column);\n const direction = term.direction === \"asc\" ? \"ASC\" : \"DESC\";\n if (term.nulls === undefined) {\n return `${column} ${direction}`;\n }\n if (dialect.orderByNullsMode === \"native\") {\n return `${column} ${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 `${column} ${direction}`;\n }\n const nullsTerm = term.nulls === \"first\" ? `${column} IS NULL DESC` : `${column} IS NULL`;\n return `${nullsTerm}, ${column} ${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 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-only SQL by\n * design — the runtime gates the \"join\" strategy on `capabilities.lateralJoin`\n * at build 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 if (join.select.columns.length === 0 || join.select.selectExpr !== undefined ||\n (join.select.aggregates?.length ?? 0) > 0 || join.select.rowNumber !== undefined) {\n throw internalError({ message: \"positional lateral rows require an explicit column-only projection\" });\n }\n const names = join.select.columns.map((column) => projectionOutputName({ column }));\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_build_array(${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_build_array(${chunks.join(\", \")})`;\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 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 const columnAlias = dialect.quoteIdent({ name: join.columnAlias });\n const subAlias = dialect.quoteIdent({ name: \"__sub\" });\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.\n let aggOrder = \"\";\n if (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 );\n const terms = join.select.orderBy;\n const columnTerms = terms.filter(\n (term): term is Extract<OrderTerm, { column: ColRef }> => \"column\" in term,\n );\n if (columnTerms.length === terms.length && columnTerms.every((term) => projected.has(term.column.name))) {\n const rendered = columnTerms.map((term) =>\n renderOrderTerm({ dialect, term: { ...term, column: { table: \"__sub\", name: term.column.name } }, collector }),\n );\n aggOrder = ` ORDER BY ${rendered.join(\", \")}`;\n }\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_agg(${rowJson}${aggOrder}), '[]'::json) 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// ─── RETURNING ────────────────────────────────────────────────────\n\nfunction applyReturning(params: {\n dialect: SqlDialect;\n requested: readonly string[] | undefined;\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 return { suffix: \"\", status: \"omitted\" };\n }\n const columns = requested.map((name) => dialect.quoteIdent({ name })).join(\", \");\n return { suffix: ` RETURNING ${columns}`, status: \"native\" };\n}\n\n// ─── SELECT ───────────────────────────────────────────────────────\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 !== 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 columnList.push(`${renderAggRef(dialect, selection.agg)} AS ${dialect.quoteIdent({ name: selection.alias })}`);\n }\n }\n if (statement.rowNumber !== undefined) {\n const rowNumber = statement.rowNumber;\n if (rowNumber.partitionBy.length === 0) {\n throw internalError({ message: \"rowNumber needs at least one partition column\" });\n }\n const partition = rowNumber.partitionBy.map((column) => quoteCol(dialect, column)).join(\", \");\n const order =\n rowNumber.orderBy.length === 0\n ? \"\"\n : ` ORDER BY ${rowNumber.orderBy.map((term) => renderOrderTerm({ dialect, term, collector })).join(\", \")}`;\n columnList.push(\n `ROW_NUMBER() OVER (PARTITION BY ${partition}${order}) AS ${dialect.quoteIdent({ name: rowNumber.alias })}`,\n );\n }\n let distinctPrefix = \"\";\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, column)).join(\", \")}) `;\n }\n const columns = columnList.length === 0 ? \"*\" : columnList.join(\", \");\n\n let from: string;\n 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\n if (statement.lateralJoins !== undefined && statement.lateralJoins.length > 0) {\n if (!dialect.capabilities.lateralJoin) {\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.groupBy.map((column) => quoteCol(dialect, column)).join(\", \")}`;\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) => renderOrderTerm({ dialect, term, collector }));\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 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\nfunction renderInsert(params: {\n dialect: SqlDialect;\n statement: InsertStatement;\n collector: ParamCollector;\n}): RenderedQuery {\n const { dialect, statement, collector } = params;\n\n if (statement.columns.length === 0) {\n throw internalError({ message: \"insert requires at least one column\" });\n }\n if (statement.rows.length === 0) {\n throw internalError({ message: \"insert requires at least one row\" });\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 skipConflicts = onConflict !== undefined && \"doNothing\" in onConflict;\n const insertKeyword =\n skipConflicts && dialect.doNothingForm === \"insertIgnore\" ? \"INSERT IGNORE INTO\" : \"INSERT INTO\";\n\n const columnList = statement.columns.map((name) => dialect.quoteIdent({ name })).join(\", \");\n const rowsSql = 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)}${dialect.jsonParamCast}`;\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 = `${insertKeyword} ${renderTable(dialect, statement.table)} (${columnList}) 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 if (onConflict.constraint !== undefined || onConflict.conflictWhere !== undefined) {\n // INSERT IGNORE 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 throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a refined conflict target (constraint / partial-index predicate) on INSERT IGNORE\",\n hint: \"mysql skips on any duplicate key — drop the refinement or gate the call per dialect\",\n });\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 const assignments = 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 } else {\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 text += ` ON DUPLICATE KEY UPDATE ${assignments}${trick}`;\n }\n }\n }\n\n const returning = applyReturning({ dialect, requested: statement.returning });\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}): 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 setSql = renderAssignments({ dialect, entries: assignments, collector });\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 });\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\nfunction renderAssignments(params: {\n dialect: SqlDialect;\n entries: readonly (readonly [string, unknown])[];\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}): string {\n const { dialect, entries, collector, selfRef } = params;\n return entries\n .map(([name, value]) => {\n const column = dialect.quoteIdent({ name });\n const read = selfRef === undefined ? column : `${selfRef}.${column}`;\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 `${column} = ${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 `${column} = ${renderIncomingRowColumn({ dialect, column: value.column })}`;\n }\n // Json cell: same param-type pinning as the VALUES cells above.\n if (isJsonParamCell(value)) {\n return `${column} = ${collector.add(value.text)}${dialect.jsonParamCast}`;\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 `${column} = ${read} ${SET_OPERATION_SQL[value.__op]} ${numeric}`;\n }\n if (isDbNowMarker(value)) {\n return `${column} = ${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 `${column} = array_append(${read}, ${collector.add(value.value)})`;\n }\n return `${column} = ${read} || ${collector.add(value.value)}`;\n }\n return `${column} = ${collector.add(value)}`;\n })\n .join(\", \");\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 });\n return { text: text + returning.suffix, values: collector.values, returning: returning.status };\n}\n",
|
|
30
31
|
"/**\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",
|
|
31
32
|
"import { VibeError } from \"@vibeorm/schema\";\n\n/** One preserved column clause; expressions are never interpreted or normalized. */\nexport type SqliteColumnClause = { readonly name: string; readonly sql: string };\n/** Exact slices of a database-produced CREATE TABLE's outer definition list. */\nexport type TableDefinitionParts = { readonly clauses: readonly string[]; readonly suffix: string };\n\n/** Extract a CREATE TABLE list with a quote-aware delimiter walk, not an expression parser. */\nexport function tableDefinitionParts(params: { sql: string }): TableDefinitionParts {\n const sql = params.sql;\n if (!/^\\s*CREATE\\s+(?:TEMP(?:ORARY)?\\s+)?TABLE\\b/i.test(sql)) throw unavailable();\n const parts: string[] = [];\n let start = -1;\n let depth = 0;\n let quote: string | undefined;\n for (let index = 0; index < sql.length; index++) {\n const char = sql[index]!;\n if (quote !== undefined) {\n if (char === quote) {\n if (quote !== \"]\" && sql[index + 1] === quote) index++;\n else quote = undefined;\n }\n continue;\n }\n if (char === \"'\" || char === '\"' || char === \"`\") { quote = char; continue; }\n if (char === \"[\") { quote = \"]\"; continue; }\n if (char === \"-\" && sql[index + 1] === \"-\") { const end = sql.indexOf(\"\\n\", index + 2); if (end < 0) break; index = end; continue; }\n if (char === \"/\" && sql[index + 1] === \"*\") { const end = sql.indexOf(\"*/\", index + 2); if (end < 0) break; index = end + 1; continue; }\n if (char === \"(\") { if (depth === 0) start = index + 1; depth++; }\n else if (char === \")\") {\n depth--;\n if (depth === 0 && start >= 0) { parts.push(sql.slice(start, index).trim()); return { clauses: parts, suffix: sql.slice(index + 1) }; }\n } else if (char === \",\" && depth === 1) { parts.push(sql.slice(start, index).trim()); start = index + 1; }\n }\n throw unavailable();\n}\nfunction unavailable(): VibeError {\n return new VibeError({ code: \"VIBE_MIGRATION\", message: \"Cannot preserve table definition\", meta: { reason: \"table-definition-unavailable\" } });\n}\n\n/** Return column clauses without rewriting any SQL inside them. */\nexport function sqliteColumnClauses(params: { sql: string }): readonly SqliteColumnClause[] {\n const columns: SqliteColumnClause[] = [];\n for (const part of tableDefinitionParts(params).clauses) {\n const token = /^(?:\"((?:[^\"]|\"\")+)\"|`((?:[^`]|``)+)`|\\[([^\\]]+)\\]|([A-Za-z_][A-Za-z_0-9]*))/.exec(part);\n if (token === null) throw unavailable();\n if (token[4] !== undefined && /^(?:CONSTRAINT|PRIMARY|UNIQUE|CHECK|FOREIGN)$/i.test(token[4])) continue;\n const name = token[1]?.replaceAll('\"\"', '\"') ?? token[2]?.replaceAll(\"``\", \"`\") ?? token[3] ?? token[4]!;\n columns.push({ name, sql: part });\n }\n return columns;\n}\n",
|
|
32
33
|
"import { unsupportedCapability } from \"@vibeorm/schema\";\nimport type { QualifiedSqlName } from \"@vibeorm/schema\";\nimport type { SqlDialect } from \"../dialect.ts\";\nimport { ParamCollector } from \"../params.ts\";\nimport type { RenderedQuery } from \"../render.ts\";\n\n/** Parsed custom type spelling; quoted identifiers retain their exact bytes. */\nexport type PostgresTypeName = {\n readonly namespace?: string;\n readonly name: string;\n readonly modifier: string;\n readonly array: boolean;\n};\n\nconst IDENTIFIER = '(?:\"(?:[^\"\\\\x00]|\"\")+\"|[a-zA-Z_][a-zA-Z_0-9$]*)';\nconst MODIFIER_VALUE = `(?:[+-]?\\\\d+|${IDENTIFIER}|'(?:[^'\\\\x00]|'')*')`;\nconst TYPE_NAME: RegExp = new RegExp(`^\\\\s*(${IDENTIFIER})(?:\\\\s*\\\\.\\\\s*(${IDENTIFIER}))?\\\\s*(\\\\(\\\\s*${MODIFIER_VALUE}(?:\\\\s*,\\\\s*${MODIFIER_VALUE})*\\\\s*\\\\))?\\\\s*((?:\\\\[\\\\s*\\\\]\\\\s*)*)$`);\nconst MODIFIER_TOKEN: RegExp = new RegExp(MODIFIER_VALUE, \"g\");\nfunction modifier(params: { raw?: string }): string {\n if (params.raw === undefined) return \"\";\n const tokens = params.raw.slice(1, -1).match(MODIFIER_TOKEN) ?? [];\n return `(${tokens.map((token) => /^[+-]?\\d+$/.test(token) ? BigInt(token).toString() : token.startsWith(\"'\") || token.startsWith('\"') ? token : token.toLowerCase()).join(\",\")})`;\n}\nfunction identifier(params: { value: string }): string {\n return params.value.startsWith('\"') ? params.value.slice(1, -1).replaceAll('\"\"', '\"') : params.value.toLowerCase();\n}\n\n/** Parse the identifier/modifier/array syntax used by PostgreSQL extension types. */\nexport function parsePostgresTypeName(params: { raw: string }): PostgresTypeName | undefined {\n const match = TYPE_NAME.exec(params.raw);\n if (match === null) return undefined;\n return {\n ...(match[2] === undefined ? {} : { namespace: identifier({ value: match[1]! }) }),\n name: identifier({ value: match[2] ?? match[1]! }),\n modifier: modifier({ ...(match[3] === undefined ? {} : { raw: match[3] }) }),\n array: (match[4]?.length ?? 0) > 0,\n };\n}\n\n/** Render a resolved type without depending on the executing connection's search path. */\nexport function renderPostgresTypeName(params: { dialect: SqlDialect; type: PostgresTypeName }): string {\n if (params.dialect.name !== \"postgres\") throw unsupportedCapability({ dialect: params.dialect.name, feature: \"postgresTypeIdentity\" });\n const { dialect, type } = params;\n return `${type.namespace === undefined ? \"\" : `${dialect.quoteIdent({ name: type.namespace })}.`}${dialect.quoteIdent({ name: type.name })}${type.modifier}${type.array ? \"[]\" : \"\"}`;\n}\n\n/** Read catalog identity, or resolve an authored name in an explicitly chosen context. */\nexport function renderPostgresTypeIdentity(params: {\n dialect: SqlDialect;\n source: { readonly table: QualifiedSqlName; readonly column: string } | { readonly type: QualifiedSqlName | { readonly name: string } };\n}): RenderedQuery {\n if (params.dialect.name !== \"postgres\") throw unsupportedCapability({ dialect: params.dialect.name, feature: \"postgresTypeIdentity\" });\n const collector = new ParamCollector(params.dialect);\n const { source } = params;\n let text: string;\n if (\"table\" in source) {\n text = `SELECT tn.nspname::text AS \"namespace\", base.typname::text AS \"name\" FROM pg_catalog.pg_attribute a JOIN pg_catalog.pg_class c ON c.oid = a.attrelid JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace JOIN pg_catalog.pg_type t ON t.oid = a.atttypid JOIN pg_catalog.pg_type base ON base.oid = CASE WHEN t.typelem <> 0 AND t.typlen = -1 THEN t.typelem ELSE t.oid END JOIN pg_catalog.pg_namespace tn ON tn.oid = base.typnamespace WHERE n.nspname = ${collector.add(source.table.namespace)} AND c.relname = ${collector.add(source.table.name)} AND a.attname = ${collector.add(source.column)} AND a.attnum > 0 AND NOT a.attisdropped`;\n } else {\n const name = renderPostgresTypeName({ dialect: params.dialect, type: { ...source.type, modifier: \"\", array: false } });\n text = `SELECT n.nspname::text AS \"namespace\", t.typname::text AS \"name\" FROM pg_catalog.pg_type t JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace WHERE t.oid = pg_catalog.to_regtype(${collector.add(name)})`;\n }\n return { text, values: collector.values, returning: \"none\" };\n}\n",
|
|
@@ -40,7 +41,7 @@
|
|
|
40
41
|
"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 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 switch (object.kind) {\n case \"view\": text = `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}`; break;\n case \"trigger\": text = `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)}`; break;\n case \"function\": text = `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'`; break;\n case \"column\": case \"columnDefault\": case \"generatedColumn\": text = `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)}`; break;\n case \"constraint\":\n if (object.constraintType === \"exclusion\") throw unsupportedCapability({ dialect: \"mysql\", feature: \"exclusionConstraints\" });\n text = `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 break;\n case \"index\": text = `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`; break;\n case \"table\": text = `SELECT TABLE_TYPE AS type, ENGINE AS engine, TABLE_COLLATION AS collation FROM information_schema.TABLES WHERE TABLE_SCHEMA = ${namespace} AND TABLE_NAME = ${name}`; break;\n default: throw unsupportedCapability({ dialect: \"mysql\", feature: `inspect:${object.kind}` });\n }\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)}`;\n return { text, values: sqliteParams.values, returning: \"none\" };\n }\n return { text, values: collector.values, returning: \"none\" };\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 object = params.identity;\n if (object.kind !== \"function\" && object.kind !== \"index\" && object.kind !== \"constraint\") return undefined;\n const collector = new ParamCollector(params.dialect);\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 text = object.kind === \"function\"\n ? `SELECT PARAMETER_MODE AS mode, PARAMETER_NAME AS name, DTD_IDENTIFIER AS type, CHARACTER_SET_NAME AS characterSet, COLLATION_NAME AS collation FROM information_schema.PARAMETERS WHERE SPECIFIC_SCHEMA = ${namespace} AND SPECIFIC_NAME = ${name} ORDER BY ORDINAL_POSITION`\n : object.kind === \"index\"\n ? `SELECT COLUMN_NAME AS name, EXPRESSION AS expression, SUB_PART AS prefixLength, COLLATION AS collation FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = ${namespace} AND TABLE_NAME = ${name} AND INDEX_NAME = ${collector.add(object.name)} ORDER BY SEQ_IN_INDEX`\n : `SELECT COLUMN_NAME AS name, REFERENCED_TABLE_SCHEMA AS referenceNamespace, REFERENCED_TABLE_NAME AS referenceTable, REFERENCED_COLUMN_NAME AS referenceColumn FROM information_schema.KEY_COLUMN_USAGE WHERE CONSTRAINT_SCHEMA = ${namespace} AND TABLE_NAME = ${name} AND CONSTRAINT_NAME = ${collector.add(object.name)} ORDER BY ORDINAL_POSITION`;\n return { text, values: collector.values, returning: \"none\" };\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 physical = \"table\" in object ? object.table : object.name;\n const collector = params.collector;\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",
|
|
41
42
|
"/**\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 *\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.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"
|
|
42
43
|
],
|
|
43
|
-
"mappings": "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",
|
|
44
|
-
"debugId": "
|
|
44
|
+
"mappings": "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",
|
|
45
|
+
"debugId": "C1F0ADA45113049064756E2164756E21",
|
|
45
46
|
"names": []
|
|
46
47
|
}
|