{"version":3,"file":"adapter-CSsFgmzK.mjs","names":[],"sources":["../src/core/codec-lookup.ts","../../../../1-framework/3-tooling/migration/dist/exports/ledger-origin.mjs","../src/core/control-codecs.ts","../src/core/ledger-decode.ts","../src/core/marker-ledger.ts","../src/core/control-adapter.ts","../src/core/adapter.ts"],"sourcesContent":["import type { CodecRegistry } from '@prisma-next/framework-components/codec';\nimport { extractCodecLookup } from '@prisma-next/framework-components/control';\nimport { sqliteCodecRegistry } from '@prisma-next/target-sqlite/codecs';\n\n/**\n * Build a {@link CodecRegistry} populated with the SQLite-builtin codec definitions only.\n *\n * Used by `createSqliteAdapter()` and `new SqliteControlAdapter()` when called without a\n * stack-derived registry (e.g. from tests, or one-off scripts that don't compose a full stack).\n *\n * Extension codecs are intentionally NOT included: a bare adapter cannot see extensions.\n * Stack-composed paths supply the broader, extension-inclusive registry at construction time.\n */\nexport function createSqliteBuiltinCodecLookup(): CodecRegistry {\n  return extractCodecLookup([\n    {\n      id: 'sqlite-builtin-codecs',\n      types: { codecTypes: { codecDescriptors: Array.from(sqliteCodecRegistry.values()) } },\n    },\n  ]);\n}\n","import \"../constants-YnG8_EGO.mjs\";\n//#region src/ledger-origin.ts\nfunction ledgerOriginFromStored(originCoreHash) {\n\tif (originCoreHash === null || originCoreHash === \"\" || originCoreHash === \"sha256:empty\") return null;\n\treturn originCoreHash;\n}\n//#endregion\nexport { ledgerOriginFromStored };\n\n//# sourceMappingURL=ledger-origin.mjs.map","import type {\n  AnyQueryAst,\n  ContractCodecRegistry,\n  LoweredStatement,\n} from '@prisma-next/sql-relational-core/ast';\nimport {\n  createAstCodecRegistry,\n  deriveParamMetadata,\n  encodeParamsWithMetadata,\n} from '@prisma-next/sql-runtime';\nimport { sqliteCodecRegistry } from '@prisma-next/target-sqlite/codecs';\n\nexport const CONTROL_CODECS = createAstCodecRegistry(sqliteCodecRegistry);\n\nexport async function encodeControlQueryParams(\n  lowered: LoweredStatement,\n  ast: AnyQueryAst,\n  codecs: ContractCodecRegistry = CONTROL_CODECS,\n): Promise<readonly unknown[]> {\n  const values = lowered.params.map((slot) => {\n    if (slot.kind === 'literal') return slot.value;\n    throw new Error(`control query lowered to a bind slot '${slot.name}', which is unsupported`);\n  });\n  return encodeParamsWithMetadata(values, deriveParamMetadata(ast), {}, codecs);\n}\n","const DESIGNATOR_LESS_UTC_DATETIME = /^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}(\\.\\d+)?$/;\n\nexport function coerceLedgerAppliedAt(value: Date | string): Date {\n  if (value instanceof Date) {\n    return value;\n  }\n  if (DESIGNATOR_LESS_UTC_DATETIME.test(value)) {\n    return new Date(`${value.replace(' ', 'T')}Z`);\n  }\n  return new Date(value);\n}\n\nexport function operationCountFromStored(operations: unknown): number {\n  if (Array.isArray(operations)) {\n    return operations.length;\n  }\n  if (typeof operations === 'string') {\n    try {\n      const parsed: unknown = JSON.parse(operations);\n      return Array.isArray(parsed) ? parsed.length : 0;\n    } catch {\n      return 0;\n    }\n  }\n  return 0;\n}\n","import type { SqlControlDriverInstance } from '@prisma-next/sql-contract/types';\nimport {\n  type AnyQueryAst,\n  type LoweredStatement,\n  RawExpr,\n} from '@prisma-next/sql-relational-core/ast';\nimport { SQLITE_DATETIME_CODEC_ID } from '@prisma-next/target-sqlite/codec-ids';\nimport {\n  datetime,\n  integer,\n  jsonText,\n  sqliteTable,\n  text,\n} from '@prisma-next/target-sqlite/contract-free';\nimport { encodeControlQueryParams } from './control-codecs';\n\nexport const marker = sqliteTable('_prisma_marker', {\n  space: text(),\n  core_hash: text(),\n  profile_hash: text(),\n  contract_json: jsonText({ nullable: true }),\n  canonical_version: integer({ nullable: true }),\n  updated_at: datetime(),\n  app_tag: text({ nullable: true }),\n  meta: jsonText({ nullable: true }),\n  invariants: jsonText(),\n});\n\n/**\n * Writeable subset of `_prisma_ledger`. Omits the DB-generated `id`\n * (`INTEGER PRIMARY KEY AUTOINCREMENT`) and `created_at` (default\n * `strftime(...)`).\n */\nexport const ledger = sqliteTable('_prisma_ledger', {\n  space: text(),\n  migration_name: text(),\n  migration_hash: text(),\n  origin_core_hash: text({ nullable: true }),\n  destination_core_hash: text(),\n  operations: jsonText(),\n});\n\n/**\n * Read-side handle covering every column of `_prisma_ledger`, including\n * the DB-generated `id` (for ORDER BY) and `created_at`.\n */\nexport const ledgerReadShape = sqliteTable('_prisma_ledger', {\n  id: integer(),\n  space: text(),\n  migration_name: text(),\n  migration_hash: text(),\n  origin_core_hash: text({ nullable: true }),\n  destination_core_hash: text(),\n  operations: jsonText(),\n  created_at: text(),\n});\n\nexport const sqliteCatalog = sqliteTable('sqlite_master', { type: text(), name: text() });\n\nexport const NOW = new RawExpr({\n  parts: [\"datetime('now')\"],\n  returns: { codecId: SQLITE_DATETIME_CODEC_ID, nullable: false },\n});\n\ntype Lower = (query: AnyQueryAst) => LoweredStatement;\n\ntype MarkerDriver = {\n  query<Row = Record<string, unknown>>(\n    sql: string,\n    params?: readonly unknown[],\n  ): Promise<{ readonly rows: ReadonlyArray<Row> }>;\n};\n\nexport function mergeInvariants(\n  current: readonly string[],\n  incoming: readonly string[],\n): readonly string[] {\n  return [...new Set([...current, ...incoming])].sort();\n}\n\nexport async function execute(\n  lower: Lower,\n  driver: MarkerDriver,\n  query: AnyQueryAst,\n): Promise<readonly Record<string, unknown>[]> {\n  const lowered = lower(query);\n  const encoded = await encodeControlQueryParams(lowered, query);\n  const result = await driver.query(lowered.sql, encoded);\n  return result.rows;\n}\n\nexport function decodeSqliteMarkerRow(row: unknown): unknown {\n  if (typeof row !== 'object' || row === null || !('invariants' in row)) {\n    return row;\n  }\n  const record = row as { invariants: unknown };\n  if (typeof record.invariants !== 'string') return row;\n  let parsed: unknown;\n  try {\n    parsed = JSON.parse(record.invariants);\n  } catch (err) {\n    const detail = err instanceof Error ? err.message : String(err);\n    throw new Error(`Invalid contract marker row: invariants is not valid JSON: ${detail}`);\n  }\n  return { ...record, invariants: parsed };\n}\n\nexport type SqliteMarkerWriteDriver = SqlControlDriverInstance<'sqlite'>;\n","import type { ContractMarkerRecord, LedgerEntryRecord } from '@prisma-next/contract/types';\nimport { parseMarkerRowSafely, withMarkerReadErrorHandling } from '@prisma-next/errors/execution';\nimport type { SqlControlAdapter } from '@prisma-next/family-sql/control-adapter';\nimport { parseContractMarkerRow } from '@prisma-next/family-sql/verify';\nimport type { CodecLookup, CodecRegistry } from '@prisma-next/framework-components/codec';\nimport { APP_SPACE_ID, type SchemaNodeRef } from '@prisma-next/framework-components/control';\nimport { ledgerOriginFromStored } from '@prisma-next/migration-tools/ledger-origin';\nimport { REFERENTIAL_ACTION_SQL } from '@prisma-next/sql-contract/referential-action-sql';\nimport type { SqlControlDriverInstance } from '@prisma-next/sql-contract/types';\nimport type {\n  AnyQueryAst,\n  CodecRef,\n  ContractCodecRegistry,\n  DdlColumn,\n  DdlNode,\n  DdlTableConstraint,\n  FunctionColumnDefault,\n  LiteralColumnDefault,\n  LoweredStatement,\n  LowererContext,\n  MarkerReadResult,\n  SqlExecuteRequest,\n} from '@prisma-next/sql-relational-core/ast';\nimport { isDdlNode } from '@prisma-next/sql-relational-core/ast';\nimport type {\n  PrimaryKeyInput,\n  SqlColumnIRInput,\n  SqlForeignKeyIRInput,\n  SqlIndexIRInput,\n  SqlReferentialAction,\n  SqlUniqueIRInput,\n} from '@prisma-next/sql-schema-ir/types';\nimport {\n  RelationalSchemaNodeKind,\n  SqlSchemaIR,\n  SqlTableIR,\n} from '@prisma-next/sql-schema-ir/types';\nimport {\n  buildControlTableBootstrapQueries,\n  buildSignMarkerBootstrapQueries,\n} from '@prisma-next/target-sqlite/contract-free';\nimport type { SqliteCreateTable, SqliteDdlNode } from '@prisma-next/target-sqlite/ddl';\nimport { parseSqliteDefault } from '@prisma-next/target-sqlite/default-normalizer';\nimport { normalizeSqliteNativeType } from '@prisma-next/target-sqlite/native-type-normalizer';\nimport { escapeLiteral, quoteIdentifier } from '@prisma-next/target-sqlite/sql-utils';\nimport { blindCast } from '@prisma-next/utils/casts';\nimport { ifDefined } from '@prisma-next/utils/defined';\nimport { renderLoweredSql } from './adapter';\nimport { encodeControlQueryParams } from './control-codecs';\nimport { coerceLedgerAppliedAt, operationCountFromStored } from './ledger-decode';\nimport {\n  decodeSqliteMarkerRow,\n  execute,\n  ledger,\n  ledgerReadShape,\n  marker,\n  mergeInvariants,\n  NOW,\n  sqliteCatalog,\n} from './marker-ledger';\nimport type { SqliteContract } from './types';\n\nconst SQLITE_MARKER_TABLE = '_prisma_marker';\nconst SQLITE_LEDGER_TABLE = '_prisma_ledger';\n\ntype SqliteLedgerRow = {\n  readonly space: string;\n  readonly migration_name: string;\n  readonly migration_hash: string;\n  readonly origin_core_hash: string | null;\n  readonly destination_core_hash: string;\n  readonly operations: unknown;\n  readonly created_at: Date | string;\n};\n\n// PRAGMA result row types\ntype PragmaTableInfoRow = {\n  cid: number;\n  name: string;\n  type: string;\n  notnull: number;\n  dflt_value: string | null;\n  pk: number;\n};\n\ntype PragmaForeignKeyRow = {\n  id: number;\n  seq: number;\n  table: string;\n  from: string;\n  to: string;\n  on_update: string;\n  on_delete: string;\n};\n\ntype PragmaIndexListRow = {\n  seq: number;\n  name: string;\n  unique: number;\n  origin: string;\n  partial: number;\n};\n\ntype PragmaIndexInfoRow = {\n  seqno: number;\n  cid: number;\n  name: string;\n};\n\ntype FkAccumulator = {\n  columns: string[];\n  referencedTable: string;\n  referencedColumns: string[];\n  onDelete: string;\n  onUpdate: string;\n};\n\nexport class SqliteControlAdapter implements SqlControlAdapter<'sqlite'> {\n  readonly familyId = 'sql' as const;\n  readonly targetId = 'sqlite' as const;\n\n  private readonly codecRegistry: CodecRegistry;\n\n  constructor(codecRegistry: CodecRegistry) {\n    this.codecRegistry = codecRegistry;\n  }\n\n  readonly normalizeDefault = parseSqliteDefault;\n  readonly normalizeNativeType = normalizeSqliteNativeType;\n\n  bootstrapControlTableQueries(): readonly DdlNode[] {\n    return buildControlTableBootstrapQueries();\n  }\n\n  bootstrapSignMarkerQueries(): readonly DdlNode[] {\n    return buildSignMarkerBootstrapQueries();\n  }\n\n  /**\n   * Lower a SQL query AST into a SQLite-flavored `{ sql, params }` payload.\n   *\n   * Delegates to the shared `renderLoweredSql` renderer so the control adapter\n   * emits byte-identical SQL to `SqliteAdapterImpl.lower()` for the same AST\n   * and contract. Used at migration plan/emit time (e.g. by `dataTransform`)\n   * without instantiating the runtime adapter.\n   */\n  lower(ast: AnyQueryAst | SqliteDdlNode, context: LowererContext<unknown>): LoweredStatement {\n    if (isDdlNode(ast)) {\n      throw new Error(\n        'lower() cannot lower DDL: DDL default literals require inline codec encoding, which is async. Use lowerToExecuteRequest().',\n      );\n    }\n    return renderLoweredSql(\n      ast,\n      blindCast<SqliteContract, 'caller must supply a matching SqliteContract'>(context.contract),\n    );\n  }\n\n  /**\n   * Lower an AST all the way to a driver-ready statement. For DDL nodes,\n   * literal column defaults are formatted as inline SQL with SQLite-specific\n   * literal syntax (no cast suffix, boolean as 0/1, blob via X'hex'). For\n   * query ASTs, params are kept as `?` placeholders; wire values go in\n   * `params`. Does NOT call `this.lower()` — independent implementation.\n   */\n  async lowerToExecuteRequest(\n    ast: AnyQueryAst | SqliteDdlNode,\n    context?: LowererContext<unknown>,\n  ): Promise<SqlExecuteRequest> {\n    if (isDdlNode(ast)) {\n      return sqliteRenderDdlExecuteRequest(\n        blindCast<SqliteDdlNode, 'isDdlNode guard'>(ast),\n        this.codecRegistry,\n      );\n    }\n    const contract = blindCast<SqliteContract, 'Caller must supply matching contract'>(\n      context?.contract,\n    );\n    const lowered = renderLoweredSql(ast, contract);\n    const codecRegistry = blindCast<\n      ContractCodecRegistry,\n      'framework CodecRegistry: its descriptors materialise SQL codecs; the framework Codec type erases to BaseCodec at this boundary'\n    >(this.codecRegistry);\n    const params = await encodeControlQueryParams(lowered, ast, codecRegistry);\n    return { sql: lowered.sql, params };\n  }\n\n  /**\n   * Reads the contract marker from `_prisma_marker`. Probes `sqlite_master`\n   * first so a fresh database (no marker table) returns `null` instead of a\n   * \"no such table\" error.\n   */\n  async readMarker(\n    driver: SqlControlDriverInstance<'sqlite'>,\n    space: string,\n  ): Promise<ContractMarkerRecord | null> {\n    const result = await this.readMarkerDiscriminated(driver, space);\n    return result.kind === 'present' ? result.record : null;\n  }\n\n  async readMarkerDiscriminated(\n    driver: SqlControlDriverInstance<'sqlite'>,\n    space: string,\n  ): Promise<MarkerReadResult> {\n    const markerContext = { space, markerLocation: SQLITE_MARKER_TABLE };\n    return withMarkerReadErrorHandling(() => this.readMarkerResult(driver, space), markerContext);\n  }\n\n  /**\n   * Reads every row from `_prisma_marker` and returns them keyed by\n   * `space`. Mirrors the existence probe in {@link readMarker}: a\n   * fresh database without the marker table returns an empty map.\n   */\n  async readAllMarkers(\n    driver: SqlControlDriverInstance<'sqlite'>,\n  ): Promise<ReadonlyMap<string, ContractMarkerRecord>> {\n    const markerContext = { space: APP_SPACE_ID, markerLocation: SQLITE_MARKER_TABLE };\n    return withMarkerReadErrorHandling(() => this.readAllMarkersResult(driver), markerContext);\n  }\n\n  private async readAllMarkersResult(\n    driver: SqlControlDriverInstance<'sqlite'>,\n  ): Promise<ReadonlyMap<string, ContractMarkerRecord>> {\n    const lower = (query: AnyQueryAst) => this.lower(query, { contract: undefined });\n    const probe = sqliteCatalog\n      .select(sqliteCatalog.name)\n      .where(sqliteCatalog.type.eq('table').and(sqliteCatalog.name.eq('_prisma_marker')))\n      .build();\n    const exists = await execute(lower, driver, probe);\n    if (exists.length === 0) {\n      return new Map();\n    }\n\n    const fetch = marker\n      .select(\n        marker.space,\n        marker.core_hash,\n        marker.profile_hash,\n        marker.contract_json,\n        marker.canonical_version,\n        marker.updated_at,\n        marker.app_tag,\n        marker.meta,\n        marker.invariants,\n      )\n      .build();\n    const rawRows = await execute(lower, driver, fetch);\n    const rows = blindCast<\n      ReadonlyArray<{ space: string } & Record<string, unknown>>,\n      'Driver returns rows shaped by SELECT'\n    >(rawRows);\n\n    const out = new Map<string, ContractMarkerRecord>();\n    for (const row of rows) {\n      out.set(\n        row.space,\n        parseMarkerRowSafely(row, (raw) => parseContractMarkerRow(decodeSqliteMarkerRow(raw)), {\n          space: row.space,\n          markerLocation: SQLITE_MARKER_TABLE,\n        }),\n      );\n    }\n    return out;\n  }\n\n  /**\n   * Reads per-migration ledger rows from `_prisma_ledger` in apply order.\n   * Probes `sqlite_master` first so a fresh database without the ledger\n   * table returns `[]` instead of raising \"no such table\".\n   */\n  async readLedger(\n    driver: SqlControlDriverInstance<'sqlite'>,\n    space?: string,\n  ): Promise<readonly LedgerEntryRecord[]> {\n    const ledgerContext = { space: space ?? '*', markerLocation: SQLITE_LEDGER_TABLE };\n    return withMarkerReadErrorHandling(() => this.readLedgerResult(driver, space), ledgerContext);\n  }\n\n  private async readLedgerResult(\n    driver: SqlControlDriverInstance<'sqlite'>,\n    space: string | undefined,\n  ): Promise<readonly LedgerEntryRecord[]> {\n    const lower = (query: AnyQueryAst) => this.lower(query, { contract: undefined });\n    const probe = sqliteCatalog\n      .select(sqliteCatalog.name)\n      .where(sqliteCatalog.type.eq('table').and(sqliteCatalog.name.eq('_prisma_ledger')))\n      .build();\n    const exists = await execute(lower, driver, probe);\n    if (exists.length === 0) {\n      return [];\n    }\n\n    const base = ledgerReadShape.select(\n      ledgerReadShape.space,\n      ledgerReadShape.migration_name,\n      ledgerReadShape.migration_hash,\n      ledgerReadShape.origin_core_hash,\n      ledgerReadShape.destination_core_hash,\n      ledgerReadShape.operations,\n      ledgerReadShape.created_at,\n    );\n    const filtered = space !== undefined ? base.where(ledgerReadShape.space.eq(space)) : base;\n    const rawRows = await execute(lower, driver, filtered.orderBy(ledgerReadShape.id).build());\n    const rows = blindCast<readonly SqliteLedgerRow[], 'Driver returns rows shaped by SELECT'>(\n      rawRows,\n    );\n\n    return rows.map((row) => ({\n      space: row.space,\n      migrationName: row.migration_name,\n      migrationHash: row.migration_hash,\n      from: ledgerOriginFromStored(row.origin_core_hash),\n      to: row.destination_core_hash,\n      appliedAt: coerceLedgerAppliedAt(row.created_at),\n      operationCount: operationCountFromStored(row.operations),\n    }));\n  }\n\n  /**\n   * Stamps the initial marker row for `space` via the shared contract-free DML\n   * builder, lowered through {@link lower} and executed on the driver. See the\n   * `SqlControlAdapter.initMarker` contract.\n   */\n  async insertMarker(\n    driver: SqlControlDriverInstance<'sqlite'>,\n    space: string,\n    destination: {\n      readonly storageHash: string;\n      readonly profileHash: string;\n      readonly invariants?: readonly string[];\n    },\n  ): Promise<void> {\n    await execute(\n      (query) => this.lower(query, { contract: undefined }),\n      driver,\n      marker\n        .insert({\n          space,\n          core_hash: destination.storageHash,\n          profile_hash: destination.profileHash,\n          contract_json: null,\n          canonical_version: null,\n          updated_at: NOW,\n          app_tag: null,\n          meta: {},\n          invariants: destination.invariants ?? [],\n        })\n        .build(),\n    );\n  }\n\n  async initMarker(\n    driver: SqlControlDriverInstance<'sqlite'>,\n    space: string,\n    destination: {\n      readonly storageHash: string;\n      readonly profileHash: string;\n      readonly invariants?: readonly string[];\n    },\n  ): Promise<void> {\n    await execute(\n      (query) => this.lower(query, { contract: undefined }),\n      driver,\n      marker\n        .upsert({\n          space,\n          core_hash: destination.storageHash,\n          profile_hash: destination.profileHash,\n          contract_json: null,\n          canonical_version: null,\n          updated_at: NOW,\n          app_tag: null,\n          meta: {},\n          invariants: destination.invariants ?? [],\n        })\n        .onConflict(marker.space)\n        .doUpdate((excluded) => ({\n          core_hash: excluded.core_hash,\n          profile_hash: excluded.profile_hash,\n          contract_json: excluded.contract_json,\n          canonical_version: excluded.canonical_version,\n          updated_at: NOW,\n          app_tag: excluded.app_tag,\n          meta: excluded.meta,\n          invariants: excluded.invariants,\n        }))\n        .build(),\n    );\n  }\n\n  /**\n   * Compare-and-swap advance of the marker row for `space`. See the\n   * `SqlControlAdapter.updateMarker` contract.\n   */\n  async updateMarker(\n    driver: SqlControlDriverInstance<'sqlite'>,\n    space: string,\n    expectedFrom: string,\n    destination: {\n      readonly storageHash: string;\n      readonly profileHash: string;\n      readonly invariants?: readonly string[];\n    },\n  ): Promise<boolean> {\n    const currentInvariants =\n      destination.invariants === undefined\n        ? []\n        : ((await this.readMarker(driver, space))?.invariants ?? []);\n    const mergedInvariants =\n      destination.invariants === undefined\n        ? undefined\n        : mergeInvariants(currentInvariants, destination.invariants);\n\n    const query = marker\n      .update()\n      .set({\n        core_hash: destination.storageHash,\n        profile_hash: destination.profileHash,\n        updated_at: NOW,\n        ...(mergedInvariants !== undefined ? { invariants: mergedInvariants } : {}),\n      })\n      .where(marker.space.eq(space).and(marker.core_hash.eq(expectedFrom)))\n      .returning(marker.space)\n      .build();\n\n    const rows = await execute((q) => this.lower(q, { contract: undefined }), driver, query);\n    return rows.length > 0;\n  }\n\n  /**\n   * Appends a ledger entry for `space`. See the\n   * `SqlControlAdapter.writeLedgerEntry` contract.\n   */\n  async writeLedgerEntry(\n    driver: SqlControlDriverInstance<'sqlite'>,\n    space: string,\n    entry: {\n      readonly edgeId: string;\n      readonly from: string;\n      readonly to: string;\n      readonly migrationName: string;\n      readonly migrationHash: string;\n      readonly operations: readonly unknown[];\n    },\n  ): Promise<void> {\n    await execute(\n      (query) => this.lower(query, { contract: undefined }),\n      driver,\n      ledger\n        .insert({\n          space,\n          migration_name: entry.migrationName,\n          migration_hash: entry.migrationHash,\n          origin_core_hash: entry.from,\n          destination_core_hash: entry.to,\n          operations: entry.operations,\n        })\n        .build(),\n    );\n  }\n\n  private async readMarkerResult(driver: SqlControlDriverInstance<'sqlite'>, space: string) {\n    const lower = (query: AnyQueryAst) => this.lower(query, { contract: undefined });\n    const probe = sqliteCatalog\n      .select(sqliteCatalog.name)\n      .where(sqliteCatalog.type.eq('table').and(sqliteCatalog.name.eq('_prisma_marker')))\n      .build();\n    const exists = await execute(lower, driver, probe);\n    if (exists.length === 0) return { kind: 'no-table' as const };\n\n    const fetch = marker\n      .select(\n        marker.core_hash,\n        marker.profile_hash,\n        marker.contract_json,\n        marker.canonical_version,\n        marker.updated_at,\n        marker.app_tag,\n        marker.meta,\n        marker.invariants,\n      )\n      .where(marker.space.eq(space))\n      .build();\n    const result = await execute(lower, driver, fetch);\n    const row = result[0];\n    if (!row) return { kind: 'absent' as const };\n    return {\n      kind: 'present' as const,\n      record: parseContractMarkerRow(decodeSqliteMarkerRow(row)),\n    };\n  }\n\n  async introspect(\n    driver: SqlControlDriverInstance<'sqlite'>,\n    _contract?: unknown,\n  ): Promise<SqlSchemaIR> {\n    // Filter out runner-managed control tables (`_prisma_marker`,\n    // `_prisma_ledger`) — they're an implementation detail of the migration\n    // runner, not part of the user-authored contract, so they must not\n    // appear in introspection output (otherwise strict schema verification\n    // flags them as `extra_table`).\n    const tablesResult = await driver.query<{ name: string }>(\n      `SELECT name FROM sqlite_master\n       WHERE type = 'table'\n         AND name NOT LIKE 'sqlite_%'\n         AND name NOT IN ('_prisma_marker', '_prisma_ledger')\n       ORDER BY name`,\n    );\n\n    const tables: Record<string, SqlTableIR> = {};\n\n    for (const tableRow of tablesResult.rows) {\n      const tableName = tableRow.name;\n\n      // SQLite's synchronous driver serializes reads — no benefit from Promise.all\n      const columnsResult = await driver.query<PragmaTableInfoRow>(\n        `PRAGMA table_info(\"${escapePragmaArg(tableName)}\")`,\n      );\n      const fkResult = await driver.query<PragmaForeignKeyRow>(\n        `PRAGMA foreign_key_list(\"${escapePragmaArg(tableName)}\")`,\n      );\n      const indexListResult = await driver.query<PragmaIndexListRow>(\n        `PRAGMA index_list(\"${escapePragmaArg(tableName)}\")`,\n      );\n\n      const columns: Record<string, SqlColumnIRInput> = {};\n      const pkColumns: Array<{ name: string; pk: number }> = [];\n\n      for (const col of columnsResult.rows) {\n        // Resolved values comparable against the contract-derived expected\n        // side: the normalized native type and the structured parse of the\n        // raw default. Raw fields stay untouched alongside — the relational\n        // walk still reads and normalizes them itself.\n        const resolvedNativeType = normalizeSqliteNativeType(col.type);\n        const rawDefault = col.dflt_value ?? undefined;\n        columns[col.name] = {\n          name: col.name,\n          nativeType: col.type.toLowerCase(),\n          nullable: col.notnull === 0 && col.pk === 0,\n          ...ifDefined('default', rawDefault),\n          resolvedNativeType,\n          ...ifDefined(\n            'resolvedDefault',\n            rawDefault !== undefined\n              ? parseSqliteDefault(rawDefault, resolvedNativeType)\n              : undefined,\n          ),\n        };\n        if (col.pk > 0) {\n          pkColumns.push({ name: col.name, pk: col.pk });\n        }\n      }\n\n      pkColumns.sort((a, b) => a.pk - b.pk);\n      const primaryKey: PrimaryKeyInput | undefined =\n        pkColumns.length > 0\n          ? {\n              columns: pkColumns.map((c) => c.name),\n              dependsOn: flatColumnDependsOn(\n                tableName,\n                pkColumns.map((c) => c.name),\n              ),\n            }\n          : undefined;\n\n      const fkMap = new Map<number, FkAccumulator>();\n      for (const fk of fkResult.rows) {\n        const existing = fkMap.get(fk.id);\n        if (existing) {\n          existing.columns.push(fk.from);\n          existing.referencedColumns.push(fk.to);\n        } else {\n          fkMap.set(fk.id, {\n            columns: [fk.from],\n            referencedTable: fk.table,\n            referencedColumns: [fk.to],\n            onDelete: fk.on_delete,\n            onUpdate: fk.on_update,\n          });\n        }\n      }\n      const foreignKeys: readonly SqlForeignKeyIRInput[] = Array.from(fkMap.values()).map((fk) => ({\n        columns: Object.freeze([...fk.columns]) as readonly string[],\n        referencedTable: fk.referencedTable,\n        referencedColumns: Object.freeze([...fk.referencedColumns]) as readonly string[],\n        ...ifDefined('onDelete', mapSqliteReferentialAction(fk.onDelete)),\n        ...ifDefined('onUpdate', mapSqliteReferentialAction(fk.onUpdate)),\n        dependsOn: [\n          flatTableDependsOn(fk.referencedTable),\n          ...flatColumnDependsOn(tableName, fk.columns),\n        ],\n      }));\n\n      const uniques: SqlUniqueIRInput[] = [];\n      const indexes: SqlIndexIRInput[] = [];\n\n      for (const idx of indexListResult.rows) {\n        // origin: 'c' = CREATE INDEX, 'u' = UNIQUE constraint, 'pk' = PRIMARY KEY\n        const idxInfoResult = await driver.query<PragmaIndexInfoRow>(\n          `PRAGMA index_info(\"${escapePragmaArg(idx.name)}\")`,\n        );\n\n        const idxColumns = idxInfoResult.rows.sort((a, b) => a.seqno - b.seqno).map((r) => r.name);\n\n        if (idx.origin === 'u') {\n          uniques.push({\n            columns: Object.freeze([...idxColumns]) as readonly string[],\n            name: idx.name,\n            dependsOn: flatColumnDependsOn(tableName, idxColumns),\n          });\n        } else if (idx.origin === 'c') {\n          indexes.push({\n            columns: Object.freeze([...idxColumns]) as readonly string[],\n            name: idx.name,\n            unique: idx.unique === 1,\n            dependsOn: flatColumnDependsOn(tableName, idxColumns),\n          });\n        }\n        // Skip 'pk' origin — already captured in primaryKey\n      }\n\n      tables[tableName] = new SqlTableIR({\n        name: tableName,\n        columns,\n        ...ifDefined('primaryKey', primaryKey),\n        foreignKeys,\n        uniques,\n        indexes,\n      });\n    }\n\n    return new SqlSchemaIR({\n      tables,\n    });\n  }\n}\n\n// PRAGMA queries use the function-argument form (`PRAGMA table_info(\"name\")`)\n// which doesn't support `?` placeholders — the argument is part of the\n// statement name, not a bound parameter. We quote-escape the table name instead.\nfunction escapePragmaArg(name: string): string {\n  return name.replace(/\"/g, '\"\"');\n}\n\nconst SQLITE_REFERENTIAL_ACTION_MAP: Record<string, SqlReferentialAction> = {\n  'NO ACTION': 'noAction',\n  RESTRICT: 'restrict',\n  CASCADE: 'cascade',\n  'SET NULL': 'setNull',\n  'SET DEFAULT': 'setDefault',\n};\n\nfunction mapSqliteReferentialAction(rule: string): SqlReferentialAction | undefined {\n  const normalized = rule.toUpperCase();\n  const mapped = SQLITE_REFERENTIAL_ACTION_MAP[normalized];\n  if (mapped === undefined) {\n    throw new Error(\n      `Unknown SQLite referential action rule: \"${rule}\". ` +\n        'Expected one of: NO ACTION, RESTRICT, CASCADE, SET NULL, SET DEFAULT.',\n    );\n  }\n  if (mapped === 'noAction') return undefined;\n  return mapped;\n}\n\n/**\n * The referenced table's chain in the flat (single-schema) tree this\n * introspection builds: the root (`SqlSchemaIR`, fixed `'database'` id)\n * followed by the table's own id. Mirrors the expected-side derivation\n * (`contractToSchemaIR`'s `convertForeignKey`).\n */\nfunction flatTableDependsOn(tableName: string): SchemaNodeRef {\n  return [\n    { nodeKind: RelationalSchemaNodeKind.schema, id: 'database' },\n    { nodeKind: RelationalSchemaNodeKind.table, id: tableName },\n  ];\n}\n\n/**\n * The chains from a table-child object (foreign key, index, unique, primary\n * key) to each of the own columns it is built on — the introspection-side\n * mirror of `contractToSchemaIR`'s `flatColumnDependsOn`. An object is dropped\n * before the columns it covers.\n */\nfunction flatColumnDependsOn(tableName: string, columns: readonly string[]): SchemaNodeRef[] {\n  return columns.map((column) => [\n    ...flatTableDependsOn(tableName),\n    { nodeKind: RelationalSchemaNodeKind.column, id: `column:${column}` },\n  ]);\n}\n\n// ---------------------------------------------------------------------------\n// sqliteRenderDdlExecuteRequest — independent DDL walker for lowerToExecuteRequest\n// ---------------------------------------------------------------------------\n\nfunction sqliteInlineLiteral(wire: unknown): string {\n  if (wire === null) return 'NULL';\n  if (typeof wire === 'boolean') return wire ? '1' : '0';\n  if (typeof wire === 'number') {\n    if (!Number.isFinite(wire)) {\n      throw new Error(\n        `sqliteRenderDdlExecuteRequest: non-finite number wire value ${String(wire)} cannot be emitted as a DEFAULT literal`,\n      );\n    }\n    return String(wire);\n  }\n  if (typeof wire === 'bigint') return String(wire);\n  if (wire instanceof Date) {\n    if (Number.isNaN(wire.getTime())) {\n      throw new Error(\n        'sqliteRenderDdlExecuteRequest: invalid Date value cannot be emitted as a DEFAULT literal',\n      );\n    }\n    return `'${escapeLiteral(wire.toISOString())}'`;\n  }\n  if (typeof wire === 'string') return `'${escapeLiteral(wire)}'`;\n  if (wire instanceof Uint8Array) {\n    const hex = Array.from(wire)\n      .map((b) => b.toString(16).padStart(2, '0'))\n      .join('');\n    return `X'${hex}'`;\n  }\n  if (typeof wire === 'object') return `'${escapeLiteral(JSON.stringify(wire))}'`;\n  throw new Error(`sqliteRenderDdlExecuteRequest: unexpected wire type \"${typeof wire}\"`);\n}\n\nasync function sqliteRenderDdlColumnDefault(\n  def: LiteralColumnDefault | FunctionColumnDefault,\n  codecLookup: CodecLookup,\n  codecRef: CodecRef | undefined,\n): Promise<string> {\n  if (def.kind === 'function') {\n    if (def.expression === 'autoincrement()') return '';\n    // SQLite has no `now()` function; the contract canonicalizes\n    // `CURRENT_TIMESTAMP` / `datetime('now')` to `now()`, so map it back to a\n    // valid SQLite expression on the way out.\n    if (def.expression === 'now()') return \"DEFAULT (datetime('now'))\";\n    return `DEFAULT (${def.expression})`;\n  }\n  if (codecRef !== undefined) {\n    const codec = codecLookup.get(codecRef.codecId);\n    if (codec !== undefined) {\n      const wire = await codec.encode(def.value, {});\n      return `DEFAULT ${sqliteInlineLiteral(wire)}`;\n    }\n  }\n  // Fallback: codec-less literal defaults follow RawSqlLiteral wire-scalar semantics.\n  return `DEFAULT ${sqliteInlineLiteral(def.value)}`;\n}\n\nasync function sqliteRenderDdlColumn(column: DdlColumn, codecLookup: CodecLookup): Promise<string> {\n  if (column.type.includes('AUTOINCREMENT')) {\n    return `${quoteIdentifier(column.name)} ${column.type}`;\n  }\n  const parts = [quoteIdentifier(column.name), column.type];\n  if (column.notNull) parts.push('NOT NULL');\n  if (column.primaryKey) parts.push('PRIMARY KEY');\n  if (column.default) {\n    const clause = await sqliteRenderDdlColumnDefault(column.default, codecLookup, column.codecRef);\n    if (clause.length > 0) parts.push(clause);\n  }\n  return parts.join(' ');\n}\n\nfunction sqliteRenderDdlConstraint(constraint: DdlTableConstraint): string {\n  if (constraint.kind === 'primary-key') {\n    const cols = constraint.columns.map(quoteIdentifier).join(', ');\n    if (constraint.name !== undefined) {\n      return `CONSTRAINT ${quoteIdentifier(constraint.name)} PRIMARY KEY (${cols})`;\n    }\n    return `PRIMARY KEY (${cols})`;\n  }\n  if (constraint.kind === 'foreign-key') {\n    const cols = constraint.columns.map(quoteIdentifier).join(', ');\n    const refTable = constraint.refTable.split('.').map(quoteIdentifier).join('.');\n    const refCols = constraint.refColumns.map(quoteIdentifier).join(', ');\n    let sql = `FOREIGN KEY (${cols}) REFERENCES ${refTable} (${refCols})`;\n    if (constraint.onDelete !== undefined) {\n      sql += ` ON DELETE ${REFERENTIAL_ACTION_SQL[constraint.onDelete]}`;\n    }\n    if (constraint.onUpdate !== undefined) {\n      sql += ` ON UPDATE ${REFERENTIAL_ACTION_SQL[constraint.onUpdate]}`;\n    }\n    if (constraint.name !== undefined) {\n      sql = `CONSTRAINT ${quoteIdentifier(constraint.name)} ${sql}`;\n    }\n    return sql;\n  }\n  if (constraint.kind === 'check-expression') {\n    throw new Error(\n      `SQLite does not support expression CHECK constraints (constraint \"${constraint.name}\"). ` +\n        'Scalar-array columns and their element-non-null checks are Postgres-only.',\n    );\n  }\n  const cols = constraint.columns.map(quoteIdentifier).join(', ');\n  if (constraint.name !== undefined) {\n    return `CONSTRAINT ${quoteIdentifier(constraint.name)} UNIQUE (${cols})`;\n  }\n  return `UNIQUE (${cols})`;\n}\n\nasync function sqliteRenderDdlExecuteRequest(\n  ast: SqliteDdlNode,\n  codecLookup: CodecLookup,\n): Promise<SqlExecuteRequest> {\n  const node = blindCast<SqliteCreateTable, 'SQLite DDL only has create-table'>(ast);\n  const ifNotExists = node.ifNotExists ? 'IF NOT EXISTS ' : '';\n  const tableRef = quoteIdentifier(node.table);\n  const columnDefs = await Promise.all(\n    node.columns.map((col) => sqliteRenderDdlColumn(col, codecLookup)),\n  );\n  const constraintDefs =\n    node.constraints !== undefined ? node.constraints.map(sqliteRenderDdlConstraint) : [];\n  const allDefs = [...columnDefs, ...constraintDefs].join(',\\n  ');\n  return {\n    sql: `CREATE TABLE ${ifNotExists}${tableRef} (\\n  ${allDefs}\\n)`,\n    params: [],\n  };\n}\n","import { APP_SPACE_ID } from '@prisma-next/framework-components/control';\nimport type {\n  Adapter,\n  AdapterProfile,\n  AggregateExpr,\n  AnyExpression,\n  AnyFromSource,\n  AnyQueryAst,\n  BinaryExpr,\n  ColumnRef,\n  DeleteAst,\n  InsertAst,\n  InsertValue,\n  JoinAst,\n  JoinOnExpr,\n  JsonArrayAggExpr,\n  JsonObjectExpr,\n  ListExpression,\n  LiteralExpr,\n  LoweredParam,\n  LowererContext,\n  NullCheckExpr,\n  OperationExpr,\n  OrderByItem,\n  ProjectionItem,\n  RawExpr,\n  RawSqlLiteral,\n  SelectAst,\n  SqlQueryable,\n  SubqueryExpr,\n  TableSource,\n  UpdateAst,\n  WindowFuncExpr,\n} from '@prisma-next/sql-relational-core/ast';\nimport { isDdlNode } from '@prisma-next/sql-relational-core/ast';\nimport type { RawCodecInferer } from '@prisma-next/sql-relational-core/expression';\nimport type { SqliteDdlNode } from '@prisma-next/target-sqlite/ddl';\nimport { escapeLiteral, quoteIdentifier } from '@prisma-next/target-sqlite/sql-utils';\nimport { createSqliteBuiltinCodecLookup } from './codec-lookup';\nimport { SqliteControlAdapter } from './control-adapter';\nimport type { SqliteAdapterOptions, SqliteContract, SqliteLoweredStatement } from './types';\n\nconst defaultCapabilities = Object.freeze({\n  sql: {\n    orderBy: true,\n    limit: true,\n    lateral: false,\n    jsonAgg: true,\n    returning: true,\n    enums: false,\n  },\n});\n\nclass SqliteAdapterImpl implements Adapter<AnyQueryAst, SqliteContract, SqliteLoweredStatement> {\n  readonly familyId = 'sql' as const;\n  readonly targetId = 'sqlite' as const;\n\n  readonly profile: AdapterProfile<'sqlite'>;\n\n  constructor(options?: SqliteAdapterOptions) {\n    const codecLookup = createSqliteBuiltinCodecLookup();\n    const controlAdapter = new SqliteControlAdapter(codecLookup);\n    this.profile = Object.freeze({\n      id: options?.profileId ?? 'sqlite/default@1',\n      target: 'sqlite',\n      capabilities: defaultCapabilities,\n      readMarker: (queryable: SqlQueryable) =>\n        controlAdapter.readMarkerDiscriminated(\n          {\n            familyId: 'sql',\n            targetId: 'sqlite',\n            query: async <Row = Record<string, unknown>>(\n              sql: string,\n              params?: readonly unknown[],\n            ) => {\n              const result = await queryable.query<Row>(sql, params);\n              return { rows: [...result.rows] };\n            },\n            close: async () => {},\n          },\n          APP_SPACE_ID,\n        ),\n    });\n  }\n\n  lower(\n    ast: AnyQueryAst | SqliteDdlNode,\n    context: LowererContext<SqliteContract>,\n  ): SqliteLoweredStatement {\n    if (isDdlNode(ast)) {\n      throw new Error(\n        'lower() does not lower DDL on the runtime adapter — DDL lowering is a control-plane concern handled by the control adapter.',\n      );\n    }\n    return renderLoweredSql(ast, context.contract);\n  }\n}\n\n/** Codec-id lookup for bare-literal interpolations used by `fns.raw` on a sqlite client. Contributed as the descriptor's static `rawCodecInferer` slot. */\nexport const sqliteRawCodecInferer: RawCodecInferer = {\n  inferCodec(value: RawSqlLiteral): string {\n    switch (typeof value) {\n      case 'number':\n        return Number.isSafeInteger(value) && value % 1 === 0\n          ? 'sqlite/integer@1'\n          : 'sqlite/real@1';\n      case 'bigint':\n        return 'sqlite/bigint@1';\n      case 'string':\n        return 'sqlite/text@1';\n      case 'boolean':\n        return 'sqlite/integer@1';\n      case 'object':\n        if (value instanceof Uint8Array) return 'sqlite/blob@1';\n    }\n    throw new Error(\n      'unsupported JS value type for raw-SQL interpolation: wrap this value in `param(...)` with an explicit codec',\n    );\n  },\n};\n\n/**\n * Lower a SQL query AST into a SQLite-flavored `{ sql, params }` payload.\n *\n * Shared between the runtime adapter (`SqliteAdapterImpl.lower`) and the control adapter (`SqliteControlAdapter.lower`) so both produce byte-identical SQL for the same AST and contract.\n */\nexport function renderLoweredSql(\n  ast: AnyQueryAst,\n  contract: SqliteContract,\n): SqliteLoweredStatement {\n  const collectedParamRefs = ast.collectParamRefs();\n  const params: LoweredParam[] = [];\n  for (const ref of collectedParamRefs) {\n    params.push(\n      ref.kind === 'prepared-param-ref'\n        ? { kind: 'bind', name: ref.name }\n        : { kind: 'literal', value: ref.value },\n    );\n  }\n\n  let sql: string;\n\n  const node = ast;\n  switch (node.kind) {\n    case 'select':\n      sql = renderSelect(node, contract);\n      break;\n    case 'insert':\n      sql = renderInsert(node, contract);\n      break;\n    case 'update':\n      sql = renderUpdate(node, contract);\n      break;\n    case 'delete':\n      sql = renderDelete(node, contract);\n      break;\n    default:\n      throw new Error(`Unsupported AST node kind: ${(node as { kind: string }).kind}`);\n  }\n\n  return Object.freeze({ sql, params });\n}\n\nfunction renderLimitOffset(\n  keyword: 'LIMIT' | 'OFFSET',\n  value: SelectAst['limit'] | SelectAst['offset'],\n  contract?: SqliteContract,\n): string {\n  if (value === undefined) return '';\n  if (typeof value === 'number') return `${keyword} ${value}`;\n  return `${keyword} ${renderExpr(value, contract)}`;\n}\n\nfunction renderSelect(ast: SelectAst, contract: SqliteContract): string {\n  const distinctPrefix = ast.distinct ? 'DISTINCT ' : '';\n  const selectClause = `SELECT ${distinctPrefix}${renderProjection(ast.projection, contract)}`;\n  const fromClause = ast.from !== undefined ? `FROM ${renderSource(ast.from, contract)}` : '';\n\n  const joinsClause = ast.joins?.length\n    ? ast.joins.map((join) => renderJoin(join, contract)).join(' ')\n    : '';\n\n  const whereClause = ast.where ? `WHERE ${renderExpr(ast.where, contract)}` : '';\n  const groupByClause = ast.groupBy?.length\n    ? `GROUP BY ${ast.groupBy.map((expr) => renderExpr(expr, contract)).join(', ')}`\n    : '';\n  const havingClause = ast.having ? `HAVING ${renderExpr(ast.having, contract)}` : '';\n  const orderClause = ast.orderBy?.length\n    ? `ORDER BY ${ast.orderBy\n        .map((order) => `${renderExpr(order.expr, contract)} ${order.dir.toUpperCase()}`)\n        .join(', ')}`\n    : '';\n  const limitClause = renderLimitOffset('LIMIT', ast.limit, contract);\n  const offsetClause = renderLimitOffset('OFFSET', ast.offset, contract);\n\n  return [\n    selectClause,\n    fromClause,\n    joinsClause,\n    whereClause,\n    groupByClause,\n    havingClause,\n    orderClause,\n    limitClause,\n    offsetClause,\n  ]\n    .filter((part) => part.length > 0)\n    .join(' ')\n    .trim();\n}\n\nfunction renderProjection(\n  projection: ReadonlyArray<ProjectionItem>,\n  contract?: SqliteContract,\n): string {\n  return projection\n    .map((item) => {\n      const alias = quoteIdentifier(item.alias);\n      if (item.expr.kind === 'literal') {\n        return `${renderLiteral(item.expr)} AS ${alias}`;\n      }\n      return `${renderExpr(item.expr, contract)} AS ${alias}`;\n    })\n    .join(', ');\n}\n\nfunction qualifyTableFromNamespaceCoordinate(\n  table: Pick<TableSource, 'name' | 'namespaceId'>,\n  contract: SqliteContract,\n): string {\n  if (table.namespaceId === undefined) {\n    return quoteIdentifier(table.name);\n  }\n  const namespace = contract.storage.namespaces[table.namespaceId];\n  if (namespace === undefined) {\n    throw new Error(\n      `Table \"${table.name}\" references namespace \"${table.namespaceId}\" which is not present on the contract`,\n    );\n  }\n  const qualifyTable = namespace.qualifyTable;\n  if (qualifyTable === undefined) {\n    throw new Error(\n      `Table \"${table.name}\" references namespace \"${table.namespaceId}\" which is not materialised for SQL rendering on the contract`,\n    );\n  }\n  return qualifyTable.call(namespace, table.name);\n}\n\nfunction renderTableSource(source: TableSource, contract: SqliteContract): string {\n  const qualified = qualifyTableFromNamespaceCoordinate(source, contract);\n  if (!source.alias) {\n    return qualified;\n  }\n  return `${qualified} AS ${quoteIdentifier(source.alias)}`;\n}\n\nfunction renderSource(source: AnyFromSource, contract: SqliteContract): string {\n  const node = source;\n  switch (node.kind) {\n    case 'table-source':\n      return renderTableSource(node, contract);\n    case 'derived-table-source':\n      return `(${renderSelect(node.query, contract)}) AS ${quoteIdentifier(node.alias)}`;\n    case 'function-source': {\n      const args = node.args.map((arg) => renderExpr(arg, contract)).join(', ');\n      const call = `${node.fn}(${args})`;\n      return node.alias !== undefined ? `${call} AS ${quoteIdentifier(node.alias)}` : call;\n    }\n    default:\n      throw new Error(\n        `Unsupported source node kind: ${(node satisfies never as { kind: string }).kind}`,\n      );\n  }\n}\n\nfunction renderExpr(expr: AnyExpression, contract?: SqliteContract): string {\n  const node = expr;\n  switch (node.kind) {\n    case 'column-ref':\n      return renderColumn(node);\n    case 'identifier-ref':\n      return quoteIdentifier(node.name);\n    case 'operation':\n      return renderOperation(node, contract);\n    case 'subquery':\n      return renderSubqueryExpr(node, contract);\n    case 'aggregate':\n      return renderAggregateExpr(node, contract);\n    case 'window-func':\n      return renderWindowFuncExpr(node, contract);\n    case 'json-object':\n      return renderJsonObjectExpr(node, contract);\n    case 'json-array-agg':\n      return renderJsonArrayAggExpr(node, contract);\n    case 'binary':\n      return renderBinary(node, contract);\n    case 'and':\n      if (node.exprs.length === 0) {\n        return 'TRUE';\n      }\n      return `(${node.exprs.map((part) => renderExpr(part, contract)).join(' AND ')})`;\n    case 'or':\n      if (node.exprs.length === 0) {\n        return 'FALSE';\n      }\n      return `(${node.exprs.map((part) => renderExpr(part, contract)).join(' OR ')})`;\n    case 'exists': {\n      if (contract === undefined) {\n        throw new Error('EXISTS subquery rendering requires a Sqlite contract');\n      }\n      const notKeyword = node.notExists ? 'NOT ' : '';\n      const subquery = renderSelect(node.subquery, contract);\n      return `${notKeyword}EXISTS (${subquery})`;\n    }\n    case 'null-check':\n      return renderNullCheck(node, contract);\n    case 'not':\n      return `NOT (${renderExpr(node.expr, contract)})`;\n    case 'param-ref':\n    case 'prepared-param-ref':\n      return '?';\n    case 'literal':\n      return renderLiteral(node);\n    case 'list':\n      return renderListLiteral(node);\n    case 'raw-expr':\n      return renderRawExpr(node, contract);\n    default:\n      throw new Error(`Unsupported expression node kind: ${(node as { kind: string }).kind}`);\n  }\n}\n\nfunction renderRawExpr(node: RawExpr, contract?: SqliteContract): string {\n  return node.parts\n    .map((part) => (typeof part === 'string' ? part : renderExpr(part, contract)))\n    .join('');\n}\n\n// `excluded` is a pseudo-table in ON CONFLICT DO UPDATE that references the row proposed for insertion. It is not quoted because it's a keyword.\nfunction renderColumn(ref: ColumnRef): string {\n  if (ref.table === 'excluded') {\n    return `excluded.${quoteIdentifier(ref.column)}`;\n  }\n  return `${quoteIdentifier(ref.table)}.${quoteIdentifier(ref.column)}`;\n}\n\nfunction renderLiteral(expr: LiteralExpr): string {\n  if (typeof expr.value === 'string') {\n    return `'${escapeLiteral(expr.value)}'`;\n  }\n  if (typeof expr.value === 'number' || typeof expr.value === 'boolean') {\n    return String(expr.value);\n  }\n  if (typeof expr.value === 'bigint') {\n    return String(expr.value);\n  }\n  if (expr.value === null || expr.value === undefined) {\n    return 'NULL';\n  }\n  if (expr.value instanceof Date) {\n    return `'${escapeLiteral(expr.value.toISOString())}'`;\n  }\n  const json = JSON.stringify(expr.value);\n  if (json === undefined) {\n    return 'NULL';\n  }\n  return `'${escapeLiteral(json)}'`;\n}\n\nfunction renderOperation(expr: OperationExpr, contract?: SqliteContract): string {\n  const self = renderExpr(expr.self, contract);\n  const args = expr.args.map((arg) => renderExpr(arg, contract));\n\n  let result = expr.lowering.template;\n  result = result.replace(/\\{\\{self\\}\\}/g, self);\n  for (let i = 0; i < args.length; i++) {\n    result = result.replace(new RegExp(`\\\\{\\\\{arg${i}\\\\}\\\\}`, 'g'), args[i] ?? '');\n  }\n\n  return result;\n}\n\nfunction renderSubqueryExpr(expr: SubqueryExpr, contract?: SqliteContract): string {\n  if (expr.query.projection.length !== 1) {\n    throw new Error('Subquery expressions must project exactly one column');\n  }\n  if (contract === undefined) {\n    throw new Error('Subquery expression rendering requires a Sqlite contract');\n  }\n  return `(${renderSelect(expr.query, contract)})`;\n}\n\nfunction renderNullCheck(expr: NullCheckExpr, contract?: SqliteContract): string {\n  const rendered = renderExpr(expr.expr, contract);\n  const renderedExpr =\n    expr.expr.kind === 'operation' || expr.expr.kind === 'subquery' ? `(${rendered})` : rendered;\n  return expr.isNull ? `${renderedExpr} IS NULL` : `${renderedExpr} IS NOT NULL`;\n}\n\nfunction renderBinary(expr: BinaryExpr, contract?: SqliteContract): string {\n  if (expr.right.kind === 'list' && expr.right.values.length === 0) {\n    if (expr.op === 'in') {\n      return 'FALSE';\n    }\n    if (expr.op === 'notIn') {\n      return 'TRUE';\n    }\n  }\n\n  const leftExpr = expr.left;\n  const left = renderExpr(leftExpr, contract);\n  const leftRendered =\n    leftExpr.kind === 'operation' || leftExpr.kind === 'subquery' ? `(${left})` : left;\n\n  const rightNode = expr.right;\n  let right: string;\n  switch (rightNode.kind) {\n    case 'list':\n      right = renderListLiteral(rightNode);\n      break;\n    case 'literal':\n      right = renderLiteral(rightNode);\n      break;\n    case 'column-ref':\n      right = renderColumn(rightNode);\n      break;\n    case 'param-ref':\n    case 'prepared-param-ref':\n      right = '?';\n      break;\n    default:\n      right = renderExpr(rightNode, contract);\n      break;\n  }\n\n  const operatorMap: Record<BinaryExpr['op'], string> = {\n    eq: '=',\n    neq: '!=',\n    gt: '>',\n    lt: '<',\n    gte: '>=',\n    lte: '<=',\n    like: 'LIKE',\n    in: 'IN',\n    notIn: 'NOT IN',\n  };\n\n  return `${leftRendered} ${operatorMap[expr.op]} ${right}`;\n}\n\nfunction renderListLiteral(expr: ListExpression): string {\n  if (expr.values.length === 0) {\n    return '(NULL)';\n  }\n  const values = expr.values\n    .map((v) => {\n      if (v.kind === 'param-ref' || v.kind === 'prepared-param-ref') return '?';\n      if (v.kind === 'literal') return renderLiteral(v);\n      return renderExpr(v);\n    })\n    .join(', ');\n  return `(${values})`;\n}\n\nfunction renderAggregateExpr(expr: AggregateExpr, contract?: SqliteContract): string {\n  const fn = expr.fn.toUpperCase();\n  if (!expr.expr) {\n    return `${fn}(*)`;\n  }\n  return `${fn}(${renderExpr(expr.expr, contract)})`;\n}\n\nfunction renderWindowFuncExpr(expr: WindowFuncExpr, contract?: SqliteContract): string {\n  const fn = expr.fn.toUpperCase();\n  const args = expr.args.map((arg) => renderExpr(arg, contract)).join(', ');\n  const partitionClause =\n    expr.partitionBy && expr.partitionBy.length > 0\n      ? `PARTITION BY ${expr.partitionBy.map((e) => renderExpr(e, contract)).join(', ')}`\n      : '';\n  const orderClause =\n    expr.orderBy && expr.orderBy.length > 0\n      ? `ORDER BY ${renderOrderByItems(expr.orderBy, contract)}`\n      : '';\n  const over = [partitionClause, orderClause].filter((part) => part.length > 0).join(' ');\n  return `${fn}(${args}) OVER (${over})`;\n}\n\nfunction renderJsonObjectExpr(expr: JsonObjectExpr, contract?: SqliteContract): string {\n  const args = expr.entries\n    .flatMap((entry): [string, string] => {\n      const key = `'${escapeLiteral(entry.key)}'`;\n      if (entry.value.kind === 'literal') {\n        return [key, renderLiteral(entry.value)];\n      }\n      return [key, renderExpr(entry.value, contract)];\n    })\n    .join(', ');\n  return `json_object(${args})`;\n}\n\nfunction renderOrderByItems(items: ReadonlyArray<OrderByItem>, contract?: SqliteContract): string {\n  return items\n    .map((item) => `${renderExpr(item.expr, contract)} ${item.dir.toUpperCase()}`)\n    .join(', ');\n}\n\nfunction renderJsonArrayAggExpr(expr: JsonArrayAggExpr, contract?: SqliteContract): string {\n  const aggregateOrderBy =\n    expr.orderBy && expr.orderBy.length > 0\n      ? ` ORDER BY ${renderOrderByItems(expr.orderBy, contract)}`\n      : '';\n  const aggregated = `json_group_array(${renderExpr(expr.expr, contract)}${aggregateOrderBy})`;\n  if (expr.onEmpty === 'emptyArray') {\n    return `coalesce(${aggregated}, '[]')`;\n  }\n  return aggregated;\n}\n\nfunction renderJoin(join: JoinAst, contract?: SqliteContract): string {\n  if (contract === undefined) {\n    throw new Error('JOIN rendering requires a Sqlite contract');\n  }\n  const joinType = join.joinType.toUpperCase();\n  const source = renderSource(join.source, contract);\n  const onClause = renderJoinOn(join.on, contract);\n  return `${joinType} JOIN ${source} ON ${onClause}`;\n}\n\nfunction renderJoinOn(on: JoinOnExpr, contract?: SqliteContract): string {\n  if (on.kind === 'eq-col-join-on') {\n    return `${renderColumn(on.left)} = ${renderColumn(on.right)}`;\n  }\n  return renderExpr(on, contract);\n}\n\nfunction renderInsertValue(value: InsertValue): string {\n  switch (value.kind) {\n    case 'param-ref':\n    case 'prepared-param-ref':\n      return '?';\n    case 'column-ref':\n      return renderColumn(value);\n    case 'raw-expr':\n      return renderExpr(value);\n    case 'default-value':\n      throw new Error('SQLite does not support DEFAULT as a value in INSERT ... VALUES');\n    default:\n      throw new Error(`Unsupported value node in INSERT: ${(value as { kind: string }).kind}`);\n  }\n}\n\nfunction renderInsert(ast: InsertAst, contract: SqliteContract): string {\n  const table = qualifyTableFromNamespaceCoordinate(ast.table, contract);\n  const rows = ast.rows;\n  if (rows.length === 0) {\n    throw new Error('INSERT requires at least one row');\n  }\n\n  const firstRow = rows[0] as Readonly<Record<string, InsertValue>>;\n  const columnOrder = Object.keys(firstRow);\n\n  let insertClause: string;\n  if (columnOrder.length === 0) {\n    insertClause = `INSERT INTO ${table} DEFAULT VALUES`;\n  } else {\n    const columns = columnOrder.map((column) => quoteIdentifier(column));\n    const values = rows\n      .map((row) => {\n        const renderedRow = columnOrder.map((column) => {\n          const value = row[column];\n          if (value === undefined) {\n            throw new Error(`Missing value for column \"${column}\" in INSERT row`);\n          }\n          return renderInsertValue(value);\n        });\n        return `(${renderedRow.join(', ')})`;\n      })\n      .join(', ');\n    insertClause = `INSERT INTO ${table} (${columns.join(', ')}) VALUES ${values}`;\n  }\n\n  let onConflictClause = '';\n  if (ast.onConflict) {\n    const conflictColumns = ast.onConflict.columns.map((col) => quoteIdentifier(col.column));\n    if (conflictColumns.length === 0) {\n      throw new Error('INSERT onConflict requires at least one conflict column');\n    }\n\n    const action = ast.onConflict.action;\n    switch (action.kind) {\n      case 'do-nothing':\n        onConflictClause = ` ON CONFLICT (${conflictColumns.join(', ')}) DO NOTHING`;\n        break;\n      case 'do-update-set': {\n        const updates = Object.entries(action.set).map(([colName, value]) => {\n          return `${quoteIdentifier(colName)} = ${renderExpr(value, contract)}`;\n        });\n        onConflictClause = ` ON CONFLICT (${conflictColumns.join(', ')}) DO UPDATE SET ${updates.join(', ')}`;\n        break;\n      }\n      default:\n        throw new Error(`Unsupported onConflict action: ${(action as { kind: string }).kind}`);\n    }\n  }\n\n  const returningClause = renderReturning(ast.returning);\n\n  return `${insertClause}${onConflictClause}${returningClause}`;\n}\n\nfunction renderUpdate(ast: UpdateAst, contract: SqliteContract): string {\n  const table = qualifyTableFromNamespaceCoordinate(ast.table, contract);\n  const setClauses = Object.entries(ast.set).map(([col, val]) => {\n    return `${quoteIdentifier(col)} = ${renderExpr(val, contract)}`;\n  });\n\n  const whereClause = ast.where ? ` WHERE ${renderExpr(ast.where, contract)}` : '';\n  const returningClause = renderReturning(ast.returning);\n\n  return `UPDATE ${table} SET ${setClauses.join(', ')}${whereClause}${returningClause}`;\n}\n\nfunction renderDelete(ast: DeleteAst, contract: SqliteContract): string {\n  const table = qualifyTableFromNamespaceCoordinate(ast.table, contract);\n  const whereClause = ast.where ? ` WHERE ${renderExpr(ast.where)}` : '';\n  const returningClause = renderReturning(ast.returning);\n\n  return `DELETE FROM ${table}${whereClause}${returningClause}`;\n}\n\nfunction renderReturning(returning: ReadonlyArray<ProjectionItem> | undefined): string {\n  if (!returning?.length) {\n    return '';\n  }\n  return ` RETURNING ${returning\n    .map((item) => {\n      if (item.expr.kind === 'column-ref') {\n        const rendered = `${quoteIdentifier(item.expr.table)}.${quoteIdentifier(item.expr.column)}`;\n        return item.expr.column === item.alias\n          ? rendered\n          : `${rendered} AS ${quoteIdentifier(item.alias)}`;\n      }\n      return `${renderExpr(item.expr)} AS ${quoteIdentifier(item.alias)}`;\n    })\n    .join(', ')}`;\n}\n\nexport function createSqliteAdapter(options?: SqliteAdapterOptions) {\n  return Object.freeze(new SqliteAdapterImpl(options));\n}\n"],"mappings":"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"}