import type { SelectedFields as SelectedFieldsBase, SelectedFieldsFlat as SelectedFieldsFlatBase, SelectedFieldsOrdered as SelectedFieldsOrderedBase } from "../../operations.cjs"; import type { TypedQueryBuilder } from "../../query-builders/query-builder.cjs"; import type { AppendToNullabilityMap, AppendToResult, BuildSubquerySelection, GetSelectTableName, JoinNullability, JoinType, MapColumnsToTableAlias, SelectMode, SelectResult, SetOperator } from "../../query-builders/select.types.cjs"; import type { SingleStoreColumn } from "../columns/index.cjs"; import type { SingleStoreTable, SingleStoreTableWithColumns } from "../table.cjs"; import type { ColumnsSelection, Placeholder, SQL, View } from "../../sql/sql.cjs"; import type { Subquery } from "../../subquery.cjs"; import type { Table, UpdateTableConfig } from "../../table.cjs"; import type { Assume, ValidateShape } from "../../utils.cjs"; import type { PreparedQueryHKTBase, PreparedQueryKind, SingleStorePreparedQueryConfig } from "../session.cjs"; import type { SingleStoreSelectBase, SingleStoreSelectQueryBuilderBase } from "./select.cjs"; export interface SingleStoreSelectJoinConfig { on: SQL | undefined; table: SingleStoreTable | Subquery | SQL; alias: string | undefined; joinType: JoinType; lateral?: boolean; } export type BuildAliasTable = TTable extends Table ? SingleStoreTableWithColumns; }>> : never; export interface SingleStoreSelectConfig { withList?: Subquery[]; fields: Record; fieldsFlat?: SelectedFieldsOrdered; where?: SQL; having?: SQL; table: SingleStoreTable | Subquery | SQL; limit?: number | Placeholder; offset?: number | Placeholder; joins?: SingleStoreSelectJoinConfig[]; orderBy?: (SingleStoreColumn | SQL | SQL.Aliased)[]; groupBy?: (SingleStoreColumn | SQL | SQL.Aliased)[]; lockingClause?: { strength: LockStrength; config: LockConfig; }; distinct?: boolean; setOperators: { rightSelect: TypedQueryBuilder; type: SetOperator; isAll: boolean; orderBy?: (SingleStoreColumn | SQL | SQL.Aliased)[]; limit?: number | Placeholder; offset?: number | Placeholder; }[]; } export type SingleStoreJoin = GetSelectTableName> = T extends any ? SingleStoreSelectWithout : never, T['_']['selectMode']>, T['_']['selectMode'] extends 'partial' ? T['_']['selectMode'] : 'multiple', T['_']['preparedQueryHKT'], AppendToNullabilityMap, TDynamic, T['_']['excludedMethods']>, TDynamic, T['_']['excludedMethods']> : never; export type SingleStoreJoinFn = = GetSelectTableName>(table: TJoinedTable, on: ((aliases: T['_']['selection']) => SQL | undefined) | SQL | undefined) => SingleStoreJoin; export type SingleStoreCrossJoinFn = = GetSelectTableName>(table: TJoinedTable) => SingleStoreJoin; export type SelectedFieldsFlat = SelectedFieldsFlatBase; export type SelectedFields = SelectedFieldsBase; export type SelectedFieldsOrdered = SelectedFieldsOrderedBase; export type LockStrength = 'update' | 'share'; export type LockConfig = { noWait: true; skipLocked?: undefined; } | { noWait?: undefined; skipLocked: true; } | { noWait?: undefined; skipLocked?: undefined; }; export interface SingleStoreSelectHKTBase { tableName: string | undefined; selection: unknown; selectMode: SelectMode; preparedQueryHKT: unknown; nullabilityMap: unknown; dynamic: boolean; excludedMethods: string; result: unknown; selectedFields: unknown; _type: unknown; } export type SingleStoreSelectKind, TDynamic extends boolean, TExcludedMethods extends string, TResult = SelectResult[], TSelectedFields = BuildSubquerySelection> = (T & { tableName: TTableName; selection: TSelection; selectMode: TSelectMode; preparedQueryHKT: TPreparedQueryHKT; nullabilityMap: TNullabilityMap; dynamic: TDynamic; excludedMethods: TExcludedMethods; result: TResult; selectedFields: TSelectedFields; })['_type']; export interface SingleStoreSelectQueryBuilderHKT extends SingleStoreSelectHKTBase { _type: SingleStoreSelectQueryBuilderBase, this['selectMode'], Assume, Assume>, this['dynamic'], this['excludedMethods'], Assume, Assume>; } export interface SingleStoreSelectHKT extends SingleStoreSelectHKTBase { _type: SingleStoreSelectBase, this['selectMode'], Assume, Assume>, this['dynamic'], this['excludedMethods'], Assume, Assume>; } export type SingleStoreSetOperatorExcludedMethods = 'where' | 'having' | 'groupBy' | 'session' | 'leftJoin' | 'rightJoin' | 'innerJoin' | 'fullJoin' | 'for'; export type SingleStoreSelectWithout = TDynamic extends true ? T : Omit, TResetExcluded extends true ? K : T['_']['excludedMethods'] | K>; export type SingleStoreSelectPrepare = PreparedQueryKind; export type SingleStoreSelectDynamic = SingleStoreSelectKind; export type CreateSingleStoreSelectFromBuilderMode = TBuilderMode extends 'db' ? SingleStoreSelectBase : SingleStoreSelectQueryBuilderBase; export type SingleStoreSelectQueryBuilder = Record, TResult extends any[] = unknown[], TSelectedFields extends ColumnsSelection = ColumnsSelection> = SingleStoreSelectQueryBuilderBase; export type AnySingleStoreSelectQueryBuilder = SingleStoreSelectQueryBuilderBase; export type AnySingleStoreSetOperatorInterface = SingleStoreSetOperatorInterface; export interface SingleStoreSetOperatorInterface = TTableName extends string ? Record : {}, TDynamic extends boolean = false, TExcludedMethods extends string = never, TResult extends any[] = SelectResult[], TSelectedFields extends ColumnsSelection = BuildSubquerySelection> { _: { readonly hkt: SingleStoreSelectHKT; readonly tableName: TTableName; readonly selection: TSelection; readonly selectMode: TSelectMode; readonly preparedQueryHKT: TPreparedQueryHKT; readonly nullabilityMap: TNullabilityMap; readonly dynamic: TDynamic; readonly excludedMethods: TExcludedMethods; readonly result: TResult; readonly selectedFields: TSelectedFields; }; } export type SingleStoreSetOperatorWithResult = SingleStoreSetOperatorInterface; export type SingleStoreSelect, TSelectMode extends SelectMode = SelectMode, TNullabilityMap extends Record = Record> = SingleStoreSelectBase; export type AnySingleStoreSelect = SingleStoreSelectBase; export type SingleStoreSetOperator, TSelectMode extends SelectMode = SelectMode, TPreparedQueryHKT extends PreparedQueryHKTBase = PreparedQueryHKTBase, TNullabilityMap extends Record = Record> = SingleStoreSelectBase; export type SetOperatorRightSelect, TResult extends any[]> = TValue extends SingleStoreSetOperatorInterface ? ValidateShape> : TValue; export type SetOperatorRestSelect[], TResult extends any[]> = TValue extends [infer First, ...infer Rest] ? First extends SingleStoreSetOperatorInterface ? Rest extends AnySingleStoreSetOperatorInterface[] ? [ ValidateShape>, ...SetOperatorRestSelect ] : ValidateShape[]> : never : TValue; export type SingleStoreCreateSetOperatorFn = , TRest extends SingleStoreSetOperatorWithResult[], TPreparedQueryHKT extends PreparedQueryHKTBase = PreparedQueryHKTBase, TNullabilityMap extends Record = TTableName extends string ? Record : {}, TDynamic extends boolean = false, TExcludedMethods extends string = never, TResult extends any[] = SelectResult[], TSelectedFields extends ColumnsSelection = BuildSubquerySelection>(leftSelect: SingleStoreSetOperatorInterface, rightSelect: SetOperatorRightSelect, ...restSelects: SetOperatorRestSelect) => SingleStoreSelectWithout, false, SingleStoreSetOperatorExcludedMethods, true>; export type GetSingleStoreSetOperators = { union: SingleStoreCreateSetOperatorFn; intersect: SingleStoreCreateSetOperatorFn; except: SingleStoreCreateSetOperatorFn; unionAll: SingleStoreCreateSetOperatorFn; minus: SingleStoreCreateSetOperatorFn; };