import { entityKind } from "../entity.cjs";
import { Query } from "../sql/sql.cjs";
import { Logger } from "../logger.cjs";
import { AnyRelations } from "../relations.cjs";
import { MySqlDialect } from "../mysql-core/dialect.cjs";
import { WithCacheConfig } from "../cache/core/types.cjs";
import { AnyMySqlMapper, MySqlPreparedQueryConfig, MySqlQueryResultHKT, MySqlTransactionConfig } from "../mysql-core/session.cjs";
import { Connection, FieldPacket, OkPacket, Pool, ResultSetHeader, RowDataPacket } from "mysql2/promise";
import { Cache } from "../cache/core/index.cjs";
import { MySqlAsyncPreparedQuery, MySqlAsyncSession, MySqlAsyncTransaction } from "../mysql-core/async/session.cjs";

//#region src/mysql2/session.d.ts
type MySql2Client = Pool | Connection;
type MySqlRawQueryResult = [ResultSetHeader, FieldPacket[]];
type MySqlQueryResultType = RowDataPacket[][] | RowDataPacket[] | OkPacket | OkPacket[] | ResultSetHeader;
type MySqlQueryResult<T = any> = [T extends ResultSetHeader ? T : T[], FieldPacket[]];
interface MySql2SessionOptions {
  logger?: Logger;
  cache?: Cache;
}
declare class MySql2Session<TRelations extends AnyRelations> extends MySqlAsyncSession<MySqlQueryResultHKT, TRelations> {
  private client;
  private relations;
  private options;
  static readonly [entityKind]: string;
  private logger;
  private cache;
  constructor(client: MySql2Client, dialect: MySqlDialect, relations: TRelations, options: MySql2SessionOptions);
  prepareQuery<T extends MySqlPreparedQueryConfig>(query: Query, mode: 'arrays' | 'objects' | 'raw', mapper?: AnyMySqlMapper, queryMetadata?: {
    type: 'select' | 'update' | 'delete' | 'insert';
    tables: string[];
  }, cacheConfig?: WithCacheConfig): MySqlAsyncPreparedQuery<T>;
  transaction<T>(transaction: (tx: MySql2Transaction<TRelations>) => Promise<T>, config?: MySqlTransactionConfig): Promise<T>;
}
declare class MySql2Transaction<TRelations extends AnyRelations> extends MySqlAsyncTransaction<MySql2QueryResultHKT, TRelations> {
  static readonly [entityKind]: string;
  transaction<T>(transaction: (tx: MySql2Transaction<TRelations>) => Promise<T>): Promise<T>;
}
interface MySql2QueryResultHKT extends MySqlQueryResultHKT {
  type: MySqlRawQueryResult;
}
//#endregion
export { MySql2Client, MySql2QueryResultHKT, MySql2Session, MySql2SessionOptions, MySql2Transaction, MySqlQueryResult, MySqlQueryResultType, MySqlRawQueryResult };
//# sourceMappingURL=session.d.cts.map