import type { JsonValue, PlanMeta } from '@prisma-next/contract/types'; import type { AsyncIterableResult, RuntimeExecuteOptions, } from '@prisma-next/framework-components/runtime'; import type { AnyQueryAst, LoweredParam } from '@prisma-next/sql-relational-core/ast'; import type { CodecTypesBase, CodecValue, Expression, } from '@prisma-next/sql-relational-core/expression'; import type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan'; import type { RuntimeQueryable } from '../sql-runtime'; export type ParamSpec = | (keyof CT & string) | { readonly codecId: keyof CT & string; readonly typeParams?: JsonValue; readonly nullable?: boolean; }; export type Declaration = Readonly< Record> >; export type DeclaredCodecId = S extends string ? S : S extends { readonly codecId: infer C extends string } ? C : never; export type DeclaredNullable = S extends { readonly nullable: true } ? true : false; export type BindSiteParams = { readonly [K in keyof D]: Expression<{ codecId: DeclaredCodecId; nullable: DeclaredNullable; }>; }; export type ParamsFromDeclaration = { readonly [K in keyof D]: CodecValue, DeclaredNullable, CT>; }; export type PrepareCallback = (params: BindSiteParams) => SqlQueryPlan; export interface PreparedStatement { readonly sql: string; readonly ast: AnyQueryAst; readonly meta: PlanMeta; readonly slots: readonly LoweredParam[]; /** * Run this prepared statement against the given target. The target carries * the execution scope (top-level runtime, an explicit connection, an active * transaction). It is required and explicit — there is no implicit binding * back to the runtime that produced this statement. */ execute( target: RuntimeQueryable, params: Params, options?: RuntimeExecuteOptions, ): AsyncIterableResult; }