import { SQLiteEffectPreparedQuery, SQLiteEffectSession } from "./session.cjs";
import { entityKind } from "../../entity.cjs";
import { BuildSubquerySelection, JoinNullability, SelectMode, SelectResult } from "../../query-builders/select.types.cjs";
import { ColumnsSelection } from "../../sql/sql.cjs";
import { Assume } from "../../utils.cjs";
import { PreparedQueryConfig } from "../session.cjs";
import { SQLiteSelectBase, SQLiteSelectBuilder } from "../query-builders/select.cjs";
import { SQLiteSelectHKTBase, SelectedFields } from "../query-builders/select.types.cjs";
import { QueryEffectHKTBase, QueryEffectKind } from "../../effect-core/query-effect.cjs";

//#region src/sqlite-core/effect/select.d.ts
type SQLiteEffectSelectExecute<T extends AnySQLiteEffectSelect> = T['_']['result'];
type SQLiteEffectSelectPrepare<T extends AnySQLiteEffectSelect, TEffectHKT extends QueryEffectHKTBase = QueryEffectHKTBase> = SQLiteEffectPreparedQuery<PreparedQueryConfig & {
  run: T['_']['runResult'];
  all: T['_']['result'];
  get: T['_']['result'][number] | undefined;
  values: any[][];
  execute: SQLiteEffectSelectExecute<T>;
}, TEffectHKT>;
type SQLiteEffectSelectBuilder<TSelection extends SelectedFields | undefined, TRunResult, TEffectHKT extends QueryEffectHKTBase = QueryEffectHKTBase> = SQLiteSelectBuilder<TSelection, TRunResult, SQLiteEffectSelectHKT<TEffectHKT>>;
type SQLiteEffectSelect<TTableName extends string | undefined = string | undefined, TRunResult = unknown, TSelection extends ColumnsSelection = Record<string, any>, TSelectMode extends SelectMode = SelectMode, TNullabilityMap extends Record<string, JoinNullability> = Record<string, JoinNullability>> = SQLiteEffectSelectBase<TTableName, TRunResult, TSelection, TSelectMode, TNullabilityMap, true, never>;
interface SQLiteEffectSelectHKT<TEffectHKT extends QueryEffectHKTBase = QueryEffectHKTBase> extends SQLiteSelectHKTBase {
  _type: SQLiteEffectSelectBase<this['tableName'], this['runResult'], Assume<this['selection'], ColumnsSelection>, this['selectMode'], Assume<this['nullabilityMap'], Record<string, JoinNullability>>, this['dynamic'], this['excludedMethods'], Assume<this['result'], any[]>, Assume<this['selectedFields'], ColumnsSelection>, TEffectHKT>;
}
interface SQLiteEffectSelectBase<TTableName extends string | undefined, TRunResult, TSelection extends ColumnsSelection, TSelectMode extends SelectMode = 'single', TNullabilityMap extends Record<string, JoinNullability> = (TTableName extends string ? Record<TTableName, 'not-null'> : {}), TDynamic extends boolean = false, TExcludedMethods extends string = never, TResult extends any[] = SelectResult<TSelection, TSelectMode, TNullabilityMap>[], TSelectedFields extends ColumnsSelection = BuildSubquerySelection<TSelection, TNullabilityMap>, TEffectHKT extends QueryEffectHKTBase = QueryEffectHKTBase> extends QueryEffectKind<TEffectHKT, TResult> {}
declare class SQLiteEffectSelectBase<TTableName extends string | undefined, TRunResult, TSelection, TSelectMode extends SelectMode = 'single', TNullabilityMap extends Record<string, JoinNullability> = (TTableName extends string ? Record<TTableName, 'not-null'> : {}), TDynamic extends boolean = false, TExcludedMethods extends string = never, TResult = SelectResult<TSelection, TSelectMode, TNullabilityMap>[], TSelectedFields extends ColumnsSelection = BuildSubquerySelection<TSelection, TNullabilityMap>, TEffectHKT extends QueryEffectHKTBase = QueryEffectHKTBase> extends SQLiteSelectBase<SQLiteEffectSelectHKT<TEffectHKT>, TTableName, TRunResult, TSelection, TSelectMode, TNullabilityMap, TDynamic, TExcludedMethods, TResult, TSelectedFields> {
  static readonly [entityKind]: string;
  protected session: SQLiteEffectSession<TRunResult, TEffectHKT, any>;
  prepare(): SQLiteEffectSelectPrepare<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'];
}
type AnySQLiteEffectSelect = SQLiteEffectSelectBase<any, any, any, any, any, any, any, any, any, any>;
//#endregion
export { AnySQLiteEffectSelect, SQLiteEffectSelect, SQLiteEffectSelectBase, SQLiteEffectSelectBuilder, SQLiteEffectSelectExecute, SQLiteEffectSelectHKT, SQLiteEffectSelectPrepare };
//# sourceMappingURL=select.d.cts.map