import { MySqlDialect } from "./dialect.cjs";
import { entityKind } from "../entity.cjs";
import { Query, SQL } from "../sql/sql.cjs";
import { PreparedQuery } from "../session.cjs";
import { WithCacheConfig } from "../cache/core/types.cjs";

//#region src/mysql-core/session.d.ts
interface MySqlQueryResultHKT {
  readonly $brand: 'MySqlQueryResultHKT';
  readonly row: unknown;
  readonly type: unknown;
}
interface AnyMySqlQueryResultHKT extends MySqlQueryResultHKT {
  readonly type: any;
}
type MySqlQueryResultKind<TKind extends MySqlQueryResultHKT, TRow> = (TKind & {
  readonly row: TRow;
})['type'];
interface MySqlPreparedQueryConfig {
  execute: unknown;
  iterator: unknown;
}
interface MySqlPreparedQueryHKT {
  readonly $brand: 'MySqlPreparedQueryHKT';
  readonly config: unknown;
  readonly type: unknown;
}
type AnyMySqlMapper = (response: Record<string, unknown>[] | unknown[][] | {
  insertId: number;
  affectedRows: number;
}) => any;
declare abstract class MySqlBasePreparedQuery implements PreparedQuery {
  protected query: Query;
  static readonly [entityKind]: string;
  constructor(query: Query);
  getQuery(): Query;
  abstract execute(placeholderValues?: Record<string, unknown>): unknown;
}
interface MySqlTransactionConfig {
  withConsistentSnapshot?: boolean;
  accessMode?: 'read only' | 'read write';
  isolationLevel: 'read uncommitted' | 'read committed' | 'repeatable read' | 'serializable';
}
declare abstract class MySqlSession {
  protected dialect: MySqlDialect;
  static readonly [entityKind]: string;
  constructor(dialect: MySqlDialect);
  abstract prepareQuery(query: Query, mode: 'arrays' | 'objects' | 'raw', mapper?: (rows: any) => any, queryMetadata?: {
    type: 'select' | 'update' | 'delete' | 'insert';
    tables: string[];
  }, cacheConfig?: WithCacheConfig): MySqlBasePreparedQuery;
  abstract execute(query: SQL): unknown;
  abstract arrays(query: SQL): unknown;
  abstract objects(query: SQL): unknown;
  protected getSetTransactionSQL(config: MySqlTransactionConfig): SQL | undefined;
  protected getStartTransactionSQL(config: MySqlTransactionConfig): SQL | undefined;
}
//#endregion
export { AnyMySqlMapper, AnyMySqlQueryResultHKT, MySqlBasePreparedQuery, MySqlPreparedQueryConfig, MySqlPreparedQueryHKT, MySqlQueryResultHKT, MySqlQueryResultKind, MySqlSession, MySqlTransactionConfig };
//# sourceMappingURL=session.d.cts.map