import { MySqlTable } from "../table.cjs";
import { MySqlView } from "../view.cjs";
import { MySqlDialect } from "../dialect.cjs";
import { MySqlSession } from "../session.cjs";
import { entityKind } from "../../entity.cjs";
import { Query, SQL, SQLWrapper } from "../../sql/sql.cjs";
import { KnownKeysOnly } from "../../utils.cjs";
import { BuildQueryResult, BuildRelationalQueryResult, DBQueryConfigWithComment, TableRelationalConfig, TablesRelationalConfig } from "../../relations.cjs";

//#region src/mysql-core/query-builders/query.d.ts
interface MySqlRelationalQueryConstructor {
  new (schema: TablesRelationalConfig, table: MySqlTable | MySqlView, tableConfig: TableRelationalConfig, dialect: MySqlDialect, session: MySqlSession, config: DBQueryConfigWithComment<'many' | 'one'> | true, mode: 'many' | 'first'): AnyMySqlRelationalQuery;
}
type AnyMySqlRelationalQuery = MySqlRelationalQuery<any, any>;
declare class RelationalQueryBuilder<TSchema extends TablesRelationalConfig, TFields extends TableRelationalConfig, TBuilderHKT extends MySqlRelationalQueryHKTBase = MySqlRelationalQueryHKT> {
  private schema;
  private table;
  private tableConfig;
  private dialect;
  private session;
  private builder;
  static readonly [entityKind]: string;
  constructor(schema: TSchema, table: MySqlTable | MySqlView, tableConfig: TableRelationalConfig, dialect: MySqlDialect, session: MySqlSession, builder?: MySqlRelationalQueryConstructor);
  findMany<TConfig extends DBQueryConfigWithComment<'many', TSchema, TFields>>(config?: KnownKeysOnly<TConfig, DBQueryConfigWithComment<'many', TSchema, TFields>>): MySqlRelationalQueryKind<TBuilderHKT, BuildQueryResult<TSchema, TFields, TConfig>[]>;
  findFirst<TSelection extends DBQueryConfigWithComment<'one', TSchema, TFields>>(config?: KnownKeysOnly<TSelection, DBQueryConfigWithComment<'one', TSchema, TFields>>): MySqlRelationalQueryKind<TBuilderHKT, BuildQueryResult<TSchema, TFields, TSelection> | undefined>;
}
interface MySqlRelationalQueryHKTBase {
  result: unknown;
  _type: unknown;
}
interface MySqlRelationalQueryHKT extends MySqlRelationalQueryHKTBase {
  _type: MySqlRelationalQuery<MySqlRelationalQueryHKT, this['result']>;
}
type MySqlRelationalQueryKind<T extends MySqlRelationalQueryHKTBase, TResult> = (T & {
  result: TResult;
})['_type'];
declare class MySqlRelationalQuery<THKT extends MySqlRelationalQueryHKTBase, TResult> implements SQLWrapper {
  protected schema: TablesRelationalConfig;
  protected table: MySqlTable | MySqlView;
  protected tableConfig: TableRelationalConfig;
  protected dialect: MySqlDialect;
  protected session: MySqlSession;
  protected config: DBQueryConfigWithComment<'many' | 'one'> | true;
  protected mode: 'many' | 'first';
  static readonly [entityKind]: string;
  readonly _: {
    readonly hkt: THKT;
    readonly result: TResult;
  };
  protected $brand: 'MySqlRelationalQuery';
  constructor(schema: TablesRelationalConfig, table: MySqlTable | MySqlView, tableConfig: TableRelationalConfig, dialect: MySqlDialect, session: MySqlSession, config: DBQueryConfigWithComment<'many' | 'one'> | true, mode: 'many' | 'first');
  protected _getQuery(): BuildRelationalQueryResult;
  protected _toSQL(): {
    query: BuildRelationalQueryResult;
    builtQuery: Query;
  };
  getSQL(): SQL;
  toSQL(): Query;
}
//#endregion
export { AnyMySqlRelationalQuery, MySqlRelationalQuery, MySqlRelationalQueryConstructor, MySqlRelationalQueryHKT, MySqlRelationalQueryHKTBase, MySqlRelationalQueryKind, RelationalQueryBuilder };
//# sourceMappingURL=query.d.cts.map