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 { SQLiteDeleteBase, SQLiteDeleteHKTBase } from "../query-builders/delete.cjs";
import { QueryEffectHKTBase, QueryEffectKind } from "../../effect-core/query-effect.cjs";

//#region src/sqlite-core/effect/delete.d.ts
interface SQLiteEffectDeleteHKT<TEffectHKT extends QueryEffectHKTBase = QueryEffectHKTBase> extends SQLiteDeleteHKTBase {
  _type: SQLiteEffectDeleteBase<Assume<this['table'], SQLiteTable>, this['runResult'], Assume<this['returning'], Record<string, unknown> | undefined>, this['dynamic'], this['excludedMethods'], TEffectHKT>;
}
type AnySQLiteEffectDelete = SQLiteEffectDeleteBase<any, any, any, any, any, any>;
type SQLiteEffectDelete<TTable extends SQLiteTable = SQLiteTable, TRunResult = unknown, TReturning extends Record<string, unknown> | undefined = undefined, TEffectHKT extends QueryEffectHKTBase = QueryEffectHKTBase> = SQLiteEffectDeleteBase<TTable, TRunResult, TReturning, true, never, TEffectHKT>;
type SQLiteEffectDeleteExecute<T extends AnySQLiteEffectDelete> = T['_']['returning'] extends undefined ? T['_']['runResult'] : T['_']['returning'][];
type SQLiteEffectDeletePrepare<T extends AnySQLiteEffectDelete, 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'] | undefined;
  values: T['_']['returning'] extends undefined ? DrizzleTypeError<'.values() cannot be used without .returning()'> : any[][];
  execute: SQLiteEffectDeleteExecute<T>;
}, TEffectHKT>;
interface SQLiteEffectDeleteBase<TTable extends SQLiteTable, TRunResult, TReturning extends Record<string, unknown> | undefined = undefined, TDynamic extends boolean = false, TExcludedMethods extends string = never, TEffectHKT extends QueryEffectHKTBase = QueryEffectHKTBase> extends QueryEffectKind<TEffectHKT, TReturning extends undefined ? TRunResult : TReturning[]> {}
declare class SQLiteEffectDeleteBase<TTable extends SQLiteTable, TRunResult, TReturning extends Record<string, unknown> | undefined = undefined, TDynamic extends boolean = false, TExcludedMethods extends string = never, TEffectHKT extends QueryEffectHKTBase = QueryEffectHKTBase> extends SQLiteDeleteBase<SQLiteEffectDeleteHKT<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(): SQLiteEffectDeletePrepare<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 { AnySQLiteEffectDelete, SQLiteEffectDelete, SQLiteEffectDeleteBase, SQLiteEffectDeleteExecute, SQLiteEffectDeleteHKT, SQLiteEffectDeletePrepare };
//# sourceMappingURL=delete.d.cts.map