import { MySqlEffectPreparedQuery, MySqlEffectSession } from "./session.cjs";
import { entityKind } from "../../entity.cjs";
import { Assume } from "../../utils.cjs";
import { RunnableQuery } from "../../runnable-query.cjs";
import { MySqlTable } from "../table.cjs";
import { MySqlPreparedQueryConfig, MySqlQueryResultHKT, MySqlQueryResultKind } from "../session.cjs";
import { MySqlInsertBase, MySqlInsertHKTBase } from "../query-builders/insert.cjs";
import * as Effect from "effect/Effect";
import { QueryEffectHKTBase } from "../../effect-core/query-effect.cjs";

//#region src/mysql-core/effect/insert.d.ts
interface MySqlEffectInsertHKT<TEffectHKT extends QueryEffectHKTBase = QueryEffectHKTBase> extends MySqlInsertHKTBase {
  _type: MySqlEffectInsertBase<Assume<this['table'], MySqlTable>, Assume<this['queryResult'], MySqlQueryResultHKT>, Assume<this['returning'], Record<string, unknown> | undefined>, this['dynamic'], this['excludedMethods'], TEffectHKT>;
}
type AnyMySqlEffectInsert = MySqlEffectInsertBase<any, any, any, any, any>;
type MySqlEffectInsertPrepare<T extends AnyMySqlEffectInsert, TReturning extends Record<string, unknown> | undefined = undefined, TEffectHKT extends QueryEffectHKTBase = QueryEffectHKTBase> = MySqlEffectPreparedQuery<MySqlPreparedQueryConfig & {
  execute: TReturning extends undefined ? MySqlQueryResultKind<T['_']['queryResult'], never> : TReturning[];
  iterator: never;
}, TEffectHKT>;
type MySqlEffectInsert<TTable extends MySqlTable = MySqlTable, TQueryResult extends MySqlQueryResultHKT = MySqlQueryResultHKT, TReturning extends Record<string, unknown> | undefined = Record<string, unknown> | undefined, TEffectHKT extends QueryEffectHKTBase = QueryEffectHKTBase> = MySqlEffectInsertBase<TTable, TQueryResult, TReturning, true, never, TEffectHKT>;
interface MySqlEffectInsertBase<TTable extends MySqlTable, TQueryResult extends MySqlQueryResultHKT, TReturning extends Record<string, unknown> | undefined = undefined, TDynamic extends boolean = false, TExcludedMethods extends string = never, TEffectHKT extends QueryEffectHKTBase = QueryEffectHKTBase> extends Effect.Effect<TReturning extends undefined ? MySqlQueryResultKind<TQueryResult, never> : TReturning[], TEffectHKT['error'], TEffectHKT['context']> {}
declare class MySqlEffectInsertBase<TTable extends MySqlTable, TQueryResult extends MySqlQueryResultHKT, TReturning extends Record<string, unknown> | undefined = undefined, TDynamic extends boolean = false, TExcludedMethods extends string = never, TEffectHKT extends QueryEffectHKTBase = QueryEffectHKTBase> extends MySqlInsertBase<MySqlEffectInsertHKT<TEffectHKT>, TTable, TQueryResult, TReturning, TDynamic, TExcludedMethods> implements RunnableQuery<TReturning extends undefined ? MySqlQueryResultKind<TQueryResult, never> : TReturning[], 'mysql'> {
  static readonly [entityKind]: string;
  protected session: MySqlEffectSession<TEffectHKT, TQueryResult, any>;
  prepare(): MySqlEffectInsertPrepare<this, TReturning, TEffectHKT>;
  execute: ReturnType<this['prepare']>['execute'];
}
//#endregion
export { AnyMySqlEffectInsert, MySqlEffectInsert, MySqlEffectInsertBase, MySqlEffectInsertHKT, MySqlEffectInsertPrepare };
//# sourceMappingURL=insert.d.cts.map