import { MySqlAsyncPreparedQuery, MySqlAsyncSession } from "./session.cjs";
import { entityKind } from "../../entity.cjs";
import { Assume } from "../../utils.cjs";
import { QueryPromise } from "../../query-promise.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";

//#region src/mysql-core/async/insert.d.ts
interface MySqlAsyncInsertHKT extends MySqlInsertHKTBase {
  _type: MySqlAsyncInsertBase<Assume<this['table'], MySqlTable>, Assume<this['queryResult'], MySqlQueryResultHKT>, Assume<this['returning'], Record<string, unknown> | undefined>, this['dynamic'], this['excludedMethods']>;
}
type AnyMySqlAsyncInsert = MySqlAsyncInsertBase<any, any, any, any, any>;
type MySqlAsyncInsertPrepare<T extends AnyMySqlAsyncInsert, TReturning extends Record<string, unknown> | undefined = undefined> = MySqlAsyncPreparedQuery<MySqlPreparedQueryConfig & {
  execute: TReturning extends undefined ? MySqlQueryResultKind<T['_']['queryResult'], never> : TReturning[];
  iterator: never;
}>;
type MySqlAsyncInsert<TTable extends MySqlTable = MySqlTable, TQueryResult extends MySqlQueryResultHKT = MySqlQueryResultHKT, TReturning extends Record<string, unknown> | undefined = Record<string, unknown> | undefined> = MySqlAsyncInsertBase<TTable, TQueryResult, TReturning, true, never>;
interface MySqlAsyncInsertBase<TTable extends MySqlTable, TQueryResult extends MySqlQueryResultHKT, TReturning extends Record<string, unknown> | undefined = undefined, TDynamic extends boolean = false, TExcludedMethods extends string = never> extends QueryPromise<TReturning extends undefined ? MySqlQueryResultKind<TQueryResult, never> : TReturning[]> {}
declare class MySqlAsyncInsertBase<TTable extends MySqlTable, TQueryResult extends MySqlQueryResultHKT, TReturning extends Record<string, unknown> | undefined = undefined, TDynamic extends boolean = false, TExcludedMethods extends string = never> extends MySqlInsertBase<MySqlAsyncInsertHKT, TTable, TQueryResult, TReturning, TDynamic, TExcludedMethods> implements RunnableQuery<TReturning extends undefined ? MySqlQueryResultKind<TQueryResult, never> : TReturning[], 'mysql'> {
  static readonly [entityKind]: string;
  protected session: MySqlAsyncSession<TQueryResult, any>;
  prepare(): MySqlAsyncInsertPrepare<this, TReturning>;
  execute: ReturnType<this['prepare']>['execute'];
  private createIterator;
  iterator: ReturnType<this["prepare"]>["iterator"];
}
//#endregion
export { AnyMySqlAsyncInsert, MySqlAsyncInsert, MySqlAsyncInsertBase, MySqlAsyncInsertHKT, MySqlAsyncInsertPrepare };
//# sourceMappingURL=insert.d.cts.map