kysely 0.26.2 → 0.26.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/cjs/expression/expression-builder.d.ts +4 -2
  2. package/dist/cjs/helpers/mysql.d.ts +3 -3
  3. package/dist/cjs/helpers/sqlite.d.ts +3 -3
  4. package/dist/cjs/index.d.ts +2 -2
  5. package/dist/cjs/parser/expression-parser.d.ts +2 -2
  6. package/dist/cjs/parser/reference-parser.d.ts +2 -2
  7. package/dist/cjs/parser/returning-parser.d.ts +2 -1
  8. package/dist/cjs/parser/select-parser.d.ts +20 -9
  9. package/dist/cjs/parser/value-parser.d.ts +2 -2
  10. package/dist/cjs/query-builder/delete-query-builder.d.ts +5 -3
  11. package/dist/cjs/query-builder/function-module.d.ts +2 -2
  12. package/dist/cjs/query-builder/insert-query-builder.d.ts +5 -3
  13. package/dist/cjs/query-builder/returning-interface.d.ts +3 -2
  14. package/dist/cjs/query-builder/select-query-builder-expression.d.ts +20 -0
  15. package/dist/cjs/query-builder/select-query-builder-expression.js +2 -0
  16. package/dist/cjs/query-builder/select-query-builder.d.ts +10 -7
  17. package/dist/cjs/query-builder/select-query-builder.js +5 -2
  18. package/dist/cjs/query-builder/update-query-builder.d.ts +5 -3
  19. package/dist/cjs/query-creator.d.ts +5 -3
  20. package/dist/cjs/query-creator.js +0 -47
  21. package/dist/cjs/raw-builder/raw-builder.d.ts +0 -3
  22. package/dist/cjs/schema/create-view-builder.d.ts +2 -2
  23. package/dist/cjs/util/infer-result.d.ts +2 -1
  24. package/dist/cjs/util/type-utils.d.ts +8 -9
  25. package/dist/esm/expression/expression-builder.d.ts +4 -2
  26. package/dist/esm/helpers/mysql.d.ts +3 -3
  27. package/dist/esm/helpers/sqlite.d.ts +3 -3
  28. package/dist/esm/index.d.ts +2 -2
  29. package/dist/esm/parser/expression-parser.d.ts +2 -2
  30. package/dist/esm/parser/reference-parser.d.ts +2 -2
  31. package/dist/esm/parser/returning-parser.d.ts +2 -1
  32. package/dist/esm/parser/select-parser.d.ts +20 -9
  33. package/dist/esm/parser/value-parser.d.ts +2 -2
  34. package/dist/esm/query-builder/delete-query-builder.d.ts +5 -3
  35. package/dist/esm/query-builder/function-module.d.ts +2 -2
  36. package/dist/esm/query-builder/insert-query-builder.d.ts +5 -3
  37. package/dist/esm/query-builder/returning-interface.d.ts +3 -2
  38. package/dist/esm/query-builder/select-query-builder-expression.d.ts +20 -0
  39. package/dist/esm/query-builder/select-query-builder-expression.js +2 -0
  40. package/dist/esm/query-builder/select-query-builder.d.ts +10 -7
  41. package/dist/esm/query-builder/select-query-builder.js +5 -2
  42. package/dist/esm/query-builder/update-query-builder.d.ts +5 -3
  43. package/dist/esm/query-creator.d.ts +5 -3
  44. package/dist/esm/query-creator.js +0 -47
  45. package/dist/esm/raw-builder/raw-builder.d.ts +0 -3
  46. package/dist/esm/schema/create-view-builder.d.ts +2 -2
  47. package/dist/esm/util/infer-result.d.ts +2 -1
  48. package/dist/esm/util/type-utils.d.ts +8 -9
  49. package/package.json +1 -1
@@ -12,7 +12,7 @@ import { ExtractTypeFromValueExpression } from '../parser/value-parser.js';
12
12
  import { CaseBuilder } from '../query-builder/case-builder.js';
13
13
  import { JSONPathBuilder } from '../query-builder/json-path-builder.js';
14
14
  import { OperandExpression } from '../parser/expression-parser.js';
15
- import { SelectArg, SelectExpression, Selection } from '../parser/select-parser.js';
15
+ import { CallbackSelection, SelectCallback, SelectExpression, Selection } from '../parser/select-parser.js';
16
16
  import { RefTuple2, RefTuple3, RefTuple4, RefTuple5, ValTuple2, ValTuple3, ValTuple4, ValTuple5 } from '../parser/tuple-parser.js';
17
17
  export interface ExpressionBuilder<DB, TB extends keyof DB> {
18
18
  /**
@@ -204,7 +204,9 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
204
204
  * This method accepts the same inputs as {@link SelectQueryBuilder.select}. See its
205
205
  * documentation for examples.
206
206
  */
207
- selectNoFrom<SE extends SelectExpression<DB, TB>>(selection: SelectArg<DB, TB, SE>): SelectQueryBuilder<DB, TB, Selection<DB, TB, SE>>;
207
+ selectNoFrom<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): SelectQueryBuilder<DB, TB, Selection<DB, TB, SE>>;
208
+ selectNoFrom<CB extends SelectCallback<DB, TB>>(callback: CB): SelectQueryBuilder<DB, TB, CallbackSelection<DB, TB, CB>>;
209
+ selectNoFrom<SE extends SelectExpression<DB, TB>>(selection: SE): SelectQueryBuilder<DB, TB, Selection<DB, TB, SE>>;
208
210
  /**
209
211
  * Creates a `case` statement/operator.
210
212
  *
@@ -1,5 +1,5 @@
1
1
  import { Expression } from '../expression/expression.js';
2
- import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
2
+ import { SelectQueryBuilderExpression } from '../query-builder/select-query-builder-expression.js';
3
3
  import { RawBuilder } from '../raw-builder/raw-builder.js';
4
4
  import { Simplify } from '../util/type-utils.js';
5
5
  /**
@@ -48,7 +48,7 @@ import { Simplify } from '../util/type-utils.js';
48
48
  * from `person`
49
49
  * ```
50
50
  */
51
- export declare function jsonArrayFrom<O>(expr: SelectQueryBuilder<any, any, O>): RawBuilder<Simplify<O>[]>;
51
+ export declare function jsonArrayFrom<O>(expr: SelectQueryBuilderExpression<O>): RawBuilder<Simplify<O>[]>;
52
52
  /**
53
53
  * A MySQL helper for turning a subquery into a JSON object.
54
54
  *
@@ -97,7 +97,7 @@ export declare function jsonArrayFrom<O>(expr: SelectQueryBuilder<any, any, O>):
97
97
  * from `person`
98
98
  * ```
99
99
  */
100
- export declare function jsonObjectFrom<O>(expr: SelectQueryBuilder<any, any, O>): RawBuilder<Simplify<O> | null>;
100
+ export declare function jsonObjectFrom<O>(expr: SelectQueryBuilderExpression<O>): RawBuilder<Simplify<O> | null>;
101
101
  /**
102
102
  * The MySQL `json_object` function.
103
103
  *
@@ -1,5 +1,5 @@
1
1
  import { Expression } from '../expression/expression.js';
2
- import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
2
+ import { SelectQueryBuilderExpression } from '../query-builder/select-query-builder-expression.js';
3
3
  import { RawBuilder } from '../raw-builder/raw-builder.js';
4
4
  import { Simplify } from '../util/type-utils.js';
5
5
  /**
@@ -55,7 +55,7 @@ import { Simplify } from '../util/type-utils.js';
55
55
  * from "person"
56
56
  * ```
57
57
  */
58
- export declare function jsonArrayFrom<O>(expr: SelectQueryBuilder<any, any, O>): RawBuilder<Simplify<O>[]>;
58
+ export declare function jsonArrayFrom<O>(expr: SelectQueryBuilderExpression<O>): RawBuilder<Simplify<O>[]>;
59
59
  /**
60
60
  * A SQLite helper for turning a subquery into a JSON object.
61
61
  *
@@ -111,7 +111,7 @@ export declare function jsonArrayFrom<O>(expr: SelectQueryBuilder<any, any, O>):
111
111
  * from "person";
112
112
  * ```
113
113
  */
114
- export declare function jsonObjectFrom<O>(expr: SelectQueryBuilder<any, any, O>): RawBuilder<Simplify<O> | null>;
114
+ export declare function jsonObjectFrom<O>(expr: SelectQueryBuilderExpression<O>): RawBuilder<Simplify<O> | null>;
115
115
  /**
116
116
  * The SQLite `json_object` function.
117
117
  *
@@ -176,10 +176,10 @@ export * from './util/compilable.js';
176
176
  export * from './util/explainable.js';
177
177
  export * from './util/streamable.js';
178
178
  export * from './util/log.js';
179
- export { AnyAliasedColumn, AnyAliasedColumnWithTable, AnyColumn, AnyColumnWithTable, AnySelectQueryBuilder, Equals, UnknownRow, Simplify, SqlBool, } from './util/type-utils.js';
179
+ export { AnyAliasedColumn, AnyAliasedColumnWithTable, AnyColumn, AnyColumnWithTable, Equals, UnknownRow, Simplify, SqlBool, } from './util/type-utils.js';
180
180
  export * from './util/infer-result.js';
181
181
  export { logOnce } from './util/log-once.js';
182
- export { SelectExpression, SelectArg, Selection, } from './parser/select-parser.js';
182
+ export { SelectExpression, SelectCallback, SelectArg, Selection, CallbackSelection, } from './parser/select-parser.js';
183
183
  export { ReferenceExpression, ReferenceExpressionOrList, SimpleReferenceExpression, StringReference, ExtractTypeFromStringReference, ExtractTypeFromReferenceExpression, } from './parser/reference-parser.js';
184
184
  export { ValueExpression, ValueExpressionOrList, } from './parser/value-parser.js';
185
185
  export { TableExpression, TableExpressionOrList, } from './parser/table-parser.js';
@@ -2,13 +2,13 @@ import { AliasedExpression, Expression } from '../expression/expression.js';
2
2
  import { AliasNode } from '../operation-node/alias-node.js';
3
3
  import { OperationNode } from '../operation-node/operation-node.js';
4
4
  import { ExpressionBuilder } from '../expression/expression-builder.js';
5
- import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
5
+ import { SelectQueryBuilderExpression } from '../query-builder/select-query-builder-expression.js';
6
6
  /**
7
7
  * Like `Expression<V>` but also accepts a select query with an output
8
8
  * type extending `Record<string, V>`. This type is useful because SQL
9
9
  * treats records with a single column as single values.
10
10
  */
11
- export type OperandExpression<V> = Expression<V> | SelectQueryBuilder<any, any, Record<string, V>>;
11
+ export type OperandExpression<V> = Expression<V> | SelectQueryBuilderExpression<Record<string, V>>;
12
12
  export type ExpressionOrFactory<DB, TB extends keyof DB, V> = OperandExpression<V> | OperandExpressionFactory<DB, TB, V>;
13
13
  export type AliasedExpressionOrFactory<DB, TB extends keyof DB> = AliasedExpression<any, any> | AliasedExpressionFactory<DB, TB>;
14
14
  export type ExpressionFactory<DB, TB extends keyof DB, V> = (eb: ExpressionBuilder<DB, TB>) => Expression<V>;
@@ -2,7 +2,7 @@ import { AliasNode } from '../operation-node/alias-node.js';
2
2
  import { ColumnNode } from '../operation-node/column-node.js';
3
3
  import { ReferenceNode } from '../operation-node/reference-node.js';
4
4
  import { AnyColumn, AnyColumnWithTable, ExtractColumnType } from '../util/type-utils.js';
5
- import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
5
+ import { SelectQueryBuilderExpression } from '../query-builder/select-query-builder-expression.js';
6
6
  import { ExpressionOrFactory } from './expression-parser.js';
7
7
  import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js';
8
8
  import { SelectType } from '../util/column-type.js';
@@ -16,7 +16,7 @@ export type StringReference<DB, TB extends keyof DB> = AnyColumn<DB, TB> | AnyCo
16
16
  export type SimpleReferenceExpression<DB, TB extends keyof DB> = StringReference<DB, TB> | DynamicReferenceBuilder<any>;
17
17
  export type ReferenceExpression<DB, TB extends keyof DB> = SimpleReferenceExpression<DB, TB> | ExpressionOrFactory<DB, TB, any>;
18
18
  export type ReferenceExpressionOrList<DB, TB extends keyof DB> = ReferenceExpression<DB, TB> | ReadonlyArray<ReferenceExpression<DB, TB>>;
19
- export type ExtractTypeFromReferenceExpression<DB, TB extends keyof DB, RE, DV = unknown> = RE extends string ? SelectType<ExtractTypeFromStringReference<DB, TB, RE>> : RE extends SelectQueryBuilder<any, any, infer O> ? O[keyof O] | null : RE extends (qb: any) => SelectQueryBuilder<any, any, infer O> ? O[keyof O] | null : RE extends Expression<infer O> ? O : RE extends (qb: any) => Expression<infer O> ? O : DV;
19
+ export type ExtractTypeFromReferenceExpression<DB, TB extends keyof DB, RE, DV = unknown> = RE extends string ? SelectType<ExtractTypeFromStringReference<DB, TB, RE>> : RE extends SelectQueryBuilderExpression<infer O> ? O[keyof O] | null : RE extends (qb: any) => SelectQueryBuilderExpression<infer O> ? O[keyof O] | null : RE extends Expression<infer O> ? O : RE extends (qb: any) => Expression<infer O> ? O : DV;
20
20
  export type ExtractTypeFromStringReference<DB, TB extends keyof DB, RE extends string, DV = unknown> = RE extends `${infer SC}.${infer T}.${infer C}` ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : RE extends `${infer T}.${infer C}` ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : RE extends AnyColumn<DB, TB> ? ExtractColumnType<DB, TB, RE> : DV;
21
21
  export type OrderedColumnName<C extends string> = C extends `${string} ${infer O}` ? O extends OrderByDirection ? C : never : C;
22
22
  export type ExtractColumnNameFromOrderedColumnName<C extends string> = C extends `${infer CL} ${infer O}` ? O extends OrderByDirection ? CL : never : C;
@@ -1,6 +1,7 @@
1
1
  import { DeleteResult } from '../query-builder/delete-result.js';
2
2
  import { InsertResult } from '../query-builder/insert-result.js';
3
3
  import { UpdateResult } from '../query-builder/update-result.js';
4
- import { Selection, AllSelection } from './select-parser.js';
4
+ import { Selection, AllSelection, CallbackSelection } from './select-parser.js';
5
5
  export type ReturningRow<DB, TB extends keyof DB, O, SE> = O extends InsertResult ? Selection<DB, TB, SE> : O extends DeleteResult ? Selection<DB, TB, SE> : O extends UpdateResult ? Selection<DB, TB, SE> : O & Selection<DB, TB, SE>;
6
+ export type ReturningCallbackRow<DB, TB extends keyof DB, O, CB> = O extends InsertResult ? CallbackSelection<DB, TB, CB> : O extends DeleteResult ? CallbackSelection<DB, TB, CB> : O extends UpdateResult ? CallbackSelection<DB, TB, CB> : O & CallbackSelection<DB, TB, CB>;
6
7
  export type ReturningAllRow<DB, TB extends keyof DB, O> = O extends InsertResult ? AllSelection<DB, TB> : O extends DeleteResult ? AllSelection<DB, TB> : O extends UpdateResult ? AllSelection<DB, TB> : O & AllSelection<DB, TB>;
@@ -3,23 +3,34 @@ import { SelectionNode } from '../operation-node/selection-node.js';
3
3
  import { AnyAliasedColumn, AnyAliasedColumnWithTable, AnyColumn, AnyColumnWithTable, DrainOuterGeneric, ExtractColumnType } from '../util/type-utils.js';
4
4
  import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js';
5
5
  import { AliasedExpressionOrFactory } from './expression-parser.js';
6
- import { Selectable, SelectType } from '../util/column-type.js';
6
+ import { SelectType } from '../util/column-type.js';
7
7
  import { AliasedExpression } from '../expression/expression.js';
8
8
  import { ExpressionBuilder } from '../expression/expression-builder.js';
9
9
  export type SelectExpression<DB, TB extends keyof DB> = AnyAliasedColumnWithTable<DB, TB> | AnyAliasedColumn<DB, TB> | AnyColumnWithTable<DB, TB> | AnyColumn<DB, TB> | DynamicReferenceBuilder<any> | AliasedExpressionOrFactory<DB, TB>;
10
+ export type SelectCallback<DB, TB extends keyof DB> = (eb: ExpressionBuilder<DB, TB>) => ReadonlyArray<SelectExpression<DB, TB>>;
11
+ /**
12
+ * Turns a SelectExpression or a union of them into a selection object.
13
+ */
14
+ export type Selection<DB, TB extends keyof DB, SE> = [DB] extends [unknown] ? {
15
+ [E in FlattenSelectExpression<SE> as ExtractAliasFromSelectExpression<E>]: SelectType<ExtractTypeFromSelectExpression<DB, TB, E>>;
16
+ } : {};
17
+ /**
18
+ * Turns a SelectCallback into a selection object.
19
+ */
20
+ export type CallbackSelection<DB, TB extends keyof DB, CB> = CB extends (eb: any) => ReadonlyArray<infer SE> ? Selection<DB, TB, SE> : never;
10
21
  export type SelectArg<DB, TB extends keyof DB, SE extends SelectExpression<DB, TB>> = SE | ReadonlyArray<SE> | ((eb: ExpressionBuilder<DB, TB>) => ReadonlyArray<SE>);
11
- export type Selection<DB, TB extends keyof DB, SE> = DrainOuterGeneric<{
12
- [A in ExtractAliasFromSelectExpression<SE>]: SelectType<ExtractTypeFromSelectExpression<DB, TB, SE, A>>;
13
- }>;
22
+ type FlattenSelectExpression<SE> = SE extends DynamicReferenceBuilder<infer RA> ? {
23
+ [R in RA]: DynamicReferenceBuilder<R>;
24
+ }[RA] : SE;
14
25
  type ExtractAliasFromSelectExpression<SE> = SE extends string ? ExtractAliasFromStringSelectExpression<SE> : SE extends AliasedExpression<any, infer EA> ? EA : SE extends (qb: any) => AliasedExpression<any, infer EA> ? EA : SE extends DynamicReferenceBuilder<infer RA> ? ExtractAliasFromStringSelectExpression<RA> : never;
15
26
  type ExtractAliasFromStringSelectExpression<SE extends string> = SE extends `${string}.${string}.${string} as ${infer A}` ? A : SE extends `${string}.${string} as ${infer A}` ? A : SE extends `${string} as ${infer A}` ? A : SE extends `${string}.${string}.${infer C}` ? C : SE extends `${string}.${infer C}` ? C : SE;
16
- type ExtractTypeFromSelectExpression<DB, TB extends keyof DB, SE, A extends keyof any> = SE extends string ? ExtractTypeFromStringSelectExpression<DB, TB, SE, A> : SE extends AliasedSelectQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? O[keyof O] | null : never : SE extends (qb: any) => AliasedSelectQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? O[keyof O] | null : never : SE extends AliasedExpression<infer O, infer EA> ? EA extends A ? O : never : SE extends (qb: any) => AliasedExpression<infer O, infer EA> ? EA extends A ? O : never : SE extends DynamicReferenceBuilder<infer RA> ? A extends ExtractAliasFromStringSelectExpression<RA> ? ExtractTypeFromStringSelectExpression<DB, TB, RA, A> | undefined : never : never;
17
- type ExtractTypeFromStringSelectExpression<DB, TB extends keyof DB, SE extends string, A extends keyof any> = SE extends `${infer SC}.${infer T}.${infer C} as ${infer RA}` ? RA extends A ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : never : SE extends `${infer T}.${infer C} as ${infer RA}` ? RA extends A ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : never : SE extends `${infer C} as ${infer RA}` ? RA extends A ? C extends AnyColumn<DB, TB> ? ExtractColumnType<DB, TB, C> : never : never : SE extends `${infer SC}.${infer T}.${infer C}` ? C extends A ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : never : SE extends `${infer T}.${infer C}` ? C extends A ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : never : SE extends A ? SE extends AnyColumn<DB, TB> ? ExtractColumnType<DB, TB, SE> : never : never;
18
- export type AllSelection<DB, TB extends keyof DB> = DrainOuterGeneric<Selectable<{
27
+ type ExtractTypeFromSelectExpression<DB, TB extends keyof DB, SE> = SE extends string ? ExtractTypeFromStringSelectExpression<DB, TB, SE> : SE extends AliasedSelectQueryBuilder<infer O, any> ? O[keyof O] | null : SE extends (eb: any) => AliasedSelectQueryBuilder<infer O, any> ? O[keyof O] | null : SE extends AliasedExpression<infer O, any> ? O : SE extends (eb: any) => AliasedExpression<infer O, any> ? O : SE extends DynamicReferenceBuilder<infer RA> ? ExtractTypeFromStringSelectExpression<DB, TB, RA> | undefined : never;
28
+ type ExtractTypeFromStringSelectExpression<DB, TB extends keyof DB, SE extends string> = SE extends `${infer SC}.${infer T}.${infer C} as ${string}` ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : SE extends `${infer T}.${infer C} as ${string}` ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : SE extends `${infer C} as ${string}` ? C extends AnyColumn<DB, TB> ? ExtractColumnType<DB, TB, C> : never : SE extends `${infer SC}.${infer T}.${infer C}` ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : SE extends `${infer T}.${infer C}` ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : SE extends AnyColumn<DB, TB> ? ExtractColumnType<DB, TB, SE> : never;
29
+ export type AllSelection<DB, TB extends keyof DB> = DrainOuterGeneric<{
19
30
  [C in AnyColumn<DB, TB>]: {
20
- [T in TB]: C extends keyof DB[T] ? DB[T][C] : never;
31
+ [T in TB]: SelectType<C extends keyof DB[T] ? DB[T][C] : never>;
21
32
  }[TB];
22
- }>>;
33
+ }>;
23
34
  export declare function parseSelectArg(selection: SelectArg<any, any, SelectExpression<any, any>>): SelectionNode[];
24
35
  export declare function parseSelectAll(table?: string | string[]): SelectionNode[];
25
36
  export {};
@@ -2,11 +2,11 @@ import { ValueNode } from '../operation-node/value-node.js';
2
2
  import { ExpressionOrFactory } from './expression-parser.js';
3
3
  import { OperationNode } from '../operation-node/operation-node.js';
4
4
  import { Expression } from '../expression/expression.js';
5
- import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
5
+ import { SelectQueryBuilderExpression } from '../query-builder/select-query-builder-expression.js';
6
6
  export type ValueExpression<DB, TB extends keyof DB, V> = V | ExpressionOrFactory<DB, TB, V>;
7
7
  export type ValueExpressionOrList<DB, TB extends keyof DB, V> = ValueExpression<DB, TB, V> | ReadonlyArray<ValueExpression<DB, TB, V>>;
8
8
  export type ExtractTypeFromValueExpressionOrList<VE> = VE extends ReadonlyArray<infer AV> ? ExtractTypeFromValueExpression<AV> : ExtractTypeFromValueExpression<VE>;
9
- export type ExtractTypeFromValueExpression<VE> = VE extends SelectQueryBuilder<any, any, Record<string, infer SV>> ? SV : VE extends Expression<infer V> ? V : VE;
9
+ export type ExtractTypeFromValueExpression<VE> = VE extends SelectQueryBuilderExpression<Record<string, infer SV>> ? SV : VE extends Expression<infer V> ? V : VE;
10
10
  export declare function parseValueExpressionOrList(arg: ValueExpressionOrList<any, any, unknown>): OperationNode;
11
11
  export declare function parseValueExpression(exp: ValueExpression<any, any, unknown>): OperationNode;
12
12
  export declare function isSafeImmediateValue(value: unknown): value is number | boolean | null;
@@ -2,8 +2,8 @@ import { OperationNodeSource } from '../operation-node/operation-node-source.js'
2
2
  import { CompiledQuery } from '../query-compiler/compiled-query.js';
3
3
  import { JoinCallbackExpression, JoinReferenceExpression } from '../parser/join-parser.js';
4
4
  import { From, FromTables, TableExpression } from '../parser/table-parser.js';
5
- import { SelectExpression, SelectArg } from '../parser/select-parser.js';
6
- import { ReturningAllRow, ReturningRow } from '../parser/returning-parser.js';
5
+ import { SelectExpression, SelectCallback } from '../parser/select-parser.js';
6
+ import { ReturningAllRow, ReturningCallbackRow, ReturningRow } from '../parser/returning-parser.js';
7
7
  import { ReferenceExpression } from '../parser/reference-parser.js';
8
8
  import { QueryNode } from '../operation-node/query-node.js';
9
9
  import { DrainOuterGeneric, NarrowPartial, Nullable, ShallowRecord, SimplifyResult, SimplifySingleResult, SqlBool } from '../util/type-utils.js';
@@ -659,7 +659,9 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
659
659
  * .executeTakeFirst()
660
660
  * ```
661
661
  */
662
- returning<SE extends SelectExpression<DB, TB>>(selection: SelectArg<DB, TB, SE>): DeleteQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
662
+ returning<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): DeleteQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
663
+ returning<CB extends SelectCallback<DB, TB>>(callback: CB): DeleteQueryBuilder<DB, TB, ReturningCallbackRow<DB, TB, O, CB>>;
664
+ returning<SE extends SelectExpression<DB, TB>>(selection: SE): DeleteQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
663
665
  /**
664
666
  * Adds `returning *` or `returning table.*` clause to the query.
665
667
  *
@@ -6,7 +6,7 @@ import { ExtractTypeFromReferenceExpression, ReferenceExpression, StringReferenc
6
6
  import { KyselyTypeError } from '../util/type-error.js';
7
7
  import { Equals, IsAny } from '../util/type-utils.js';
8
8
  import { AggregateFunctionBuilder } from './aggregate-function-builder.js';
9
- import { SelectQueryBuilder } from './select-query-builder.js';
9
+ import { SelectQueryBuilderExpression } from '../query-builder/select-query-builder-expression.js';
10
10
  /**
11
11
  * Helpers for type safe SQL function calls.
12
12
  *
@@ -538,7 +538,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
538
538
  * ```
539
539
  */
540
540
  any<RE extends StringReference<DB, TB>>(expr: RE): Exclude<ExtractTypeFromStringReference<DB, TB, RE>, null> extends ReadonlyArray<infer I> ? ExpressionWrapper<DB, TB, I> : KyselyTypeError<'any(expr) call failed: expr must be an array'>;
541
- any<T>(subquery: SelectQueryBuilder<any, any, Record<string, T>>): ExpressionWrapper<DB, TB, T>;
541
+ any<T>(subquery: SelectQueryBuilderExpression<Record<string, T>>): ExpressionWrapper<DB, TB, T>;
542
542
  any<T>(expr: Expression<ReadonlyArray<T>>): ExpressionWrapper<DB, TB, T>;
543
543
  }
544
544
  export declare function createFunctionModule<DB, TB extends keyof DB>(): FunctionModule<DB, TB>;
@@ -1,6 +1,6 @@
1
1
  import { OperationNodeSource } from '../operation-node/operation-node-source.js';
2
2
  import { CompiledQuery } from '../query-compiler/compiled-query.js';
3
- import { SelectExpression, SelectArg } from '../parser/select-parser.js';
3
+ import { SelectExpression, SelectCallback } from '../parser/select-parser.js';
4
4
  import { InsertObjectOrList, InsertObjectOrListFactory } from '../parser/insert-values-parser.js';
5
5
  import { InsertQueryNode } from '../operation-node/insert-query-node.js';
6
6
  import { QueryNode } from '../operation-node/query-node.js';
@@ -11,7 +11,7 @@ import { QueryExecutor } from '../query-executor/query-executor.js';
11
11
  import { QueryId } from '../util/query-id.js';
12
12
  import { InsertResult } from './insert-result.js';
13
13
  import { KyselyPlugin } from '../plugin/kysely-plugin.js';
14
- import { ReturningRow } from '../parser/returning-parser.js';
14
+ import { ReturningCallbackRow, ReturningRow } from '../parser/returning-parser.js';
15
15
  import { NoResultErrorConstructor } from './no-result-error.js';
16
16
  import { ExpressionOrFactory } from '../parser/expression-parser.js';
17
17
  import { ReturningInterface } from './returning-interface.js';
@@ -474,7 +474,9 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
474
474
  * .executeTakeFirst()
475
475
  * ```
476
476
  */
477
- returning<SE extends SelectExpression<DB, TB>>(selection: SelectArg<DB, TB, SE>): InsertQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
477
+ returning<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): InsertQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
478
+ returning<CB extends SelectCallback<DB, TB>>(callback: CB): InsertQueryBuilder<DB, TB, ReturningCallbackRow<DB, TB, O, CB>>;
479
+ returning<SE extends SelectExpression<DB, TB>>(selection: SE): InsertQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
478
480
  /**
479
481
  * Adds a `returning *` to an insert/update/delete query on databases
480
482
  * that support `returning` such as PostgreSQL.
@@ -1,5 +1,5 @@
1
- import { ReturningRow } from '../parser/returning-parser.js';
2
- import { SelectExpression } from '../parser/select-parser.js';
1
+ import { ReturningCallbackRow, ReturningRow } from '../parser/returning-parser.js';
2
+ import { SelectCallback, SelectExpression } from '../parser/select-parser.js';
3
3
  import { Selectable } from '../util/column-type.js';
4
4
  export interface ReturningInterface<DB, TB extends keyof DB, O> {
5
5
  /**
@@ -62,6 +62,7 @@ export interface ReturningInterface<DB, TB extends keyof DB, O> {
62
62
  * ```
63
63
  */
64
64
  returning<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): ReturningInterface<DB, TB, ReturningRow<DB, TB, O, SE>>;
65
+ returning<CB extends SelectCallback<DB, TB>>(callback: CB): ReturningInterface<DB, TB, ReturningCallbackRow<DB, TB, O, CB>>;
65
66
  returning<SE extends SelectExpression<DB, TB>>(selection: SE): ReturningInterface<DB, TB, ReturningRow<DB, TB, O, SE>>;
66
67
  /**
67
68
  * Adds a `returning *` to an insert/update/delete query on databases
@@ -0,0 +1,20 @@
1
+ import { AliasableExpression } from '../expression/expression.js';
2
+ import { SelectQueryNode } from '../operation-node/select-query-node.js';
3
+ export interface SelectQueryBuilderExpression<O> extends AliasableExpression<O> {
4
+ get isSelectQueryBuilder(): true;
5
+ /**
6
+ * Creates the OperationNode that describes how to compile this expression into SQL.
7
+ *
8
+ * If you are creating a custom expression, it's often easiest to use the {@link sql}
9
+ * template tag to build the node:
10
+ *
11
+ * ```ts
12
+ * class SomeExpression<T> implements Expression<T> {
13
+ * toOperationNode(): OperationNode {
14
+ * return sql`some sql here`.toOperationNode()
15
+ * }
16
+ * }
17
+ * ```
18
+ */
19
+ toOperationNode(): SelectQueryNode;
20
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,7 +1,7 @@
1
1
  import { CompiledQuery } from '../query-compiler/compiled-query.js';
2
2
  import { JoinCallbackExpression, JoinReferenceExpression } from '../parser/join-parser.js';
3
3
  import { TableExpression } from '../parser/table-parser.js';
4
- import { SelectExpression, Selection, SelectArg, AllSelection } from '../parser/select-parser.js';
4
+ import { SelectExpression, Selection, AllSelection, SelectCallback, CallbackSelection } from '../parser/select-parser.js';
5
5
  import { ReferenceExpression } from '../parser/reference-parser.js';
6
6
  import { SelectQueryNode } from '../operation-node/select-query-node.js';
7
7
  import { QueryNode } from '../operation-node/query-node.js';
@@ -17,14 +17,15 @@ import { NoResultErrorConstructor } from './no-result-error.js';
17
17
  import { HavingInterface } from './having-interface.js';
18
18
  import { Explainable, ExplainFormat } from '../util/explainable.js';
19
19
  import { SetOperandExpression } from '../parser/set-operation-parser.js';
20
- import { AliasableExpression, AliasedExpression, Expression } from '../expression/expression.js';
20
+ import { AliasedExpression, Expression } from '../expression/expression.js';
21
21
  import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
22
22
  import { KyselyTypeError } from '../util/type-error.js';
23
23
  import { Selectable } from '../util/column-type.js';
24
24
  import { Streamable } from '../util/streamable.js';
25
25
  import { ExpressionOrFactory } from '../parser/expression-parser.js';
26
26
  import { ExpressionWrapper } from '../expression/expression-wrapper.js';
27
- export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInterface<DB, TB>, HavingInterface<DB, TB>, AliasableExpression<O>, Compilable<O>, Explainable, Streamable<O> {
27
+ import { SelectQueryBuilderExpression } from './select-query-builder-expression.js';
28
+ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInterface<DB, TB>, HavingInterface<DB, TB>, SelectQueryBuilderExpression<O>, Compilable<O>, Explainable, Streamable<O> {
28
29
  /**
29
30
  * Adds a `where` expression to the query.
30
31
  *
@@ -575,7 +576,9 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
575
576
  * persons[0].id
576
577
  * ```
577
578
  */
578
- select<SE extends SelectExpression<DB, TB>>(selection: SelectArg<DB, TB, SE>): SelectQueryBuilder<DB, TB, O & Selection<DB, TB, SE>>;
579
+ select<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): SelectQueryBuilder<DB, TB, O & Selection<DB, TB, SE>>;
580
+ select<CB extends SelectCallback<DB, TB>>(callback: CB): SelectQueryBuilder<DB, TB, O & CallbackSelection<DB, TB, CB>>;
581
+ select<SE extends SelectExpression<DB, TB>>(selection: SE): SelectQueryBuilder<DB, TB, O & Selection<DB, TB, SE>>;
579
582
  /**
580
583
  * Adds `distinct on` expressions to the select clause.
581
584
  *
@@ -1356,7 +1359,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1356
1359
  * pets[0].owner_first_name
1357
1360
  * ```
1358
1361
  */
1359
- as<A extends string>(alias: A): AliasedSelectQueryBuilder<DB, TB, O, A>;
1362
+ as<A extends string>(alias: A): AliasedSelectQueryBuilder<O, A>;
1360
1363
  /**
1361
1364
  * Clears all select clauses from the query.
1362
1365
  *
@@ -1789,8 +1792,8 @@ export interface SelectQueryBuilderProps {
1789
1792
  readonly queryNode: SelectQueryNode;
1790
1793
  readonly executor: QueryExecutor;
1791
1794
  }
1792
- export interface AliasedSelectQueryBuilder<DB, TB extends keyof DB, O = undefined, A extends string = never> extends AliasedExpression<O, A> {
1793
- get selectQueryBuilder(): SelectQueryBuilder<DB, TB, O>;
1795
+ export interface AliasedSelectQueryBuilder<O = undefined, A extends string = never> extends AliasedExpression<O, A> {
1796
+ get isAliasedSelectQueryBuilder(): true;
1794
1797
  }
1795
1798
  export type SelectQueryBuilderWithInnerJoin<DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? InnerJoinedBuilder<DB, TB, O, A, DB[T]> : never : TE extends keyof DB ? SelectQueryBuilder<DB, TB | TE, O> : TE extends AliasedExpression<infer QO, infer QA> ? InnerJoinedBuilder<DB, TB, O, QA, QO> : TE extends (qb: any) => AliasedExpression<infer QO, infer QA> ? InnerJoinedBuilder<DB, TB, O, QA, QO> : never;
1796
1799
  type InnerJoinedBuilder<DB, TB extends keyof DB, O, A extends string, R> = A extends keyof DB ? SelectQueryBuilder<InnerJoinedDB<DB, A, R>, TB | A, O> : SelectQueryBuilder<DB & ShallowRecord<A, R>, TB | A, O>;
@@ -27,6 +27,9 @@ class SelectQueryBuilderImpl {
27
27
  get expressionType() {
28
28
  return undefined;
29
29
  }
30
+ get isSelectQueryBuilder() {
31
+ return true;
32
+ }
30
33
  where(...args) {
31
34
  return new SelectQueryBuilderImpl({
32
35
  ...this.#props,
@@ -342,8 +345,8 @@ class AliasedSelectQueryBuilderImpl {
342
345
  get alias() {
343
346
  return this.#alias;
344
347
  }
345
- get selectQueryBuilder() {
346
- return this.#queryBuilder;
348
+ get isAliasedSelectQueryBuilder() {
349
+ return true;
347
350
  }
348
351
  toOperationNode() {
349
352
  return alias_node_js_1.AliasNode.create(this.#queryBuilder.toOperationNode(), identifier_node_js_1.IdentifierNode.create(this.#alias));
@@ -2,8 +2,8 @@ import { OperationNodeSource } from '../operation-node/operation-node-source.js'
2
2
  import { CompiledQuery } from '../query-compiler/compiled-query.js';
3
3
  import { JoinCallbackExpression, JoinReferenceExpression } from '../parser/join-parser.js';
4
4
  import { TableExpression, From, FromTables } from '../parser/table-parser.js';
5
- import { SelectExpression, SelectArg } from '../parser/select-parser.js';
6
- import { ReturningRow } from '../parser/returning-parser.js';
5
+ import { SelectExpression, SelectCallback } from '../parser/select-parser.js';
6
+ import { ReturningCallbackRow, ReturningRow } from '../parser/returning-parser.js';
7
7
  import { ReferenceExpression } from '../parser/reference-parser.js';
8
8
  import { QueryNode } from '../operation-node/query-node.js';
9
9
  import { DrainOuterGeneric, NarrowPartial, Nullable, ShallowRecord, SimplifyResult, SimplifySingleResult, SqlBool } from '../util/type-utils.js';
@@ -741,7 +741,9 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
741
741
  * .executeTakeFirst()
742
742
  * ```
743
743
  */
744
- returning<SE extends SelectExpression<DB, TB>>(selection: SelectArg<DB, TB, SE>): UpdateQueryBuilder<DB, UT, TB, ReturningRow<DB, TB, O, SE>>;
744
+ returning<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): UpdateQueryBuilder<DB, UT, TB, ReturningRow<DB, TB, O, SE>>;
745
+ returning<CB extends SelectCallback<DB, TB>>(callback: CB): UpdateQueryBuilder<DB, UT, TB, ReturningCallbackRow<DB, TB, O, CB>>;
746
+ returning<SE extends SelectExpression<DB, TB>>(selection: SE): UpdateQueryBuilder<DB, UT, TB, ReturningRow<DB, TB, O, SE>>;
745
747
  /**
746
748
  * Adds a `returning *` to an insert/update/delete query on databases
747
749
  * that support `returning` such as PostgreSQL.
@@ -11,7 +11,7 @@ import { DeleteResult } from './query-builder/delete-result.js';
11
11
  import { UpdateResult } from './query-builder/update-result.js';
12
12
  import { KyselyPlugin } from './plugin/kysely-plugin.js';
13
13
  import { CTEBuilderCallback } from './query-builder/cte-builder.js';
14
- import { SelectArg, SelectExpression, Selection } from './parser/select-parser.js';
14
+ import { CallbackSelection, SelectCallback, SelectExpression, Selection } from './parser/select-parser.js';
15
15
  export declare class QueryCreator<DB> {
16
16
  #private;
17
17
  constructor(props: QueryCreatorProps);
@@ -139,7 +139,7 @@ export declare class QueryCreator<DB> {
139
139
  * ### Examples
140
140
  *
141
141
  * ```ts
142
- * const result = db.select((eb) => [
142
+ * const result = db.selectNoFrom((eb) => [
143
143
  * eb.selectFrom('person')
144
144
  * .select('id')
145
145
  * .where('first_name', '=', 'Jennifer')
@@ -174,7 +174,9 @@ export declare class QueryCreator<DB> {
174
174
  * ) as "doggo_id"
175
175
  * ```
176
176
  */
177
- selectNoFrom<SE extends SelectExpression<DB, never>>(selection: SelectArg<DB, never, SE>): SelectQueryBuilder<DB, never, Selection<DB, never, SE>>;
177
+ selectNoFrom<SE extends SelectExpression<DB, never>>(selections: ReadonlyArray<SE>): SelectQueryBuilder<DB, never, Selection<DB, never, SE>>;
178
+ selectNoFrom<CB extends SelectCallback<DB, never>>(callback: CB): SelectQueryBuilder<DB, never, CallbackSelection<DB, never, CB>>;
179
+ selectNoFrom<SE extends SelectExpression<DB, never>>(selection: SE): SelectQueryBuilder<DB, never, Selection<DB, never, SE>>;
178
180
  /**
179
181
  * Creates an insert query.
180
182
  *
@@ -28,53 +28,6 @@ class QueryCreator {
28
28
  queryNode: select_query_node_js_1.SelectQueryNode.createFrom((0, table_parser_js_1.parseTableExpressionOrList)(from), this.#props.withNode),
29
29
  });
30
30
  }
31
- /**
32
- * Creates a `select` query builder without a `from` clause.
33
- *
34
- * If you want to create a `select from` query, use the `selectFrom` method instead.
35
- * This one can be used to create a plain `select` statement without a `from` clause.
36
- *
37
- * This method accepts the same inputs as {@link SelectQueryBuilder.select}. See its
38
- * documentation for more examples.
39
- *
40
- * ### Examples
41
- *
42
- * ```ts
43
- * const result = db.select((eb) => [
44
- * eb.selectFrom('person')
45
- * .select('id')
46
- * .where('first_name', '=', 'Jennifer')
47
- * .limit(1)
48
- * .as('jennifer_id'),
49
- *
50
- * eb.selectFrom('pet')
51
- * .select('id')
52
- * .where('name', '=', 'Doggo')
53
- * .limit(1)
54
- * .as('doggo_id')
55
- * ])
56
- * .executeTakeFirstOrThrow()
57
- *
58
- * console.log(result.jennifer_id)
59
- * console.log(result.doggo_id)
60
- * ```
61
- *
62
- * The generated SQL (PostgreSQL):
63
- *
64
- * ```sql
65
- * select (
66
- * select "id"
67
- * from "person"
68
- * where "first_name" = $1
69
- * limit $2
70
- * ) as "jennifer_id", (
71
- * select "id"
72
- * from "pet"
73
- * where "name" = $3
74
- * limit $4
75
- * ) as "doggo_id"
76
- * ```
77
- */
78
31
  selectNoFrom(selection) {
79
32
  return (0, select_query_builder_js_1.createSelectQueryBuilder)({
80
33
  queryId: (0, query_id_js_1.createQueryId)(),
@@ -12,9 +12,6 @@ import { AliasableExpression, AliasedExpression, Expression } from '../expressio
12
12
  * use the {@link sql} template tag.
13
13
  */
14
14
  export interface RawBuilder<O> extends AliasableExpression<O> {
15
- /**
16
- * @private Without this SelectQueryBuilder extends RawBuilder and things break.
17
- */
18
15
  get isRawBuilder(): true;
19
16
  /**
20
17
  * Returns an aliased version of the SQL expression.
@@ -4,8 +4,8 @@ import { Compilable } from '../util/compilable.js';
4
4
  import { QueryExecutor } from '../query-executor/query-executor.js';
5
5
  import { QueryId } from '../util/query-id.js';
6
6
  import { CreateViewNode } from '../operation-node/create-view-node.js';
7
- import { AnySelectQueryBuilder } from '../util/type-utils.js';
8
7
  import { RawBuilder } from '../raw-builder/raw-builder.js';
8
+ import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
9
9
  export declare class CreateViewBuilder implements OperationNodeSource, Compilable {
10
10
  #private;
11
11
  constructor(props: CreateViewBuilderProps);
@@ -31,7 +31,7 @@ export declare class CreateViewBuilder implements OperationNodeSource, Compilabl
31
31
  * string opening an SQL injection vulnerability. DO NOT pass unchecked user input
32
32
  * into the query or raw expression passed to this method!
33
33
  */
34
- as(query: AnySelectQueryBuilder | RawBuilder<any>): CreateViewBuilder;
34
+ as(query: SelectQueryBuilder<any, any, any> | RawBuilder<any>): CreateViewBuilder;
35
35
  /**
36
36
  * Simply calls the provided function passing `this` as the only argument. `$call` returns
37
37
  * what the provided function returns.
@@ -3,6 +3,7 @@ import { InsertResult } from '../query-builder/insert-result.js';
3
3
  import { UpdateResult } from '../query-builder/update-result.js';
4
4
  import { CompiledQuery } from '../query-compiler/compiled-query.js';
5
5
  import { Compilable } from './compilable.js';
6
+ import { Simplify } from './type-utils.js';
6
7
  /**
7
8
  * A helper type that allows inferring a select/insert/update/delete query's result
8
9
  * type from a query builder or compiled query.
@@ -42,5 +43,5 @@ import { Compilable } from './compilable.js';
42
43
  * ```
43
44
  */
44
45
  export type InferResult<C extends Compilable<any> | CompiledQuery<any>> = C extends Compilable<infer O> ? ResolveResult<O> : C extends CompiledQuery<infer O> ? ResolveResult<O> : never;
45
- type ResolveResult<O> = O extends InsertResult | UpdateResult | DeleteResult ? O : O[];
46
+ type ResolveResult<O> = O extends InsertResult | UpdateResult | DeleteResult ? O : Simplify<O>[];
46
47
  export {};
@@ -1,4 +1,3 @@
1
- import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
2
1
  import { InsertResult } from '../query-builder/insert-result.js';
3
2
  import { DeleteResult } from '../query-builder/delete-result.js';
4
3
  import { UpdateResult } from '../query-builder/update-result.js';
@@ -34,15 +33,19 @@ import { KyselyTypeError } from './type-error.js';
34
33
  * // Columns == 'id' | 'name' | 'species'
35
34
  * ```
36
35
  */
37
- export type AnyColumn<DB, TB extends keyof DB> = DrainOuterGeneric<{
36
+ export type AnyColumn<DB, TB extends keyof DB> = [
37
+ DB
38
+ ] extends [unknown] ? {
38
39
  [T in TB]: keyof DB[T];
39
- }[TB] & string>;
40
+ }[TB] & string : never;
40
41
  /**
41
42
  * Extracts a column type.
42
43
  */
43
- export type ExtractColumnType<DB, TB extends keyof DB, C> = DrainOuterGeneric<{
44
+ export type ExtractColumnType<DB, TB extends keyof DB, C> = [
45
+ DB
46
+ ] extends [unknown] ? {
44
47
  [T in TB]: C extends keyof DB[T] ? DB[T][C] : never;
45
- }[TB]>;
48
+ }[TB] : never;
46
49
  /**
47
50
  * Given a database type and a union of table names in that db, returns
48
51
  * a union type with all possible `table`.`column` combinations.
@@ -93,10 +96,6 @@ export type AnyAliasedColumnWithTable<DB, TB extends keyof DB> = DrainOuterGener
93
96
  * Extracts the item type of an array.
94
97
  */
95
98
  export type ArrayItemType<T> = T extends ReadonlyArray<infer I> ? I : never;
96
- /**
97
- * Any select query builder.
98
- */
99
- export type AnySelectQueryBuilder = SelectQueryBuilder<any, any, any>;
100
99
  export type SimplifySingleResult<O> = O extends InsertResult ? O : O extends DeleteResult ? O : O extends UpdateResult ? O : Simplify<O> | undefined;
101
100
  export type SimplifyResult<O> = O extends InsertResult ? O : O extends DeleteResult ? O : O extends UpdateResult ? O : Simplify<O>;
102
101
  export type Simplify<T> = DrainOuterGeneric<{
@@ -12,7 +12,7 @@ import { ExtractTypeFromValueExpression } from '../parser/value-parser.js';
12
12
  import { CaseBuilder } from '../query-builder/case-builder.js';
13
13
  import { JSONPathBuilder } from '../query-builder/json-path-builder.js';
14
14
  import { OperandExpression } from '../parser/expression-parser.js';
15
- import { SelectArg, SelectExpression, Selection } from '../parser/select-parser.js';
15
+ import { CallbackSelection, SelectCallback, SelectExpression, Selection } from '../parser/select-parser.js';
16
16
  import { RefTuple2, RefTuple3, RefTuple4, RefTuple5, ValTuple2, ValTuple3, ValTuple4, ValTuple5 } from '../parser/tuple-parser.js';
17
17
  export interface ExpressionBuilder<DB, TB extends keyof DB> {
18
18
  /**
@@ -204,7 +204,9 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
204
204
  * This method accepts the same inputs as {@link SelectQueryBuilder.select}. See its
205
205
  * documentation for examples.
206
206
  */
207
- selectNoFrom<SE extends SelectExpression<DB, TB>>(selection: SelectArg<DB, TB, SE>): SelectQueryBuilder<DB, TB, Selection<DB, TB, SE>>;
207
+ selectNoFrom<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): SelectQueryBuilder<DB, TB, Selection<DB, TB, SE>>;
208
+ selectNoFrom<CB extends SelectCallback<DB, TB>>(callback: CB): SelectQueryBuilder<DB, TB, CallbackSelection<DB, TB, CB>>;
209
+ selectNoFrom<SE extends SelectExpression<DB, TB>>(selection: SE): SelectQueryBuilder<DB, TB, Selection<DB, TB, SE>>;
208
210
  /**
209
211
  * Creates a `case` statement/operator.
210
212
  *