import { SQLiteTable } from "../table.cjs";
import { SQLiteDialect } from "../dialect.cjs";
import { SQLiteSession } from "../session.cjs";
import { entityKind } from "../../entity.cjs";
import { Query, SQL, SQLWrapper } from "../../sql/sql.cjs";
import { KnownKeysOnly } from "../../utils.cjs";
import { BuildQueryResult, BuildRelationalQueryResult, DBQueryConfig, TableRelationalConfig, TablesRelationalConfig } from "../../relations.cjs";

//#region src/sqlite-core/query-builders/query.d.ts
interface SQLiteRelationalQueryHKTBase {
  type: unknown;
  result: unknown;
  _type: unknown;
}
interface SQLiteRelationalQueryHKT extends SQLiteRelationalQueryHKTBase {
  _type: SQLiteRelationalQuery<SQLiteRelationalQueryHKT, this['result']>;
}
type SQLiteRelationalQueryKind<T extends SQLiteRelationalQueryHKTBase, TType, TResult> = (T & {
  type: TType;
  result: TResult;
})['_type'];
interface SQLiteRelationalQueryConstructor {
  new (mode: unknown, schema: TablesRelationalConfig, table: SQLiteTable, tableConfig: TableRelationalConfig, dialect: SQLiteDialect, session: SQLiteSession<any, any>, config: DBQueryConfig<'many' | 'one'> | true, queryMode: 'many' | 'first', forbidJsonb: boolean | undefined): AnySQLiteRelationalQuery;
}
type AnySQLiteRelationalQuery = SQLiteRelationalQuery<any, any>;
declare class RelationalQueryBuilder<TMode, TSchema extends TablesRelationalConfig, TFields extends TableRelationalConfig, TBuilderHKT extends SQLiteRelationalQueryHKTBase = SQLiteRelationalQueryHKT> {
  private mode;
  private schema;
  private table;
  private tableConfig;
  private dialect;
  private session;
  private forbidJsonb;
  private builder;
  static readonly [entityKind]: string;
  constructor(mode: TMode, schema: TSchema, table: SQLiteTable, tableConfig: TableRelationalConfig, dialect: SQLiteDialect, session: SQLiteSession<any, any>, forbidJsonb: boolean | undefined, builder?: SQLiteRelationalQueryConstructor);
  findMany<TConfig extends DBQueryConfig<'many', TSchema, TFields>>(config?: KnownKeysOnly<TConfig, DBQueryConfig<'many', TSchema, TFields>>): SQLiteRelationalQueryKind<TBuilderHKT, TMode, BuildQueryResult<TSchema, TFields, TConfig>[]>;
  findFirst<TConfig extends DBQueryConfig<'one', TSchema, TFields>>(config?: KnownKeysOnly<TConfig, DBQueryConfig<'one', TSchema, TFields>>): SQLiteRelationalQueryKind<TBuilderHKT, TMode, BuildQueryResult<TSchema, TFields, TConfig> | undefined>;
}
declare class SQLiteRelationalQuery<THKT extends SQLiteRelationalQueryHKTBase, TResult> implements SQLWrapper {
  protected schema: TablesRelationalConfig;
  protected tableConfig: TableRelationalConfig;
  protected dialect: SQLiteDialect;
  protected session: SQLiteSession<any, any>;
  protected config: DBQueryConfig<'many' | 'one'> | true;
  protected forbidJsonb?: boolean | undefined;
  static readonly [entityKind]: string;
  readonly _: {
    readonly dialect: 'sqlite';
    readonly hkt: THKT;
    readonly result: TResult;
  };
  constructor(resultKind: unknown, schema: TablesRelationalConfig, table: SQLiteTable, tableConfig: TableRelationalConfig, dialect: SQLiteDialect, session: SQLiteSession<any, any>, config: DBQueryConfig<'many' | 'one'> | true, mode: 'many' | 'first', forbidJsonb?: boolean | undefined);
  getSQL(): SQL;
  protected _getQuery(): BuildRelationalQueryResult;
  protected _toSQL(): {
    query: BuildRelationalQueryResult;
    builtQuery: Query;
  };
  toSQL(): Query;
}
//#endregion
export { AnySQLiteRelationalQuery, RelationalQueryBuilder, SQLiteRelationalQuery, SQLiteRelationalQueryConstructor, SQLiteRelationalQueryHKT, SQLiteRelationalQueryHKTBase, SQLiteRelationalQueryKind };
//# sourceMappingURL=query.d.cts.map