import { SQLiteAsyncPreparedQuery, SQLiteAsyncPreparedQueryConfig, SQLiteAsyncSession } from "./session.cjs";
import { entityKind } from "../../entity.cjs";
import { SQLWrapper } from "../../sql/sql.cjs";
import { Assume, DrizzleTypeError } from "../../utils.cjs";
import { QueryPromise } from "../../query-promise.cjs";
import { RunnableQuery } from "../../runnable-query.cjs";
import { SQLiteTable } from "../table.cjs";
import { SQLiteInsertBase, SQLiteInsertBuilder, SQLiteInsertHKTBase } from "../query-builders/insert.cjs";

//#region src/sqlite-core/async/insert.d.ts
interface SQLiteAsyncInsertHKT extends SQLiteInsertHKTBase {
  _type: SQLiteAsyncInsertBase<Assume<this['table'], SQLiteTable>, Assume<this['resultType'], 'sync' | 'async'>, this['runResult'], this['returning'], this['dynamic'], this['excludedMethods']>;
}
type AnySQLiteAsyncInsert = SQLiteAsyncInsertBase<any, any, any, any, any, any>;
type SQLiteAsyncInsert<TTable extends SQLiteTable = SQLiteTable, TResultType extends 'sync' | 'async' = 'sync' | 'async', TRunResult = unknown, TReturning = any> = SQLiteAsyncInsertBase<TTable, TResultType, TRunResult, TReturning, true, never>;
type SQLiteAsyncInsertBuilder<TTable extends SQLiteTable, TResultType extends 'sync' | 'async', TRunResult, TColumnList extends string[] | 'all' = 'all'> = SQLiteInsertBuilder<TTable, TRunResult, TColumnList, SQLiteAsyncInsertHKT & {
  resultType: TResultType;
}>;
type SQLiteAsyncInsertExecute<T extends AnySQLiteAsyncInsert> = T['_']['returning'] extends undefined ? T['_']['runResult'] : T['_']['returning'][];
type SQLiteAsyncInsertPrepare<T extends AnySQLiteAsyncInsert> = SQLiteAsyncPreparedQuery<SQLiteAsyncPreparedQueryConfig & {
  type: T['_']['resultType'];
  run: T['_']['runResult'];
  all: T['_']['returning'] extends undefined ? DrizzleTypeError<'.all() cannot be used without .returning()'> : T['_']['returning'][];
  get: T['_']['returning'] extends undefined ? DrizzleTypeError<'.get() cannot be used without .returning()'> : T['_']['returning'];
  values: T['_']['returning'] extends undefined ? DrizzleTypeError<'.values() cannot be used without .returning()'> : any[][];
  execute: SQLiteAsyncInsertExecute<T>;
}>;
interface SQLiteAsyncInsertBase<TTable extends SQLiteTable, TResultType extends 'sync' | 'async', TRunResult, TReturning = undefined, TDynamic extends boolean = false, TExcludedMethods extends string = never> extends SQLiteInsertBase<SQLiteAsyncInsertHKT & {
  resultType: TResultType;
}, TTable, TRunResult, TReturning, TDynamic, TExcludedMethods>, QueryPromise<TReturning extends undefined ? TRunResult : TReturning[]> {
  readonly _: SQLiteInsertBase<SQLiteAsyncInsertHKT & {
    resultType: TResultType;
  }, TTable, TRunResult, TReturning, TDynamic, TExcludedMethods>['_'] & {
    readonly resultType: TResultType;
  };
}
declare class SQLiteAsyncInsertBase<TTable extends SQLiteTable, TResultType extends 'sync' | 'async', TRunResult, TReturning = undefined, TDynamic extends boolean = false, TExcludedMethods extends string = never> extends SQLiteInsertBase<SQLiteAsyncInsertHKT & {
  resultType: TResultType;
}, TTable, TRunResult, TReturning, TDynamic, TExcludedMethods> implements RunnableQuery<TReturning extends undefined ? TRunResult : TReturning[], 'sqlite'>, SQLWrapper {
  static readonly [entityKind]: string;
  protected session: SQLiteAsyncSession<TResultType, TRunResult, any>;
  prepare(): SQLiteAsyncInsertPrepare<this>;
  run: ReturnType<this['prepare']>['run'];
  all: ReturnType<this['prepare']>['all'];
  get: ReturnType<this['prepare']>['get'];
  values: ReturnType<this['prepare']>['values'];
  execute(): Promise<SQLiteAsyncInsertExecute<this>>;
}
//#endregion
export { AnySQLiteAsyncInsert, SQLiteAsyncInsert, SQLiteAsyncInsertBase, SQLiteAsyncInsertBuilder, SQLiteAsyncInsertExecute, SQLiteAsyncInsertHKT, SQLiteAsyncInsertPrepare };
//# sourceMappingURL=insert.d.cts.map