import { entityKind } from "../entity.js"; import type { RelationalSchemaConfig, TablesRelationalConfig } from "../relations.js"; import { type Query, type SQL } from "../sql/sql.js"; import type { Assume, Equal } from "../utils.js"; import { MySqlDatabase } from "./db.js"; import type { MySqlDialect } from "./dialect.js"; import type { SelectedFieldsOrdered } from "./query-builders/select.types.js"; export type Mode = 'default' | 'planetscale'; export interface MySqlQueryResultHKT { readonly $brand: 'MySqlQueryResultHKT'; readonly row: unknown; readonly type: unknown; } export interface AnyMySqlQueryResultHKT extends MySqlQueryResultHKT { readonly type: any; } export type MySqlQueryResultKind = (TKind & { readonly row: TRow; })['type']; export interface MySqlPreparedQueryConfig { execute: unknown; iterator: unknown; } export interface MySqlPreparedQueryHKT { readonly $brand: 'MySqlPreparedQueryHKT'; readonly config: unknown; readonly type: unknown; } export type PreparedQueryKind = Equal extends true ? Assume<(TKind & { readonly config: TConfig; })['type'], MySqlPreparedQuery> : (TKind & { readonly config: TConfig; })['type']; export declare abstract class MySqlPreparedQuery { static readonly [entityKind]: string; abstract execute(placeholderValues?: Record): Promise; abstract iterator(placeholderValues?: Record): AsyncGenerator; } export interface MySqlTransactionConfig { withConsistentSnapshot?: boolean; accessMode?: 'read only' | 'read write'; isolationLevel: 'read uncommitted' | 'read committed' | 'repeatable read' | 'serializable'; } export declare abstract class MySqlSession = Record, TSchema extends TablesRelationalConfig = Record> { protected dialect: MySqlDialect; static readonly [entityKind]: string; constructor(dialect: MySqlDialect); abstract prepareQuery(query: Query, fields: SelectedFieldsOrdered | undefined, customResultMapper?: (rows: unknown[][]) => T['execute'], generatedIds?: Record[], returningIds?: SelectedFieldsOrdered): PreparedQueryKind; execute(query: SQL): Promise; abstract all(query: SQL): Promise; count(sql: SQL): Promise; abstract transaction(transaction: (tx: MySqlTransaction) => Promise, config?: MySqlTransactionConfig): Promise; protected getSetTransactionSQL(config: MySqlTransactionConfig): SQL | undefined; protected getStartTransactionSQL(config: MySqlTransactionConfig): SQL | undefined; } export declare abstract class MySqlTransaction = Record, TSchema extends TablesRelationalConfig = Record> extends MySqlDatabase { protected schema: RelationalSchemaConfig | undefined; protected readonly nestedIndex: number; static readonly [entityKind]: string; constructor(dialect: MySqlDialect, session: MySqlSession, schema: RelationalSchemaConfig | undefined, nestedIndex: number, mode: Mode); rollback(): never; /** Nested transactions (aka savepoints) only work with InnoDB engine. */ abstract transaction(transaction: (tx: MySqlTransaction) => Promise): Promise; } export interface PreparedQueryHKTBase extends MySqlPreparedQueryHKT { type: MySqlPreparedQuery>; }