import { SQLiteEffectPreparedQuery, SQLiteEffectSession } from "./session.cjs";
import { entityKind } from "../../entity.cjs";
import { SQLWrapper } from "../../sql/sql.cjs";
import { Assume, DrizzleTypeError } from "../../utils.cjs";
import { RunnableQuery } from "../../runnable-query.cjs";
import { SQLiteTable } from "../table.cjs";
import { PreparedQueryConfig } from "../session.cjs";
import { SQLiteInsertBase, SQLiteInsertBuilder, SQLiteInsertHKTBase } from "../query-builders/insert.cjs";
import { QueryEffectHKTBase, QueryEffectKind } from "../../effect-core/query-effect.cjs";

//#region src/sqlite-core/effect/insert.d.ts
interface SQLiteEffectInsertHKT<TEffectHKT extends QueryEffectHKTBase = QueryEffectHKTBase> extends SQLiteInsertHKTBase {
  _type: SQLiteEffectInsertBase<Assume<this['table'], SQLiteTable>, this['runResult'], this['returning'], this['dynamic'], this['excludedMethods'], TEffectHKT>;
}
type AnySQLiteEffectInsert = SQLiteEffectInsertBase<any, any, any, any, any, any>;
type SQLiteEffectInsert<TTable extends SQLiteTable = SQLiteTable, TRunResult = unknown, TReturning = any, TEffectHKT extends QueryEffectHKTBase = QueryEffectHKTBase> = SQLiteEffectInsertBase<TTable, TRunResult, TReturning, true, never, TEffectHKT>;
type SQLiteEffectInsertBuilder<TTable extends SQLiteTable, TRunResult, TEffectHKT extends QueryEffectHKTBase = QueryEffectHKTBase, TColumnList extends string[] | 'all' = 'all'> = SQLiteInsertBuilder<TTable, TRunResult, TColumnList, SQLiteEffectInsertHKT<TEffectHKT>>;
type SQLiteEffectInsertExecute<T extends AnySQLiteEffectInsert> = T['_']['returning'] extends undefined ? T['_']['runResult'] : T['_']['returning'][];
type SQLiteEffectInsertPrepare<T extends AnySQLiteEffectInsert, TEffectHKT extends QueryEffectHKTBase = QueryEffectHKTBase> = SQLiteEffectPreparedQuery<PreparedQueryConfig & {
  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: SQLiteEffectInsertExecute<T>;
}, TEffectHKT>;
interface SQLiteEffectInsertBase<TTable extends SQLiteTable, TRunResult, TReturning = undefined, TDynamic extends boolean = false, TExcludedMethods extends string = never, TEffectHKT extends QueryEffectHKTBase = QueryEffectHKTBase> extends QueryEffectKind<TEffectHKT, TReturning extends undefined ? TRunResult : TReturning[]> {}
declare class SQLiteEffectInsertBase<TTable extends SQLiteTable, TRunResult, TReturning = undefined, TDynamic extends boolean = false, TExcludedMethods extends string = never, TEffectHKT extends QueryEffectHKTBase = QueryEffectHKTBase> extends SQLiteInsertBase<SQLiteEffectInsertHKT<TEffectHKT>, TTable, TRunResult, TReturning, TDynamic, TExcludedMethods> implements RunnableQuery<TReturning extends undefined ? TRunResult : TReturning[], 'sqlite'>, SQLWrapper {
  static readonly [entityKind]: string;
  protected session: SQLiteEffectSession<TRunResult, TEffectHKT, any>;
  prepare(): SQLiteEffectInsertPrepare<this, TEffectHKT>;
  run: ReturnType<this['prepare']>['run'];
  all: ReturnType<this['prepare']>['all'];
  get: ReturnType<this['prepare']>['get'];
  values: ReturnType<this['prepare']>['values'];
  execute: ReturnType<this['prepare']>['execute'];
}
//#endregion
export { AnySQLiteEffectInsert, SQLiteEffectInsert, SQLiteEffectInsertBase, SQLiteEffectInsertBuilder, SQLiteEffectInsertExecute, SQLiteEffectInsertHKT, SQLiteEffectInsertPrepare };
//# sourceMappingURL=insert.d.cts.map