kysely 0.28.1 → 0.28.2

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.
package/deno.check.d.ts CHANGED
@@ -20,6 +20,7 @@ export interface Database {
20
20
  }
21
21
 
22
22
  interface AuditTable {
23
+ id: Generated<number>
23
24
  action: string
24
25
  }
25
26
 
@@ -63,11 +64,13 @@ interface ToyTable {
63
64
  }
64
65
 
65
66
  interface WineTable {
67
+ id: Generated<number>
66
68
  name: string
67
69
  stock: number
68
70
  }
69
71
 
70
72
  interface WineStockChangeTable {
73
+ id: Generated<number>
71
74
  stock_delta: number
72
75
  wine_name: string
73
76
  }
@@ -51,7 +51,8 @@ class SqliteIntrospector {
51
51
  'p.dflt_value',
52
52
  'p.pk',
53
53
  ])
54
- .orderBy(['tl.name', 'p.cid'])
54
+ .orderBy('tl.name')
55
+ .orderBy('p.cid')
55
56
  .execute();
56
57
  const columnsByTable = {};
57
58
  for (const row of tableMetadata) {
@@ -0,0 +1,16 @@
1
+ import { AliasNode } from '../operation-node/alias-node.js';
2
+ import { OperationNodeSource } from '../operation-node/operation-node-source.js';
3
+ export declare class DynamicTableBuilder<T extends string> {
4
+ #private;
5
+ get table(): T;
6
+ constructor(table: T);
7
+ as<A extends string>(alias: A): AliasedDynamicTableBuilder<T, A>;
8
+ }
9
+ export declare class AliasedDynamicTableBuilder<T extends string, A extends string> implements OperationNodeSource {
10
+ #private;
11
+ get table(): T;
12
+ get alias(): A;
13
+ constructor(table: T, alias: A);
14
+ toOperationNode(): AliasNode;
15
+ }
16
+ export declare function isAliasedDynamicTableBuilder(obj: unknown): obj is AliasedDynamicTableBuilder<any, any>;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AliasedDynamicTableBuilder = exports.DynamicTableBuilder = void 0;
4
+ exports.isAliasedDynamicTableBuilder = isAliasedDynamicTableBuilder;
5
+ const alias_node_js_1 = require("../operation-node/alias-node.js");
6
+ const identifier_node_js_1 = require("../operation-node/identifier-node.js");
7
+ const operation_node_source_js_1 = require("../operation-node/operation-node-source.js");
8
+ const table_parser_js_1 = require("../parser/table-parser.js");
9
+ const object_utils_js_1 = require("../util/object-utils.js");
10
+ class DynamicTableBuilder {
11
+ #table;
12
+ get table() {
13
+ return this.#table;
14
+ }
15
+ constructor(table) {
16
+ this.#table = table;
17
+ }
18
+ as(alias) {
19
+ return new AliasedDynamicTableBuilder(this.#table, alias);
20
+ }
21
+ }
22
+ exports.DynamicTableBuilder = DynamicTableBuilder;
23
+ class AliasedDynamicTableBuilder {
24
+ #table;
25
+ #alias;
26
+ get table() {
27
+ return this.#table;
28
+ }
29
+ get alias() {
30
+ return this.#alias;
31
+ }
32
+ constructor(table, alias) {
33
+ this.#table = table;
34
+ this.#alias = alias;
35
+ }
36
+ toOperationNode() {
37
+ return alias_node_js_1.AliasNode.create((0, table_parser_js_1.parseTable)(this.#table), identifier_node_js_1.IdentifierNode.create(this.#alias));
38
+ }
39
+ }
40
+ exports.AliasedDynamicTableBuilder = AliasedDynamicTableBuilder;
41
+ function isAliasedDynamicTableBuilder(obj) {
42
+ return ((0, object_utils_js_1.isObject)(obj) &&
43
+ (0, operation_node_source_js_1.isOperationNodeSource)(obj) &&
44
+ (0, object_utils_js_1.isString)(obj.table) &&
45
+ (0, object_utils_js_1.isString)(obj.alias));
46
+ }
@@ -1,5 +1,6 @@
1
1
  import { DynamicReferenceBuilder } from './dynamic-reference-builder.js';
2
- export declare class DynamicModule {
2
+ import { DynamicTableBuilder } from './dynamic-table-builder.js';
3
+ export declare class DynamicModule<DB> {
3
4
  /**
4
5
  * Creates a dynamic reference to a column that is not know at compile time.
5
6
  *
@@ -86,4 +87,38 @@ export declare class DynamicModule {
86
87
  * ```
87
88
  */
88
89
  ref<R extends string = never>(reference: string): DynamicReferenceBuilder<R>;
90
+ /**
91
+ * Creates a table reference to a table that's not fully known at compile time.
92
+ *
93
+ * The type `T` is allowed to be a union of multiple tables.
94
+ *
95
+ * <!-- siteExample("select", "Generic find query", 130) -->
96
+ *
97
+ * A generic type-safe helper function for finding a row by a column value:
98
+ *
99
+ * ```ts
100
+ * import { SelectType } from 'kysely'
101
+ * import { Database } from 'type-editor'
102
+ *
103
+ * async function getRowByColumn<
104
+ * T extends keyof Database,
105
+ * C extends keyof Database[T] & string,
106
+ * V extends SelectType<Database[T][C]>,
107
+ * >(t: T, c: C, v: V) {
108
+ * // We need to use the dynamic module since the table name
109
+ * // is not known at compile time.
110
+ * const { table, ref } = db.dynamic
111
+ *
112
+ * return await db
113
+ * .selectFrom(table(t).as('t'))
114
+ * .selectAll()
115
+ * .where(ref(c), '=', v)
116
+ * .orderBy('t.id')
117
+ * .executeTakeFirstOrThrow()
118
+ * }
119
+ *
120
+ * const person = await getRowByColumn('person', 'first_name', 'Arnold')
121
+ * ```
122
+ */
123
+ table<T extends keyof DB & string>(table: T): DynamicTableBuilder<T>;
89
124
  }
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DynamicModule = void 0;
4
4
  const dynamic_reference_builder_js_1 = require("./dynamic-reference-builder.js");
5
+ const dynamic_table_builder_js_1 = require("./dynamic-table-builder.js");
5
6
  class DynamicModule {
6
7
  /**
7
8
  * Creates a dynamic reference to a column that is not know at compile time.
@@ -91,5 +92,41 @@ class DynamicModule {
91
92
  ref(reference) {
92
93
  return new dynamic_reference_builder_js_1.DynamicReferenceBuilder(reference);
93
94
  }
95
+ /**
96
+ * Creates a table reference to a table that's not fully known at compile time.
97
+ *
98
+ * The type `T` is allowed to be a union of multiple tables.
99
+ *
100
+ * <!-- siteExample("select", "Generic find query", 130) -->
101
+ *
102
+ * A generic type-safe helper function for finding a row by a column value:
103
+ *
104
+ * ```ts
105
+ * import { SelectType } from 'kysely'
106
+ * import { Database } from 'type-editor'
107
+ *
108
+ * async function getRowByColumn<
109
+ * T extends keyof Database,
110
+ * C extends keyof Database[T] & string,
111
+ * V extends SelectType<Database[T][C]>,
112
+ * >(t: T, c: C, v: V) {
113
+ * // We need to use the dynamic module since the table name
114
+ * // is not known at compile time.
115
+ * const { table, ref } = db.dynamic
116
+ *
117
+ * return await db
118
+ * .selectFrom(table(t).as('t'))
119
+ * .selectAll()
120
+ * .where(ref(c), '=', v)
121
+ * .orderBy('t.id')
122
+ * .executeTakeFirstOrThrow()
123
+ * }
124
+ *
125
+ * const person = await getRowByColumn('person', 'first_name', 'Arnold')
126
+ * ```
127
+ */
128
+ table(table) {
129
+ return new dynamic_table_builder_js_1.DynamicTableBuilder(table);
130
+ }
94
131
  }
95
132
  exports.DynamicModule = DynamicModule;
@@ -65,7 +65,7 @@ export declare class Kysely<DB> extends QueryCreator<DB> implements QueryExecuto
65
65
  * The {@link DynamicModule} module can be used to bypass strict typing and
66
66
  * passing in dynamic values for the queries.
67
67
  */
68
- get dynamic(): DynamicModule;
68
+ get dynamic(): DynamicModule<DB>;
69
69
  /**
70
70
  * Returns a {@link DatabaseIntrospector | database introspector}.
71
71
  */
@@ -4,7 +4,8 @@ import { AliasedExpressionOrFactory } from './expression-parser.js';
4
4
  import { OperationNode } from '../operation-node/operation-node.js';
5
5
  import { AliasedExpression } from '../expression/expression.js';
6
6
  import { DrainOuterGeneric } from '../util/type-utils.js';
7
- export type TableExpression<DB, TB extends keyof DB> = AnyAliasedTable<DB> | AnyTable<DB> | AliasedExpressionOrFactory<DB, TB>;
7
+ import { AliasedDynamicTableBuilder } from '../dynamic/dynamic-table-builder.js';
8
+ export type TableExpression<DB, TB extends keyof DB> = AnyAliasedTable<DB> | AnyTable<DB> | AliasedExpressionOrFactory<DB, TB> | AliasedDynamicTableBuilder<any, any>;
8
9
  export type TableExpressionOrList<DB, TB extends keyof DB> = TableExpression<DB, TB> | ReadonlyArray<TableExpression<DB, TB>>;
9
10
  export type SimpleTableReference<DB> = AnyAliasedTable<DB> | AnyTable<DB>;
10
11
  export type AnyAliasedTable<DB> = `${AnyTable<DB>} as ${string}`;
@@ -14,8 +15,8 @@ export type From<DB, TE> = DrainOuterGeneric<{
14
15
  }>;
15
16
  export type FromTables<DB, TB extends keyof DB, TE> = DrainOuterGeneric<TB | ExtractAliasFromTableExpression<DB, TE>>;
16
17
  export type ExtractTableAlias<DB, TE> = TE extends `${string} as ${infer TA}` ? TA extends keyof DB ? TA : never : TE extends keyof DB ? TE : never;
17
- type ExtractAliasFromTableExpression<DB, TE> = TE extends string ? TE extends `${string} as ${infer TA}` ? TA : TE extends keyof DB ? TE : never : TE extends AliasedExpression<any, infer QA> ? QA : TE extends (qb: any) => AliasedExpression<any, infer QA> ? QA : never;
18
- type ExtractRowTypeFromTableExpression<DB, TE, A extends keyof any> = TE extends `${infer T} as ${infer TA}` ? TA extends A ? T extends keyof DB ? DB[T] : never : never : TE extends A ? TE extends keyof DB ? DB[TE] : never : TE extends AliasedExpression<infer O, infer QA> ? QA extends A ? O : never : TE extends (qb: any) => AliasedExpression<infer O, infer QA> ? QA extends A ? O : never : never;
18
+ type ExtractAliasFromTableExpression<DB, TE> = TE extends string ? TE extends `${string} as ${infer TA}` ? TA : TE extends keyof DB ? TE : never : TE extends AliasedExpression<any, infer QA> ? QA : TE extends (qb: any) => AliasedExpression<any, infer QA> ? QA : TE extends AliasedDynamicTableBuilder<any, infer DA> ? DA : never;
19
+ type ExtractRowTypeFromTableExpression<DB, TE, A extends keyof any> = TE extends `${infer T} as ${infer TA}` ? TA extends A ? T extends keyof DB ? DB[T] : never : never : TE extends A ? TE extends keyof DB ? DB[TE] : never : TE extends AliasedExpression<infer O, infer QA> ? QA extends A ? O : never : TE extends (qb: any) => AliasedExpression<infer O, infer QA> ? QA extends A ? O : never : TE extends AliasedDynamicTableBuilder<infer T, infer DA> ? DA extends A ? T extends keyof DB ? DB[T] : never : never : never;
19
20
  export declare function parseTableExpressionOrList(table: TableExpressionOrList<any, any>): OperationNode[];
20
21
  export declare function parseTableExpression(table: TableExpression<any, any>): OperationNode;
21
22
  export declare function parseAliasedTable(from: string): TableNode | AliasNode;
@@ -9,6 +9,7 @@ const alias_node_js_1 = require("../operation-node/alias-node.js");
9
9
  const table_node_js_1 = require("../operation-node/table-node.js");
10
10
  const expression_parser_js_1 = require("./expression-parser.js");
11
11
  const identifier_node_js_1 = require("../operation-node/identifier-node.js");
12
+ const dynamic_table_builder_js_1 = require("../dynamic/dynamic-table-builder.js");
12
13
  function parseTableExpressionOrList(table) {
13
14
  if ((0, object_utils_js_1.isReadonlyArray)(table)) {
14
15
  return table.map((it) => parseTableExpression(it));
@@ -21,6 +22,9 @@ function parseTableExpression(table) {
21
22
  if ((0, object_utils_js_1.isString)(table)) {
22
23
  return parseAliasedTable(table);
23
24
  }
25
+ else if ((0, dynamic_table_builder_js_1.isAliasedDynamicTableBuilder)(table)) {
26
+ return table.toOperationNode();
27
+ }
24
28
  else {
25
29
  return (0, expression_parser_js_1.parseAliasedExpression)(table);
26
30
  }
@@ -40,24 +40,6 @@ export interface OrderByInterface<DB, TB extends keyof DB, O> {
40
40
  * order by "id", "fn" desc
41
41
  * ```
42
42
  *
43
- * Multiple columns/expressions per call:
44
- *
45
- * ```ts
46
- * await db
47
- * .selectFrom('person')
48
- * .select('person.first_name as fn')
49
- * .orderBy(['id', 'fn'])
50
- * .execute()
51
- * ```
52
- *
53
- * The generated SQL (PostgreSQL):
54
- *
55
- * ```sql
56
- * select "person"."first_name" as "fn"
57
- * from "person"
58
- * order by "id", "fn"
59
- * ```
60
- *
61
43
  * Building advanced modifiers:
62
44
  *
63
45
  * ```ts
@@ -1246,24 +1246,6 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1246
1246
  * order by "id", "fn" desc
1247
1247
  * ```
1248
1248
  *
1249
- * Multiple columns/expressions per call:
1250
- *
1251
- * ```ts
1252
- * await db
1253
- * .selectFrom('person')
1254
- * .select('person.first_name as fn')
1255
- * .orderBy(['id', 'fn'])
1256
- * .execute()
1257
- * ```
1258
- *
1259
- * The generated SQL (PostgreSQL):
1260
- *
1261
- * ```sql
1262
- * select "person"."first_name" as "fn"
1263
- * from "person"
1264
- * order by "id", "fn"
1265
- * ```
1266
- *
1267
1249
  * Building advanced modifiers:
1268
1250
  *
1269
1251
  * ```ts
@@ -49,7 +49,8 @@ export class SqliteIntrospector {
49
49
  'p.dflt_value',
50
50
  'p.pk',
51
51
  ])
52
- .orderBy(['tl.name', 'p.cid'])
52
+ .orderBy('tl.name')
53
+ .orderBy('p.cid')
53
54
  .execute();
54
55
  const columnsByTable = {};
55
56
  for (const row of tableMetadata) {
@@ -0,0 +1,16 @@
1
+ import { AliasNode } from '../operation-node/alias-node.js';
2
+ import { OperationNodeSource } from '../operation-node/operation-node-source.js';
3
+ export declare class DynamicTableBuilder<T extends string> {
4
+ #private;
5
+ get table(): T;
6
+ constructor(table: T);
7
+ as<A extends string>(alias: A): AliasedDynamicTableBuilder<T, A>;
8
+ }
9
+ export declare class AliasedDynamicTableBuilder<T extends string, A extends string> implements OperationNodeSource {
10
+ #private;
11
+ get table(): T;
12
+ get alias(): A;
13
+ constructor(table: T, alias: A);
14
+ toOperationNode(): AliasNode;
15
+ }
16
+ export declare function isAliasedDynamicTableBuilder(obj: unknown): obj is AliasedDynamicTableBuilder<any, any>;
@@ -0,0 +1,41 @@
1
+ /// <reference types="./dynamic-table-builder.d.ts" />
2
+ import { AliasNode } from '../operation-node/alias-node.js';
3
+ import { IdentifierNode } from '../operation-node/identifier-node.js';
4
+ import { isOperationNodeSource, } from '../operation-node/operation-node-source.js';
5
+ import { parseTable } from '../parser/table-parser.js';
6
+ import { isObject, isString } from '../util/object-utils.js';
7
+ export class DynamicTableBuilder {
8
+ #table;
9
+ get table() {
10
+ return this.#table;
11
+ }
12
+ constructor(table) {
13
+ this.#table = table;
14
+ }
15
+ as(alias) {
16
+ return new AliasedDynamicTableBuilder(this.#table, alias);
17
+ }
18
+ }
19
+ export class AliasedDynamicTableBuilder {
20
+ #table;
21
+ #alias;
22
+ get table() {
23
+ return this.#table;
24
+ }
25
+ get alias() {
26
+ return this.#alias;
27
+ }
28
+ constructor(table, alias) {
29
+ this.#table = table;
30
+ this.#alias = alias;
31
+ }
32
+ toOperationNode() {
33
+ return AliasNode.create(parseTable(this.#table), IdentifierNode.create(this.#alias));
34
+ }
35
+ }
36
+ export function isAliasedDynamicTableBuilder(obj) {
37
+ return (isObject(obj) &&
38
+ isOperationNodeSource(obj) &&
39
+ isString(obj.table) &&
40
+ isString(obj.alias));
41
+ }
@@ -1,5 +1,6 @@
1
1
  import { DynamicReferenceBuilder } from './dynamic-reference-builder.js';
2
- export declare class DynamicModule {
2
+ import { DynamicTableBuilder } from './dynamic-table-builder.js';
3
+ export declare class DynamicModule<DB> {
3
4
  /**
4
5
  * Creates a dynamic reference to a column that is not know at compile time.
5
6
  *
@@ -86,4 +87,38 @@ export declare class DynamicModule {
86
87
  * ```
87
88
  */
88
89
  ref<R extends string = never>(reference: string): DynamicReferenceBuilder<R>;
90
+ /**
91
+ * Creates a table reference to a table that's not fully known at compile time.
92
+ *
93
+ * The type `T` is allowed to be a union of multiple tables.
94
+ *
95
+ * <!-- siteExample("select", "Generic find query", 130) -->
96
+ *
97
+ * A generic type-safe helper function for finding a row by a column value:
98
+ *
99
+ * ```ts
100
+ * import { SelectType } from 'kysely'
101
+ * import { Database } from 'type-editor'
102
+ *
103
+ * async function getRowByColumn<
104
+ * T extends keyof Database,
105
+ * C extends keyof Database[T] & string,
106
+ * V extends SelectType<Database[T][C]>,
107
+ * >(t: T, c: C, v: V) {
108
+ * // We need to use the dynamic module since the table name
109
+ * // is not known at compile time.
110
+ * const { table, ref } = db.dynamic
111
+ *
112
+ * return await db
113
+ * .selectFrom(table(t).as('t'))
114
+ * .selectAll()
115
+ * .where(ref(c), '=', v)
116
+ * .orderBy('t.id')
117
+ * .executeTakeFirstOrThrow()
118
+ * }
119
+ *
120
+ * const person = await getRowByColumn('person', 'first_name', 'Arnold')
121
+ * ```
122
+ */
123
+ table<T extends keyof DB & string>(table: T): DynamicTableBuilder<T>;
89
124
  }
@@ -1,5 +1,6 @@
1
1
  /// <reference types="./dynamic.d.ts" />
2
2
  import { DynamicReferenceBuilder } from './dynamic-reference-builder.js';
3
+ import { DynamicTableBuilder } from './dynamic-table-builder.js';
3
4
  export class DynamicModule {
4
5
  /**
5
6
  * Creates a dynamic reference to a column that is not know at compile time.
@@ -89,4 +90,40 @@ export class DynamicModule {
89
90
  ref(reference) {
90
91
  return new DynamicReferenceBuilder(reference);
91
92
  }
93
+ /**
94
+ * Creates a table reference to a table that's not fully known at compile time.
95
+ *
96
+ * The type `T` is allowed to be a union of multiple tables.
97
+ *
98
+ * <!-- siteExample("select", "Generic find query", 130) -->
99
+ *
100
+ * A generic type-safe helper function for finding a row by a column value:
101
+ *
102
+ * ```ts
103
+ * import { SelectType } from 'kysely'
104
+ * import { Database } from 'type-editor'
105
+ *
106
+ * async function getRowByColumn<
107
+ * T extends keyof Database,
108
+ * C extends keyof Database[T] & string,
109
+ * V extends SelectType<Database[T][C]>,
110
+ * >(t: T, c: C, v: V) {
111
+ * // We need to use the dynamic module since the table name
112
+ * // is not known at compile time.
113
+ * const { table, ref } = db.dynamic
114
+ *
115
+ * return await db
116
+ * .selectFrom(table(t).as('t'))
117
+ * .selectAll()
118
+ * .where(ref(c), '=', v)
119
+ * .orderBy('t.id')
120
+ * .executeTakeFirstOrThrow()
121
+ * }
122
+ *
123
+ * const person = await getRowByColumn('person', 'first_name', 'Arnold')
124
+ * ```
125
+ */
126
+ table(table) {
127
+ return new DynamicTableBuilder(table);
128
+ }
92
129
  }
@@ -65,7 +65,7 @@ export declare class Kysely<DB> extends QueryCreator<DB> implements QueryExecuto
65
65
  * The {@link DynamicModule} module can be used to bypass strict typing and
66
66
  * passing in dynamic values for the queries.
67
67
  */
68
- get dynamic(): DynamicModule;
68
+ get dynamic(): DynamicModule<DB>;
69
69
  /**
70
70
  * Returns a {@link DatabaseIntrospector | database introspector}.
71
71
  */
@@ -4,7 +4,8 @@ import { AliasedExpressionOrFactory } from './expression-parser.js';
4
4
  import { OperationNode } from '../operation-node/operation-node.js';
5
5
  import { AliasedExpression } from '../expression/expression.js';
6
6
  import { DrainOuterGeneric } from '../util/type-utils.js';
7
- export type TableExpression<DB, TB extends keyof DB> = AnyAliasedTable<DB> | AnyTable<DB> | AliasedExpressionOrFactory<DB, TB>;
7
+ import { AliasedDynamicTableBuilder } from '../dynamic/dynamic-table-builder.js';
8
+ export type TableExpression<DB, TB extends keyof DB> = AnyAliasedTable<DB> | AnyTable<DB> | AliasedExpressionOrFactory<DB, TB> | AliasedDynamicTableBuilder<any, any>;
8
9
  export type TableExpressionOrList<DB, TB extends keyof DB> = TableExpression<DB, TB> | ReadonlyArray<TableExpression<DB, TB>>;
9
10
  export type SimpleTableReference<DB> = AnyAliasedTable<DB> | AnyTable<DB>;
10
11
  export type AnyAliasedTable<DB> = `${AnyTable<DB>} as ${string}`;
@@ -14,8 +15,8 @@ export type From<DB, TE> = DrainOuterGeneric<{
14
15
  }>;
15
16
  export type FromTables<DB, TB extends keyof DB, TE> = DrainOuterGeneric<TB | ExtractAliasFromTableExpression<DB, TE>>;
16
17
  export type ExtractTableAlias<DB, TE> = TE extends `${string} as ${infer TA}` ? TA extends keyof DB ? TA : never : TE extends keyof DB ? TE : never;
17
- type ExtractAliasFromTableExpression<DB, TE> = TE extends string ? TE extends `${string} as ${infer TA}` ? TA : TE extends keyof DB ? TE : never : TE extends AliasedExpression<any, infer QA> ? QA : TE extends (qb: any) => AliasedExpression<any, infer QA> ? QA : never;
18
- type ExtractRowTypeFromTableExpression<DB, TE, A extends keyof any> = TE extends `${infer T} as ${infer TA}` ? TA extends A ? T extends keyof DB ? DB[T] : never : never : TE extends A ? TE extends keyof DB ? DB[TE] : never : TE extends AliasedExpression<infer O, infer QA> ? QA extends A ? O : never : TE extends (qb: any) => AliasedExpression<infer O, infer QA> ? QA extends A ? O : never : never;
18
+ type ExtractAliasFromTableExpression<DB, TE> = TE extends string ? TE extends `${string} as ${infer TA}` ? TA : TE extends keyof DB ? TE : never : TE extends AliasedExpression<any, infer QA> ? QA : TE extends (qb: any) => AliasedExpression<any, infer QA> ? QA : TE extends AliasedDynamicTableBuilder<any, infer DA> ? DA : never;
19
+ type ExtractRowTypeFromTableExpression<DB, TE, A extends keyof any> = TE extends `${infer T} as ${infer TA}` ? TA extends A ? T extends keyof DB ? DB[T] : never : never : TE extends A ? TE extends keyof DB ? DB[TE] : never : TE extends AliasedExpression<infer O, infer QA> ? QA extends A ? O : never : TE extends (qb: any) => AliasedExpression<infer O, infer QA> ? QA extends A ? O : never : TE extends AliasedDynamicTableBuilder<infer T, infer DA> ? DA extends A ? T extends keyof DB ? DB[T] : never : never : never;
19
20
  export declare function parseTableExpressionOrList(table: TableExpressionOrList<any, any>): OperationNode[];
20
21
  export declare function parseTableExpression(table: TableExpression<any, any>): OperationNode;
21
22
  export declare function parseAliasedTable(from: string): TableNode | AliasNode;
@@ -4,6 +4,7 @@ import { AliasNode } from '../operation-node/alias-node.js';
4
4
  import { TableNode } from '../operation-node/table-node.js';
5
5
  import { parseAliasedExpression, } from './expression-parser.js';
6
6
  import { IdentifierNode } from '../operation-node/identifier-node.js';
7
+ import { isAliasedDynamicTableBuilder, } from '../dynamic/dynamic-table-builder.js';
7
8
  export function parseTableExpressionOrList(table) {
8
9
  if (isReadonlyArray(table)) {
9
10
  return table.map((it) => parseTableExpression(it));
@@ -16,6 +17,9 @@ export function parseTableExpression(table) {
16
17
  if (isString(table)) {
17
18
  return parseAliasedTable(table);
18
19
  }
20
+ else if (isAliasedDynamicTableBuilder(table)) {
21
+ return table.toOperationNode();
22
+ }
19
23
  else {
20
24
  return parseAliasedExpression(table);
21
25
  }
@@ -40,24 +40,6 @@ export interface OrderByInterface<DB, TB extends keyof DB, O> {
40
40
  * order by "id", "fn" desc
41
41
  * ```
42
42
  *
43
- * Multiple columns/expressions per call:
44
- *
45
- * ```ts
46
- * await db
47
- * .selectFrom('person')
48
- * .select('person.first_name as fn')
49
- * .orderBy(['id', 'fn'])
50
- * .execute()
51
- * ```
52
- *
53
- * The generated SQL (PostgreSQL):
54
- *
55
- * ```sql
56
- * select "person"."first_name" as "fn"
57
- * from "person"
58
- * order by "id", "fn"
59
- * ```
60
- *
61
43
  * Building advanced modifiers:
62
44
  *
63
45
  * ```ts
@@ -1246,24 +1246,6 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1246
1246
  * order by "id", "fn" desc
1247
1247
  * ```
1248
1248
  *
1249
- * Multiple columns/expressions per call:
1250
- *
1251
- * ```ts
1252
- * await db
1253
- * .selectFrom('person')
1254
- * .select('person.first_name as fn')
1255
- * .orderBy(['id', 'fn'])
1256
- * .execute()
1257
- * ```
1258
- *
1259
- * The generated SQL (PostgreSQL):
1260
- *
1261
- * ```sql
1262
- * select "person"."first_name" as "fn"
1263
- * from "person"
1264
- * order by "id", "fn"
1265
- * ```
1266
- *
1267
1249
  * Building advanced modifiers:
1268
1250
  *
1269
1251
  * ```ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kysely",
3
- "version": "0.28.1",
3
+ "version": "0.28.2",
4
4
  "description": "Type safe SQL query builder",
5
5
  "repository": {
6
6
  "type": "git",
@@ -113,7 +113,7 @@
113
113
  "sinon": "^19.0.2",
114
114
  "tarn": "^3.0.2",
115
115
  "tedious": "^19.0.0",
116
- "tsd": "^0.31.1",
116
+ "tsd": "^0.32.0",
117
117
  "tsx": "^4.19.1",
118
118
  "typescript": "^5.6.3"
119
119
  }