import { entityKind } from "../entity.cjs";
import { Query } from "../sql/sql.cjs";
import { Assume } from "../utils.cjs";
import { AnyRelations } from "../relations.cjs";
import { MySqlDialect } from "../mysql-core/dialect.cjs";
import { WithCacheConfig } from "../cache/core/types.cjs";
import { MySqlPreparedQueryConfig, MySqlQueryResultHKT } from "../mysql-core/session.cjs";
import * as Effect from "effect/Effect";
import { EffectCacheShape } from "../cache/core/cache-effect.cjs";
import { SqlError } from "effect/unstable/sql/SqlError";
import { EffectDrizzleQueryError } from "../effect-core/errors.cjs";
import { EffectLoggerShape } from "../effect-core/logger.cjs";
import { QueryEffectHKTBase } from "../effect-core/query-effect.cjs";
import { MysqlClient } from "@effect/sql-mysql2/MysqlClient";
import { MySqlEffectPreparedQuery, MySqlEffectSession, MySqlEffectTransaction } from "../mysql-core/effect/session.cjs";

//#region src/effect-mysql2/session.d.ts
interface EffectMysql2QueryEffectHKT extends QueryEffectHKTBase {
  readonly error: EffectDrizzleQueryError;
  readonly context: never;
}
interface EffectMysql2QueryResultHKT extends MySqlQueryResultHKT {
  type: readonly Assume<this['row'], object>[];
}
interface EffectMysql2SessionOptions {
  logger: EffectLoggerShape;
  cache: EffectCacheShape;
}
declare class EffectMysql2Session<TQueryResult extends MySqlQueryResultHKT, TRelations extends AnyRelations> extends MySqlEffectSession<EffectMysql2QueryEffectHKT, TQueryResult, TRelations> {
  private client;
  protected relations: TRelations;
  private options;
  static readonly [entityKind]: string;
  constructor(client: MysqlClient, dialect: MySqlDialect, relations: TRelations, options: EffectMysql2SessionOptions);
  prepareQuery<T extends MySqlPreparedQueryConfig = MySqlPreparedQueryConfig>(query: Query, mode: 'arrays' | 'objects' | 'raw', mapper?: (rows: any[]) => any, queryMetadata?: {
    type: 'select' | 'update' | 'delete' | 'insert';
    tables: string[];
  }, cacheConfig?: WithCacheConfig): MySqlEffectPreparedQuery<T, EffectMysql2QueryEffectHKT>;
  transaction<A, E, R>(transaction: (tx: EffectMysql2Transaction<TQueryResult, TRelations>) => Effect.Effect<A, E, R>): Effect.Effect<A, E | SqlError, R>;
}
declare class EffectMysql2Transaction<TQueryResult extends MySqlQueryResultHKT, TRelations extends AnyRelations> extends MySqlEffectTransaction<EffectMysql2QueryEffectHKT, TQueryResult, TRelations> {
  static readonly [entityKind]: string;
  transaction<A, E, R>(transaction: (tx: MySqlEffectTransaction<EffectMysql2QueryEffectHKT, TQueryResult, TRelations>) => Effect.Effect<A, E, R>): Effect.Effect<A, SqlError | E, R>;
}
//#endregion
export { EffectMysql2QueryEffectHKT, EffectMysql2QueryResultHKT, EffectMysql2Session, EffectMysql2SessionOptions, EffectMysql2Transaction };
//# sourceMappingURL=session.d.cts.map