import { MySql2QueryResultHKT } from "./session.cjs";
import { entityKind } from "../entity.cjs";
import { Logger } from "../logger.cjs";
import { AnyRelations, EmptyRelations } from "../relations.cjs";
import { Connection, Pool, PoolOptions } from "mysql2/promise";
import { DrizzleMySqlConfig } from "../mysql-core/utils.cjs";
import { MySqlAsyncDatabase, MySqlAsyncDatabase as MySqlDatabase } from "../mysql-core/async/db.cjs";
import { Cache } from "../cache/core/index.cjs";
import { Connection as Connection$1, Pool as Pool$1 } from "mysql2";

//#region src/mysql2/driver.d.ts
interface MySqlDriverOptions {
  logger?: Logger;
  cache?: Cache;
  useJitMappers?: boolean;
}
declare class MySql2Database<TRelations extends AnyRelations = EmptyRelations> extends MySqlAsyncDatabase<MySql2QueryResultHKT, TRelations> {
  static readonly [entityKind]: string;
}
type AnyMySql2Connection = Pool | Connection | Pool$1 | Connection$1;
declare function drizzle<TRelations extends AnyRelations = EmptyRelations, TClient extends AnyMySql2Connection = Pool>(...params: [string] | [string, DrizzleMySqlConfig<TRelations>] | [(DrizzleMySqlConfig<TRelations> & ({
  connection: string | PoolOptions;
} | {
  client: TClient;
}))]): MySql2Database<TRelations> & {
  $client: AnyMySql2Connection extends TClient ? Pool : TClient;
};
declare namespace drizzle {
  function mock<TRelations extends AnyRelations = EmptyRelations>(config?: DrizzleMySqlConfig<TRelations>): MySql2Database<TRelations> & {
    $client: '$client is not available on drizzle.mock()';
  };
}
//#endregion
export { AnyMySql2Connection, MySql2Database, MySqlDatabase, MySqlDriverOptions, drizzle };
//# sourceMappingURL=driver.d.cts.map